@@ -24,6 +24,7 @@ import (
2424 "testing"
2525 "time"
2626
27+ clientv3 "go.etcd.io/etcd/client/v3"
2728 "go.etcd.io/etcd/pkg/v3/proxy"
2829 "go.etcd.io/etcd/server/v3/etcdserver"
2930 "go.uber.org/zap"
@@ -628,8 +629,8 @@ func (epc *EtcdProcessCluster) WithStopSignal(sig os.Signal) (ret os.Signal) {
628629// StartNewProc grows cluster size by one with two phases
629630// Phase 1 - Inform cluster of new configuration
630631// 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 )
633634 if err != nil {
634635 return 0 , err
635636 }
@@ -643,12 +644,11 @@ func (epc *EtcdProcessCluster) StartNewProc(cfg *EtcdProcessClusterConfig, tb te
643644}
644645
645646// 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
651650 }
651+ serverCfg = cfg .EtcdServerProcessConfig (tb , epc .nextSeq )
652652
653653 epc .nextSeq ++
654654
@@ -664,9 +664,17 @@ func (epc *EtcdProcessCluster) AddMember(cfg *EtcdProcessClusterConfig, tb testi
664664 // First add new member to cluster
665665 tb .Logf ("add new member to cluster; member-name %s, member-peer-url %s" , serverCfg .Name , serverCfg .Purl .String ())
666666 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 )
670678 }
671679
672680 return resp .Member .ID , serverCfg , nil
0 commit comments