This is an automated email from the ASF dual-hosted git repository. shuai pushed a commit to branch test in repository https://gitbox.apache.org/repos/asf/answer.git
commit 8579bde60760a8a2bbaf7466fc6e6f8c6c332e7c Author: Sonui <m...@sonui.cn> AuthorDate: Sat Mar 1 11:22:40 2025 +0800 refactor(plugin): improved initialization of the KV storage plugin --- .../service/plugin_common/plugin_common_service.go | 10 ++++++--- plugin/kv_storage.go | 24 ++++++++-------------- plugin/plugin.go | 2 +- 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/internal/service/plugin_common/plugin_common_service.go b/internal/service/plugin_common/plugin_common_service.go index de6d981d..d3aa839b 100644 --- a/internal/service/plugin_common/plugin_common_service.go +++ b/internal/service/plugin_common/plugin_common_service.go @@ -135,9 +135,13 @@ func (ps *PluginCommonService) GetUserPluginConfig(ctx context.Context, req *sch } func (ps *PluginCommonService) initPluginData() { - plugin.SetKVStorageDB(&plugin.Data{ - DB: ps.data.DB, - Cache: ps.data.Cache, + _ = plugin.CallKVStorage(func(k plugin.KVStorage) error { + k.SetOperator(plugin.NewKVOperator( + ps.data.DB, + ps.data.Cache, + k.Info().SlugName, + )) + return nil }) // init plugin status diff --git a/plugin/kv_storage.go b/plugin/kv_storage.go index 9714487f..b4d940b8 100644 --- a/plugin/kv_storage.go +++ b/plugin/kv_storage.go @@ -323,22 +323,16 @@ type KVStorage interface { } var ( - _, - registerPluginKVStorage = func() (CallFn[KVStorage], RegisterFn[KVStorage]) { - callFn, registerFn := MakePlugin[KVStorage](false) - return callFn, func(p KVStorage) { - registerFn(p) - kvStoragePluginStack.plugins = append(kvStoragePluginStack.plugins, p) - } - }() - kvStoragePluginStack = &Stack[KVStorage]{} + CallKVStorage, + registerKVStorage = MakePlugin[KVStorage](true) ) -func SetKVStorageDB(data *Data) { - for _, p := range kvStoragePluginStack.plugins { - p.SetOperator(&KVOperator{ - data: data, - pluginSlugName: p.Info().SlugName, - }) +// NewKVOperator creates a new KV storage operator with the specified database engine, cache and plugin name. +// It returns a KVOperator instance that can be used to interact with the plugin's storage. +func NewKVOperator(db *xorm.Engine, cache cache.Cache, pluginSlugName string) *KVOperator { + return &KVOperator{ + data: &Data{DB: db, Cache: cache}, + pluginSlugName: pluginSlugName, + cacheTTL: 30 * time.Minute, } } diff --git a/plugin/plugin.go b/plugin/plugin.go index dc8c35ea..a9e17310 100644 --- a/plugin/plugin.go +++ b/plugin/plugin.go @@ -124,7 +124,7 @@ func Register(p Base) { } if _, ok := p.(KVStorage); ok { - registerPluginKVStorage(p.(KVStorage)) + registerKVStorage(p.(KVStorage)) } }