halo-dev / halo

强大易用的开源建站工具。
https://www.halo.run
GNU General Public License v3.0
32.5k stars 9.46k forks source link

优化插件启动失败时的重试机制 #6192

Closed LIlGG closed 1 week ago

LIlGG commented 1 week ago

你当前使用的版本

2.17.0-alpha.2

描述一下此特性

当插件启动失败时,单个接口会 pending 长达一分半钟。

image

并且,前端在目标接口返回报错之后,还会继续重试。

image

在刷新页面之后,启动失败的插件会显示出成功的样式,会始终进行重试。

image

附加信息

刷新页面后的插件数据:

{
    "spec": {
        "displayName": "Meilisearch",
        "version": "1.2.0",
        "author": {
            "name": "Rainsheep",
            "website": "https://blog.rainsheep.cn"
        },
        "logo": "logo.svg",
        "pluginDependencies": {},
        "homepage": "https://github.com/Rainsheep/halo-plugin-meilisearch",
        "description": "集成 Meilisearch,为 Halo 2.0 提供更强大、更精确、更易用的搜索功能。",
        "license": [
            {
                "name": "GPL-3.0",
                "url": "https://github.com/Rainsheep/halo-plugin-meilisearch/blob/main/LICENSE"
            }
        ],
        "requires": ">=2.10.0",
        "enabled": true,
        "settingName": "meilisearch-settings",
        "configMapName": "meilisearch-configmap"
    },
    "status": {
        "phase": "STARTING",
        "conditions": [
            {
                "type": "Initialized",
                "status": "TRUE",
                "lastTransitionTime": "2024-06-28T03:28:39.703471569Z",
                "message": "",
                "reason": "Loaded"
            },
            {
                "type": "Ready",
                "status": "TRUE",
                "lastTransitionTime": "2024-06-28T03:28:39.736568323Z",
                "message": "",
                "reason": "Disabled"
            }
        ],
        "lastProbeState": "CREATED",
        "logo": "/plugins/Meilisearch/assets/logo.svg?version=1.2.0",
        "loadLocation": "file:///root/.halo2/plugins/Meilisearch-1.2.0.jar"
    },
    "apiVersion": "plugin.halo.run/v1alpha1",
    "kind": "Plugin",
    "metadata": {
        "finalizers": [
            "plugin-protection"
        ],
        "name": "Meilisearch",
        "annotations": {
            "plugin.halo.run/plugin-path": "Meilisearch-1.2.0.jar",
            "store.halo.run/app-id": "app-yJlEz"
        },
        "version": 12,
        "creationTimestamp": "2024-06-28T03:28:39.663151089Z"
    }
},

日志:

2024-06-28T11:43:11.231+08:00  INFO 7 --- [run.halo.app.core.extension.reconciler.PluginReconciler-t-1] r.h.a.c.e.reconciler.PluginReconciler    : Initializing setting and config map for plugin Meilisearch
2024-06-28T11:43:11.242+08:00  INFO 7 --- [run.halo.app.core.extension.reconciler.PluginReconciler-t-1] r.h.a.c.e.reconciler.PluginReconciler    : Initialized setting meilisearch-settings for plugin Meilisearch
2024-06-28T11:43:11.245+08:00  INFO 7 --- [run.halo.app.core.extension.reconciler.PluginReconciler-t-1] r.h.a.c.e.reconciler.PluginReconciler    : Initialized config map meilisearch-configmap for plugin Meilisearch
2024-06-28T11:43:11.266+08:00  INFO 7 --- [run.halo.app.core.extension.reconciler.PluginReconciler-t-1] r.h.a.c.e.reconciler.PluginReconciler    : Resolving logo resource for plugin Meilisearch
2024-06-28T11:43:11.266+08:00  INFO 7 --- [run.halo.app.core.extension.reconciler.PluginReconciler-t-1] r.h.a.c.e.reconciler.PluginReconciler    : Resolving main.js and style.css for plugin Meilisearch
2024-06-28T11:43:11.267+08:00  INFO 7 --- [run.halo.app.core.extension.reconciler.PluginReconciler-t-1] r.h.a.c.e.reconciler.PluginReconciler    : Starting plugin Meilisearch
2024-06-28T11:43:11.267+08:00  INFO 7 --- [run.halo.app.core.extension.reconciler.PluginReconciler-t-1] org.pf4j.AbstractPluginManager           : Start plugin 'Meilisearch@1.2.0'
2024-06-28T11:43:11.267+08:00  INFO 7 --- [run.halo.app.core.extension.reconciler.PluginReconciler-t-1] run.halo.app.plugin.SpringPlugin         : Preparing starting plugin Meilisearch
2024-06-28T11:43:11.271+08:00 ERROR 7 --- [run.halo.app.core.extension.reconciler.PluginReconciler-t-1] run.halo.app.plugin.SpringPlugin         : Cleaning up plugin resources for plugin Meilisearch due to not being able to start plugin.
2024-06-28T11:43:11.271+08:00  INFO 7 --- [run.halo.app.core.extension.reconciler.PluginReconciler-t-1] run.halo.app.plugin.SpringPlugin         : Reset plugin context for plugin Meilisearch
2024-06-28T11:43:11.273+08:00 ERROR 7 --- [run.halo.app.core.extension.reconciler.PluginReconciler-t-1] r.h.a.e.controller.DefaultController     : Reconciler in run.halo.app.core.extension.reconciler.PluginReconciler-worker-1 aborted with an error, re-enqueuing...

java.lang.NoClassDefFoundError: run.halo.app.search.post.PostSearchService
    at java.base/java.lang.ClassLoader.defineClassImpl(Native Method) ~[na:na]
    at java.base/java.lang.ClassLoader.defineClassInternal(Unknown Source) ~[na:na]
    at java.base/java.lang.ClassLoader.defineClass(Unknown Source) ~[na:na]
    at java.base/java.security.SecureClassLoader.defineClass(Unknown Source) ~[na:na]
    at java.base/java.net.URLClassLoader.defineClass(Unknown Source) ~[na:na]
    at java.base/java.net.URLClassLoader$ClassFinder.run(Unknown Source) ~[na:na]
    at java.base/java.net.URLClassLoader$ClassFinder.run(Unknown Source) ~[na:na]
    at java.base/java.security.AccessController.doPrivileged(Unknown Source) ~[na:na]
    at java.base/java.net.URLClassLoader.findClass(Unknown Source) ~[na:na]
    at org.pf4j.PluginClassLoader.loadClass(PluginClassLoader.java:153) ~[pf4j-3.12.0.jar:3.12.0]
    at run.halo.app.plugin.DefaultPluginApplicationContextFactory.lambda$create$6(DefaultPluginApplicationContextFactory.java:146) ~[classes/:2.17.0-alpha.2]
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) ~[na:na]
    at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(Unknown Source) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) ~[na:na]
    at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source) ~[na:na]
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source) ~[na:na]
    at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source) ~[na:na]
    at run.halo.app.plugin.DefaultPluginApplicationContextFactory.create(DefaultPluginApplicationContextFactory.java:153) ~[classes/:2.17.0-alpha.2]
    at run.halo.app.plugin.SpringPlugin.start(SpringPlugin.java:32) ~[classes/:2.17.0-alpha.2]
    at org.pf4j.AbstractPluginManager.startPlugin(AbstractPluginManager.java:441) ~[pf4j-3.12.0.jar:3.12.0]
    at run.halo.app.core.extension.reconciler.PluginReconciler.enablePlugin(PluginReconciler.java:310) ~[classes/:2.17.0-alpha.2]
    at run.halo.app.core.extension.reconciler.PluginReconciler.lambda$reconcile$5(PluginReconciler.java:147) ~[classes/:2.17.0-alpha.2]
    at run.halo.app.core.extension.reconciler.PluginReconciler.lambda$reconcile$7(PluginReconciler.java:155) ~[classes/:2.17.0-alpha.2]
    at java.base/java.util.Optional.map(Unknown Source) ~[na:na]
    at run.halo.app.core.extension.reconciler.PluginReconciler.reconcile(PluginReconciler.java:110) ~[classes/:2.17.0-alpha.2]
    at run.halo.app.core.extension.reconciler.PluginReconciler.reconcile(PluginReconciler.java:74) ~[classes/:2.17.0-alpha.2]
    at run.halo.app.extension.controller.DefaultController$Worker.run(DefaultController.java:163) ~[api-2.17.0-alpha.2.jar:na]
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[na:na]
    at java.base/java.util.concurrent.FutureTask.run(Unknown Source) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[na:na]
    at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]
Caused by: java.lang.ClassNotFoundException: run.halo.app.search.post.PostSearchService
    at org.pf4j.PluginClassLoader.loadClass(PluginClassLoader.java:169) ~[pf4j-3.12.0.jar:3.12.0]
    ... 34 common frames omitted
guqing commented 1 week ago

/assign

guqing commented 1 week ago

/milestone 2.17.x