@@ -14,22 +14,47 @@ func (ms *MasterServer) RaftListClusterServers(ctx context.Context, req *master_
|
||||
resp := &master_pb.RaftListClusterServersResponse{}
|
||||
|
||||
ms.Topo.RaftServerAccessLock.RLock()
|
||||
if ms.Topo.HashicorpRaft == nil {
|
||||
if ms.Topo.HashicorpRaft == nil && ms.Topo.RaftServer == nil {
|
||||
ms.Topo.RaftServerAccessLock.RUnlock()
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
servers := ms.Topo.HashicorpRaft.GetConfiguration().Configuration().Servers
|
||||
_, leaderId := ms.Topo.HashicorpRaft.LeaderWithID()
|
||||
ms.Topo.RaftServerAccessLock.RUnlock()
|
||||
if ms.Topo.HashicorpRaft != nil {
|
||||
servers := ms.Topo.HashicorpRaft.GetConfiguration().Configuration().Servers
|
||||
_, leaderId := ms.Topo.HashicorpRaft.LeaderWithID()
|
||||
ms.Topo.RaftServerAccessLock.RUnlock()
|
||||
|
||||
for _, server := range servers {
|
||||
for _, server := range servers {
|
||||
resp.ClusterServers = append(resp.ClusterServers, &master_pb.RaftListClusterServersResponse_ClusterServers{
|
||||
Id: string(server.ID),
|
||||
Address: string(server.Address),
|
||||
Suffrage: server.Suffrage.String(),
|
||||
IsLeader: server.ID == leaderId,
|
||||
})
|
||||
}
|
||||
} else if ms.Topo.RaftServer != nil {
|
||||
peers := ms.Topo.RaftServer.Peers()
|
||||
leader := ms.Topo.RaftServer.Leader()
|
||||
currentServerName := ms.Topo.RaftServer.Name()
|
||||
ms.Topo.RaftServerAccessLock.RUnlock()
|
||||
|
||||
// Add the current server itself (Peers() only returns other peers)
|
||||
resp.ClusterServers = append(resp.ClusterServers, &master_pb.RaftListClusterServersResponse_ClusterServers{
|
||||
Id: string(server.ID),
|
||||
Address: string(server.Address),
|
||||
Suffrage: server.Suffrage.String(),
|
||||
IsLeader: server.ID == leaderId,
|
||||
Id: currentServerName,
|
||||
Address: string(ms.option.Master),
|
||||
Suffrage: "Voter",
|
||||
IsLeader: currentServerName == leader,
|
||||
})
|
||||
|
||||
// Add all other peers
|
||||
for _, peer := range peers {
|
||||
resp.ClusterServers = append(resp.ClusterServers, &master_pb.RaftListClusterServersResponse_ClusterServers{
|
||||
Id: peer.Name,
|
||||
Address: peer.ConnectionString,
|
||||
Suffrage: "Voter",
|
||||
IsLeader: peer.Name == leader,
|
||||
})
|
||||
}
|
||||
}
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user