This is an automated email from the ASF dual-hosted git repository.

humingcheng pushed a commit to branch revert-330-dev
in repository https://gitbox.apache.org/repos/asf/servicecomb-kie.git

commit 43107b9d825feda75dc26a7120db5e846b831ff2
Author: humingcheng <[email protected]>
AuthorDate: Mon Jan 5 22:45:12 2026 +0800

    Revert "修复模糊匹配缓存数据设置错误"
---
 server/datasource/etcd/kv/kv_dao.go      |  53 ++++++----------
 server/datasource/etcd/kv/kv_dao_test.go | 103 -------------------------------
 2 files changed, 18 insertions(+), 138 deletions(-)

diff --git a/server/datasource/etcd/kv/kv_dao.go 
b/server/datasource/etcd/kv/kv_dao.go
index 9191c1e..d7ebc37 100644
--- a/server/datasource/etcd/kv/kv_dao.go
+++ b/server/datasource/etcd/kv/kv_dao.go
@@ -550,7 +550,7 @@ func (s *Dao) listData(ctx context.Context, project, domain 
string, options ...d
                return listDataByCache(ctx, project, domain, opts, regex)
        }
 
-       result, _, err := listDataByNoCache(ctx, domain, project, regex, opts)
+       result, err := matchLabelsSearch(ctx, domain, project, regex, opts)
        if err != nil {
                openlog.Error("list kv failed: " + err.Error())
                return nil, opts, err
@@ -585,7 +585,7 @@ func listDataByCache(ctx context.Context, project string, 
domain string, opts da
                openlog.Info("using fuzzy cache to search kv not hit")
        }
 
-       result, onlyLabelFilteredResult, err := listDataByNoCache(ctx, domain, 
project, regex, opts)
+       result, err := matchLabelsSearch(ctx, domain, project, regex, opts)
        if err != nil {
                openlog.Error("list kv failed: " + err.Error())
                return nil, opts, err
@@ -596,30 +596,23 @@ func listDataByCache(ctx context.Context, project string, 
domain string, opts da
        }
 
        kvIdSet := new(sync.Map)
-       for _, kv := range onlyLabelFilteredResult.Data {
+       for _, kv := range result.Data {
                kvIdSet.Store(kv.ID, struct{}{})
        }
        cacheKey := kvCache.GetCacheKey(domain, project, opts.Labels)
-       kvCache.kvIDFuzzyCache.Set(cacheKey, kvIdSet, 
int64(onlyLabelFilteredResult.Total))
+       kvCache.kvIDFuzzyCache.Set(cacheKey, kvIdSet, int64(result.Total))
        return result, opts, nil
 }
 
-// 返回值 onlyLabelFilteredResult 用于调用者设置缓存
-func listDataByNoCache(ctx context.Context, domain, project string, regex 
*regexp.Regexp,
-       opts datasource.FindOptions) (result, onlyLabelFilteredResult 
*model.KVResponse, err error) {
+func matchLabelsSearch(ctx context.Context, domain, project string, regex 
*regexp.Regexp, opts datasource.FindOptions) (*model.KVResponse, error) {
        openlog.Debug("using labels to search kv")
        kvs, _, err := etcdadpt.List(ctx, key.KVList(domain, project))
        if err != nil {
-               return nil, nil, err
-       }
-
-       result = &model.KVResponse{
-               Data: []*model.KVDoc{},
+               return nil, err
        }
-       onlyLabelFilteredResult = &model.KVResponse{
+       result := &model.KVResponse{
                Data: []*model.KVDoc{},
        }
-
        for _, kv := range kvs {
                var doc model.KVDoc
                err := json.Unmarshal(kv.Value, &doc)
@@ -627,21 +620,17 @@ func listDataByNoCache(ctx context.Context, domain, 
project string, regex *regex
                        openlog.Error("decode to KVList error: " + err.Error())
                        continue
                }
-               if !matchLabels(&doc, opts) {
+               if !filterMatch(&doc, opts, regex) {
                        continue
                }
-               datasource.ClearPart(&doc)
-               onlyLabelFilteredResult.Data = 
append(onlyLabelFilteredResult.Data, &doc)
-               onlyLabelFilteredResult.Total++
 
-               if !matchConditions(&doc, opts, regex) {
-                       continue
-               }
+               datasource.ClearPart(&doc)
                result.Data = append(result.Data, &doc)
                result.Total++
+
        }
 
-       return result, onlyLabelFilteredResult, nil
+       return result, nil
 }
 
 func IsUniqueFind(opts datasource.FindOptions) bool {
@@ -693,7 +682,13 @@ func pagingResult(result *model.KVResponse, opts 
datasource.FindOptions) *model.
        return result
 }
 
-func matchLabels(doc *model.KVDoc, opts datasource.FindOptions) bool {
+func filterMatch(doc *model.KVDoc, opts datasource.FindOptions, regex 
*regexp.Regexp) bool {
+       if opts.Status != "" && doc.Status != opts.Status {
+               return false
+       }
+       if regex != nil && !regex.MatchString(doc.Key) {
+               return false
+       }
        if len(opts.Labels) != 0 {
                if opts.ExactLabels && !util.IsEquivalentLabel(opts.Labels, 
doc.Labels) {
                        return false
@@ -702,18 +697,6 @@ func matchLabels(doc *model.KVDoc, opts 
datasource.FindOptions) bool {
                        return false
                }
        }
-
-       return true
-}
-
-func matchConditions(doc *model.KVDoc, opts datasource.FindOptions, regex 
*regexp.Regexp) bool {
-       if opts.Status != "" && doc.Status != opts.Status {
-               return false
-       }
-       if regex != nil && !regex.MatchString(doc.Key) {
-               return false
-       }
-
        if opts.LabelFormat != "" && doc.LabelFormat != opts.LabelFormat {
                return false
        }
diff --git a/server/datasource/etcd/kv/kv_dao_test.go 
b/server/datasource/etcd/kv/kv_dao_test.go
deleted file mode 100644
index 66a25ff..0000000
--- a/server/datasource/etcd/kv/kv_dao_test.go
+++ /dev/null
@@ -1,103 +0,0 @@
-package kv
-
-import (
-       "context"
-       "crypto/sha256"
-       "errors"
-       "fmt"
-       "strings"
-       "testing"
-       "time"
-
-       "github.com/stretchr/testify/assert"
-
-       "github.com/go-chassis/cari/db"
-       "github.com/go-chassis/cari/db/config"
-       _ "github.com/go-chassis/cari/db/etcd"
-
-       "github.com/apache/servicecomb-kie/pkg/model"
-       "github.com/apache/servicecomb-kie/server/datasource"
-)
-
-func init() {
-       cfg := config.Config{
-               Kind:       "etcd",
-               URI:        "http://127.0.0.1:2379";,
-               PoolSize:   0,
-               TLSConfig:  nil,
-               SSLEnabled: false,
-               Timeout:    10 * time.Second,
-       }
-       cfg.Kind = "etcd"
-       cfg.URI = "http://127.0.0.1:2379";
-       cfg.Timeout = 10 * time.Second
-       err := db.Init(&cfg)
-       if err != nil {
-               panic(err)
-       }
-}
-
-func Test_listDataByNoCache(t *testing.T) {
-       dao := Dao{}
-
-       kvDoc1 := model.KVDoc{
-               Key:     "Test_listDataByNoCache-application.yml",
-               Value:   "test",
-               Project: "default",
-               Status:  "enabled",
-               Labels: map[string]string{
-                       "app": "springCloud",
-                       "env": "dev",
-               },
-               Domain: "default",
-       }
-       kvDoc1.ID = fmt.Sprintf("%x", 
sha256.Sum256([]byte(strings.Join([]string{
-               kvDoc1.Domain,
-               kvDoc1.Project,
-               kvDoc1.Key,
-               kvDoc1.LabelFormat,
-       }, "/"))))
-       _, err := dao.Create(context.Background(), &kvDoc1)
-       if err != nil {
-               assert.True(t, errors.Is(datasource.ErrKVAlreadyExists, err))
-       }
-
-       kvDoc2 := model.KVDoc{
-               Key:     "Test_listDataByNoCache-servicecomb.rateLimiting.test",
-               Value:   "test",
-               Project: "default",
-               Status:  "enabled",
-               Labels: map[string]string{
-                       "app": "springCloud",
-                       "env": "dev",
-               },
-               Domain: "default",
-       }
-       kvDoc2.ID = fmt.Sprintf("%x", 
sha256.Sum256([]byte(strings.Join([]string{
-               kvDoc2.Domain,
-               kvDoc2.Project,
-               kvDoc2.Key,
-               kvDoc2.LabelFormat,
-       }, "/"))))
-       _, err = dao.Create(context.Background(), &kvDoc2)
-       if err != nil {
-               assert.True(t, errors.Is(datasource.ErrKVAlreadyExists, err))
-       }
-
-       opts := datasource.FindOptions{
-               Key: 
"beginWith(Test_listDataByNoCache-servicecomb.rateLimiting.)",
-               Labels: map[string]string{
-                       "app": "springCloud",
-                       "env": "dev",
-               },
-       }
-       re, reErr := toRegex(opts)
-       assert.Nil(t, reErr)
-
-       // onlyLabelFilteredResult 是仅通过label过滤后的值,没有后续的过滤条件,因此其内容应当更多
-       result, onlyLabelFilteredResult, listErr := 
listDataByNoCache(context.Background(), "default", "default", re, opts)
-       assert.Nil(t, listErr)
-       assert.True(t, onlyLabelFilteredResult.Total >= 2)
-       assert.True(t, result.Total >= 1)
-       assert.True(t, onlyLabelFilteredResult.Total > result.Total)
-}

Reply via email to