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 <[email protected]>
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 <[email protected]>
---
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: [email protected]
For additional commands, e-mail: [email protected]