# openraft port — life_cycle/t90_issue_920_non_voter_leader_restart: a node that believes it was the
# leader (a committed self-vote in durable state) but is NOT a member of its own config must come back
# as a non-voter on restart, never resuming as leader/candidate. Elect n1, have it remove ITSELF from
# the config (its conf_state no longer lists it), crash it, and confirm it restarts as a non-voter that
# does not campaign even after election timeouts elapse.
add-nodes 3 voters=(1,2,3)
----
n1: created voters={1,2,3} term=0 commit=0 last=0
n2: created voters={1,2,3} term=0 commit=0 last=0
n3: created voters={1,2,3} term=0 commit=0 last=0

campaign 1
----
n1 candidate term=1
RequestVote term=1 last=0/0 prevote=false
RequestVote term=1 last=0/0 prevote=false

stabilize
----
> n2 recv RequestVote term=1 last=0/0 prevote=false
> n3 recv RequestVote term=1 last=0/0 prevote=false
> n2 ready
  VoteResponse term=1 prevote=false reject=false
> n3 ready
  VoteResponse term=1 prevote=false reject=false
> n1 recv VoteResponse term=1 prevote=false reject=false
> n1 recv VoteResponse term=1 prevote=false reject=false
> n1 ready
  Heartbeat term=1 commit=0
  Heartbeat term=1 commit=0
  AppendEntries term=1 prev=0/0 commit=0 entries=[1/1 empty]
  AppendEntries term=1 prev=0/0 commit=0 entries=[1/1 empty]
  n1 leader-changed term=1 lead=1
> n2 recv Heartbeat term=1 commit=0
> n3 recv Heartbeat term=1 commit=0
> n2 recv AppendEntries term=1 prev=0/0 commit=0 entries=[1/1 empty]
> n3 recv AppendEntries term=1 prev=0/0 commit=0 entries=[1/1 empty]
> n2 ready
  HeartbeatResponse term=1
  AppendResponse term=1 match=1
  n2 leader-changed term=1 lead=1
> n3 ready
  HeartbeatResponse term=1
  AppendResponse term=1 match=1
  n3 leader-changed term=1 lead=1
> n1 recv HeartbeatResponse term=1
> n1 recv AppendResponse term=1 match=1
> n1 recv HeartbeatResponse term=1
> n1 recv AppendResponse term=1 match=1
> n1 ready
  AppendEntries term=1 prev=0/0 commit=0 entries=[1/1 empty]
  AppendEntries term=1 prev=1/1 commit=1 entries=[]
  AppendEntries term=1 prev=0/0 commit=1 entries=[1/1 empty]
  AppendEntries term=1 prev=1/1 commit=1 entries=[]
> n2 recv AppendEntries term=1 prev=0/0 commit=0 entries=[1/1 empty]
> n2 recv AppendEntries term=1 prev=1/1 commit=1 entries=[]
> n3 recv AppendEntries term=1 prev=0/0 commit=1 entries=[1/1 empty]
> n3 recv AppendEntries term=1 prev=1/1 commit=1 entries=[]
> n2 ready
  AppendResponse term=1 match=1
  AppendResponse term=1 match=1
> n3 ready
  AppendResponse term=1 match=1
  AppendResponse term=1 match=1
> n1 recv AppendResponse term=1 match=1
> n1 recv AppendResponse term=1 match=1
> n1 recv AppendResponse term=1 match=1
> n1 recv AppendResponse term=1 match=1

propose-conf-change 1 remove 1
----
n1 proposed conf-change remove n1 at index 2
AppendEntries term=1 prev=1/1 commit=1 entries=[1/2 conf-change 0x120c080112080100000000000000]
AppendEntries term=1 prev=1/1 commit=1 entries=[1/2 conf-change 0x120c080112080100000000000000]

stabilize
----
> n2 recv AppendEntries term=1 prev=1/1 commit=1 entries=[1/2 conf-change 0x120c080112080100000000000000]
> n3 recv AppendEntries term=1 prev=1/1 commit=1 entries=[1/2 conf-change 0x120c080112080100000000000000]
> n2 ready
  AppendResponse term=1 match=2
> n3 ready
  AppendResponse term=1 match=2
> n1 recv AppendResponse term=1 match=2
> n1 recv AppendResponse term=1 match=2
> n1 ready
  AppendEntries term=1 prev=1/2 commit=2 entries=[]
  n1 conf-changed index=2 voters={2,3}
  n1 leader-changed term=1 lead=none
> n2 recv AppendEntries term=1 prev=1/2 commit=2 entries=[]
> n2 ready
  AppendResponse term=1 match=2
  n2 conf-changed index=2 voters={2,3}
> n1 recv AppendResponse term=1 match=2

crash 1
----
n1 crashed and restarted

raft-state
----
n1: follower term=1 lead=none
n2: follower term=1 lead=1
n3: follower term=1 lead=1

conf-state 1
----
n1: voters={2,3}

tick-election 1
----
ok

tick-election 1
----
ok

raft-state
----
n1: follower term=1 lead=none
n2: follower term=1 lead=1
n3: follower term=1 lead=1

