halo icon indicating copy to clipboard operation
halo copied to clipboard

先安装应用市场插件再安装 seo 插件并启用后卸载此时无法卸载应用市场插件

Open guqing opened this issue 1 year ago • 0 comments

System information

  • 外部访问地址: http://localhost:8090
  • 启动时间: 2024-03-29 16:22
  • 版本:
  • 构建时间:
  • Git Commit:
  • Java: OpenJDK Runtime Environment / 17.0.4.1+9-LTS
  • 数据库: H2 / 2.2.224
  • 操作系统: Mac OS X / 12.6
  • 已激活主题:
  • 已启动插件:

What is the project operation method?

Docker

What happened?

如题所述:

  1. 先安装应用市场插件
  2. 安装 SEO 插件,它依赖应用市场
  3. 启用 SEO 插件后卸载它,在卸载应用市场插件,此时无法卸载应用市场插件

原因是插件管理器中记录的插件依赖在 unload 时没有正确删除依赖关系 image

临时解决方案我想到两种:

  1. 在 PluginReconciler 中调用 deletePlugin 后重新调用 resolvePlugins 方法
  2. 在 HaloPluginManager 中覆盖 deletePlugin 方法然后调用 super 再实现更新 dependencyResolver 中引用的逻辑

我已在上游提交了一个 issue 来追踪 https://github.com/pf4j/pf4j/issues/576 , 可以关注上游的回复

Relevant log output

2024-03-29T16:33:58.997+08:00 ERROR 34687 --- [nReconciler-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...

org.pf4j.PluginNotFoundException: Plugin 'seo-tools' not found
	at org.pf4j.AbstractPluginManager.checkPluginId(AbstractPluginManager.java:515) ~[pf4j-3.11.0.jar:3.11.0]
	at org.pf4j.AbstractPluginManager.stopPlugin(AbstractPluginManager.java:478) ~[pf4j-3.11.0.jar:3.11.0]
	at org.pf4j.AbstractPluginManager.stopPlugin(AbstractPluginManager.java:491) ~[pf4j-3.11.0.jar:3.11.0]
	at org.pf4j.AbstractPluginManager.stopPlugin(AbstractPluginManager.java:467) ~[pf4j-3.11.0.jar:3.11.0]
	at org.pf4j.AbstractPluginManager.deletePlugin(AbstractPluginManager.java:343) ~[pf4j-3.11.0.jar:3.11.0]
	at run.halo.app.core.extension.reconciler.PluginReconciler.cleanupResources(PluginReconciler.java:187) ~[classes/:na]
	at run.halo.app.core.extension.reconciler.PluginReconciler.lambda$reconcile$0(PluginReconciler.java:100) ~[classes/:na]
	at java.base/java.util.Optional.map(Optional.java:260) ~[na:na]
	at run.halo.app.core.extension.reconciler.PluginReconciler.reconcile(PluginReconciler.java:96) ~[classes/:na]
	at run.halo.app.core.extension.reconciler.PluginReconciler.reconcile(PluginReconciler.java:65) ~[classes/:na]
	at run.halo.app.extension.controller.DefaultController$Worker.run(DefaultController.java:163) ~[classes/:na]
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[na:na]
	at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) ~[na:na]
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
	at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]

Additional information

/kind bug /area core /area plugin

guqing avatar Mar 29 '24 09:03 guqing