Skip to content

Commit

Permalink
Merge pull request #857 from oliveagle/more_informative_api_get_servers
Browse files Browse the repository at this point in the history
GetLeaderRaftConnectString returns consistent result
  • Loading branch information
jvshahid committed Aug 29, 2014
2 parents 69df51a + 9117ae7 commit 1df438a
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 13 deletions.
21 changes: 10 additions & 11 deletions api/http/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -986,21 +986,20 @@ func (self *HttpServer) listServers(w libhttp.ResponseWriter, r *libhttp.Request
servers := self.clusterConfig.Servers()
serverMaps := make([]map[string]interface{}, len(servers), len(servers))

//FIXME: GetLeaderConnectString is not consistent yet when called on different server.
leaderConnectString, _ := self.raftServer.GetLeaderConnectString()
leaderRaftConnectString, _ := self.raftServer.GetLeaderRaftConnectString()
leaderRaftName := self.raftServer.GetLeaderRaftName()
for i, s := range servers {
serverMaps[i] = map[string]interface{}{
"id": s.Id,
"protobufConnectString": s.ProtobufConnectionString,
"isUp": s.IsUp(), //FIXME: IsUp is not consistent
"raftName": s.RaftName,
"state": s.State,
"stateName": s.GetStateName(),
"raftConnectionString": s.RaftConnectionString,
"leaderRaftName": leaderRaftName,
"leaderConnectString": leaderConnectString,
"isLeader": self.raftServer.IsLeaderByRaftName(s.RaftName)}
"protobufConnectString": s.ProtobufConnectionString,
"isUp": s.IsUp(), //FIXME: IsUp is not consistent
"raftName": s.RaftName,
"state": s.State,
"stateName": s.GetStateName(),
"raftConnectionString": s.RaftConnectionString,
"leaderRaftName": leaderRaftName,
"leaderRaftConnectString": leaderRaftConnectString,
"isLeader": self.raftServer.IsLeaderByRaftName(s.RaftName)}
}
return libhttp.StatusOK, serverMaps
})
Expand Down
11 changes: 9 additions & 2 deletions coordinator/raft_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,15 @@ func (s *RaftServer) IsLeaderByRaftName(name string) bool {
return s.raftServer.Leader() == name
}

func (s *RaftServer) GetLeaderConnectString() (string, bool) {
return s.leaderConnectString()
/**
* return a consistant leader raft connection string when called on all living nodes include leader.
*/
func (s *RaftServer) GetLeaderRaftConnectString() (string, bool) {
if s.IsLeaderByRaftName(s.name) {
return s.config.RaftConnectionString(), true
} else {
return s.leaderConnectString()
}
}

func (s *RaftServer) leaderConnectString() (string, bool) {
Expand Down

0 comments on commit 1df438a

Please sign in to comment.