-
guqing commented on issue #5811 in halo-dev/halo
-
guqing opened issue #5872 in halo-dev/halo
Your current Halo version
2.15.1
Describe this feature
目前插件依赖中关于被依赖插件的停止或启动存在一些问题:
- 以应用市场插件为例,应用市场插件被 A 和 B 插件依赖,且都处于启动状态
- 停止应用市场插件后会自动停止 A 和 B,然后点击启动 A 会自动启动 B 插件和应用市场插件
- 在 Reconciler 中会去监听内存中插件的实际状态并修改 spec.enabled 这违反了 spec 的初衷,spec 是用户期望如果内存中状态不符合应该协调到期望状态
重构点:
- 插件的停止和启动前应该加入依赖检测,如果有插件依赖了当前被停止的插件则不允许停止当前插件,如果插件启动时所依赖的插件没有启动应该拒绝启动并给用户提示
- 不应该监听内存中插件状态并去修改 spec 来适应内存中的状态,而是要以用户期望状态为准
以升级步骤为例,应该的逻辑是:
- 检测依赖插件,比如已经启动的 A,B
- 更新 A 和 B 的 annotations 中加入 reload 标记
- 检测依赖插件,有就抛出异常 requeue(可能因为抛出异常 requeue 后进入第4步),没有则 reload 应用市场,stop ,unload,load 等步骤
- A 和 B 中途可能会进入执行(由于 3 步骤让出了执行权),检测到 reload 标记,执行 reload 操作,但是需要检测依赖插件是否正常,如果没有启动则抛出异常等待。
- 应用市场启动完成了,reconciler 轮到 A 执行,检测到 reload 标记执行 reload 等逻辑重复到第3步
如此不在需要停止插件时检测依赖并记录到当前插件然后又再启动后回复依赖插件的状态,且不需要去以内存中实际状态为主来修改插件 spec.enabled,spec.enabled 是用户期望,无论如何要以用户期望为准,避免出现升级应用市场插件时其他插件被停止而没有自动启动的问题
Additional information
/kind improvement
/area core
/milestone 2.16.x
/assign @JohnNiang -
guqing commented on issue #33 in halo-dev/plugin-starter
-
guqing pushed to main in halo-dev/docs
-
guqing closed pull request #348 in halo-dev/docs
-
guqing commented on issue #33 in halo-dev/plugin-starter
Wechat-Group/WxJava 引入这个的企业微信开发,一写相关逻辑就会报错
建议提供复现步骤而不是这样笼统的描述,我怎么复现呢
-
guqing opened pull request #348 in halo-dev/docs
-
guqing created branch docs/template-head-process in guqing/docs
guqing/docs
The open-source repo for docs.halo.run
-
guqing commented on issue #33 in halo-dev/plugin-starter
-
guqing commented on issue #33 in halo-dev/plugin-starter