@@ -24,6 +24,7 @@ import (
24
24
"testing"
25
25
"time"
26
26
27
+ clientv3 "go.etcd.io/etcd/client/v3"
27
28
"go.etcd.io/etcd/pkg/v3/proxy"
28
29
"go.etcd.io/etcd/server/v3/etcdserver"
29
30
"go.uber.org/zap"
@@ -628,8 +629,8 @@ func (epc *EtcdProcessCluster) WithStopSignal(sig os.Signal) (ret os.Signal) {
628
629
// StartNewProc grows cluster size by one with two phases
629
630
// Phase 1 - Inform cluster of new configuration
630
631
// Phase 2 - Start new member
631
- func (epc * EtcdProcessCluster ) StartNewProc (cfg * EtcdProcessClusterConfig , tb testing.TB ) (memberID uint64 , err error ) {
632
- memberID , serverCfg , err := epc .AddMember (cfg , tb )
632
+ func (epc * EtcdProcessCluster ) StartNewProc (cfg * EtcdProcessClusterConfig , isLearner bool , tb testing.TB ) (memberID uint64 , err error ) {
633
+ memberID , serverCfg , err := epc .AddMember (cfg , isLearner , tb )
633
634
if err != nil {
634
635
return 0 , err
635
636
}
@@ -643,12 +644,11 @@ func (epc *EtcdProcessCluster) StartNewProc(cfg *EtcdProcessClusterConfig, tb te
643
644
}
644
645
645
646
// AddMember adds a new member to the cluster without starting it.
646
- func (epc * EtcdProcessCluster ) AddMember (cfg * EtcdProcessClusterConfig , tb testing.TB ) (memberID uint64 , serverCfg * EtcdServerProcessConfig , err error ) {
647
- if cfg != nil {
648
- serverCfg = cfg .EtcdServerProcessConfig (tb , epc .nextSeq )
649
- } else {
650
- serverCfg = epc .Cfg .EtcdServerProcessConfig (tb , epc .nextSeq )
647
+ func (epc * EtcdProcessCluster ) AddMember (cfg * EtcdProcessClusterConfig , isLearner bool , tb testing.TB ) (memberID uint64 , serverCfg * EtcdServerProcessConfig , err error ) {
648
+ if cfg == nil {
649
+ cfg = epc .Cfg
651
650
}
651
+ serverCfg = cfg .EtcdServerProcessConfig (tb , epc .nextSeq )
652
652
653
653
epc .nextSeq ++
654
654
@@ -664,9 +664,17 @@ func (epc *EtcdProcessCluster) AddMember(cfg *EtcdProcessClusterConfig, tb testi
664
664
// First add new member to cluster
665
665
tb .Logf ("add new member to cluster; member-name %s, member-peer-url %s" , serverCfg .Name , serverCfg .Purl .String ())
666
666
memberCtl := NewEtcdctl (epc .Procs [0 ].EndpointsV3 (), cfg .ClientTLS , cfg .IsClientAutoTLS , false )
667
- resp , err := memberCtl .MemberAdd (serverCfg .Name , []string {serverCfg .Purl .String ()})
668
- if err != nil {
669
- return 0 , nil , fmt .Errorf ("failed to add new member: %w" , err )
667
+ var (
668
+ resp * clientv3.MemberAddResponse
669
+ mErr error
670
+ )
671
+ if isLearner {
672
+ resp , mErr = memberCtl .MemberAddAsLearner (serverCfg .Name , []string {serverCfg .Purl .String ()})
673
+ } else {
674
+ resp , mErr = memberCtl .MemberAdd (serverCfg .Name , []string {serverCfg .Purl .String ()})
675
+ }
676
+ if mErr != nil {
677
+ return 0 , nil , fmt .Errorf ("failed to add new member: %w" , mErr )
670
678
}
671
679
672
680
return resp .Member .ID , serverCfg , nil
0 commit comments