diff --git a/application/src/main/java/run/halo/app/core/reconciler/PluginReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/PluginReconciler.java index a3cd0c1ae..a8c554331 100644 --- a/application/src/main/java/run/halo/app/core/reconciler/PluginReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/PluginReconciler.java @@ -14,6 +14,8 @@ import static run.halo.app.plugin.PluginUtils.isDevelopmentMode; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; @@ -302,25 +304,34 @@ public class PluginReconciler implements Reconciler { return Result.requeue(Duration.ofSeconds(1)); } + PluginState pluginState; try { - var pluginState = pluginManager.startPlugin(pluginName); - if (!PluginState.STARTED.equals(pluginState)) { - throw new IllegalStateException(""" - Failed to start plugin %s(%s).\ - """.formatted(pluginName, pluginState)); - } + pluginState = pluginManager.startPlugin(pluginName); } catch (Throwable e) { log.debug("Error occurred when starting plugin {}", pluginName, e); + var writer = new StringWriter(); + e.printStackTrace(new PrintWriter(writer)); conditions.addAndEvictFIFO(Condition.builder() .type(ConditionType.READY) .status(ConditionStatus.FALSE) .reason(ConditionReason.START_ERROR) - .message(e.getMessage()) + .message(writer.toString()) .lastTransitionTime(clock.instant()) .build()); status.setPhase(Plugin.Phase.FAILED); 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); status.setLastStartTime(clock.instant()); diff --git a/ui/console-src/modules/system/plugins/components/PluginConditionsModal.vue b/ui/console-src/modules/system/plugins/components/PluginConditionsModal.vue index 2bcaac9e1..ad52fcc00 100644 --- a/ui/console-src/modules/system/plugins/components/PluginConditionsModal.vue +++ b/ui/console-src/modules/system/plugins/components/PluginConditionsModal.vue @@ -72,7 +72,7 @@ const modal = ref(); {{ condition.reason || "-" }} - {{ condition.message || "-" }} +
{{ condition.message || "-" }}
{ v-if="errorAlertVisible && lastCondition" class="w-full px-4 pb-2 sm:px-6" > - + +