I've gotta say I wish someone had pointed me to
the MongoRaftReconfig algorithm paper earlier.
It's really a breath of fresh air. Would have saved me much trouble.
So, I want to send a big thank you to the MongoDB
folks for publishing this; and for answering my questions about it.
I think it should be more widely known. Thus this post and these details:
"Design and Analysis of a Logless Dynamic Reconfiguration Protocol"
https://arxiv.org/abs/2102.11960
This is a much improved approach over baseline Raft.
Still, it is really just a small set of changes from the single-server-change
-at-a-time approach from the Raft dissertation section 4.1.
Rather than using the Raft log with membership
configuration, they are kept separately.
I wrote it into my Raft implementation over the last two days and it cleaned up
so many things.
No more having to worry about log compaction wiping out your
config. No having to find the most recent/last two configs in the log so you can
rollback a configuration if the log gets truncated.
A much cleaner and orthogonal design all around.
links:
presentation slides are the quickest way in, and a
very conversational journey (from 2nd author):
https://conf.tlapl.us/2024/SiyuanZhou-HowWeDesignedAndModelCheckedMongoDBReconfigurationProtocol.pdf
paper: https://arxiv.org/abs/2102.11960
recent blog by first author:
https://will62794.github.io/distributed-systems/consensus/2025/08/25/logless-raft.html
github with TLA+ specs:
https://github.com/will62794/logless-reconfig
https://github.com/mongodb/mongo/blob/master/src/mongo/tla_plus/RaftMongoWithRaftReconfig.tla
enjoy!