Skip to content

Commit da936a9

Browse files
committed
Fix: multiple REMOVE_NODE permitted.
The limit for enforcing a single uncommitted voting change must apply to remove node as well. It seems like it was left out considering only the case where it follows DEMOTE_NODE, but that's not really required.
1 parent b840945 commit da936a9

File tree

2 files changed

+3
-2
lines changed

2 files changed

+3
-2
lines changed

src/raft_server.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1179,6 +1179,7 @@ int raft_apply_all(raft_server_t* me_)
11791179
int raft_entry_is_voting_cfg_change(raft_entry_t* ety)
11801180
{
11811181
return RAFT_LOGTYPE_ADD_NODE == ety->type ||
1182+
RAFT_LOGTYPE_REMOVE_NODE == ety->type ||
11821183
RAFT_LOGTYPE_DEMOTE_NODE == ety->type;
11831184
}
11841185

tests/virtraft2.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ def __init__(self):
149149
self.members = []
150150

151151

152-
SnapshotMember = collections.namedtuple('SnapshotMember', ['id', 'voting'], verbose=False)
152+
SnapshotMember = collections.namedtuple('SnapshotMember', ['id', 'voting'])
153153

154154

155155
def raft_send_requestvote(raft, udata, node, msg):
@@ -575,7 +575,7 @@ def remove_member(self):
575575
return
576576

577577
# Create a new configuration entry to be processed by the leader
578-
ety = self.add_entry(lib.RAFT_LOGTYPE_DEMOTE_NODE,
578+
ety = self.add_entry(lib.RAFT_LOGTYPE_REMOVE_NODE,
579579
ChangeRaftEntry(server.id))
580580
assert server.connection_status == NODE_CONNECTED
581581
assert(lib.raft_entry_is_cfg_change(ety))

0 commit comments

Comments
 (0)