|
|
@@ -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()
|