Browse Source

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.
mqliang 10 năm trước cách đây
mục cha
commit
d8c315ab55
2 tập tin đã thay đổi với 12 bổ sung2 xóa
  1. 11 1
      etcdctl/command/member_commands.go
  2. 1 1
      etcdctlv3/command/member_command.go

+ 11 - 1
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)
 		}
 	}
 }

+ 1 - 1
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)
 		}
 	}
 }