1# UNRELEASED
2
3# 1.3.0 (April 22nd, 2021)
4
5IMPROVEMENTS
6
7* Added metrics for `oldestLogAge` and `lastRestoreDuration` to monitor capacity issues that can cause unrecoverable cluster failure  [[GH-452](https://github.com/hashicorp/raft/pull/452)][[GH-454](https://github.com/hashicorp/raft/pull/454/files)]
8* Made `TrailingLogs`, `SnapshotInterval` and `SnapshotThreshold` reloadable at runtime using a new `ReloadConfig` method. This allows recovery from cases where there are not enough logs retained for followers to catchup after a restart. [[GH-444](https://github.com/hashicorp/raft/pull/444)]
9* Inclusify the repository by switching to main [[GH-446](https://github.com/hashicorp/raft/pull/446)]
10* Add option for a buffered `ApplyCh` if `MaxAppendEntries` is enabled [[GH-445](https://github.com/hashicorp/raft/pull/445)]
11* Add string to `LogType` for more human readable debugging [[GH-442](https://github.com/hashicorp/raft/pull/442)]
12* Extract fuzzy testing into its own module [[GH-459](https://github.com/hashicorp/raft/pull/459)]
13
14BUG FIXES
15* Update LogCache `StoreLogs()` to capture an error that would previously cause a panic [[GH-460](https://github.com/hashicorp/raft/pull/460)]
16
17# 1.2.0 (October 5th, 2020)
18
19IMPROVEMENTS
20
21* Remove `StartAsLeader` configuration option [[GH-364](https://github.com/hashicorp/raft/pull/386)]
22* Allow futures to react to `Shutdown()` to prevent a deadlock with `takeSnapshot()` [[GH-390](https://github.com/hashicorp/raft/pull/390)]
23* Prevent non-voters from becoming eligible for leadership elections [[GH-398](https://github.com/hashicorp/raft/pull/398)]
24* Remove an unneeded `io.Copy` from snapshot writes [[GH-399](https://github.com/hashicorp/raft/pull/399)]
25* Log decoded candidate address in `duplicate requestVote` warning [[GH-400](https://github.com/hashicorp/raft/pull/400)]
26* Prevent starting a TCP transport when IP address is `nil` [[GH-403](https://github.com/hashicorp/raft/pull/403)]
27* Reject leadership transfer requests when in candidate state to prevent indefinite blocking while unable to elect a leader [[GH-413](https://github.com/hashicorp/raft/pull/413)]
28* Add labels for metric metadata to reduce cardinality of metric names [[GH-409](https://github.com/hashicorp/raft/pull/409)]
29* Add peers metric [[GH-413](https://github.com/hashicorp/raft/pull/431)]
30
31BUG FIXES
32
33* Make `LeaderCh` always deliver the latest leadership transition [[GH-384](https://github.com/hashicorp/raft/pull/384)]
34* Handle updating an existing peer in `startStopReplication` [[GH-419](https://github.com/hashicorp/raft/pull/419)]
35
36# 1.1.2 (January 17th, 2020)
37
38FEATURES
39
40* Improve FSM apply performance through batching. Implementing the `BatchingFSM` interface enables this new feature [[GH-364](https://github.com/hashicorp/raft/pull/364)]
41* Add ability to obtain Raft configuration before Raft starts with GetConfiguration [[GH-369](https://github.com/hashicorp/raft/pull/369)]
42
43IMPROVEMENTS
44
45* Remove lint violations and add a `make` rule for running the linter.
46* Replace logger with hclog [[GH-360](https://github.com/hashicorp/raft/pull/360)]
47* Read latest configuration independently from main loop [[GH-379](https://github.com/hashicorp/raft/pull/379)]
48
49BUG FIXES
50
51* Export the leader field in LeaderObservation [[GH-357](https://github.com/hashicorp/raft/pull/357)]
52* Fix snapshot to not attempt to truncate a negative range [[GH-358](https://github.com/hashicorp/raft/pull/358)]
53* Check for shutdown in inmemPipeline before sending RPCs [[GH-276](https://github.com/hashicorp/raft/pull/276)]
54
55# 1.1.1 (July 23rd, 2019)
56
57FEATURES
58
59* Add support for extensions to be sent on log entries [[GH-353](https://github.com/hashicorp/raft/pull/353)]
60* Add config option to skip snapshot restore on startup [[GH-340](https://github.com/hashicorp/raft/pull/340)]
61* Add optional configuration store interface [[GH-339](https://github.com/hashicorp/raft/pull/339)]
62
63IMPROVEMENTS
64
65* Break out of group commit early when no logs are present [[GH-341](https://github.com/hashicorp/raft/pull/341)]
66
67BUGFIXES
68
69* Fix 64-bit counters on 32-bit platforms [[GH-344](https://github.com/hashicorp/raft/pull/344)]
70* Don't defer closing source in recover/restore operations since it's in a loop [[GH-337](https://github.com/hashicorp/raft/pull/337)]
71
72# 1.1.0 (May 23rd, 2019)
73
74FEATURES
75
76* Add transfer leadership extension [[GH-306](https://github.com/hashicorp/raft/pull/306)]
77
78IMPROVEMENTS
79
80* Move to `go mod` [[GH-323](https://github.com/hashicorp/consul/pull/323)]
81* Leveled log [[GH-321](https://github.com/hashicorp/consul/pull/321)]
82* Add peer changes to observations [[GH-326](https://github.com/hashicorp/consul/pull/326)]
83
84BUGFIXES
85
86* Copy the contents of an InmemSnapshotStore when opening a snapshot [[GH-270](https://github.com/hashicorp/consul/pull/270)]
87* Fix logging panic when converting parameters to strings [[GH-332](https://github.com/hashicorp/consul/pull/332)]
88
89# 1.0.1 (April 12th, 2019)
90
91IMPROVEMENTS
92
93* InMemTransport: Add timeout for sending a message [[GH-313](https://github.com/hashicorp/raft/pull/313)]
94* ensure 'make deps' downloads test dependencies like testify [[GH-310](https://github.com/hashicorp/raft/pull/310)]
95* Clarifies function of CommitTimeout [[GH-309](https://github.com/hashicorp/raft/pull/309)]
96* Add additional metrics regarding log dispatching and committal [[GH-316](https://github.com/hashicorp/raft/pull/316)]
97
98# 1.0.0 (October 3rd, 2017)
99
100v1.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 https://github.com/hashicorp/consul/pull/2222 for an idea of what was required to port Consul to these new interfaces.
101
102# 0.1.0 (September 29th, 2017)
103
104v0.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.
105