Show stack trace while failing to start plugin

pull/7429/head
John Niang 2025-05-14 14:26:43 +08:00
parent 18105cbe44
commit b2848a683a
No known key found for this signature in database
GPG Key ID: D7363C015BBCAA59
1 changed files with 18 additions and 7 deletions

View File

@ -14,6 +14,8 @@ import static run.halo.app.plugin.PluginUtils.isDevelopmentMode;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.net.URL; import java.net.URL;
@ -302,25 +304,34 @@ public class PluginReconciler implements Reconciler<Request> {
return Result.requeue(Duration.ofSeconds(1)); return Result.requeue(Duration.ofSeconds(1));
} }
PluginState pluginState;
try { try {
var pluginState = pluginManager.startPlugin(pluginName); pluginState = pluginManager.startPlugin(pluginName);
if (!PluginState.STARTED.equals(pluginState)) {
throw new IllegalStateException("""
Failed to start plugin %s(%s).\
""".formatted(pluginName, pluginState));
}
} catch (Throwable e) { } catch (Throwable e) {
log.debug("Error occurred when starting plugin {}", pluginName, e); log.debug("Error occurred when starting plugin {}", pluginName, e);
var writer = new StringWriter();
e.printStackTrace(new PrintWriter(writer));
conditions.addAndEvictFIFO(Condition.builder() conditions.addAndEvictFIFO(Condition.builder()
.type(ConditionType.READY) .type(ConditionType.READY)
.status(ConditionStatus.FALSE) .status(ConditionStatus.FALSE)
.reason(ConditionReason.START_ERROR) .reason(ConditionReason.START_ERROR)
.message(e.getMessage()) .message(writer.toString())
.lastTransitionTime(clock.instant()) .lastTransitionTime(clock.instant())
.build()); .build());
status.setPhase(Plugin.Phase.FAILED); status.setPhase(Plugin.Phase.FAILED);
return Result.doNotRetry(); return Result.doNotRetry();
} }
if (!PluginState.STARTED.equals(pluginState)) {
conditions.addAndEvictFIFO(Condition.builder()
.type(ConditionType.READY)
.status(ConditionStatus.FALSE)
.reason(ConditionReason.START_ERROR)
.message("Failed to start plugin " + pluginName + "(" + pluginState + ").")
.lastTransitionTime(clock.instant())
.build());
status.setPhase(Plugin.Phase.FAILED);
return Result.doNotRetry();
}
removeConditionBy(conditions, ConditionType.PROGRESSING); removeConditionBy(conditions, ConditionType.PROGRESSING);
status.setLastStartTime(clock.instant()); status.setLastStartTime(clock.instant());