# Initialize a range with five 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
  store_id=4 replica_id=4 type=VOTER_FULL state=StateReplicate next=1
  store_id=5 replica_id=5 type=VOTER_FULL state=StateReplicate next=1
----
r1: [(n1,s1):1*,(n2,s2):2,(n3,s3):3,(n4,s4):4,(n5,s5):5]
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
t1/s4: 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/s5: eval reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
       send reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB

# Make replica 2 and 3 have positive send tokens, so they don't form a
# send-queue. Replica 1 can't form a send-queue because it is the leader.
adjust_tokens send
  store_id=2 pri=HighPri tokens=512KiB
  store_id=3 pri=HighPri tokens=512KiB
----
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=+512 KiB/+16 MiB ela=+512 KiB/+8.0 MiB
t1/s3: eval reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
       send reg=+512 KiB/+16 MiB ela=+512 KiB/+8.0 MiB
t1/s4: 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/s5: 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 one entry. Replicas 4, 5 have a send-queue.
raft_event pull-mode
range_id=1
  entries
    term=1 index=1 pri=NormalPri size=1MiB
----
t1/s1: eval reg=-1.0 MiB/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=-1.0 MiB/+16 MiB ela=-1.0 MiB/+8.0 MiB
t1/s2: eval reg=-1.0 MiB/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=-512 KiB/+16 MiB ela=-512 KiB/+8.0 MiB
t1/s3: eval reg=-1.0 MiB/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=-512 KiB/+16 MiB ela=-512 KiB/+8.0 MiB
t1/s4: eval reg=+0 B/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
t1/s5: eval reg=+0 B/+16 MiB ela=-1.0 MiB/+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,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n2,s2):2: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n3,s3):3: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n4,s4):4: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
(n5,s5):5: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
MsgApps sent in pull mode:
 to: 2, lowPri: false entries: [1]
 to: 3, lowPri: false entries: [1]
++++


# Replica 3 transitions to StateSnapshot. Replica 5 is picked to force-flush
# because of the replicaID tiebreaker (both 4 and 5 have the same send and
# eval tokens).
set_replicas pull-mode
range_id=1 tenant_id=1 local_replica_id=1 next_raft_index=2
  store_id=1 replica_id=1 type=VOTER_FULL state=StateReplicate next=2
  store_id=2 replica_id=2 type=VOTER_FULL state=StateReplicate next=2
  store_id=3 replica_id=3 type=VOTER_FULL state=StateSnapshot next=2
  store_id=4 replica_id=4 type=VOTER_FULL state=StateReplicate next=1
  store_id=5 replica_id=5 type=VOTER_FULL state=StateReplicate next=1
----
r1: [(n1,s1):1*,(n2,s2):2,(n3,s3):3,(n4,s4):4,(n5,s5):5]

stream_state range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n2,s2):2: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n3,s3):3: closed
++++
(n4,s4):4: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
(n5,s5):5: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB force-flushing
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
schedule-controller-event-count: 1
scheduled-replicas: 5

metrics type=send_queue
----
kvflowcontrol.send_queue.count                                    : 2
kvflowcontrol.send_queue.bytes                                    : 2097152
kvflowcontrol.send_queue.scheduled.force_flush                    : 1
kvflowcontrol.send_queue.scheduled.deducted_bytes                 : 0
kvflowcontrol.send_queue.prevent.count                            : 0
kvflowcontrol.tokens.send.elastic.deducted.force_flush_send_queue : 0
kvflowcontrol.tokens.send.regular.deducted.prevent_send_queue     : 0
kvflowcontrol.tokens.send.elastic.deducted.prevent_send_queue     : 0

metrics type=range_controller
----
kvflowcontrol.range_controller.count: 1


# Replica 3 transitions back to StateReplicate. Replica 5 is no longer
# force-flushing.
set_replicas pull-mode
range_id=1 tenant_id=1 local_replica_id=1 next_raft_index=2
  store_id=1 replica_id=1 type=VOTER_FULL state=StateReplicate next=2
  store_id=2 replica_id=2 type=VOTER_FULL state=StateReplicate next=2
  store_id=3 replica_id=3 type=VOTER_FULL state=StateReplicate next=2
  store_id=4 replica_id=4 type=VOTER_FULL state=StateReplicate next=1
  store_id=5 replica_id=5 type=VOTER_FULL state=StateReplicate next=1
----
r1: [(n1,s1):1*,(n2,s2):2,(n3,s3):3,(n4,s4):4,(n5,s5):5]

stream_state range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n2,s2):2: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n3,s3):3: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+0 B ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
++++
(n4,s4):4: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
(n5,s5):5: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
schedule-controller-event-count: 1
scheduled-replicas: 5

# Scheduler event doesn't do anything since no one is force-flushing.
handle_scheduler_event range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n2,s2):2: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n3,s3):3: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+0 B ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
++++
(n4,s4):4: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
(n5,s5):5: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
schedule-controller-event-count: 1

# Make replica 5 look more overloaded wrt the bucketed elastic send tokens
# (bucket size is 0.8MiB).
adjust_tokens send
  store_id=5 pri=LowPri tokens=-1MiB
----
t1/s1: eval reg=-1.0 MiB/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=-1.0 MiB/+16 MiB ela=-1.0 MiB/+8.0 MiB
t1/s2: eval reg=-1.0 MiB/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=-512 KiB/+16 MiB ela=-512 KiB/+8.0 MiB
t1/s3: eval reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
       send reg=+512 KiB/+16 MiB ela=+512 KiB/+8.0 MiB
t1/s4: eval reg=+0 B/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
t1/s5: eval reg=+0 B/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=+0 B/+16 MiB ela=-1.0 MiB/+8.0 MiB

# Replica 3 transitions to StateSnapshot again. Replica 4 is picked to
# force-flush since it is less overloaded wrt bucketed elastic send tokens.
set_replicas pull-mode
range_id=1 tenant_id=1 local_replica_id=1 next_raft_index=2
  store_id=1 replica_id=1 type=VOTER_FULL state=StateReplicate next=2
  store_id=2 replica_id=2 type=VOTER_FULL state=StateReplicate next=2
  store_id=3 replica_id=3 type=VOTER_FULL state=StateSnapshot next=2
  store_id=4 replica_id=4 type=VOTER_FULL state=StateReplicate next=1
  store_id=5 replica_id=5 type=VOTER_FULL state=StateReplicate next=1
----
r1: [(n1,s1):1*,(n2,s2):2,(n3,s3):3,(n4,s4):4,(n5,s5):5]

stream_state range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n2,s2):2: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n3,s3):3: closed
++++
(n4,s4):4: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB force-flushing
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
(n5,s5):5: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
schedule-controller-event-count: 2
scheduled-replicas: 4

# Replica 3 transitions back to StateReplicate. Replica 4 is no longer
# force-flushing.
set_replicas pull-mode
range_id=1 tenant_id=1 local_replica_id=1 next_raft_index=2
  store_id=1 replica_id=1 type=VOTER_FULL state=StateReplicate next=2
  store_id=2 replica_id=2 type=VOTER_FULL state=StateReplicate next=2
  store_id=3 replica_id=3 type=VOTER_FULL state=StateReplicate next=2
  store_id=4 replica_id=4 type=VOTER_FULL state=StateReplicate next=1
  store_id=5 replica_id=5 type=VOTER_FULL state=StateReplicate next=1
----
r1: [(n1,s1):1*,(n2,s2):2,(n3,s3):3,(n4,s4):4,(n5,s5):5]

stream_state range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n2,s2):2: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n3,s3):3: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+0 B ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
++++
(n4,s4):4: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
(n5,s5):5: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
schedule-controller-event-count: 2
scheduled-replicas: 4

# Make replica 4 look more overloaded wrt the elastic send tokens, but after
# bucketing, replica 4 and 5 look the same (bucket size is 0.8MiB).
adjust_tokens send
  store_id=4 pri=LowPri tokens=-512KiB
  store_id=5 pri=LowPri tokens=768KiB
----
t1/s1: eval reg=-1.0 MiB/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=-1.0 MiB/+16 MiB ela=-1.0 MiB/+8.0 MiB
t1/s2: eval reg=-1.0 MiB/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=-512 KiB/+16 MiB ela=-512 KiB/+8.0 MiB
t1/s3: eval reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
       send reg=+512 KiB/+16 MiB ela=+512 KiB/+8.0 MiB
t1/s4: eval reg=+0 B/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=+0 B/+16 MiB ela=-512 KiB/+8.0 MiB
t1/s5: eval reg=+0 B/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=+0 B/+16 MiB ela=-256 KiB/+8.0 MiB

# Make replica 5 look more overloaded wrt elastic eval tokens. Since this is
# the second field in the tuple comparison and the first field is equal, this
# field will be used to pick.
adjust_tokens eval
  store_id=5 pri=LowPri tokens=-512KiB
----
t1/s1: eval reg=-1.0 MiB/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=-1.0 MiB/+16 MiB ela=-1.0 MiB/+8.0 MiB
t1/s2: eval reg=-1.0 MiB/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=-512 KiB/+16 MiB ela=-512 KiB/+8.0 MiB
t1/s3: eval reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
       send reg=+512 KiB/+16 MiB ela=+512 KiB/+8.0 MiB
t1/s4: eval reg=+0 B/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=+0 B/+16 MiB ela=-512 KiB/+8.0 MiB
t1/s5: eval reg=+0 B/+16 MiB ela=-1.5 MiB/+8.0 MiB
       send reg=+0 B/+16 MiB ela=-256 KiB/+8.0 MiB

# Replica 3 transitions to StateSnapshot again. Replica 4 is picked to
# force-flush since it is less overloaded wrt elastic eval tokens.
set_replicas pull-mode
range_id=1 tenant_id=1 local_replica_id=1 next_raft_index=2
  store_id=1 replica_id=1 type=VOTER_FULL state=StateReplicate next=2
  store_id=2 replica_id=2 type=VOTER_FULL state=StateReplicate next=2
  store_id=3 replica_id=3 type=VOTER_FULL state=StateSnapshot next=2
  store_id=4 replica_id=4 type=VOTER_FULL state=StateReplicate next=1
  store_id=5 replica_id=5 type=VOTER_FULL state=StateReplicate next=1
----
r1: [(n1,s1):1*,(n2,s2):2,(n3,s3):3,(n4,s4):4,(n5,s5):5]

stream_state range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n2,s2):2: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n3,s3):3: closed
++++
(n4,s4):4: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB force-flushing
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
(n5,s5):5: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
schedule-controller-event-count: 2
scheduled-replicas: 4

# Replica 2 also transitions to StateSnapshot. Replicas 4, 5 are
# force-flushing.
set_replicas pull-mode
range_id=1 tenant_id=1 local_replica_id=1 next_raft_index=2
  store_id=1 replica_id=1 type=VOTER_FULL state=StateReplicate next=2
  store_id=2 replica_id=2 type=VOTER_FULL state=StateSnapshot next=2
  store_id=3 replica_id=3 type=VOTER_FULL state=StateSnapshot next=2
  store_id=4 replica_id=4 type=VOTER_FULL state=StateReplicate next=1
  store_id=5 replica_id=5 type=VOTER_FULL state=StateReplicate next=1
----
r1: [(n1,s1):1*,(n2,s2):2,(n3,s3):3,(n4,s4):4,(n5,s5):5]

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

# Replica 2 transitions back to StateReplicate. Replica 5 is no longer
# force-flushing. Replica 4 continues to force-flush.
set_replicas pull-mode
range_id=1 tenant_id=1 local_replica_id=1 next_raft_index=2
  store_id=1 replica_id=1 type=VOTER_FULL state=StateReplicate next=2
  store_id=2 replica_id=2 type=VOTER_FULL state=StateReplicate next=2
  store_id=3 replica_id=3 type=VOTER_FULL state=StateSnapshot next=2
  store_id=4 replica_id=4 type=VOTER_FULL state=StateReplicate next=1
  store_id=5 replica_id=5 type=VOTER_FULL state=StateReplicate next=1
----
r1: [(n1,s1):1*,(n2,s2):2,(n3,s3):3,(n4,s4):4,(n5,s5):5]

stream_state range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n2,s2):2: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+0 B ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
++++
(n3,s3):3: closed
++++
(n4,s4):4: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB force-flushing
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
(n5,s5):5: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
schedule-controller-event-count: 2
scheduled-replicas: 4 5

# Replica 2 transitions to StateSnapshot. Replica 5 also starts
# force-flushing.
set_replicas pull-mode
range_id=1 tenant_id=1 local_replica_id=1 next_raft_index=2
  store_id=1 replica_id=1 type=VOTER_FULL state=StateReplicate next=2
  store_id=2 replica_id=2 type=VOTER_FULL state=StateSnapshot next=2
  store_id=3 replica_id=3 type=VOTER_FULL state=StateSnapshot next=2
  store_id=4 replica_id=4 type=VOTER_FULL state=StateReplicate next=1
  store_id=5 replica_id=5 type=VOTER_FULL state=StateReplicate next=1
----
r1: [(n1,s1):1*,(n2,s2):2,(n3,s3):3,(n4,s4):4,(n5,s5):5]

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

# Replicas 2, 3 transition back to StateReplicate. Replicas 4, 5 stop
# force-flushing.
set_replicas pull-mode
range_id=1 tenant_id=1 local_replica_id=1 next_raft_index=2
  store_id=1 replica_id=1 type=VOTER_FULL state=StateReplicate next=2
  store_id=2 replica_id=2 type=VOTER_FULL state=StateReplicate next=2
  store_id=3 replica_id=3 type=VOTER_FULL state=StateReplicate next=2
  store_id=4 replica_id=4 type=VOTER_FULL state=StateReplicate next=1
  store_id=5 replica_id=5 type=VOTER_FULL state=StateReplicate next=1
----
r1: [(n1,s1):1*,(n2,s2):2,(n3,s3):3,(n4,s4):4,(n5,s5):5]

stream_state range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n2,s2):2: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+0 B ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
++++
(n3,s3):3: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+0 B ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
++++
(n4,s4):4: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
(n5,s5):5: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB watching-for-tokens
eval deducted: reg=+0 B ela=+1.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
schedule-controller-event-count: 2
scheduled-replicas: 4 5

# Replicas 2, 3 transition back to StateSnapshot. Replicas 4, 5 start
# force-flushing.
set_replicas pull-mode
range_id=1 tenant_id=1 local_replica_id=1 next_raft_index=2
  store_id=1 replica_id=1 type=VOTER_FULL state=StateReplicate next=2
  store_id=2 replica_id=2 type=VOTER_FULL state=StateSnapshot next=2
  store_id=3 replica_id=3 type=VOTER_FULL state=StateSnapshot next=2
  store_id=4 replica_id=4 type=VOTER_FULL state=StateReplicate next=1
  store_id=5 replica_id=5 type=VOTER_FULL state=StateReplicate next=1
----
r1: [(n1,s1):1*,(n2,s2):2,(n3,s3):3,(n4,s4):4,(n5,s5):5]

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

# Push mode. Replicas 4, 5 stop force-flushing in push mode.
raft_event
range_id=1
----
t1/s1: eval reg=-1.0 MiB/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=-1.0 MiB/+16 MiB ela=-1.0 MiB/+8.0 MiB
t1/s2: eval reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
       send reg=+512 KiB/+16 MiB ela=+512 KiB/+8.0 MiB
t1/s3: eval reg=+0 B/+16 MiB ela=+0 B/+8.0 MiB
       send reg=+512 KiB/+16 MiB ela=+512 KiB/+8.0 MiB
t1/s4: eval reg=-1.0 MiB/+16 MiB ela=-1.0 MiB/+8.0 MiB
       send reg=+0 B/+16 MiB ela=-512 KiB/+8.0 MiB
t1/s5: eval reg=-1.0 MiB/+16 MiB ela=-1.5 MiB/+8.0 MiB
       send reg=+0 B/+16 MiB ela=-256 KiB/+8.0 MiB

stream_state range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,2) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+0 B ela=+0 B
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n2,s2):2: closed
++++
(n3,s3):3: closed
++++
(n4,s4):4: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
(n5,s5):5: state=replicate closed=false inflight=[1,1) send_queue=[1,2) precise_q_size=+1.0 MiB
eval deducted: reg=+1.0 MiB ela=+0 B
eval original in send-q: reg=+1.0 MiB ela=+0 B
++++
schedule-controller-event-count: 2
scheduled-replicas: 4 5
