halo-dev / halo

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

插件中调用 ReactiveSettingFetcher.get 获取到的一直是上一次的结果 #6213

Closed Rainsheep closed 5 days ago

Rainsheep commented 6 days ago

系统信息

使用的哪种方式运行?

Docker Compose

发生了什么?

版本: 2.17.0-alpha.2 我在插件中监听了 ConfigMap 的更新。 监听到更新后,我使用 ReactiveSettingFetcher.get 获取到的永远是上一次的值。 怀疑和 6 月 26 日 run.halo.app.plugin.DefaultReactiveSettingFetcher#getValuesInternal 的缓存变更有关

相关日志输出

No response

附加信息

No response

JohnNiang commented 6 days ago

我会尝试复现以上问题。

JohnNiang commented 6 days ago

经过排查,大概率是更新缓存发生在发送 Config 更新事件之后了。所以在事件监听处理中通过 ReactiveSettingFetcher#get 获取到的配置是过时的。

https://github.com/halo-dev/halo/blob/8e9781401853c27ad94e0ef9ec73583448285adb/application/src/main/java/run/halo/app/plugin/DefaultReactiveSettingFetcher.java#L165-L171

/kind bug /area core /area plugin /milestone 2.17.x /assign