# Initialize a range with three replicas, none of which have send tokens.
init regular_init=0 elastic_init=0
range_id=1 tenant_id=1 local_replica_id=1 next_raft_index=1
  store_id=1 replica_id=1 type=VOTER_FULL state=StateReplicate next=1
  store_id=2 replica_id=2 type=VOTER_FULL state=StateReplicate next=1
  store_id=3 replica_id=3 type=VOTER_FULL state=StateReplicate next=1
----
r1: [(n1,s1):1*,(n2,s2):2,(n3,s3):3]
t1/s1: eval reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
       send reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
t1/s2: eval reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
       send reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
t1/s3: eval reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
       send reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB

# Append five entries. Replica 1 has no send tokens, but is not allowed to
# form a send-queue since it is the leader. Replica 3 also has no send tokens,
# but is not allowed to form a send-queue to maintain quorum.
raft_event pull-mode
range_id=1
  entries
    term=1 index=1 pri=NormalPri size=6MiB
    term=1 index=2 pri=NormalPri size=6MiB
    term=1 index=3 pri=NormalPri size=6MiB
    term=1 index=4 pri=NormalPri size=6MiB
    term=1 index=5 pri=NormalPri size=6MiB
----
t1/s1: eval reg=-30 MiB/+16 MiB ela=-30 MiB/+8.0 MiB
       send reg=-30 MiB/+16 MiB ela=-30 MiB/+8.0 MiB
t1/s2: eval reg=+0 B/+16 MiB ela=-30 MiB/+8.0 MiB
       send reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
t1/s3: eval reg=-30 MiB/+16 MiB ela=-30 MiB/+8.0 MiB
       send reg=-30 MiB/+16 MiB ela=-30 MiB/+8.0 MiB

stream_state range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
(n2,s2):2: state=replicate closed=false inflight=[1,1) send_queue=[1,6) precise_q_size=+30 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+30 MiB
eval original in send-q: reg=+30 MiB ela=+0 B
++++
(n3,s3):3: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
MsgApps sent in pull mode:
 to: 3, lowPri: false entries: [1 2 3 4 5]
++++

# Force flush up to index 2. Replica 2 starts force-flushing.
set_force_flush_index range_id=1 index=2
----
(n1,s1):1: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
(n2,s2):2: state=replicate closed=false inflight=[1,1) send_queue=[1,6) precise_q_size=+30 MiB force-flushing (stop=2)
eval deducted: reg=+0 B ela=+30 MiB
eval original in send-q: reg=+30 MiB ela=+0 B
++++
(n3,s3):3: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
schedule-controller-event-count: 1
scheduled-replicas: 2

# Scheduler event. Entry at index 1 is popped from replica 2.
handle_scheduler_event range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
(n2,s2):2: state=replicate closed=false inflight=[1,2) (6.0 MiB) send_queue=[2,6) precise_q_size=+24 MiB force-flushing (stop=2)
eval deducted: reg=+0 B ela=+30 MiB
eval original in send-q: reg=+24 MiB ela=+0 B
LowPri:
  term=1 index=1  tokens=6291456
++++
(n3,s3):3: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
MsgApps sent in pull mode:
 to: 2, lowPri: true entries: [1]
++++
schedule-controller-event-count: 2
scheduled-replicas: 2

# Scheduler event. Entry at index 2 is popped from replica 2, and force-flush
# stops.
handle_scheduler_event range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
(n2,s2):2: state=replicate closed=false inflight=[1,3) (12 MiB) send_queue=[3,6) precise_q_size=+18 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+30 MiB
eval original in send-q: reg=+18 MiB ela=+0 B
LowPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
++++
(n3,s3):3: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
MsgApps sent in pull mode:
 to: 2, lowPri: true entries: [2]
++++
schedule-controller-event-count: 2

# Force flush up to index 3. Replica 2 starts force-flushing.
set_force_flush_index range_id=1 index=3
----
(n1,s1):1: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
(n2,s2):2: state=replicate closed=false inflight=[1,3) (12 MiB) send_queue=[3,6) precise_q_size=+18 MiB force-flushing (stop=3)
eval deducted: reg=+0 B ela=+30 MiB
eval original in send-q: reg=+18 MiB ela=+0 B
LowPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
++++
(n3,s3):3: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
schedule-controller-event-count: 3
scheduled-replicas: 2

# Scheduler event. Entry at index 3 is popped from replica 2, and force-flush
# stops.
handle_scheduler_event range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
(n2,s2):2: state=replicate closed=false inflight=[1,4) (18 MiB) send_queue=[4,6) precise_q_size=+12 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+30 MiB
eval original in send-q: reg=+12 MiB ela=+0 B
LowPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
++++
(n3,s3):3: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
MsgApps sent in pull mode:
 to: 2, lowPri: true entries: [3]
++++
schedule-controller-event-count: 3

# Force flush up to index 3, which is a noop.
set_force_flush_index range_id=1 index=3
----
(n1,s1):1: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
(n2,s2):2: state=replicate closed=false inflight=[1,4) (18 MiB) send_queue=[4,6) precise_q_size=+12 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+30 MiB
eval original in send-q: reg=+12 MiB ela=+0 B
LowPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
++++
(n3,s3):3: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
schedule-controller-event-count: 3

# Force flush up to index 4. Replica 2 starts force-flushing.
set_force_flush_index range_id=1 index=4
----
(n1,s1):1: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
(n2,s2):2: state=replicate closed=false inflight=[1,4) (18 MiB) send_queue=[4,6) precise_q_size=+12 MiB force-flushing (stop=4)
eval deducted: reg=+0 B ela=+30 MiB
eval original in send-q: reg=+12 MiB ela=+0 B
LowPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
++++
(n3,s3):3: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
schedule-controller-event-count: 4
scheduled-replicas: 2

# Transition replica 3 to StateSnapshot. Replica 2 needs to force-flush, but
# since it is already force-flushing, nothing changes.
set_replicas pull-mode
range_id=1 tenant_id=1 local_replica_id=1 next_raft_index=4
  store_id=1 replica_id=1 type=VOTER_FULL state=StateReplicate next=6
  store_id=2 replica_id=2 type=VOTER_FULL state=StateReplicate next=4
  store_id=3 replica_id=3 type=VOTER_FULL state=StateSnapshot next=6
----
r1: [(n1,s1):1*,(n2,s2):2,(n3,s3):3]

stream_state range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
(n2,s2):2: state=replicate closed=false inflight=[1,4) (18 MiB) send_queue=[4,6) precise_q_size=+12 MiB force-flushing (stop=4)
eval deducted: reg=+0 B ela=+30 MiB
eval original in send-q: reg=+12 MiB ela=+0 B
LowPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
++++
(n3,s3):3: closed
++++
schedule-controller-event-count: 4
scheduled-replicas: 2

# Scheduler event. Entry at index 4 is popped from replica 2, and force-flush
# stops.
handle_scheduler_event range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
(n2,s2):2: state=replicate closed=false inflight=[1,5) (24 MiB) send_queue=[5,6) precise_q_size=+6.0 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+30 MiB
eval original in send-q: reg=+6.0 MiB ela=+0 B
LowPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
++++
(n3,s3):3: closed
++++
MsgApps sent in pull mode:
 to: 2, lowPri: true entries: [4]
++++
schedule-controller-event-count: 4

# Schedule a raft event. It will get replica 2 to start force-flushing again.
raft_event pull-mode
range_id=1
----
t1/s1: eval reg=-30 MiB/+16 MiB ela=-30 MiB/+8.0 MiB
       send reg=-30 MiB/+16 MiB ela=-30 MiB/+8.0 MiB
t1/s2: eval reg=+0 B/+16 MiB ela=-30 MiB/+8.0 MiB
       send reg=+0 B/+16 MiB ela=-24 MiB/+8.0 MiB
t1/s3: eval reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
       send reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB

stream_state range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
(n2,s2):2: state=replicate closed=false inflight=[1,5) (24 MiB) send_queue=[5,6) precise_q_size=+6.0 MiB force-flushing
eval deducted: reg=+0 B ela=+30 MiB
eval original in send-q: reg=+6.0 MiB ela=+0 B
LowPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
++++
(n3,s3):3: closed
++++
schedule-controller-event-count: 5
scheduled-replicas: 2

# Entry 5 is popped and force-flushing stops.
handle_scheduler_event range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+30 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
(n2,s2):2: state=replicate closed=false inflight=[1,6) (30 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+0 B ela=+30 MiB
eval original in send-q: reg=+0 B ela=+0 B
LowPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
++++
(n3,s3):3: closed
++++
MsgApps sent in pull mode:
 to: 2, lowPri: true entries: [5]
++++
schedule-controller-event-count: 5

# Add another entry. Neither replica is allowed to form a send-queue.
raft_event pull-mode
range_id=1
  entries
    term=1 index=6 pri=NormalPri size=6MiB
----
t1/s1: eval reg=-36 MiB/+16 MiB ela=-36 MiB/+8.0 MiB
       send reg=-36 MiB/+16 MiB ela=-36 MiB/+8.0 MiB
t1/s2: eval reg=-6.0 MiB/+16 MiB ela=-36 MiB/+8.0 MiB
       send reg=-6.0 MiB/+16 MiB ela=-36 MiB/+8.0 MiB
t1/s3: eval reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
       send reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB

stream_state range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,7) (36 MiB) send_queue=[7,7) precise_q_size=+0 B
eval deducted: reg=+36 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
  term=1 index=6  tokens=6291456
++++
(n2,s2):2: state=replicate closed=false inflight=[1,7) (36 MiB) send_queue=[7,7) precise_q_size=+0 B
eval deducted: reg=+6.0 MiB ela=+30 MiB
eval original in send-q: reg=+0 B ela=+0 B
LowPri:
  term=1 index=1  tokens=6291456
  term=1 index=2  tokens=6291456
  term=1 index=3  tokens=6291456
  term=1 index=4  tokens=6291456
  term=1 index=5  tokens=6291456
NormalPri:
  term=1 index=6  tokens=6291456
++++
(n3,s3):3: closed
++++
MsgApps sent in pull mode:
 to: 2, lowPri: false entries: [6]
++++
schedule-controller-event-count: 5
