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))
        }
 }
 

Reply via email to