etcdctl: fix member add command

This commit is contained in:
Jingyi Hu 2019-10-02 17:43:32 -07:00
parent 943832af44
commit 02a27c0851

View File

@ -120,12 +120,14 @@ func memberAddCommandFunc(cmd *cobra.Command, args []string) {
if _, ok := (display).(*simplePrinter); ok { if _, ok := (display).(*simplePrinter); ok {
ctx, cancel = commandCtx(cmd) ctx, cancel = commandCtx(cmd)
listResp, err := cli.MemberList(ctx) listResp, err := cli.MemberList(ctx)
// get latest member list; if there's failover new member might have outdated list // make sure the member who served member list request has the latest member list.
syncedMemberSet := make(map[uint64]struct{})
syncedMemberSet[resp.Header.MemberId] = struct{}{} // the member who served member add is guaranteed to have the latest member list.
for { for {
if err != nil { if err != nil {
ExitWithError(ExitError, err) ExitWithError(ExitError, err)
} }
if listResp.Header.MemberId == resp.Header.MemberId { if _, ok := syncedMemberSet[listResp.Header.MemberId]; ok {
break break
} }
// quorum get to sync cluster list // quorum get to sync cluster list
@ -133,7 +135,7 @@ func memberAddCommandFunc(cmd *cobra.Command, args []string) {
if gerr != nil { if gerr != nil {
ExitWithError(ExitError, err) ExitWithError(ExitError, err)
} }
resp.Header.MemberId = gresp.Header.MemberId syncedMemberSet[gresp.Header.MemberId] = struct{}{}
listResp, err = cli.MemberList(ctx) listResp, err = cli.MemberList(ctx)
} }
cancel() cancel()