Skip to content

Commit 341af03

Browse files
committed
Fix the issue that learner promotion command doesn't support json output
Signed-off-by: Benjamin Wang <benjamin.ahrtr@gmail.com>
1 parent 9ae4074 commit 341af03

File tree

3 files changed

+37
-4
lines changed

3 files changed

+37
-4
lines changed

etcdctl/ctlv3/command/printer.go

+3
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ func (p *printerRPC) MemberAdd(r v3.MemberAddResponse) { p.p((*pb.MemberAddRespo
107107
func (p *printerRPC) MemberRemove(id uint64, r v3.MemberRemoveResponse) {
108108
p.p((*pb.MemberRemoveResponse)(&r))
109109
}
110+
func (p *printerRPC) MemberPromote(id uint64, r v3.MemberPromoteResponse) {
111+
p.p((*pb.MemberPromoteResponse)(&r))
112+
}
110113
func (p *printerRPC) MemberUpdate(id uint64, r v3.MemberUpdateResponse) {
111114
p.p((*pb.MemberUpdateResponse)(&r))
112115
}

tests/e2e/ctl_v3_member_test.go

+31
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import (
2222
"strings"
2323
"testing"
2424

25+
"github.com/stretchr/testify/require"
26+
2527
"go.etcd.io/etcd/api/v3/etcdserverpb"
2628
"go.etcd.io/etcd/tests/v3/framework/e2e"
2729
)
@@ -227,3 +229,32 @@ func ctlV3MemberUpdate(cx ctlCtx, memberID, peerURL string) error {
227229
cmdArgs := append(cx.PrefixArgs(), "member", "update", memberID, fmt.Sprintf("--peer-urls=%s", peerURL))
228230
return e2e.SpawnWithExpectWithEnv(cmdArgs, cx.envMap, " updated in cluster ")
229231
}
232+
233+
func TestCtlV3PromotingLearner(t *testing.T) {
234+
e2e.BeforeTest(t)
235+
236+
t.Log("Create a single node etcd cluster")
237+
cfg := e2e.NewConfigNoTLS()
238+
cfg.BasePeerScheme = "unix"
239+
cfg.ClusterSize = 1
240+
241+
epc, err := e2e.NewEtcdProcessCluster(t, cfg)
242+
require.NoError(t, err, "failed to start etcd cluster: %v", err)
243+
defer func() {
244+
derr := epc.Close()
245+
require.NoError(t, derr, "failed to close etcd cluster: %v", derr)
246+
}()
247+
248+
t.Log("Add and start a learner")
249+
learnerID, err := epc.StartNewProc(nil, true, t)
250+
require.NoError(t, err)
251+
252+
t.Log("Write a key to ensure the cluster is healthy so far")
253+
etcdctl := epc.Procs[0].Etcdctl(e2e.ClientNonTLS, false, false)
254+
err = etcdctl.Put("foo", "bar")
255+
require.NoError(t, err)
256+
257+
t.Logf("Promoting the learner %x", learnerID)
258+
_, err = etcdctl.MemberPromote(learnerID)
259+
require.NoError(t, err)
260+
}

tests/framework/e2e/cluster.go

+3-4
Original file line numberDiff line numberDiff line change
@@ -645,11 +645,10 @@ func (epc *EtcdProcessCluster) StartNewProc(cfg *EtcdProcessClusterConfig, isLea
645645

646646
// AddMember adds a new member to the cluster without starting it.
647647
func (epc *EtcdProcessCluster) AddMember(cfg *EtcdProcessClusterConfig, isLearner bool, tb testing.TB) (memberID uint64, serverCfg *EtcdServerProcessConfig, err error) {
648-
if cfg != nil {
649-
serverCfg = cfg.EtcdServerProcessConfig(tb, epc.nextSeq)
650-
} else {
651-
serverCfg = epc.Cfg.EtcdServerProcessConfig(tb, epc.nextSeq)
648+
if cfg == nil {
649+
cfg = epc.Cfg
652650
}
651+
serverCfg = cfg.EtcdServerProcessConfig(tb, epc.nextSeq)
653652

654653
epc.nextSeq++
655654

0 commit comments

Comments
 (0)