|
|
@@ -107,7 +107,8 @@ func memberAddCommandFunc(cmd *cobra.Command, args []string) {
|
|
|
|
|
|
urls := strings.Split(memberPeerURLs, ",")
|
|
|
ctx, cancel := commandCtx(cmd)
|
|
|
- resp, err := mustClientFromCmd(cmd).MemberAdd(ctx, urls)
|
|
|
+ cli := mustClientFromCmd(cmd)
|
|
|
+ resp, err := cli.MemberAdd(ctx, urls)
|
|
|
cancel()
|
|
|
if err != nil {
|
|
|
ExitWithError(ExitError, err)
|
|
|
@@ -118,12 +119,24 @@ func memberAddCommandFunc(cmd *cobra.Command, args []string) {
|
|
|
|
|
|
if _, ok := (display).(*simplePrinter); ok {
|
|
|
ctx, cancel = commandCtx(cmd)
|
|
|
- listResp, err := mustClientFromCmd(cmd).MemberList(ctx)
|
|
|
- cancel()
|
|
|
-
|
|
|
- if err != nil {
|
|
|
- ExitWithError(ExitError, err)
|
|
|
+ listResp, err := cli.MemberList(ctx)
|
|
|
+ // get latest member list; if there's failover new member might have outdated list
|
|
|
+ for {
|
|
|
+ if err != nil {
|
|
|
+ ExitWithError(ExitError, err)
|
|
|
+ }
|
|
|
+ if listResp.Header.MemberId == resp.Header.MemberId {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ // quorum get to sync cluster list
|
|
|
+ gresp, gerr := cli.Get(ctx, "_")
|
|
|
+ if gerr != nil {
|
|
|
+ ExitWithError(ExitError, err)
|
|
|
+ }
|
|
|
+ resp.Header.MemberId = gresp.Header.MemberId
|
|
|
+ listResp, err = cli.MemberList(ctx)
|
|
|
}
|
|
|
+ cancel()
|
|
|
|
|
|
conf := []string{}
|
|
|
for _, memb := range listResp.Members {
|