1
0
Fork 0

Tweak Store API

master
Philip O'Toole 3 years ago
parent 6a48068d78
commit b2bcdb584d

@ -358,14 +358,17 @@ func (s *Store) ID() string {
// LeaderAddr returns the address of the current leader. Returns a
// blank string if there is no leader.
func (s *Store) LeaderAddr() string {
return string(s.raft.Leader())
func (s *Store) LeaderAddr() (string, error) {
return string(s.raft.Leader()), nil
}
// LeaderID returns the node ID of the Raft leader. Returns a
// blank string if there is no leader, or an error.
func (s *Store) LeaderID() (string, error) {
addr := s.LeaderAddr()
addr, err := s.LeaderAddr()
if err != nil {
return "", nil
}
configFuture := s.raft.GetConfiguration()
if err := configFuture.Error(); err != nil {
s.logger.Printf("failed to get raft configuration: %v", err)
@ -410,7 +413,10 @@ func (s *Store) WaitForLeader(timeout time.Duration) (string, error) {
for {
select {
case <-tck.C:
l := s.LeaderAddr()
l, err := s.LeaderAddr()
if err != nil {
return "", nil
}
if l != "" {
return l, nil
}
@ -503,13 +509,17 @@ func (s *Store) Stats() (map[string]interface{}, error) {
return nil, err
}
leaderAddr, err := s.LeaderAddr()
if err != nil {
return nil, err
}
status := map[string]interface{}{
"node_id": s.raftID,
"raft": raftStats,
"addr": s.Addr(),
"leader": map[string]string{
"node_id": leaderID,
"addr": s.LeaderAddr(),
"addr": leaderAddr,
},
"apply_timeout": s.ApplyTimeout.String(),
"heartbeat_timeout": s.HeartbeatTimeout.String(),

@ -25,7 +25,11 @@ func Test_OpenStoreSingleNode(t *testing.T) {
}
s.WaitForLeader(10 * time.Second)
if got, exp := s.LeaderAddr(), s.Addr(); got != exp {
got, err := s.LeaderAddr()
if err != nil {
t.Fatalf("failed to get leader address: %s", err.Error())
}
if exp := got; got != exp {
t.Fatalf("wrong leader address returned, got: %s, exp %s", got, exp)
}
id, err := s.LeaderID()
@ -570,8 +574,12 @@ func Test_MultiNodeJoinRemove(t *testing.T) {
s1.WaitForLeader(10 * time.Second)
got, err := s1.LeaderAddr()
if err != nil {
t.Fatalf("failed to get leader address: %s", err.Error())
}
// Check leader state on follower.
if got, exp := s1.LeaderAddr(), s0.Addr(); got != exp {
if exp := s0.Addr(); got != exp {
t.Fatalf("wrong leader address returned, got: %s, exp %s", got, exp)
}
id, err := s1.LeaderID()
@ -639,7 +647,11 @@ func Test_MultiNodeJoinNonVoterRemove(t *testing.T) {
s1.WaitForLeader(10 * time.Second)
// Check leader state on follower.
if got, exp := s1.LeaderAddr(), s0.Addr(); got != exp {
got, err := s1.LeaderAddr()
if err != nil {
t.Fatalf("failed to get leader address: %s", err.Error())
}
if exp := s0.Addr(); got != exp {
t.Fatalf("wrong leader address returned, got: %s, exp %s", got, exp)
}
id, err := s1.LeaderID()

Loading…
Cancel
Save