echo
----
----
-- (Issuing 1x1MiB, 3x replicated write that's not admitted.)


-- Flow token metrics from n1 after issuing 1x1MiB 3x replicated write
-- that's not admitted. We see 1*1MiB*3=3MiB deductions of 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                       | 21 MiB   
  kvflowcontrol.tokens.eval.elastic.deducted                        | 3.0 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                       | 45 MiB   
  kvflowcontrol.tokens.eval.regular.deducted                        | 3.0 MiB  
  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                       | 21 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                        | 0 B      
  kvflowcontrol.tokens.send.elastic.returned.disconnect             | 0 B      
  kvflowcontrol.tokens.send.elastic.unaccounted                     | 0 B      
  kvflowcontrol.tokens.send.regular.available                       | 45 MiB   
  kvflowcontrol.tokens.send.regular.deducted                        | 3.0 MiB  
  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      


-- (Replacing current raft leader on n1 in raft group with new n4 replica.)


-- Flow token metrics from n1 after raft leader removed itself from raft group.
-- All {regular,elastic} tokens deducted are returned. Note that the available
-- tokens increases, as n1 has seen 4 replication streams, s1,s2,s3,s4.
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                       | 32 MiB   
  kvflowcontrol.tokens.eval.elastic.deducted                        | 3.0 MiB  
  kvflowcontrol.tokens.eval.elastic.returned                        | 3.0 MiB  
  kvflowcontrol.tokens.eval.elastic.returned.disconnect             | 3.0 MiB  
  kvflowcontrol.tokens.eval.elastic.unaccounted                     | 0 B      
  kvflowcontrol.tokens.eval.regular.available                       | 64 MiB   
  kvflowcontrol.tokens.eval.regular.deducted                        | 3.0 MiB  
  kvflowcontrol.tokens.eval.regular.returned                        | 3.0 MiB  
  kvflowcontrol.tokens.eval.regular.returned.disconnect             | 3.0 MiB  
  kvflowcontrol.tokens.eval.regular.unaccounted                     | 0 B      
  kvflowcontrol.tokens.send.elastic.available                       | 32 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             | 3.0 MiB  
  kvflowcontrol.tokens.send.elastic.unaccounted                     | 0 B      
  kvflowcontrol.tokens.send.regular.available                       | 64 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             | 3.0 MiB  
  kvflowcontrol.tokens.send.regular.unaccounted                     | 0 B      


-- n1 should have no connected streams now after transferring the lease to n4.
-- While, n4 should have 3 connected streams to s2,s3,s4. Query the stream count
-- on n1, then on n4.
-- n1 connected v2 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  
-----------+---------------


-- n4 connected v2 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             


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


-- Flow token metrics from n1 after work gets admitted. Tokens were already
-- returned earlier, so there's no change.
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                       | 32 MiB   
  kvflowcontrol.tokens.eval.elastic.deducted                        | 3.0 MiB  
  kvflowcontrol.tokens.eval.elastic.returned                        | 3.0 MiB  
  kvflowcontrol.tokens.eval.elastic.returned.disconnect             | 3.0 MiB  
  kvflowcontrol.tokens.eval.elastic.unaccounted                     | 0 B      
  kvflowcontrol.tokens.eval.regular.available                       | 64 MiB   
  kvflowcontrol.tokens.eval.regular.deducted                        | 3.0 MiB  
  kvflowcontrol.tokens.eval.regular.returned                        | 3.0 MiB  
  kvflowcontrol.tokens.eval.regular.returned.disconnect             | 3.0 MiB  
  kvflowcontrol.tokens.eval.regular.unaccounted                     | 0 B      
  kvflowcontrol.tokens.send.elastic.available                       | 32 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             | 3.0 MiB  
  kvflowcontrol.tokens.send.elastic.unaccounted                     | 0 B      
  kvflowcontrol.tokens.send.regular.available                       | 64 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             | 3.0 MiB  
  kvflowcontrol.tokens.send.regular.unaccounted                     | 0 B      
----
----

# vim:ft=sql
