diff --git a/clientv3/cluster.go b/clientv3/cluster.go index b91b8b3ae..dbaebfb22 100644 --- a/clientv3/cluster.go +++ b/clientv3/cluster.go @@ -23,6 +23,7 @@ import ( ) type ( + Member pb.Member MemberListResponse pb.MemberListResponse MemberAddResponse pb.MemberAddResponse MemberRemoveResponse pb.MemberRemoveResponse @@ -33,6 +34,9 @@ type Cluster interface { // List lists the current cluster membership. 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(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 { c.mu.Lock() defer c.mu.Unlock()