Browse Source

clienv3: add MemberAdd method based on v3 change

Gyu-Ho Lee 10 years ago
parent
commit
5fbf64c144
1 changed files with 17 additions and 0 deletions
  1. 17 0
      clientv3/cluster.go

+ 17 - 0
clientv3/cluster.go

@@ -23,6 +23,7 @@ import (
 )
 )
 
 
 type (
 type (
+	Member               pb.Member
 	MemberListResponse   pb.MemberListResponse
 	MemberListResponse   pb.MemberListResponse
 	MemberAddResponse    pb.MemberAddResponse
 	MemberAddResponse    pb.MemberAddResponse
 	MemberRemoveResponse pb.MemberRemoveResponse
 	MemberRemoveResponse pb.MemberRemoveResponse
@@ -33,6 +34,9 @@ type Cluster interface {
 	// List lists the current cluster membership.
 	// List lists the current cluster membership.
 	MemberList(ctx context.Context) (*MemberListResponse, error)
 	MemberList(ctx context.Context) (*MemberListResponse, error)
 
 
+	// Leader returns the current leader member.
+	MemberLeader(ctx context.Context) (*Member, error)
+
 	// MemberAdd adds a new member into the cluster.
 	// MemberAdd adds a new member into the cluster.
 	MemberAdd(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error)
 	MemberAdd(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error)
 
 
@@ -131,6 +135,19 @@ func (c *cluster) MemberList(ctx context.Context) (*MemberListResponse, error) {
 	}
 	}
 }
 }
 
 
+func (c *cluster) MemberLeader(ctx context.Context) (*Member, error) {
+	resp, err := c.MemberList(ctx)
+	if err != nil {
+		return nil, err
+	}
+	for _, m := range resp.Members {
+		if m.IsLeader {
+			return (*Member)(m), nil
+		}
+	}
+	return nil, nil
+}
+
 func (c *cluster) getRemote() pb.ClusterClient {
 func (c *cluster) getRemote() pb.ClusterClient {
 	c.mu.Lock()
 	c.mu.Lock()
 	defer c.mu.Unlock()
 	defer c.mu.Unlock()