summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Newson <rnewson@apache.org>2022-07-04 23:23:36 +0100
committerRobert Newson <rnewson@apache.org>2022-09-01 17:05:38 +0100
commiteeead2a86521372346516e6df2e720fb559903ef (patch)
tree1498b9d279c4a977f3544e6251771474b801cc71
parentdb0ab57f7385a5d5fd133d991108c530626bb058 (diff)
downloadcouchdb-eeead2a86521372346516e6df2e720fb559903ef.tar.gz
don't track matchIndex/nextIndex in non-leaders, pointless
-rw-r--r--src/couch/src/couch_raft.erl12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/couch/src/couch_raft.erl b/src/couch/src/couch_raft.erl
index fda19cc22..c580346fc 100644
--- a/src/couch/src/couch_raft.erl
+++ b/src/couch/src/couch_raft.erl
@@ -49,14 +49,10 @@ start_link(Name, StoreModule, StoreState) ->
gen_statem:start_link({local, Name}, ?MODULE, new(Name, StoreModule, StoreState), []).
new(Name, StoreModule, StoreState) ->
- #{cohort := Cohort} = StoreState,
- Peers = peers(Cohort),
maps:merge(#{
name => Name,
store_module => StoreModule,
votesGranted => #{},
- nextIndex => maps:from_list([{Peer, 1} || Peer <- Peers]),
- matchIndex => maps:from_list([{Peer, 0} || Peer <- Peers]),
froms => #{}
}, StoreState).
@@ -81,7 +77,8 @@ handle_event(enter, _OldState, follower, Data) ->
#{term := Term, froms := Froms} = Data,
couch_log:notice("~p became follower in term ~B", [node(), Term]),
Replies = [{reply, From, {error, deposed}} || From <- maps:values(Froms)],
- persist({keep_state, Data#{votedFor => undefined, froms => #{}}, [restart_election_timeout() | Replies]});
+ persist({keep_state, maps:without([nextIndex, matchIndex], Data#{votedFor => undefined, froms => #{}}),
+ [restart_election_timeout() | Replies]});
handle_event(enter, _OldState, candidate, Data) ->
#{term := Term} = Data,
@@ -234,7 +231,7 @@ handle_event(cast, #{type := 'AppendEntriesResponse', term := PastTerm}, _State,
couch_log:notice("~p ignored AppendEntriesResponse from past term ~B", [node(), PastTerm]),
keep_state_and_data;
-handle_event(cast, #{type := 'AppendEntriesResponse', term := Term} = Msg, _State, #{term := Term} = Data) ->
+handle_event(cast, #{type := 'AppendEntriesResponse', term := Term} = Msg, leader, #{term := Term} = Data) ->
#{success := MSuccess, matchIndex := MMatchIndex, source := MSource} = Msg,
#{nextIndex := NextIndex, matchIndex := MatchIndex} = Data,
couch_log:debug("~p received AppendEntriesResponse from ~p in current term ~B (Success:~p)", [node(), MSource, Term, MSuccess]),
@@ -251,6 +248,9 @@ handle_event(cast, #{type := 'AppendEntriesResponse', term := Term} = Msg, _Stat
}}
end;
+handle_event(cast, #{type := 'AppendEntriesResponse'}, _State, _Data) ->
+ keep_state_and_data;
+
handle_event({call, From}, #{type := 'ClientRequest'} = Msg, leader, Data) ->
#{value := Value} = Msg,
#{term := Term, store_module := StoreModule, froms := Froms} = Data,