echo
----
----
-- Flow token metrics from n1 after issuing + admitting the 1MiB 3x
-- replicated write to the pre-split range. There should be 3MiB of
-- {regular,elastic} tokens {deducted,returned}.
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                        | 3.0 MiB  
  kvflowcontrol.tokens.eval.elastic.returned                        | 3.0 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                        | 3.0 MiB  
  kvflowcontrol.tokens.eval.regular.returned                        | 3.0 MiB  
  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                        | 3.0 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                        | 3.0 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                        | 3.0 MiB  
  kvflowcontrol.tokens.send.regular.deducted.prevent_send_queue     | 0 B      
  kvflowcontrol.tokens.send.regular.returned                        | 3.0 MiB  
  kvflowcontrol.tokens.send.regular.returned.disconnect             | 0 B      
  kvflowcontrol.tokens.send.regular.unaccounted                     | 0 B      


-- (Splitting range.)


-- Flow token metrics from n1 after further issuing 2MiB and 3MiB writes to
-- post-split LHS and RHS ranges respectively. We should see 15MiB extra tokens
-- {deducted,returned}, which comes from (2MiB+3MiB)*3=15MiB. So we stand at
-- 3MiB+15MiB=18MiB now.
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                        | 18 MiB  
  kvflowcontrol.tokens.eval.elastic.returned                        | 18 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                        | 18 MiB  
  kvflowcontrol.tokens.eval.regular.returned                        | 18 MiB  
  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                        | 18 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                        | 18 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                        | 18 MiB  
  kvflowcontrol.tokens.send.regular.deducted.prevent_send_queue     | 0 B     
  kvflowcontrol.tokens.send.regular.returned                        | 18 MiB  
  kvflowcontrol.tokens.send.regular.returned.disconnect             | 0 B     
  kvflowcontrol.tokens.send.regular.unaccounted                     | 0 B     


-- Observe the newly split off replica, with its own three streams.
SELECT range_id, count(*) AS streams
    FROM crdb_internal.kv_flow_control_handles_v2
GROUP BY (range_id)
ORDER BY streams DESC;

  range_id | stream_count  
-----------+---------------
  75       | 3             
  76       | 3             


-- (Merging ranges.)


-- Flow token metrics from n1 after issuing 4MiB of replicated writes to
-- the post-merged range. We should see 12MiB extra tokens {deducted,returned},
-- which comes from 4MiB*3=12MiB. So we stand at 18MiB+12MiB=30MiB now.
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                        | 30 MiB  
  kvflowcontrol.tokens.eval.elastic.returned                        | 30 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                        | 30 MiB  
  kvflowcontrol.tokens.eval.regular.returned                        | 30 MiB  
  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                        | 30 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                        | 30 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                        | 30 MiB  
  kvflowcontrol.tokens.send.regular.deducted.prevent_send_queue     | 0 B     
  kvflowcontrol.tokens.send.regular.returned                        | 30 MiB  
  kvflowcontrol.tokens.send.regular.returned.disconnect             | 0 B     
  kvflowcontrol.tokens.send.regular.unaccounted                     | 0 B     


-- Observe only the merged replica with its own three streams.
SELECT range_id, count(*) AS streams
    FROM crdb_internal.kv_flow_control_handles_v2
GROUP BY (range_id)
ORDER BY streams DESC;

  range_id | stream_count  
-----------+---------------
  75       | 3             
----
----

# vim:ft=sql
