Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add / remove server (dynamic membership) #21

Closed
belaban opened this issue Apr 15, 2015 · 1 comment
Closed

Add / remove server (dynamic membership) #21

belaban opened this issue Apr 15, 2015 · 1 comment
Assignees
Milestone

Comments

@belaban
Copy link
Member

belaban commented Apr 15, 2015

Currently RAFT.majority defines the majority needed for elections and log commits. This requires the operator to always start the same set of servers. It is easy to start A,B,C, append and commit some changes to the log, then stop them and start D,E,F and make some other changes, overwriting the previous ones and violating Leader Completeness.
We need to define a static membership, e.g. {A,B,C} in the config file, compute the majority from it (2) and use AddServer or RemoveServer to change it dynamically (in running members) and XML editing to change it in the config.
Every member should be identified by a name (logical name), which also names the persistent log. When started, and the name is not in the above list, become read-only (don't participate in elections) or throw an exception.
Adding or removing a server would involve calling AddServer which needs to be acked by a majority of the existing view, and then the config would need to be changed as well.

@belaban belaban self-assigned this Apr 15, 2015
@belaban belaban added this to the 0.2 milestone Apr 15, 2015
@belaban belaban changed the title Define membership in XML Add / remove server (dynamic membership) Apr 17, 2015
belaban added a commit that referenced this issue Apr 18, 2015
- Allowing for dirty reads
- If a new member is not part of the defined membership, it won't start and an exception will be thrown
- Added handling of internal commands to log
@belaban
Copy link
Member Author

belaban commented Apr 18, 2015

Implemented dynamic membership changes as described in the Raft dissertation: insertion of internal addServer/removeServer commands into the log.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant