From 281f1773456a61b4d643c34087732efa8375f013 Mon Sep 17 00:00:00 2001 From: Benjamin Wang Date: Mon, 24 Jun 2024 10:05:48 +0100 Subject: [PATCH] add verification on client.Sync to ensure the returned endpoints never empty Signed-off-by: Benjamin Wang --- client/v3/client.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/client/v3/client.go b/client/v3/client.go index e6d2ae38675..79654db9bb9 100644 --- a/client/v3/client.go +++ b/client/v3/client.go @@ -34,6 +34,7 @@ import ( "go.etcd.io/etcd/api/v3/v3rpc/rpctypes" "go.etcd.io/etcd/api/v3/version" "go.etcd.io/etcd/client/pkg/v3/logutil" + "go.etcd.io/etcd/client/pkg/v3/verify" "go.etcd.io/etcd/client/v3/credentials" "go.etcd.io/etcd/client/v3/internal/endpoint" "go.etcd.io/etcd/client/v3/internal/resolver" @@ -194,6 +195,13 @@ func (c *Client) Sync(ctx context.Context) error { eps = append(eps, m.ClientURLs...) } } + // The linearizable `MemberList` returned successfully, so the + // endpoints shouldn't be empty. + verify.Verify(func() { + if len(eps) == 0 { + panic("empty endpoints returned from etcd cluster") + } + }) c.SetEndpoints(eps...) c.lg.Debug("set etcd endpoints by autoSync", zap.Strings("endpoints", eps)) return nil