From f8ad8ae4adc1a758d167c7ab791c9539a3a6e1b4 Mon Sep 17 00:00:00 2001 From: Jingyi Hu Date: Tue, 7 May 2019 15:46:24 -0700 Subject: [PATCH] etcdserver: use etcdserver ErrLearnerNotReady If learner is not ready to be promoted, use etcdserver.ErrLearnerNotReady instead of using membership.ErrLearnerNotReady. --- clientv3/integration/cluster_test.go | 2 +- etcdserver/api/etcdhttp/peer.go | 2 +- etcdserver/api/membership/errors.go | 1 - etcdserver/api/v3rpc/util.go | 1 - etcdserver/cluster_util.go | 4 ++-- etcdserver/errors.go | 2 +- etcdserver/server.go | 2 +- 7 files changed, 6 insertions(+), 8 deletions(-) diff --git a/clientv3/integration/cluster_test.go b/clientv3/integration/cluster_test.go index dda3eb9a4..5046c71c3 100644 --- a/clientv3/integration/cluster_test.go +++ b/clientv3/integration/cluster_test.go @@ -245,7 +245,7 @@ func TestMemberPromoteForNotReadyLearner(t *testing.T) { // since we do not start learner, learner must be not ready. _, err = capi.MemberPromote(context.Background(), learnerID) - expectedErrKeywords := "can only promote a learner member which catches up with leader" + expectedErrKeywords := "can only promote a learner member which is in sync with leader" if err == nil { t.Fatalf("expecting promote not ready learner to fail, got no error") } diff --git a/etcdserver/api/etcdhttp/peer.go b/etcdserver/api/etcdhttp/peer.go index 3c3d5345a..6c61bf5d5 100644 --- a/etcdserver/api/etcdhttp/peer.go +++ b/etcdserver/api/etcdhttp/peer.go @@ -130,7 +130,7 @@ func (h *peerMemberPromoteHandler) ServeHTTP(w http.ResponseWriter, r *http.Requ http.Error(w, err.Error(), http.StatusNotFound) case membership.ErrMemberNotLearner: http.Error(w, err.Error(), http.StatusPreconditionFailed) - case membership.ErrLearnerNotReady: + case etcdserver.ErrLearnerNotReady: http.Error(w, err.Error(), http.StatusPreconditionFailed) default: WriteError(h.lg, w, r, err) diff --git a/etcdserver/api/membership/errors.go b/etcdserver/api/membership/errors.go index 143068fe6..8f6fe504e 100644 --- a/etcdserver/api/membership/errors.go +++ b/etcdserver/api/membership/errors.go @@ -26,7 +26,6 @@ var ( ErrIDNotFound = errors.New("membership: ID not found") ErrPeerURLexists = errors.New("membership: peerURL exists") ErrMemberNotLearner = errors.New("membership: can only promote a learner member") - ErrLearnerNotReady = errors.New("membership: can only promote a learner member which is in sync with leader") ErrTooManyLearners = errors.New("membership: too many learner members in cluster") ) diff --git a/etcdserver/api/v3rpc/util.go b/etcdserver/api/v3rpc/util.go index 9b6f4d830..748632b5e 100644 --- a/etcdserver/api/v3rpc/util.go +++ b/etcdserver/api/v3rpc/util.go @@ -36,7 +36,6 @@ var toGRPCErrorMap = map[error]error{ membership.ErrIDExists: rpctypes.ErrGRPCMemberExist, membership.ErrPeerURLexists: rpctypes.ErrGRPCPeerURLExist, membership.ErrMemberNotLearner: rpctypes.ErrGRPCMemberNotLearner, - membership.ErrLearnerNotReady: rpctypes.ErrGRPCLearnerNotReady, membership.ErrTooManyLearners: rpctypes.ErrGRPCTooManyLearners, etcdserver.ErrNotEnoughStartedMembers: rpctypes.ErrMemberNotEnoughStarted, etcdserver.ErrLearnerNotReady: rpctypes.ErrGRPCLearnerNotReady, diff --git a/etcdserver/cluster_util.go b/etcdserver/cluster_util.go index 2030e7958..85bf8722c 100644 --- a/etcdserver/cluster_util.go +++ b/etcdserver/cluster_util.go @@ -383,8 +383,8 @@ func promoteMemberHTTP(ctx context.Context, url string, id uint64, peerRt http.R } if resp.StatusCode == http.StatusPreconditionFailed { // both ErrMemberNotLearner and ErrLearnerNotReady have same http status code - if strings.Contains(string(b), membership.ErrLearnerNotReady.Error()) { - return nil, membership.ErrLearnerNotReady + if strings.Contains(string(b), ErrLearnerNotReady.Error()) { + return nil, ErrLearnerNotReady } if strings.Contains(string(b), membership.ErrMemberNotLearner.Error()) { return nil, membership.ErrMemberNotLearner diff --git a/etcdserver/errors.go b/etcdserver/errors.go index e5ab4bd71..d0fe28970 100644 --- a/etcdserver/errors.go +++ b/etcdserver/errors.go @@ -29,7 +29,7 @@ var ( ErrTimeoutLeaderTransfer = errors.New("etcdserver: request timed out, leader transfer took too long") ErrLeaderChanged = errors.New("etcdserver: leader changed") ErrNotEnoughStartedMembers = errors.New("etcdserver: re-configuration failed due to not enough started members") - ErrLearnerNotReady = errors.New("etcdserver: can only promote a learner member which catches up with leader") + ErrLearnerNotReady = errors.New("etcdserver: can only promote a learner member which is in sync with leader") ErrNoLeader = errors.New("etcdserver: no leader") ErrNotLeader = errors.New("etcdserver: not leader") ErrRequestTooLarge = errors.New("etcdserver: request is too large") diff --git a/etcdserver/server.go b/etcdserver/server.go index 82ba5983f..6fbbbb120 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -1654,7 +1654,7 @@ func (s *EtcdServer) PromoteMember(ctx context.Context, id uint64) ([]*membershi return resp, nil } // If member promotion failed, return early. Otherwise keep retry. - if err == membership.ErrIDNotFound || err == membership.ErrLearnerNotReady || err == membership.ErrMemberNotLearner { + if err == ErrLearnerNotReady || err == membership.ErrIDNotFound || err == membership.ErrMemberNotLearner { return nil, err } }