# -- 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
----
----
-- Flow token metrics, before issuing the 1MiB replicated write.
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                        | 0 B     
  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                       | 24 MiB  
  kvflowcontrol.tokens.send.elastic.deducted                        | 0 B     
  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     


-- (Issuing + admitting a 1MiB, triply replicated write...)


-- Stream counts as seen by n1 post-write. We should see three {regular,elastic}
-- streams given there are three nodes and we're using a replication factor of
-- three.
SELECT name, value
    FROM crdb_internal.node_metrics
   WHERE name LIKE '%kvflowcontrol%stream%'
ORDER BY name ASC;

  kvflowcontrol.streams.eval.elastic.blocked_count | 0  
  kvflowcontrol.streams.eval.elastic.total_count   | 3  
  kvflowcontrol.streams.eval.regular.blocked_count | 0  
  kvflowcontrol.streams.eval.regular.total_count   | 3  
  kvflowcontrol.streams.send.elastic.blocked_count | 0  
  kvflowcontrol.streams.send.elastic.total_count   | 3  
  kvflowcontrol.streams.send.regular.blocked_count | 0  
  kvflowcontrol.streams.send.regular.total_count   | 3  


-- Another view of the stream count, using /inspectz-backed vtables.
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             


-- Flow token metrics from n1 after issuing the 1MiB replicated write,
-- and it being admitted on n1, n2 and n3. We should see 3*1MiB = 3MiB of
-- {regular,elastic} tokens deducted and returned, and {8*3=24MiB,16*3=48MiB} of
-- {regular,elastic} tokens available. Everything should be accounted for.
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                        | 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                        | 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                        | 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
