Skip to content

Commit 538a218

Browse files
authored
tests: fix the rest failed nextgen tests (#9819)
close #9806 Signed-off-by: Ryan Leung <rleungx@gmail.com>
1 parent 7cbc382 commit 538a218

File tree

18 files changed

+218
-82
lines changed

18 files changed

+218
-82
lines changed

pkg/gc/gc_state_manager_test.go

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -139,14 +139,22 @@ func newGCStateManagerForTest(t testing.TB, opt newGCStateManagerForTestOptions)
139139
err = keyspaceManager.Bootstrap()
140140
re.NoError(err)
141141

142-
// keyspaceID 0 exists automatically after bootstrapping.
142+
// The bootstrap keyspace (DefaultKeyspaceID or SystemKeyspaceID) exists automatically after bootstrapping.
143143
if opt.specifyInitialKeyspaces == nil {
144+
// In NextGen, all keyspaces should use keyspace_level GC
145+
// In Classic, we can have different GC management types
146+
var ks1Config map[string]string
147+
if kerneltype.IsNextGen() {
148+
ks1Config = map[string]string{"gc_management_type": "keyspace_level"}
149+
} else {
150+
ks1Config = map[string]string{"gc_management_type": "unified"}
151+
}
144152
id := new(uint32)
145153
*id = 1
146154
ks1, err := keyspaceManager.CreateKeyspaceByID(&keyspace.CreateKeyspaceByIDRequest{
147155
ID: id,
148156
Name: "ks1",
149-
Config: map[string]string{"gc_management_type": "unified"},
157+
Config: ks1Config,
150158
CreateTime: time.Now().Unix(),
151159
})
152160
re.NoError(err)
@@ -196,10 +204,21 @@ func newGCStateManagerForTest(t testing.TB, opt newGCStateManagerForTestOptions)
196204
func (s *gcStateManagerTestSuite) SetupTest() {
197205
s.storage, s.provider, s.manager, s.clean, s.cancel = newGCStateManagerForTest(s.T(), newGCStateManagerForTestOptions{})
198206

199-
s.keyspacePresets.all = []uint32{constant.NullKeyspaceID, 0, 1, 2, 3}
200-
s.keyspacePresets.manageable = []uint32{constant.NullKeyspaceID, 2}
201-
s.keyspacePresets.unmanageable = []uint32{0, 1, 3}
202-
s.keyspacePresets.unifiedGC = []uint32{constant.NullKeyspaceID, 0, 1, 3}
207+
bootstrapKeyspaceID := keyspace.GetBootstrapKeyspaceID()
208+
s.keyspacePresets.all = []uint32{constant.NullKeyspaceID, bootstrapKeyspaceID, 1, 2, 3}
209+
210+
// In NextGen builds, bootstrapKeyspaceID is SystemKeyspaceID (0xFFFFFE) with KeyspaceLevelGC config, so it's manageable.
211+
// In Classic builds, bootstrapKeyspaceID is DefaultKeyspaceID (0) without KeyspaceLevelGC config, so it's unmanageable.
212+
if kerneltype.IsNextGen() {
213+
// NextGen: all keyspaces default to KeyspaceLevelGC
214+
s.keyspacePresets.manageable = []uint32{constant.NullKeyspaceID, bootstrapKeyspaceID, 1, 2, 3}
215+
s.keyspacePresets.unmanageable = []uint32{}
216+
s.keyspacePresets.unifiedGC = []uint32{} // NextGen has no unified GC
217+
} else {
218+
s.keyspacePresets.manageable = []uint32{constant.NullKeyspaceID, 2}
219+
s.keyspacePresets.unmanageable = []uint32{bootstrapKeyspaceID, 1, 3}
220+
s.keyspacePresets.unifiedGC = []uint32{constant.NullKeyspaceID, bootstrapKeyspaceID, 1, 3}
221+
}
203222
s.keyspacePresets.notExisting = []uint32{5, 0xffffff}
204223
s.keyspacePresets.nullSynonyms = []uint32{constant.NullKeyspaceID, 0x1000000, 0xfffffffe}
205224
}
@@ -1883,8 +1902,16 @@ func (s *gcStateManagerTestSuite) TestGetAllKeyspacesMaxTxnSafePoint() {
18831902
})
18841903
re.NoError(err)
18851904
re.Equal(uint64(len(s.keyspacePresets.manageable)), txnSafePoint)
1886-
re.Equal("ks2", keyspaceName)
1887-
re.Equal(uint32(2), keyspaceID)
1905+
1906+
// In NextGen, all keyspaces are manageable, so the max should be ks3
1907+
// In Classic, only certain keyspaces are manageable, so the max should be ks2
1908+
if kerneltype.IsNextGen() {
1909+
re.Equal("ks3", keyspaceName)
1910+
re.Equal(uint32(3), keyspaceID)
1911+
} else {
1912+
re.Equal("ks2", keyspaceName)
1913+
re.Equal(uint32(2), keyspaceID)
1914+
}
18881915
}
18891916

18901917
func (s *gcStateManagerTestSuite) TestWeakenedConstraints() {

pkg/keyspace/keyspace.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,9 @@ func (manager *Manager) CreateKeyspace(request *CreateKeyspaceRequest) (*keyspac
250250
}
251251
// Set default value of GCManagementType to KeyspaceLevelGC for NextGen
252252
if kerneltype.IsNextGen() {
253+
if request.Config == nil {
254+
request.Config = make(map[string]string)
255+
}
253256
if v, ok := request.Config[GCManagementType]; !ok || len(v) == 0 {
254257
request.Config[GCManagementType] = KeyspaceLevelGC
255258
}
@@ -341,6 +344,15 @@ func (manager *Manager) CreateKeyspaceByID(request *CreateKeyspaceByIDRequest) (
341344
request.Config[UserKindKey] = config[UserKindKey]
342345
}
343346
}
347+
// Set default value of GCManagementType to KeyspaceLevelGC for NextGen
348+
if kerneltype.IsNextGen() {
349+
if request.Config == nil {
350+
request.Config = make(map[string]string)
351+
}
352+
if v, ok := request.Config[GCManagementType]; !ok || len(v) == 0 {
353+
request.Config[GCManagementType] = KeyspaceLevelGC
354+
}
355+
}
344356
// Create a disabled keyspace meta for tikv-server to get the config on keyspace split.
345357
keyspace := &keyspacepb.KeyspaceMeta{
346358
Id: id,

pkg/keyspace/keyspace_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ func (suite *keyspaceTestSuite) TestLoadRangeKeyspace() {
384384
}
385385
}
386386
} else {
387-
// For legacy: expect keyspaces [0, 1, 2, ..., 100]
387+
// For classic: expect keyspaces [0, 1, 2, ..., 100]
388388
for i := range keyspaces {
389389
re.Equal(uint32(i), keyspaces[i].Id)
390390
if i != 0 {

pkg/keyspace/util.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ func (hp *indexedHeap) Remove(id uint32) *endpoint.KeyspaceGroup {
294294
}
295295

296296
// GetBootstrapKeyspaceID returns the Keyspace ID used for bootstrapping.
297-
// Legacy: constant.DefaultKeyspaceID
297+
// Classic: constant.DefaultKeyspaceID
298298
// NextGen: constant.SystemKeyspaceID
299299
func GetBootstrapKeyspaceID() uint32 {
300300
if kerneltype.IsNextGen() {
@@ -304,7 +304,7 @@ func GetBootstrapKeyspaceID() uint32 {
304304
}
305305

306306
// GetBootstrapKeyspaceName returns the Keyspace Name used for bootstrapping.
307-
// Legacy: constant.DefaultKeyspaceName
307+
// Classic: constant.DefaultKeyspaceName
308308
// NextGen: constant.SystemKeyspaceName
309309
func GetBootstrapKeyspaceName() string {
310310
if kerneltype.IsNextGen() {

pkg/schedule/schedulers/base_scheduler.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,12 @@ func (s *BaseScheduler) SetDisable(disable bool) error {
141141

142142
// IsDefault returns if the scheduler is a default scheduler.
143143
func (s *BaseScheduler) IsDefault() bool {
144-
if _, ok := s.conf.(defaultSchedulerConfig); ok {
145-
return true
144+
// Check if the scheduler is in the current DefaultSchedulers list
145+
// which dynamically adjusts based on NextGen vs Classic
146+
for _, schedulerType := range types.DefaultSchedulers {
147+
if s.tp == schedulerType {
148+
return true
149+
}
146150
}
147151
return false
148152
}

pkg/schedule/schedulers/scheduler_controller.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,13 @@ func (c *Controller) ReloadSchedulerConfig(name string) error {
299299
if exist, _ := c.IsSchedulerExisted(name); !exist {
300300
return errs.ErrSchedulerNotFound.FastGenByArgs()
301301
}
302-
return c.GetScheduler(name).ReloadConfig()
302+
scheduler := c.GetScheduler(name)
303+
if scheduler == nil {
304+
// Scheduler exists in handlers but not in schedulers map, which means it's a handler-only scheduler
305+
// Handler-only schedulers don't have config reloading capability
306+
return errs.ErrSchedulerNotFound.FastGenByArgs()
307+
}
308+
return scheduler.ReloadConfig()
303309
}
304310

305311
// IsSchedulerAllowed returns whether a scheduler is allowed to schedule, a scheduler is not allowed to schedule if it is paused or blocked by unsafe recovery.

pkg/schedule/schedulers/scheduler_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -525,15 +525,15 @@ func TestIsDefault(t *testing.T) {
525525
defer cancel()
526526

527527
for schedulerType := range types.SchedulerTypeCompatibleMap {
528-
bs, err := CreateScheduler(schedulerType, oc,
528+
s, err := CreateScheduler(schedulerType, oc,
529529
storage.NewStorageWithMemoryBackend(),
530530
testDecoder,
531531
func(string) error { return nil })
532532
re.NoError(err)
533533
if slices.Contains(types.DefaultSchedulers, schedulerType) {
534-
re.True(bs.IsDefault())
534+
re.True(s.IsDefault())
535535
} else {
536-
re.False(bs.IsDefault())
536+
re.False(s.IsDefault())
537537
}
538538
}
539539
}

server/cluster/cluster_test.go

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3175,11 +3175,11 @@ func TestAddScheduler(t *testing.T) {
31753175
defer cleanup()
31763176
controller := co.GetSchedulersController()
31773177
re.Len(controller.GetSchedulerNames(), len(sc.DefaultSchedulers))
3178-
re.NoError(controller.RemoveScheduler(types.BalanceLeaderScheduler.String()))
3179-
re.NoError(controller.RemoveScheduler(types.BalanceRegionScheduler.String()))
3180-
re.NoError(controller.RemoveScheduler(types.BalanceHotRegionScheduler.String()))
3181-
re.NoError(controller.RemoveScheduler(types.EvictSlowStoreScheduler.String()))
3182-
re.NoError(controller.RemoveScheduler(types.EvictStoppingStoreScheduler.String()))
3178+
// Remove all default schedulers (dynamically adjusts for NextGen vs Classic)
3179+
for _, schedulerConfig := range sc.DefaultSchedulers {
3180+
schedulerType := types.ConvertOldStrToType[schedulerConfig.Type]
3181+
re.NoError(controller.RemoveScheduler(schedulerType.String()))
3182+
}
31833183
re.Empty(controller.GetSchedulerNames())
31843184

31853185
stream := mockhbstream.NewHeartbeatStream()
@@ -3287,11 +3287,10 @@ func TestPersistScheduler(t *testing.T) {
32873287
re.Len(sches, defaultCount+2)
32883288

32893289
// remove all default schedulers
3290-
re.NoError(controller.RemoveScheduler(types.BalanceLeaderScheduler.String()))
3291-
re.NoError(controller.RemoveScheduler(types.BalanceRegionScheduler.String()))
3292-
re.NoError(controller.RemoveScheduler(types.BalanceHotRegionScheduler.String()))
3293-
re.NoError(controller.RemoveScheduler(types.EvictSlowStoreScheduler.String()))
3294-
re.NoError(controller.RemoveScheduler(types.EvictStoppingStoreScheduler.String()))
3290+
for _, schedulerConfig := range sc.DefaultSchedulers {
3291+
schedulerType := types.ConvertOldStrToType[schedulerConfig.Type]
3292+
re.NoError(controller.RemoveScheduler(schedulerType.String()))
3293+
}
32953294
// only remains 2 items with independent config.
32963295
re.Len(controller.GetSchedulerNames(), 2)
32973296
re.NoError(co.GetCluster().GetSchedulerConfig().Persist(storage))
@@ -3401,12 +3400,10 @@ func TestRemoveScheduler(t *testing.T) {
34013400
re.Len(sches, defaultCount+1)
34023401

34033402
// remove all schedulers
3404-
re.NoError(controller.RemoveScheduler(types.BalanceLeaderScheduler.String()))
3405-
re.NoError(controller.RemoveScheduler(types.BalanceRegionScheduler.String()))
3406-
re.NoError(controller.RemoveScheduler(types.BalanceHotRegionScheduler.String()))
34073403
re.NoError(controller.RemoveScheduler(types.GrantLeaderScheduler.String()))
3408-
re.NoError(controller.RemoveScheduler(types.EvictSlowStoreScheduler.String()))
3409-
re.NoError(controller.RemoveScheduler(types.EvictStoppingStoreScheduler.String()))
3404+
for _, schedulerType := range types.DefaultSchedulers {
3405+
re.NoError(controller.RemoveScheduler(schedulerType.String()))
3406+
}
34103407
// all removed
34113408
sches, _, err = storage.LoadAllSchedulerConfigs()
34123409
re.NoError(err)

tests/integrations/client/http_client_test.go

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import (
4747
"github.com/tikv/pd/pkg/utils/testutil"
4848
"github.com/tikv/pd/pkg/utils/tsoutil"
4949
"github.com/tikv/pd/pkg/versioninfo"
50+
"github.com/tikv/pd/pkg/versioninfo/kerneltype"
5051
"github.com/tikv/pd/server/api"
5152
"github.com/tikv/pd/tests"
5253
)
@@ -467,7 +468,13 @@ func (suite *httpClientTestSuite) TestRegionLabel() {
467468
labelRules, err := client.GetAllRegionLabelRules(ctx)
468469
re.NoError(err)
469470
re.Len(labelRules, 1)
470-
re.Equal("keyspaces/0", labelRules[0].ID)
471+
472+
// In NextGen, the bootstrap keyspace is SYSTEM with ID 16777214, not DEFAULT with ID 0
473+
expectedKeyspaceID := "keyspaces/0"
474+
if kerneltype.IsNextGen() {
475+
expectedKeyspaceID = "keyspaces/16777214"
476+
}
477+
re.Equal(expectedKeyspaceID, labelRules[0].ID)
471478
// Set a new region label rule.
472479
labelRule := &pd.LabelRule{
473480
ID: "rule1",
@@ -512,7 +519,7 @@ func (suite *httpClientTestSuite) TestRegionLabel() {
512519
re.NoError(err)
513520
re.Len(labelRules, 1)
514521
re.Equal(labelRule, labelRules[0])
515-
labelRules, err = client.GetRegionLabelRulesByIDs(ctx, []string{"keyspaces/0", "rule2"})
522+
labelRules, err = client.GetRegionLabelRulesByIDs(ctx, []string{expectedKeyspaceID, "rule2"})
516523
re.NoError(err)
517524
sort.Slice(labelRules, func(i, j int) bool {
518525
return labelRules[i].ID < labelRules[j].ID
@@ -965,7 +972,13 @@ func (suite *httpClientTestSuite) TestUpdateKeyspaceGCManagementType() {
965972
ctx, cancel := context.WithCancel(suite.ctx)
966973
defer cancel()
967974

968-
keyspaceName := constant.DefaultKeyspaceName
975+
// Use the correct bootstrap keyspace name based on build type
976+
var keyspaceName string
977+
if kerneltype.IsNextGen() {
978+
keyspaceName = constant.SystemKeyspaceName
979+
} else {
980+
keyspaceName = constant.DefaultKeyspaceName
981+
}
969982
expectGCManagementType := "test-type"
970983

971984
keyspaceSafePointVersionConfig := pd.KeyspaceGCManagementTypeConfig{
@@ -1000,8 +1013,16 @@ func (suite *httpClientTestSuite) TestGetKeyspaceMetaByID() {
10001013
ctx, cancel := context.WithCancel(suite.ctx)
10011014
defer cancel()
10021015

1003-
// Fetch DEFAULT keyspace by name first to get its ID.
1004-
metaByName, err := client.GetKeyspaceMetaByName(ctx, constant.DefaultKeyspaceName)
1016+
// Fetch the bootstrap keyspace by name first to get its ID.
1017+
// In NextGen, it's SYSTEM keyspace; in Classic, it's DEFAULT keyspace.
1018+
var bootstrapKeyspaceName string
1019+
if kerneltype.IsNextGen() {
1020+
bootstrapKeyspaceName = constant.SystemKeyspaceName
1021+
} else {
1022+
bootstrapKeyspaceName = constant.DefaultKeyspaceName
1023+
}
1024+
1025+
metaByName, err := client.GetKeyspaceMetaByName(ctx, bootstrapKeyspaceName)
10051026
re.NoError(err)
10061027
re.NotNil(metaByName)
10071028

tests/integrations/client/keyspace_test.go

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,13 @@ func (suite *clientStatelessTestSuite) TestLoadKeyspace() {
7373
// Loading non-existing keyspace should result in error.
7474
_, err := suite.client.LoadKeyspace(suite.ctx, "non-existing keyspace")
7575
re.Error(err)
76-
// Loading default keyspace should be successful.
77-
keyspaceDefault, err := suite.client.LoadKeyspace(suite.ctx, constant.DefaultKeyspaceName)
76+
// Loading bootstrap keyspace should be successful.
77+
bootstrapKeyspaceName := keyspace.GetBootstrapKeyspaceName()
78+
bootstrapKeyspaceID := keyspace.GetBootstrapKeyspaceID()
79+
keyspaceDefault, err := suite.client.LoadKeyspace(suite.ctx, bootstrapKeyspaceName)
7880
re.NoError(err)
79-
re.Equal(constant.DefaultKeyspaceID, keyspaceDefault.GetId())
80-
re.Equal(constant.DefaultKeyspaceName, keyspaceDefault.GetName())
81+
re.Equal(bootstrapKeyspaceID, keyspaceDefault.GetId())
82+
re.Equal(bootstrapKeyspaceName, keyspaceDefault.GetName())
8183
}
8284

8385
func (suite *clientStatelessTestSuite) TestGetAllKeyspaces() {
@@ -91,7 +93,15 @@ func (suite *clientStatelessTestSuite) TestGetAllKeyspaces() {
9193
// Get all keyspaces.
9294
resKeyspaces, err := suite.client.GetAllKeyspaces(suite.ctx, 1, math.MaxUint32)
9395
re.NoError(err)
94-
re.Len(metas, len(resKeyspaces))
96+
if kerneltype.IsNextGen() {
97+
// In NextGen, the bootstrap keyspace is SYSTEM, not DEFAULT.
98+
// Should have test keyspaces + bootstrap keyspace
99+
re.Len(resKeyspaces, len(metas)+1)
100+
} else {
101+
// In Classic, the bootstrap keyspace is DEFAULT.
102+
// Should have test keyspaces
103+
re.Len(resKeyspaces, len(metas))
104+
}
95105
// Check expected keyspaces all in resKeyspaces.
96106
for _, expected := range metas {
97107
var isExists bool
@@ -219,7 +229,9 @@ func (s *clientStatefulTestSuite) TestIsKeyspaceUsingKeyspaceLevelGC() {
219229
CreateTime: time.Now().Unix(),
220230
})
221231
re.NoError(err)
222-
re.False(pd.IsKeyspaceUsingKeyspaceLevelGC(meta))
232+
// In NextGen build, empty gc_management_type is automatically set to "keyspace_level"
233+
// In Classic build, empty gc_management_type remains empty and returns false
234+
re.Equal(kerneltype.IsNextGen(), pd.IsKeyspaceUsingKeyspaceLevelGC(meta))
223235
}
224236

225237
func TestProtectedKeyspace(t *testing.T) {

0 commit comments

Comments
 (0)