@@ -271,10 +271,13 @@ func (manager *Manager) CreateKeyspace(request *CreateKeyspaceRequest) (*keyspac
271271 tracer .SetKeyspace (newID , request .Name )
272272 tracer .OnAllocateIDFinished ()
273273
274+ if request .Config != nil {
275+ delete (request .Config , MetaServiceGroupAddressesKey )
276+ }
274277 // assign meta-service group for the new keyspace if meta-service groups exist.
275278 assignToMetaServiceGroup := manager .mgm != nil && len (manager .mgm .GetGroups ()) > 0
276279 if assignToMetaServiceGroup {
277- metaServiceGroup , err := manager .mgm .AssignToGroup ( 1 )
280+ metaServiceGroup , err := manager .mgm .SelectGroup ( )
278281 if err != nil {
279282 return nil , err
280283 }
@@ -340,7 +343,13 @@ func (manager *Manager) CreateKeyspace(request *CreateKeyspaceRequest) (*keyspac
340343 if e != nil {
341344 return e
342345 }
343- return txn .Remove (metaPath )
346+ if e = txn .Remove (metaPath ); e != nil {
347+ return e
348+ }
349+ if assignToMetaServiceGroup {
350+ return manager .mgm .updateAssignmentTxn (txn , request .Config [MetaServiceGroupIDKey ], "" )
351+ }
352+ return nil
344353 })
345354 if err2 != nil {
346355 log .Warn ("[create-keyspace] failed to remove pre-created keyspace after split failed" ,
@@ -419,6 +428,9 @@ func (manager *Manager) CreateKeyspaceByID(request *CreateKeyspaceByIDRequest) (
419428 if err != nil {
420429 return nil , err
421430 }
431+ if request .Config != nil {
432+ delete (request .Config , MetaServiceGroupAddressesKey )
433+ }
422434 userKind := endpoint .StringUserKind (request .Config [UserKindKey ])
423435 config , err := manager .kgm .GetKeyspaceConfigByKind (userKind )
424436 if err != nil {
@@ -443,7 +455,7 @@ func (manager *Manager) CreateKeyspaceByID(request *CreateKeyspaceByIDRequest) (
443455 }
444456 assignToMetaServiceGroup := manager .mgm != nil && len (manager .mgm .GetGroups ()) > 0
445457 if assignToMetaServiceGroup {
446- metaServiceGroup , err := manager .mgm .AssignToGroup ( 1 )
458+ metaServiceGroup , err := manager .mgm .SelectGroup ( )
447459 if err != nil {
448460 return nil , err
449461 }
@@ -474,8 +486,18 @@ func (manager *Manager) CreateKeyspaceByID(request *CreateKeyspaceByIDRequest) (
474486 err = manager .splitKeyspaceRegion (id , manager .config .ToWaitRegionSplit ())
475487 if err != nil {
476488 err2 := manager .store .RunInTxn (manager .ctx , func (txn kv.Txn ) error {
489+ idPath := keypath .KeyspaceIDPath (name )
477490 metaPath := keypath .KeyspaceMetaPath (id )
478- return txn .Remove (metaPath )
491+ if err := txn .Remove (idPath ); err != nil {
492+ return err
493+ }
494+ if err := txn .Remove (metaPath ); err != nil {
495+ return err
496+ }
497+ if assignToMetaServiceGroup {
498+ return manager .mgm .updateAssignmentTxn (txn , request .Config [MetaServiceGroupIDKey ], "" )
499+ }
500+ return nil
479501 })
480502 if err2 != nil {
481503 log .Warn ("[keyspace] failed to remove pre-created keyspace after split failed" ,
@@ -540,6 +562,13 @@ func (manager *Manager) saveNewKeyspace(keyspace *keyspacepb.KeyspaceMeta) error
540562 if loadedMeta != nil {
541563 return errs .ErrKeyspaceExists
542564 }
565+ if manager .mgm != nil {
566+ if groupID := keyspace .GetConfig ()[MetaServiceGroupIDKey ]; groupID != "" {
567+ if err := manager .mgm .updateAssignmentTxn (txn , "" , groupID ); err != nil {
568+ return err
569+ }
570+ }
571+ }
543572 return manager .store .SaveKeyspaceMeta (txn , keyspace )
544573 })
545574}
@@ -807,6 +836,7 @@ func (manager *Manager) updateKeyspaceConfigTxn(name string, update func(meta *k
807836 if err := update (meta ); err != nil {
808837 return err
809838 }
839+ delete (meta .Config , MetaServiceGroupAddressesKey )
810840 newConfig := meta .GetConfig ()
811841 oldUserKind := endpoint .StringUserKind (oldConfig [UserKindKey ])
812842 newUserKind := endpoint .StringUserKind (newConfig [UserKindKey ])
@@ -821,7 +851,10 @@ func (manager *Manager) updateKeyspaceConfigTxn(name string, update func(meta *k
821851 oldMetaServiceGroup := oldConfig [MetaServiceGroupIDKey ]
822852 newMetaServiceGroup := newConfig [MetaServiceGroupIDKey ]
823853 if manager .mgm != nil && oldMetaServiceGroup != newMetaServiceGroup {
824- if err := manager .mgm .UpdateAssignment (oldMetaServiceGroup , newMetaServiceGroup ); err != nil {
854+ if newMetaServiceGroup != "" && manager .mgm .GetGroups ()[newMetaServiceGroup ] == "" {
855+ return errUnknownMetaServiceGroup
856+ }
857+ if err := manager .mgm .updateAssignmentTxn (txn , oldMetaServiceGroup , newMetaServiceGroup ); err != nil {
825858 return err
826859 }
827860 }
0 commit comments