CHANGES
- Raft multi version testing GH-559
IMPROVEMENTS
- Raft pre-vote extension implementation, activated by default. GH-530
BUG FIXES
- Fix serialize NetworkTransport data race on ServerAddr(). GH-591
CHANGES
IMPROVEMENTS
- Bump github.com/hashicorp/go-hclog from 1.5.0 to 1.6.2. GH-583
BUG FIXES
- Fix rare leadership transfer failures when writes happen during transfer. GH-581
CHANGES
-
Upgrade hashicorp/go-msgpack to v2, with go.mod upgraded from v0.5.5 to v2.1.1. GH-577
go-msgpack v2.1.1 is by default binary compatible with v0.5.5 ("non-builtin" encoding of
time.Time
), but can decode messages produced by v1.1.5 as well ("builtin" encoding oftime.Time
).However, if users of this library overrode the version of go-msgpack (especially to v1), this could break compatibility if raft nodes are running a mix of versions.
This compatibility can be configured at runtime in Raft using
NetworkTransportConfig.MsgpackUseNewTimeFormat
-- the default isfalse
, which maintains compatibility withgo-msgpack
v0.5.5, but if set totrue
, will be compatible withgo-msgpack
v1.1.5.
IMPROVEMENTS
- Push to notify channel when shutting down. GH-567
- Add CommitIndex API GH-560
- Document some Apply error cases better GH-561
BUG FIXES
- Race with
candidateFromLeadershipTransfer
GH-570
IMPROVEMENTS
- Fixed a performance anomaly related to pipelining RPCs that caused large increases in commit latency under high write throughput. Default behavior has changed. For more information see #541.
FEATURES
- Support log stores with a monotonically increasing index. Implementing a log store with the
MonotonicLogStore
interface whereIsMonotonic()
returns true will allow Raft to clear all previous logs on user restores of Raft snapshots.
BUG FIXES
- Restoring a snapshot with the raft-wal log store caused a panic due to index gap that is created during snapshot restores.
IMPROVEMENTS
- Added metrics for
oldestLogAge
andlastRestoreDuration
to monitor capacity issues that can cause unrecoverable cluster failure [GH-452][GH-454] - Made
TrailingLogs
,SnapshotInterval
andSnapshotThreshold
reloadable at runtime using a newReloadConfig
method. This allows recovery from cases where there are not enough logs retained for followers to catchup after a restart. [GH-444] - Inclusify the repository by switching to main [GH-446]
- Add option for a buffered
ApplyCh
ifMaxAppendEntries
is enabled [GH-445] - Add string to
LogType
for more human readable debugging [GH-442] - Extract fuzzy testing into its own module [GH-459]
BUG FIXES
- Update LogCache
StoreLogs()
to capture an error that would previously cause a panic [GH-460]
IMPROVEMENTS
- Remove
StartAsLeader
configuration option [GH-364] - Allow futures to react to
Shutdown()
to prevent a deadlock withtakeSnapshot()
[GH-390] - Prevent non-voters from becoming eligible for leadership elections [GH-398]
- Remove an unneeded
io.Copy
from snapshot writes [GH-399] - Log decoded candidate address in
duplicate requestVote
warning [GH-400] - Prevent starting a TCP transport when IP address is
nil
[GH-403] - Reject leadership transfer requests when in candidate state to prevent indefinite blocking while unable to elect a leader [GH-413]
- Add labels for metric metadata to reduce cardinality of metric names [GH-409]
- Add peers metric [GH-413]
BUG FIXES
- Make
LeaderCh
always deliver the latest leadership transition [GH-384] - Handle updating an existing peer in
startStopReplication
[GH-419]
FEATURES
- Improve FSM apply performance through batching. Implementing the
BatchingFSM
interface enables this new feature [GH-364] - Add ability to obtain Raft configuration before Raft starts with GetConfiguration [GH-369]
IMPROVEMENTS
- Remove lint violations and add a
make
rule for running the linter. - Replace logger with hclog [GH-360]
- Read latest configuration independently from main loop [GH-379]
BUG FIXES
- Export the leader field in LeaderObservation [GH-357]
- Fix snapshot to not attempt to truncate a negative range [GH-358]
- Check for shutdown in inmemPipeline before sending RPCs [GH-276]
FEATURES
- Add support for extensions to be sent on log entries [GH-353]
- Add config option to skip snapshot restore on startup [GH-340]
- Add optional configuration store interface [GH-339]
IMPROVEMENTS
- Break out of group commit early when no logs are present [GH-341]
BUGFIXES
- Fix 64-bit counters on 32-bit platforms [GH-344]
- Don't defer closing source in recover/restore operations since it's in a loop [GH-337]
FEATURES
- Add transfer leadership extension [GH-306]
IMPROVEMENTS
BUGFIXES
- Copy the contents of an InmemSnapshotStore when opening a snapshot [GH-270]
- Fix logging panic when converting parameters to strings [GH-332]
IMPROVEMENTS
- InMemTransport: Add timeout for sending a message [GH-313]
- ensure 'make deps' downloads test dependencies like testify [GH-310]
- Clarifies function of CommitTimeout [GH-309]
- Add additional metrics regarding log dispatching and committal [GH-316]
v1.0.0 takes the changes that were staged in the library-v2-stage-one branch. This version manages server identities using a UUID, so introduces some breaking API changes. It also versions the Raft protocol, and requires some special steps when interoperating with Raft servers running older versions of the library (see the detailed comment in config.go about version compatibility). You can reference hashicorp/consul#2222 for an idea of what was required to port Consul to these new interfaces.
v0.1.0 is the original stable version of the library that was in main and has been maintained with no breaking API changes. This was in use by Consul prior to version 0.7.0.