# -- When using v1 encoding (V2EnabledWhenLeaderV1Encoding), all entries which
# -- are subject to admission control are encoded as `raftpb.LowPri`,
# -- regardless of their original priority; to avoid the overhead of
# -- deserializing the raft admission metadata. Therefore, as the underlying
# -- test is shared between the v1 and v2 encoding testdata files, the reader
# -- should interpret any comments referring to regular tokens as referring to
# -- elastic token.
echo
----
----
-- (Issuing 5 1MiB, 3x replicated write that's not admitted.)


-- Flow token metrics from n1 after issuing 5 1MiB 3x replicated writes
-- that are yet to get admitted. We see 5*1MiB*3=15MiB deductions of
-- {regular,elastic} tokens with no corresponding returns.
SELECT name, crdb_internal.humanize_bytes(value::INT8)
    FROM crdb_internal.node_metrics
   WHERE name LIKE '%kvflowcontrol%tokens%'
ORDER BY name ASC;

  kvflowcontrol.tokens.eval.elastic.available                       | 9.0 MiB  
  kvflowcontrol.tokens.eval.elastic.deducted                        | 15 MiB   
  kvflowcontrol.tokens.eval.elastic.returned                        | 0 B      
  kvflowcontrol.tokens.eval.elastic.returned.disconnect             | 0 B      
  kvflowcontrol.tokens.eval.elastic.unaccounted                     | 0 B      
  kvflowcontrol.tokens.eval.regular.available                       | 48 MiB   
  kvflowcontrol.tokens.eval.regular.deducted                        | 0 B      
  kvflowcontrol.tokens.eval.regular.returned                        | 0 B      
  kvflowcontrol.tokens.eval.regular.returned.disconnect             | 0 B      
  kvflowcontrol.tokens.eval.regular.unaccounted                     | 0 B      
  kvflowcontrol.tokens.send.elastic.available                       | 9.0 MiB  
  kvflowcontrol.tokens.send.elastic.deducted                        | 15 MiB   
  kvflowcontrol.tokens.send.elastic.deducted.force_flush_send_queue | 0 B      
  kvflowcontrol.tokens.send.elastic.deducted.prevent_send_queue     | 0 B      
  kvflowcontrol.tokens.send.elastic.returned                        | 0 B      
  kvflowcontrol.tokens.send.elastic.returned.disconnect             | 0 B      
  kvflowcontrol.tokens.send.elastic.unaccounted                     | 0 B      
  kvflowcontrol.tokens.send.regular.available                       | 48 MiB   
  kvflowcontrol.tokens.send.regular.deducted                        | 0 B      
  kvflowcontrol.tokens.send.regular.deducted.prevent_send_queue     | 0 B      
  kvflowcontrol.tokens.send.regular.returned                        | 0 B      
  kvflowcontrol.tokens.send.regular.returned.disconnect             | 0 B      
  kvflowcontrol.tokens.send.regular.unaccounted                     | 0 B      


-- Observe the total tracked tokens per-stream on n1.
SELECT range_id, store_id, crdb_internal.humanize_bytes(total_tracked_tokens::INT8)
    FROM crdb_internal.kv_flow_control_handles_v2

  range_id | store_id | total_tracked_tokens  
-----------+----------+-----------------------
  75       | 1        | 5.0 MiB               
  75       | 2        | 5.0 MiB               
  75       | 3        | 5.0 MiB               


-- Observe the individual tracked tokens per-stream on the scratch range.
SELECT range_id, store_id, priority, crdb_internal.humanize_bytes(tokens::INT8)
    FROM crdb_internal.kv_flow_token_deductions_v2

  range_id | store_id | priority | tokens   
-----------+----------+----------+----------
  75       | 1        | low-pri  | 1.0 MiB  
  75       | 1        | low-pri  | 1.0 MiB  
  75       | 1        | low-pri  | 1.0 MiB  
  75       | 1        | low-pri  | 1.0 MiB  
  75       | 1        | low-pri  | 1.0 MiB  
  75       | 2        | low-pri  | 1.0 MiB  
  75       | 2        | low-pri  | 1.0 MiB  
  75       | 2        | low-pri  | 1.0 MiB  
  75       | 2        | low-pri  | 1.0 MiB  
  75       | 2        | low-pri  | 1.0 MiB  
  75       | 3        | low-pri  | 1.0 MiB  
  75       | 3        | low-pri  | 1.0 MiB  
  75       | 3        | low-pri  | 1.0 MiB  
  75       | 3        | low-pri  | 1.0 MiB  
  75       | 3        | low-pri  | 1.0 MiB  


-- (Allow below-raft admission to proceed.)


-- Flow token metrics from n1 after work gets admitted. We see 15MiB returns of
-- {regular,elastic} tokens, and the available capacities going back to what
-- they were.
SELECT name, crdb_internal.humanize_bytes(value::INT8)
    FROM crdb_internal.node_metrics
   WHERE name LIKE '%kvflowcontrol%tokens%'
ORDER BY name ASC;

  kvflowcontrol.tokens.eval.elastic.available                       | 24 MiB  
  kvflowcontrol.tokens.eval.elastic.deducted                        | 15 MiB  
  kvflowcontrol.tokens.eval.elastic.returned                        | 15 MiB  
  kvflowcontrol.tokens.eval.elastic.returned.disconnect             | 0 B     
  kvflowcontrol.tokens.eval.elastic.unaccounted                     | 0 B     
  kvflowcontrol.tokens.eval.regular.available                       | 48 MiB  
  kvflowcontrol.tokens.eval.regular.deducted                        | 0 B     
  kvflowcontrol.tokens.eval.regular.returned                        | 0 B     
  kvflowcontrol.tokens.eval.regular.returned.disconnect             | 0 B     
  kvflowcontrol.tokens.eval.regular.unaccounted                     | 0 B     
  kvflowcontrol.tokens.send.elastic.available                       | 24 MiB  
  kvflowcontrol.tokens.send.elastic.deducted                        | 15 MiB  
  kvflowcontrol.tokens.send.elastic.deducted.force_flush_send_queue | 0 B     
  kvflowcontrol.tokens.send.elastic.deducted.prevent_send_queue     | 0 B     
  kvflowcontrol.tokens.send.elastic.returned                        | 15 MiB  
  kvflowcontrol.tokens.send.elastic.returned.disconnect             | 0 B     
  kvflowcontrol.tokens.send.elastic.unaccounted                     | 0 B     
  kvflowcontrol.tokens.send.regular.available                       | 48 MiB  
  kvflowcontrol.tokens.send.regular.deducted                        | 0 B     
  kvflowcontrol.tokens.send.regular.deducted.prevent_send_queue     | 0 B     
  kvflowcontrol.tokens.send.regular.returned                        | 0 B     
  kvflowcontrol.tokens.send.regular.returned.disconnect             | 0 B     
  kvflowcontrol.tokens.send.regular.unaccounted                     | 0 B     
----
----

# vim:ft=sql
