mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #13837 from chrisayoub/main
clientv3: filter learner members during autosync
This commit is contained in:
commit
0c9a4e0f93
@ -187,7 +187,9 @@ func (c *Client) Sync(ctx context.Context) error {
|
|||||||
}
|
}
|
||||||
var eps []string
|
var eps []string
|
||||||
for _, m := range mresp.Members {
|
for _, m := range mresp.Members {
|
||||||
eps = append(eps, m.ClientURLs...)
|
if len(m.Name) != 0 && !m.IsLearner {
|
||||||
|
eps = append(eps, m.ClientURLs...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
c.SetEndpoints(eps...)
|
c.SetEndpoints(eps...)
|
||||||
return nil
|
return nil
|
||||||
|
@ -248,6 +248,24 @@ func TestAuthTokenBundleNoOverwrite(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSyncFiltersMembers(t *testing.T) {
|
||||||
|
c, _ := NewClient(t, Config{Endpoints: []string{"http://254.0.0.1:12345"}})
|
||||||
|
defer c.Close()
|
||||||
|
c.Cluster = &mockCluster{
|
||||||
|
[]*etcdserverpb.Member{
|
||||||
|
{ID: 0, Name: "", ClientURLs: []string{"http://254.0.0.1:12345"}, IsLearner: false},
|
||||||
|
{ID: 1, Name: "isStarted", ClientURLs: []string{"http://254.0.0.2:12345"}, IsLearner: true},
|
||||||
|
{ID: 2, Name: "isStartedAndNotLearner", ClientURLs: []string{"http://254.0.0.3:12345"}, IsLearner: false},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
c.Sync(context.Background())
|
||||||
|
|
||||||
|
endpoints := c.Endpoints()
|
||||||
|
if len(endpoints) != 1 || endpoints[0] != "http://254.0.0.3:12345" {
|
||||||
|
t.Error("Client.Sync uses learner and/or non-started member client URLs")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type mockAuthServer struct {
|
type mockAuthServer struct {
|
||||||
*etcdserverpb.UnimplementedAuthServer
|
*etcdserverpb.UnimplementedAuthServer
|
||||||
}
|
}
|
||||||
@ -255,3 +273,31 @@ type mockAuthServer struct {
|
|||||||
func (mockAuthServer) Authenticate(context.Context, *etcdserverpb.AuthenticateRequest) (*etcdserverpb.AuthenticateResponse, error) {
|
func (mockAuthServer) Authenticate(context.Context, *etcdserverpb.AuthenticateRequest) (*etcdserverpb.AuthenticateResponse, error) {
|
||||||
return &etcdserverpb.AuthenticateResponse{Token: "mock-token"}, nil
|
return &etcdserverpb.AuthenticateResponse{Token: "mock-token"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type mockCluster struct {
|
||||||
|
members []*etcdserverpb.Member
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *mockCluster) MemberList(ctx context.Context) (*MemberListResponse, error) {
|
||||||
|
return &MemberListResponse{Members: mc.members}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *mockCluster) MemberAdd(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *mockCluster) MemberAddAsLearner(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *mockCluster) MemberRemove(ctx context.Context, id uint64) (*MemberRemoveResponse, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *mockCluster) MemberUpdate(ctx context.Context, id uint64, peerAddrs []string) (*MemberUpdateResponse, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *mockCluster) MemberPromote(ctx context.Context, id uint64) (*MemberPromoteResponse, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user