mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
*: add MemberAddAsLearner to clientv3 Cluster API
Made changes to Clientv3 Cluster API: - Added MemberAddAsLearner. - Reverted changes to MemberAdd - removed input parameter isLearner.
This commit is contained in:
@@ -16,11 +16,11 @@ package clientv3
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
pb "go.etcd.io/etcd/v3/etcdserver/etcdserverpb"
|
||||
"go.etcd.io/etcd/v3/pkg/types"
|
||||
|
||||
"errors"
|
||||
"google.golang.org/grpc"
|
||||
)
|
||||
|
||||
@@ -38,7 +38,10 @@ type Cluster interface {
|
||||
MemberList(ctx context.Context) (*MemberListResponse, error)
|
||||
|
||||
// MemberAdd adds a new member into the cluster.
|
||||
MemberAdd(ctx context.Context, peerAddrs []string, isLearner bool) (*MemberAddResponse, error)
|
||||
MemberAdd(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error)
|
||||
|
||||
// MemberAddAsLearner adds a new learner member into the cluster.
|
||||
MemberAddAsLearner(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error)
|
||||
|
||||
// MemberRemove removes an existing member from the cluster.
|
||||
MemberRemove(ctx context.Context, id uint64) (*MemberRemoveResponse, error)
|
||||
@@ -71,7 +74,15 @@ func NewClusterFromClusterClient(remote pb.ClusterClient, c *Client) Cluster {
|
||||
return api
|
||||
}
|
||||
|
||||
func (c *cluster) MemberAdd(ctx context.Context, peerAddrs []string, isLearner bool) (*MemberAddResponse, error) {
|
||||
func (c *cluster) MemberAdd(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error) {
|
||||
return c.memberAdd(ctx, peerAddrs, false)
|
||||
}
|
||||
|
||||
func (c *cluster) MemberAddAsLearner(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error) {
|
||||
return c.memberAdd(ctx, peerAddrs, true)
|
||||
}
|
||||
|
||||
func (c *cluster) memberAdd(ctx context.Context, peerAddrs []string, isLearner bool) (*MemberAddResponse, error) {
|
||||
// fail-fast before panic in rafthttp
|
||||
if _, err := types.NewURLs(peerAddrs); err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -51,7 +51,7 @@ func ExampleCluster_memberAdd() {
|
||||
defer cli.Close()
|
||||
|
||||
peerURLs := endpoints[2:]
|
||||
mresp, err := cli.MemberAdd(context.Background(), peerURLs, false)
|
||||
mresp, err := cli.MemberAdd(context.Background(), peerURLs)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
@@ -59,6 +59,27 @@ func ExampleCluster_memberAdd() {
|
||||
// added member.PeerURLs: [http://localhost:32380]
|
||||
}
|
||||
|
||||
func ExampleCluster_memberAddAsLearner() {
|
||||
cli, err := clientv3.New(clientv3.Config{
|
||||
Endpoints: endpoints[:2],
|
||||
DialTimeout: dialTimeout,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer cli.Close()
|
||||
|
||||
peerURLs := endpoints[2:]
|
||||
mresp, err := cli.MemberAddAsLearner(context.Background(), peerURLs)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
fmt.Println("added member.PeerURLs:", mresp.Member.PeerURLs)
|
||||
fmt.Println("added member.IsLearner:", mresp.Member.IsLearner)
|
||||
// added member.PeerURLs: [http://localhost:32380]
|
||||
// added member.IsLearner: true
|
||||
}
|
||||
|
||||
func ExampleCluster_memberRemove() {
|
||||
cli, err := clientv3.New(clientv3.Config{
|
||||
Endpoints: endpoints[1:],
|
||||
|
||||
@@ -53,7 +53,7 @@ func TestMemberAdd(t *testing.T) {
|
||||
capi := clus.RandClient()
|
||||
|
||||
urls := []string{"http://127.0.0.1:1234"}
|
||||
resp, err := capi.MemberAdd(context.Background(), urls, false)
|
||||
resp, err := capi.MemberAdd(context.Background(), urls)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to add member %v", err)
|
||||
}
|
||||
@@ -175,7 +175,7 @@ func TestMemberAddUpdateWrongURLs(t *testing.T) {
|
||||
{"localhost:1234"},
|
||||
}
|
||||
for i := range tt {
|
||||
_, err := capi.MemberAdd(context.Background(), tt[i], false)
|
||||
_, err := capi.MemberAdd(context.Background(), tt[i])
|
||||
if err == nil {
|
||||
t.Errorf("#%d: MemberAdd err = nil, but error", i)
|
||||
}
|
||||
@@ -195,14 +195,13 @@ func TestMemberAddForLearner(t *testing.T) {
|
||||
capi := clus.RandClient()
|
||||
|
||||
urls := []string{"http://127.0.0.1:1234"}
|
||||
isLearner := true
|
||||
resp, err := capi.MemberAdd(context.Background(), urls, isLearner)
|
||||
resp, err := capi.MemberAddAsLearner(context.Background(), urls)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to add member %v", err)
|
||||
}
|
||||
|
||||
if resp.Member.IsLearner != isLearner {
|
||||
t.Errorf("Added a member with IsLearner = %v, got %v", isLearner, resp.Member.IsLearner)
|
||||
if !resp.Member.IsLearner {
|
||||
t.Errorf("Added a member as learner, got resp.Member.IsLearner = %v", resp.Member.IsLearner)
|
||||
}
|
||||
|
||||
numOfLearners, err := getNumberOfLearners(clus)
|
||||
|
||||
@@ -55,7 +55,7 @@ func TestSnapshotV3RestoreMultiMemberAdd(t *testing.T) {
|
||||
|
||||
urls := newEmbedURLs(2)
|
||||
newCURLs, newPURLs := urls[:1], urls[1:]
|
||||
if _, err = cli.MemberAdd(context.Background(), []string{newPURLs[0].String()}, false); err != nil {
|
||||
if _, err = cli.MemberAdd(context.Background(), []string{newPURLs[0].String()}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user