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

zfeng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-seata-go.git


The following commit(s) were added to refs/heads/master by this push:
     new c91a8f53 Fix : del metadatacache uppertablenamekey  and increase 
tablemeta field uppertablename (#857)
c91a8f53 is described below

commit c91a8f53a92777e178e4f7901d7e0e507b3b8dfe
Author: Wiggins <125641755+minat...@users.noreply.github.com>
AuthorDate: Wed Aug 6 23:23:04 2025 +0800

    Fix : del metadatacache uppertablenamekey  and increase tablemeta field 
uppertablename (#857)
    
    * fix: uppertable metacache
     todo:Fix lockkey case difference #846
    
    * increase uppertablename and  Fix lockkey case difference #846
    
    * Fix test case difference #846
    
    * Fix test case difference #846
    
    * reduce uppertablename col #846
    
    * reduce uppertablename #846
    
    * fix test #846
    
    ---------
    
    Co-authored-by: FengZhang <zfc...@qq.com>
---
 pkg/datasource/sql/datasource/base/meta_cache.go   | 15 +++----
 .../sql/datasource/base/meta_cache_test.go         | 47 +++++++++++++++++-----
 pkg/datasource/sql/exec/at/base_executor_test.go   | 19 +++++----
 .../sql/undo/builder/basic_undo_log_builder.go     |  2 +-
 .../undo/builder/basic_undo_log_builder_test.go    | 14 +++----
 pkg/datasource/sql/util/lockkey.go                 |  2 +-
 testdata/meta_cache.go                             |  4 +-
 7 files changed, 65 insertions(+), 38 deletions(-)

diff --git a/pkg/datasource/sql/datasource/base/meta_cache.go 
b/pkg/datasource/sql/datasource/base/meta_cache.go
index 2ee9b463..3c124ed1 100644
--- a/pkg/datasource/sql/datasource/base/meta_cache.go
+++ b/pkg/datasource/sql/datasource/base/meta_cache.go
@@ -21,7 +21,6 @@ import (
        "context"
        "database/sql"
        "fmt"
-       "strings"
        "sync"
        "time"
 
@@ -111,9 +110,8 @@ func (c *BaseTableMetaCache) refresh(ctx context.Context) {
 
                for i := range v {
                        tm := v[i]
-                       upperTableName := strings.ToUpper(tm.TableName)
-                       if _, ok := c.cache[upperTableName]; ok {
-                               c.cache[upperTableName] = &entry{
+                       if _, ok := c.cache[tm.TableName]; ok {
+                               c.cache[tm.TableName] = &entry{
                                        value: tm,
                                }
                        }
@@ -159,16 +157,15 @@ func (c *BaseTableMetaCache) GetTableMeta(ctx 
context.Context, dbName, tableName
        defer c.lock.Unlock()
 
        defer conn.Close()
-       upperTableName := strings.ToUpper(tableName)
-       v, ok := c.cache[upperTableName]
+       v, ok := c.cache[tableName]
        if !ok {
-               meta, err := c.trigger.LoadOne(ctx, dbName, upperTableName, 
conn)
+               meta, err := c.trigger.LoadOne(ctx, dbName, tableName, conn)
                if err != nil {
                        return types.TableMeta{}, err
                }
 
                if meta != nil && !meta.IsEmpty() {
-                       c.cache[upperTableName] = &entry{
+                       c.cache[tableName] = &entry{
                                value:      *meta,
                                lastAccess: time.Now(),
                        }
@@ -180,7 +177,7 @@ func (c *BaseTableMetaCache) GetTableMeta(ctx 
context.Context, dbName, tableName
        }
 
        v.lastAccess = time.Now()
-       c.cache[upperTableName] = v
+       c.cache[tableName] = v
 
        return v.value, nil
 }
diff --git a/pkg/datasource/sql/datasource/base/meta_cache_test.go 
b/pkg/datasource/sql/datasource/base/meta_cache_test.go
index bcc86b90..92a7550c 100644
--- a/pkg/datasource/sql/datasource/base/meta_cache_test.go
+++ b/pkg/datasource/sql/datasource/base/meta_cache_test.go
@@ -93,7 +93,29 @@ func TestBaseTableMetaCache_refresh(t *testing.T) {
                args   args
                want   types.TableMeta
        }{
-               {name: "test-1",
+               {
+                       name: "test1",
+                       fields: fields{
+                               lock:           sync.RWMutex{},
+                               capity:         capacity,
+                               size:           0,
+                               expireDuration: EexpireTime,
+                               cache: map[string]*entry{
+                                       "test": {
+                                               value:      types.TableMeta{},
+                                               lastAccess: time.Now(),
+                                       },
+                               },
+                               cancel:  cancel,
+                               trigger: &mockTrigger{},
+                               cfg:     &mysql.Config{},
+                               db:      &sql.DB{},
+                       },
+                       args: args{ctx: ctx},
+                       want: testdata.MockWantTypesMeta("test"),
+               },
+               {
+                       name: "test2",
                        fields: fields{
                                lock:           sync.RWMutex{},
                                capity:         capacity,
@@ -109,8 +131,10 @@ func TestBaseTableMetaCache_refresh(t *testing.T) {
                                trigger: &mockTrigger{},
                                cfg:     &mysql.Config{},
                                db:      &sql.DB{},
-                       }, args: args{ctx: ctx},
-                       want: testdata.MockWantTypesMeta("test")},
+                       },
+                       args: args{ctx: ctx},
+                       want: testdata.MockWantTypesMeta("TEST"),
+               },
        }
        for _, tt := range tests {
                t.Run(tt.name, func(t *testing.T) {
@@ -144,7 +168,12 @@ func TestBaseTableMetaCache_refresh(t *testing.T) {
                        time.Sleep(time.Second * 3)
                        c.lock.RLock()
                        defer c.lock.RUnlock()
-                       assert.Equal(t, c.cache["TEST"].value, tt.want)
+                       assert.Equal(t, c.cache[func() string {
+                               if tt.name == "test2" {
+                                       return "TEST"
+                               }
+                               return "test"
+                       }()].value, tt.want)
                })
        }
 }
@@ -190,7 +219,7 @@ func TestBaseTableMetaCache_GetTableMeta(t *testing.T) {
 
        ColumnNames = []string{"id", "name", "age"}
        tableMeta1 = types.TableMeta{
-               TableName:   "T_USER1",
+               TableName:   "t_user1",
                Columns:     columns,
                Indexs:      index,
                ColumnNames: ColumnNames,
@@ -229,12 +258,12 @@ func TestBaseTableMetaCache_GetTableMeta(t *testing.T) {
                        cache := &BaseTableMetaCache{
                                trigger: mockTrigger,
                                cache: map[string]*entry{
-                                       "T_USER": {
-                                               value:      tableMeta2,
+                                       "t_user1": {
+                                               value:      tableMeta1,
                                                lastAccess: time.Now(),
                                        },
-                                       "T_USER1": {
-                                               value:      tableMeta1,
+                                       "T_USER2": {
+                                               value:      tableMeta2,
                                                lastAccess: time.Now(),
                                        },
                                },
diff --git a/pkg/datasource/sql/exec/at/base_executor_test.go 
b/pkg/datasource/sql/exec/at/base_executor_test.go
index 0caffe4e..dd427aa8 100644
--- a/pkg/datasource/sql/exec/at/base_executor_test.go
+++ b/pkg/datasource/sql/exec/at/base_executor_test.go
@@ -71,7 +71,7 @@ func TestBaseExecBuildLockKey(t *testing.T) {
                                        
{[]types.ColumnImage{getColumnImage("id", 2), getColumnImage("userId", 
"user2")}},
                                },
                        },
-                       "test_name:1_user1,2_user2",
+                       "TEST_NAME:1_user1,2_user2",
                },
                {
                        "Three Primary Keys",
@@ -89,7 +89,7 @@ func TestBaseExecBuildLockKey(t *testing.T) {
                                        
{[]types.ColumnImage{getColumnImage("id", 3), getColumnImage("userId", 
"three"), getColumnImage("age", "33")}},
                                },
                        },
-                       "test2_name:1_one_11,2_two_22,3_three_33",
+                       "TEST2_NAME:1_one_11,2_two_22,3_three_33",
                },
                {
                        name: "Single Primary Key",
@@ -105,7 +105,7 @@ func TestBaseExecBuildLockKey(t *testing.T) {
                                        {Columns: 
[]types.ColumnImage{getColumnImage("id", 100)}},
                                },
                        },
-                       expected: "single_key:100",
+                       expected: "SINGLE_KEY:100",
                },
                {
                        name: "Mixed Type Keys",
@@ -121,7 +121,7 @@ func TestBaseExecBuildLockKey(t *testing.T) {
                                        {Columns: 
[]types.ColumnImage{getColumnImage("name", "mike"), getColumnImage("age", 25)}},
                                },
                        },
-                       expected: "mixed_key:mike_25",
+                       expected: "MIXED_KEY:mike_25",
                },
                {
                        name: "Empty Records",
@@ -132,7 +132,7 @@ func TestBaseExecBuildLockKey(t *testing.T) {
                                },
                        },
                        records:  types.RecordImage{TableName: "empty"},
-                       expected: "empty:",
+                       expected: "EMPTY:",
                },
                {
                        name: "Special Characters",
@@ -148,7 +148,7 @@ func TestBaseExecBuildLockKey(t *testing.T) {
                                        {Columns: 
[]types.ColumnImage{getColumnImage("id", "A,b_c")}},
                                },
                        },
-                       expected: "special:A,b_c",
+                       expected: "SPECIAL:A,b_c",
                },
                {
                        name: "Non-existent Key Name",
@@ -164,7 +164,7 @@ func TestBaseExecBuildLockKey(t *testing.T) {
                                        {Columns: 
[]types.ColumnImage{getColumnImage("id", 1)}},
                                },
                        },
-                       expected: "error_key:",
+                       expected: "ERROR_KEY:",
                },
                {
                        name: "Multiple Rows With Nil PK Value",
@@ -182,7 +182,7 @@ func TestBaseExecBuildLockKey(t *testing.T) {
                                        {Columns: 
[]types.ColumnImage{getColumnImage("id", nil)}},
                                },
                        },
-                       expected: "nil_pk:,123,",
+                       expected: "NIL_PK:,123,",
                },
                {
                        name: "PK As Bool And Float",
@@ -199,10 +199,9 @@ func TestBaseExecBuildLockKey(t *testing.T) {
                                        {Columns: 
[]types.ColumnImage{getColumnImage("name", false), getColumnImage("age", 0.0)}},
                                },
                        },
-                       expected: "type_pk:true_3.14,false_0",
+                       expected: "TYPE_PK:true_3.14,false_0",
                },
        }
-
        for _, tt := range tests {
                t.Run(tt.name, func(t *testing.T) {
                        lockKeys := exec.buildLockKey(&tt.records, tt.metaData)
diff --git a/pkg/datasource/sql/undo/builder/basic_undo_log_builder.go 
b/pkg/datasource/sql/undo/builder/basic_undo_log_builder.go
index d02604b8..a216d813 100644
--- a/pkg/datasource/sql/undo/builder/basic_undo_log_builder.go
+++ b/pkg/datasource/sql/undo/builder/basic_undo_log_builder.go
@@ -247,7 +247,7 @@ func (b *BasicUndoLogBuilder) buildLockKey(rows 
driver.Rows, meta types.TableMet
                lockKeys      bytes.Buffer
                filedSequence int
        )
-       lockKeys.WriteString(meta.TableName)
+       lockKeys.WriteString(strings.ToUpper(meta.TableName))
        lockKeys.WriteString(":")
 
        pks := b.GetScanSlice(meta.GetPrimaryKeyOnlyName(), &meta)
diff --git a/pkg/datasource/sql/undo/builder/basic_undo_log_builder_test.go 
b/pkg/datasource/sql/undo/builder/basic_undo_log_builder_test.go
index 744f725f..51ab7dd2 100644
--- a/pkg/datasource/sql/undo/builder/basic_undo_log_builder_test.go
+++ b/pkg/datasource/sql/undo/builder/basic_undo_log_builder_test.go
@@ -97,7 +97,7 @@ func TestBuildLockKey(t *testing.T) {
                                        
{[]types.ColumnImage{getColumnImage("id", 2), getColumnImage("userId", "two")}},
                                },
                        },
-                       "test_name:1_one,2_two",
+                       "TEST_NAME:1_one,2_two",
                },
                {
                        "Three Primary Keys",
@@ -115,7 +115,7 @@ func TestBuildLockKey(t *testing.T) {
                                        
{[]types.ColumnImage{getColumnImage("id", 3), getColumnImage("userId", 
"three"), getColumnImage("age", "33")}},
                                },
                        },
-                       "test2_name:1_one_11,2_two_22,3_three_33",
+                       "TEST2_NAME:1_one_11,2_two_22,3_three_33",
                },
                {
                        name: "Single Primary Key",
@@ -131,7 +131,7 @@ func TestBuildLockKey(t *testing.T) {
                                        {Columns: 
[]types.ColumnImage{getColumnImage("id", 100)}},
                                },
                        },
-                       expected: "single_key:100",
+                       expected: "SINGLE_KEY:100",
                },
                {
                        name: "Mixed Type Keys",
@@ -147,7 +147,7 @@ func TestBuildLockKey(t *testing.T) {
                                        {Columns: 
[]types.ColumnImage{getColumnImage("name", "Alice"), getColumnImage("age", 
25)}},
                                },
                        },
-                       expected: "mixed_key:Alice_25",
+                       expected: "MIXED_KEY:Alice_25",
                },
                {
                        name: "Empty Records",
@@ -158,7 +158,7 @@ func TestBuildLockKey(t *testing.T) {
                                },
                        },
                        records:  types.RecordImage{TableName: "empty"},
-                       expected: "empty:",
+                       expected: "EMPTY:",
                },
                {
                        name: "Special Characters",
@@ -174,7 +174,7 @@ func TestBuildLockKey(t *testing.T) {
                                        {Columns: 
[]types.ColumnImage{getColumnImage("id", "a,b_c")}},
                                },
                        },
-                       expected: "special:a,b_c",
+                       expected: "SPECIAL:a,b_c",
                },
                {
                        name: "Non-existent Key Name",
@@ -190,7 +190,7 @@ func TestBuildLockKey(t *testing.T) {
                                        {Columns: 
[]types.ColumnImage{getColumnImage("id", 1)}},
                                },
                        },
-                       expected: "error_key:",
+                       expected: "ERROR_KEY:",
                },
        }
 
diff --git a/pkg/datasource/sql/util/lockkey.go 
b/pkg/datasource/sql/util/lockkey.go
index 02992982..e1aaa9f5 100644
--- a/pkg/datasource/sql/util/lockkey.go
+++ b/pkg/datasource/sql/util/lockkey.go
@@ -34,7 +34,7 @@ func BuildLockKey(records *types.RecordImage, meta 
types.TableMeta) string {
                colIndex int
        }
 
-       lockKeys.WriteString(meta.TableName)
+       lockKeys.WriteString(strings.ToUpper(meta.TableName))
        lockKeys.WriteString(":")
 
        keys := meta.GetPrimaryKeyOnlyName()
diff --git a/testdata/meta_cache.go b/testdata/meta_cache.go
index 38c2e643..7f62e6cf 100644
--- a/testdata/meta_cache.go
+++ b/testdata/meta_cache.go
@@ -17,7 +17,9 @@
 
 package testdata
 
-import "seata.apache.org/seata-go/pkg/datasource/sql/types"
+import (
+       "seata.apache.org/seata-go/pkg/datasource/sql/types"
+)
 
 func MockWantTypesMeta(tableName string) types.TableMeta {
        return types.TableMeta{


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@seata.apache.org
For additional commands, e-mail: notifications-h...@seata.apache.org

Reply via email to