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