diff --git a/weed/server/master_grpc_server_raft.go b/weed/server/master_grpc_server_raft.go index 4aab7fe6e..aa7c6ff28 100644 --- a/weed/server/master_grpc_server_raft.go +++ b/weed/server/master_grpc_server_raft.go @@ -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 }