From d8c315ab55b7f5821a9c8d8254d404938b09253e Mon Sep 17 00:00:00 2001 From: mqliang Date: Wed, 16 Mar 2016 11:07:07 +0800 Subject: [PATCH] etcdctl: show leader/member information when run 'etcdctl member list' command leader/follower information is very helpful for debugging. User must get this information through http endpoint before this patch, which is inconvenient. --- etcdctl/command/member_commands.go | 12 +++++++++++- etcdctlv3/command/member_command.go | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/etcdctl/command/member_commands.go b/etcdctl/command/member_commands.go index f20ff7c2f..1993a7c87 100644 --- a/etcdctl/command/member_commands.go +++ b/etcdctl/command/member_commands.go @@ -63,17 +63,27 @@ func actionMemberList(c *cli.Context) { mAPI := mustNewMembersAPI(c) ctx, cancel := contextWithTotalTimeout(c) defer cancel() + members, err := mAPI.List(ctx) if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) } + leader, err := mAPI.Leader(ctx) + if err != nil { + fmt.Fprintln(os.Stderr, "Failed to get leader: ", err) + os.Exit(1) + } for _, m := range members { + isLeader := false + if m.ID == leader.ID { + isLeader = true + } if len(m.Name) == 0 { fmt.Printf("%s[unstarted]: peerURLs=%s\n", m.ID, strings.Join(m.PeerURLs, ",")) } else { - fmt.Printf("%s: name=%s peerURLs=%s clientURLs=%s\n", m.ID, m.Name, strings.Join(m.PeerURLs, ","), strings.Join(m.ClientURLs, ",")) + fmt.Printf("%s: name=%s peerURLs=%s clientURLs=%s isLeader=%v\n", m.ID, m.Name, strings.Join(m.PeerURLs, ","), strings.Join(m.ClientURLs, ","), isLeader) } } } diff --git a/etcdctlv3/command/member_command.go b/etcdctlv3/command/member_command.go index 2148b4aba..bf61a8a59 100644 --- a/etcdctlv3/command/member_command.go +++ b/etcdctlv3/command/member_command.go @@ -171,7 +171,7 @@ func memberListCommandFunc(cmd *cobra.Command, args []string) { if len(m.Name) == 0 { fmt.Printf("%16x[unstarted]: peerURLs=%s\n", m.ID, strings.Join(m.PeerURLs, ",")) } else { - fmt.Printf("%16x: name=%s peerURLs=%s clientURLs=%s\n", m.ID, m.Name, strings.Join(m.PeerURLs, ","), strings.Join(m.ClientURLs, ",")) + fmt.Printf("%16x: name=%s peerURLs=%s clientURLs=%s isLeader=%v\n", m.ID, m.Name, strings.Join(m.PeerURLs, ","), strings.Join(m.ClientURLs, ","), m.IsLeader) } } }