diff --git a/pkg/pb/logservice/logservice.go b/pkg/pb/logservice/logservice.go index 8ba1a8abfe54d27f87a3d03d2734d33d50b97182..adec911487d476956651ccbb6c4a7a804fda8e92 100644 --- a/pkg/pb/logservice/logservice.go +++ b/pkg/pb/logservice/logservice.go @@ -17,6 +17,7 @@ package logservice import ( "fmt" "reflect" + "sort" "github.com/matrixorigin/matrixone/pkg/pb/metadata" ) @@ -155,52 +156,44 @@ func (s *LogState) updateShards(hb LogStoreHeartbeat) { // LogString returns "ServiceType/ConfigChangeType UUID RepUuid:RepShardID:RepID InitialMembers" func (m *ScheduleCommand) LogString() string { - var serviceType = map[ServiceType]string{ + c := func(s string) string { + if len(s) > 6 { + return s[:6] + } + return s + } + + serviceType := map[ServiceType]string{ LogService: "L", DnService: "D", + }[m.ServiceType] + + target := c(m.UUID) + if m.ConfigChange == nil { + return fmt.Sprintf("%s/shutdown %s", serviceType, target) } - var configChangeType = map[ConfigChangeType]string{ + configChangeType := map[ConfigChangeType]string{ AddReplica: "Add", RemoveReplica: "Remove", StartReplica: "Start", StopReplica: "Stop", KillZombie: "Kill", - } - scheUuid := m.UUID - if len(m.UUID) > 6 { - scheUuid = scheUuid[:6] - } + }[m.ConfigChange.ChangeType] - if m.ConfigChange == nil { - return fmt.Sprintf("%s/shutdown %s", serviceType[m.ServiceType], scheUuid) - } - - repUuid := m.ConfigChange.Replica.UUID - if len(repUuid) > 6 { - repUuid = repUuid[:6] - } + replica := c(m.ConfigChange.Replica.UUID) + s := fmt.Sprintf("%s/%s %s %s:%d:%d:%d", + serviceType, configChangeType, target, replica, + m.ConfigChange.Replica.ShardID, + m.ConfigChange.Replica.ReplicaID, + m.ConfigChange.Replica.Epoch) - var initMembers map[uint64]string - if len(m.ConfigChange.InitialMembers) == 0 { - initMembers = nil - } else { - initMembers = make(map[uint64]string) + if len(m.ConfigChange.InitialMembers) != 0 { + initMembers := make([]string, 0, len(m.ConfigChange.InitialMembers)) for repId, uuid := range m.ConfigChange.InitialMembers { - if len(uuid) > 6 { - initMembers[repId] = uuid[:6] - } else { - initMembers[repId] = uuid - } + initMembers = append(initMembers, fmt.Sprintf("%d:%s", repId, c(uuid))) } - } - - s := fmt.Sprintf("%s/%s %s %s:%d:%d:%d", serviceType[m.ServiceType], - configChangeType[m.ConfigChange.ChangeType], scheUuid, - repUuid, m.ConfigChange.Replica.ShardID, - m.ConfigChange.Replica.ReplicaID, m.ConfigChange.Replica.Epoch) - - if initMembers != nil { + sort.Strings(initMembers) s += fmt.Sprintf(" %v", initMembers) } diff --git a/pkg/pb/logservice/logservice_test.go b/pkg/pb/logservice/logservice_test.go index eea29c5a10c7b7750fd9b246bb1d13851974cd3b..bdadfb33f19a43e1a5ae745847b934442c93d071 100644 --- a/pkg/pb/logservice/logservice_test.go +++ b/pkg/pb/logservice/logservice_test.go @@ -303,6 +303,24 @@ func TestLogString(t *testing.T) { }, expected: "L/Kill storeA storeA:1:0:0", }, + { + desc: "bootstrapping", + command: ScheduleCommand{ + UUID: "storeA", + Bootstrapping: true, + ConfigChange: &ConfigChange{ + Replica: Replica{ + UUID: "storeA", + ShardID: 1, + ReplicaID: 1, + }, + ChangeType: StartReplica, + InitialMembers: map[uint64]string{1: "storeA123", 2: "storeB", 3: "storeC"}, + }, + ServiceType: LogService, + }, + expected: "L/Start storeA storeA:1:1:0 [1:storeA 2:storeB 3:storeC]", + }, } for _, c := range cases {