diff --git a/pkg/keyspace/tso_keyspace_group.go b/pkg/keyspace/tso_keyspace_group.go index 81804e38c2a..0bd0899e8a2 100644 --- a/pkg/keyspace/tso_keyspace_group.go +++ b/pkg/keyspace/tso_keyspace_group.go @@ -1162,6 +1162,13 @@ func (m *GroupManager) GetKeyspaceGroupPrimaryByID(id uint32) (string, error) { return "", ErrKeyspaceGroupPrimaryNotFound } // The format of leader name is address-groupID. - contents := strings.Split(leader.GetName(), "-") - return contents[0], err + return parsePrimaryName(leader.Name), err +} + +func parsePrimaryName(name string) string { + idx := strings.LastIndex(name, "-") + if idx != -1 { + return name[:idx] + } + return name } diff --git a/pkg/keyspace/tso_keyspace_group_test.go b/pkg/keyspace/tso_keyspace_group_test.go index 5878d7d907f..612f027bdc2 100644 --- a/pkg/keyspace/tso_keyspace_group_test.go +++ b/pkg/keyspace/tso_keyspace_group_test.go @@ -562,3 +562,24 @@ func TestBuildSplitKeyspaces(t *testing.T) { } } } + +func TestParsePrimaryName(t *testing.T) { + re := require.New(t) + testCases := []struct { + name string + expected string + }{ + {"127.0.0.1:2379-00000", "127.0.0.1:2379"}, + {"http://127.0.0.1:2379-10000", "http://127.0.0.1:2379"}, + {"https://127.0.0.1:2379-00001", "https://127.0.0.1:2379"}, + {"http://[::1]:2379-00002", "http://[::1]:2379"}, + {"https://[::1]:2379-00003", "https://[::1]:2379"}, + {"https://a-b-c-d-e-f-g:2379-00004", "https://a-b-c-d-e-f-g:2379"}, + {"https://pd-tso-server-0.tso-service.tidb-serverless.svc:2379-00002", "https://pd-tso-server-0.tso-service.tidb-serverless.svc:2379"}, + {"http://pd-tso-server-0.tso-service.tidb-serverless.svc:2379-00002", "http://pd-tso-server-0.tso-service.tidb-serverless.svc:2379"}, + {"pd-tso-server-0.tso-service.tidb-serverless.svc:2379-00000", "pd-tso-server-0.tso-service.tidb-serverless.svc:2379"}, + } + for _, tc := range testCases { + re.Equal(tc.expected, parsePrimaryName(tc.name)) + } +}