@@ -14,22 +14,47 @@ func (ms *MasterServer) RaftListClusterServers(ctx context.Context, req *master_
|
|||||||
resp := &master_pb.RaftListClusterServersResponse{}
|
resp := &master_pb.RaftListClusterServersResponse{}
|
||||||
|
|
||||||
ms.Topo.RaftServerAccessLock.RLock()
|
ms.Topo.RaftServerAccessLock.RLock()
|
||||||
if ms.Topo.HashicorpRaft == nil {
|
if ms.Topo.HashicorpRaft == nil && ms.Topo.RaftServer == nil {
|
||||||
ms.Topo.RaftServerAccessLock.RUnlock()
|
ms.Topo.RaftServerAccessLock.RUnlock()
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
servers := ms.Topo.HashicorpRaft.GetConfiguration().Configuration().Servers
|
if ms.Topo.HashicorpRaft != nil {
|
||||||
_, leaderId := ms.Topo.HashicorpRaft.LeaderWithID()
|
servers := ms.Topo.HashicorpRaft.GetConfiguration().Configuration().Servers
|
||||||
ms.Topo.RaftServerAccessLock.RUnlock()
|
_, 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{
|
resp.ClusterServers = append(resp.ClusterServers, &master_pb.RaftListClusterServersResponse_ClusterServers{
|
||||||
Id: string(server.ID),
|
Id: currentServerName,
|
||||||
Address: string(server.Address),
|
Address: string(ms.option.Master),
|
||||||
Suffrage: server.Suffrage.String(),
|
Suffrage: "Voter",
|
||||||
IsLeader: server.ID == leaderId,
|
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
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user