# This test creates send-queues in push and pull mode.
init
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=+16 MiB/+16 MiB ela=+8.0 MiB/+8.0 MiB
       send reg=+16 MiB/+16 MiB ela=+8.0 MiB/+8.0 MiB
t1/s2: eval reg=+16 MiB/+16 MiB ela=+8.0 MiB/+8.0 MiB
       send reg=+16 MiB/+16 MiB ela=+8.0 MiB/+8.0 MiB
t1/s3: eval reg=+16 MiB/+16 MiB ela=+8.0 MiB/+8.0 MiB
       send reg=+16 MiB/+16 MiB ela=+8.0 MiB/+8.0 MiB

# Replica 1 is the leader so sending [1,1) is ignored and everything is
# considered sent (the leader does not see MsgApps for itself).
raft_event
range_id=1
  entries
    term=1 index=1 pri=NormalPri size=1MiB
    term=1 index=2 pri=LowPri size=2MiB
  sending
    replica_id=1 [1,1)
    replica_id=2 [1,3)
    replica_id=3 [1,1)
----
t1/s1: eval reg=+15 MiB/+16 MiB ela=+5.0 MiB/+8.0 MiB
       send reg=+15 MiB/+16 MiB ela=+5.0 MiB/+8.0 MiB
t1/s2: eval reg=+15 MiB/+16 MiB ela=+5.0 MiB/+8.0 MiB
       send reg=+15 MiB/+16 MiB ela=+5.0 MiB/+8.0 MiB
t1/s3: eval reg=+15 MiB/+16 MiB ela=+5.0 MiB/+8.0 MiB
       send reg=+16 MiB/+16 MiB ela=+8.0 MiB/+8.0 MiB

# Replica 3 has a send-queue where one item deduct elastic eval tokens and
# another regular eval tokens.
stream_state range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,3) (3.0 MiB) send_queue=[3,3) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+2.0 MiB
eval original in send-q: reg=+0 B ela=+0 B
LowPri:
  term=1 index=2  tokens=2097152
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n2,s2):2: state=replicate closed=false inflight=[1,3) (3.0 MiB) send_queue=[3,3) precise_q_size=+0 B
eval deducted: reg=+1.0 MiB ela=+2.0 MiB
eval original in send-q: reg=+0 B ela=+0 B
LowPri:
  term=1 index=2  tokens=2097152
NormalPri:
  term=1 index=1  tokens=1048576
++++
(n3,s3):3: state=replicate closed=false inflight=[1,1) send_queue=[1,3) precise_q_size=+3.0 MiB
eval deducted: reg=+1.0 MiB ela=+2.0 MiB
eval original in send-q: reg=+1.0 MiB ela=+2.0 MiB
++++

# Switch to pull mode and add more to the send-queue of replica 3.
raft_event pull-mode
range_id=1
  entries
    term=1 index=3 pri=NormalPri size=1MiB
    term=1 index=4 pri=LowPri size=3MiB
----
t1/s1: eval reg=+14 MiB/+16 MiB ela=+1.0 MiB/+8.0 MiB
       send reg=+14 MiB/+16 MiB ela=+1.0 MiB/+8.0 MiB
t1/s2: eval reg=+14 MiB/+16 MiB ela=+1.0 MiB/+8.0 MiB
       send reg=+14 MiB/+16 MiB ela=+1.0 MiB/+8.0 MiB
t1/s3: eval reg=+16 MiB/+16 MiB ela=+1.0 MiB/+8.0 MiB
       send reg=+16 MiB/+16 MiB ela=+307 KiB/+8.0 MiB

# In pull mode, all entries in the send-queue deduct elastic eval tokens.
# There are enough elastic tokens available in t1/s3 to deduct tokens to later
# send from the send-queue.
stream_state range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,5) (7.0 MiB) send_queue=[5,5) precise_q_size=+0 B
eval deducted: reg=+2.0 MiB ela=+5.0 MiB
eval original in send-q: reg=+0 B ela=+0 B
LowPri:
  term=1 index=2  tokens=2097152
  term=1 index=4  tokens=3145728
NormalPri:
  term=1 index=1  tokens=1048576
  term=1 index=3  tokens=1048576
++++
(n2,s2):2: state=replicate closed=false inflight=[1,5) (7.0 MiB) send_queue=[5,5) precise_q_size=+0 B
eval deducted: reg=+2.0 MiB ela=+5.0 MiB
eval original in send-q: reg=+0 B ela=+0 B
LowPri:
  term=1 index=2  tokens=2097152
  term=1 index=4  tokens=3145728
NormalPri:
  term=1 index=1  tokens=1048576
  term=1 index=3  tokens=1048576
++++
(n3,s3):3: state=replicate closed=false inflight=[1,1) send_queue=[1,5) precise_q_size=+7.0 MiB deducted=+7.7 MiB
eval deducted: reg=+0 B ela=+7.0 MiB
eval original in send-q: reg=+2.0 MiB ela=+5.0 MiB
++++
MsgApps sent in pull mode:
 to: 2, lowPri: false entries: [3 4]
++++
schedule-controller-event-count: 1
scheduled-replicas: 3

# Switch back to push mode and pop index 1 from the send-queue of replica 3.
# The deducted tokens are returned and then 1MiB is deducted for the index 1
# item.
raft_event
range_id=1
  entries
    term=1 index=5 pri=NormalPri size=1MiB
  sending
    replica_id=1 [5,5)
    replica_id=2 [5,6)
    replica_id=3 [1,2)
----
t1/s1: eval reg=+13 MiB/+16 MiB ela=+0 B/+8.0 MiB
       send reg=+13 MiB/+16 MiB ela=+0 B/+8.0 MiB
t1/s2: eval reg=+13 MiB/+16 MiB ela=+0 B/+8.0 MiB
       send reg=+13 MiB/+16 MiB ela=+0 B/+8.0 MiB
t1/s3: eval reg=+13 MiB/+16 MiB ela=+0 B/+8.0 MiB
       send reg=+15 MiB/+16 MiB ela=+7.0 MiB/+8.0 MiB

# The popped item is regular, and is counted as regular since we are in push
# mode.
stream_state range_id=1
----
(n1,s1):1: state=replicate closed=false inflight=[1,6) (8.0 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+3.0 MiB ela=+5.0 MiB
eval original in send-q: reg=+0 B ela=+0 B
LowPri:
  term=1 index=2  tokens=2097152
  term=1 index=4  tokens=3145728
NormalPri:
  term=1 index=1  tokens=1048576
  term=1 index=3  tokens=1048576
  term=1 index=5  tokens=1048576
++++
(n2,s2):2: state=replicate closed=false inflight=[1,6) (8.0 MiB) send_queue=[6,6) precise_q_size=+0 B
eval deducted: reg=+3.0 MiB ela=+5.0 MiB
eval original in send-q: reg=+0 B ela=+0 B
LowPri:
  term=1 index=2  tokens=2097152
  term=1 index=4  tokens=3145728
NormalPri:
  term=1 index=1  tokens=1048576
  term=1 index=3  tokens=1048576
  term=1 index=5  tokens=1048576
++++
(n3,s3):3: state=replicate closed=false inflight=[1,2) (1.0 MiB) send_queue=[2,6) precise_q_size=+7.0 MiB
eval deducted: reg=+3.0 MiB ela=+5.0 MiB
eval original in send-q: reg=+2.0 MiB ela=+5.0 MiB
NormalPri:
  term=1 index=1  tokens=1048576
++++
schedule-controller-event-count: 1
scheduled-replicas: 3
