From 0372cfc7ab1052ac616ca34551f83657a8fd2e3e Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Thu, 16 Jul 2020 16:20:50 -0700 Subject: [PATCH] etcdserver/api/v3rpc: "MemberList" never return non-empty ClientURLs Signed-off-by: Gyuho Lee cr https://code.amazon.com/reviews/CR-29712724 --- etcdserver/api/v3rpc/member.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/etcdserver/api/v3rpc/member.go b/etcdserver/api/v3rpc/member.go index b2ebc9898..a874c9d37 100644 --- a/etcdserver/api/v3rpc/member.go +++ b/etcdserver/api/v3rpc/member.go @@ -16,6 +16,8 @@ package v3rpc import ( "context" + "fmt" + "os" "time" "go.etcd.io/etcd/etcdserver" @@ -89,6 +91,19 @@ func (cs *ClusterServer) MemberUpdate(ctx context.Context, r *pb.MemberUpdateReq func (cs *ClusterServer) MemberList(ctx context.Context, r *pb.MemberListRequest) (*pb.MemberListResponse, error) { membs := membersToProtoMembers(cs.cluster.Members()) + for idx := range membs { + mv := membs[idx] + if len(mv.ClientURLs) == 0 { + mv.ClientURLs = []string{"invalid"} + fmt.Fprintf(os.Stderr, "[EKS-DEBUG] member %x (name %q) has empty ClientURLs, adding placeholder value to prevent ClientURLs[0] panic [ClientURLs %q, PeerURLs %q]", + mv.ID, + mv.Name, + mv.ClientURLs, + mv.PeerURLs, + ) + } + membs[idx] = mv + } return &pb.MemberListResponse{Header: cs.header(), Members: membs}, nil }