Skip to content

Commit

Permalink
etcdserver: add ConfChangeAddLearnerNode to the list of config changes
Browse files Browse the repository at this point in the history
To fix a panic that happens when force-new-cluster flag is passed to
etcd node if the cluster had learner nodes added from before

Fixes #12285
  • Loading branch information
galal-hussein committed Sep 11, 2020
1 parent 76e769c commit 35b50b6
Showing 1 changed file with 3 additions and 0 deletions.
3 changes: 3 additions & 0 deletions etcdserver/raft.go
Original file line number Diff line number Diff line change
Expand Up @@ -618,6 +618,7 @@ func restartAsStandaloneNode(cfg ServerConfig, snapshot *raftpb.Snapshot) (types
// ID-related entry:
// - ConfChangeAddNode, in which case the contained ID will be added into the set.
// - ConfChangeRemoveNode, in which case the contained ID will be removed from the set.
// - ConfChangeAddLearnerNode, in which the contained ID will be added into the set.
func getIDs(lg *zap.Logger, snap *raftpb.Snapshot, ents []raftpb.Entry) []uint64 {
ids := make(map[uint64]bool)
if snap != nil {
Expand All @@ -632,6 +633,8 @@ func getIDs(lg *zap.Logger, snap *raftpb.Snapshot, ents []raftpb.Entry) []uint64
var cc raftpb.ConfChange
pbutil.MustUnmarshal(&cc, e.Data)
switch cc.Type {
case raftpb.ConfChangeAddLearnerNode:
ids[cc.NodeID] = true
case raftpb.ConfChangeAddNode:
ids[cc.NodeID] = true
case raftpb.ConfChangeRemoveNode:
Expand Down

0 comments on commit 35b50b6

Please sign in to comment.