Raft Upstream Migration
Based on the evaluation in PR #59 (docs/raft-evaluation.md), migrate from the 2017 openark/raft fork to upstream hashicorp/raft v1.7.x.
Why
- 9 years of missing security patches, bug fixes, and performance improvements
- Fork uses deprecated APIs removed from upstream
- No pre-vote protocol (split-brain risk)
- No leadership transfer support
Scope (from evaluation)
10 divergent API calls to migrate:
raft.NewRaft() — 7-arg → 6-arg constructor (PeerStore removed)
raft.Configuration / bootstrapping — replace StaticPeers + EnableSingleNode
AddPeer / RemovePeer — replace with AddVoter / RemoveServer
Yield() — replace with LeadershipTransfer()
SnapshotStore.Create() — signature change (SnapshotMeta.Peers → Configuration)
PeerStore — removed entirely, use GetConfiguration()
Estimated effort: ~32 hours (3-5 working days)
Files to modify
go/raft/raft.go — main initialization (heaviest changes)
go/raft/file_snapshot.go — snapshot store
go/raft/fsm.go — FSM (minor)
go/raft/store.go — compatible, minimal changes
go/raft/rel_store.go — compatible
go/raft/http_client.go — transport changes
go.mod — remove replace directive, add hashicorp/raft v1.7.x
Raft Upstream Migration
Based on the evaluation in PR #59 (
docs/raft-evaluation.md), migrate from the 2017openark/raftfork to upstreamhashicorp/raftv1.7.x.Why
Scope (from evaluation)
10 divergent API calls to migrate:
raft.NewRaft()— 7-arg → 6-arg constructor (PeerStore removed)raft.Configuration/ bootstrapping — replaceStaticPeers+EnableSingleNodeAddPeer/RemovePeer— replace withAddVoter/RemoveServerYield()— replace withLeadershipTransfer()SnapshotStore.Create()— signature change (SnapshotMeta.Peers→Configuration)PeerStore— removed entirely, useGetConfiguration()Estimated effort: ~32 hours (3-5 working days)
Files to modify
go/raft/raft.go— main initialization (heaviest changes)go/raft/file_snapshot.go— snapshot storego/raft/fsm.go— FSM (minor)go/raft/store.go— compatible, minimal changesgo/raft/rel_store.go— compatiblego/raft/http_client.go— transport changesgo.mod— remove replace directive, add hashicorp/raft v1.7.x