# Test token bucket that has gone into debt.

# Set up throttling at 1000 tokens/s.
configure
throttle: 1000
----

# Issue 2K RU write that triggers fetch of more tokens and also sets throttle
# rate.
write bytes=2045945
----

wait-for-event
token-bucket-response
----

token-bucket
----
3000.00 tokens filling @ 1000.00 tokens/s (limited to 15000.00 tokens)

# Consume 5K RUs that causes bucket to go into debt.
cpu
15s
----

advance wait=true
1s
----
00:00:01.000

token-bucket
----
0.00 tokens filling @ 1000.00 tokens/s (limited to 15000.00 tokens) (996.67 waiting debt @ 498.33 tokens/s)

# Verify that a small write doesn't have to wait a second for the entire debt
# to be paid.
write bytes=1020 label=w1
----

timers
----
00:00:01.005
00:00:09.000

advance
100ms
----
00:00:01.100

await label=w1
----

token-bucket
----
47.17 tokens filling @ 1000.00 tokens/s (limited to 15000.00 tokens) (946.83 waiting debt @ 498.33 tokens/s)

# Consume enough tokens that the debt cannot be paid within debtApplySecs.
pgwire-egress
4096000
----

advance wait=true
1.5s
----
00:00:02.600

token-bucket
----
-1399.67 tokens filling @ 1000.00 tokens/s (limited to 15000.00 tokens) (2000.00 waiting debt @ 1000.00 tokens/s)

# Advance and ensure that waiting debt is reduced.
advance
400ms
----
00:00:03.000

token-bucket
----
-1399.67 tokens filling @ 1000.00 tokens/s (limited to 15000.00 tokens) (1600.00 waiting debt @ 1000.00 tokens/s)

advance wait=true
1s
----
00:00:04.000

token-bucket
----
-1399.67 tokens filling @ 1000.00 tokens/s (limited to 15000.00 tokens) (600.00 waiting debt @ 300.00 tokens/s)

# Advance again and ensure that both available tokens and waiting debt are
# reduced.
advance wait=true
1s
----
00:00:05.000

token-bucket
----
-699.67 tokens filling @ 1000.00 tokens/s (limited to 15000.00 tokens) (300.00 waiting debt @ 150.00 tokens/s)
