# Tests MVCCClearTimeRange limits.
#
# NB: The behavior here is a bit wonky, in that the batch size is only updated
# (and thus the limits are only checked) after we _flush_ any data, and we're
# allowed to buffer keys up to clearRangeThreshold. Thus, we'll typically only
# flush the buffer when we encounter a non-matching key or a new range key.
# Luckily, we limit the size of the buffer to 64 items for RevertRange, which
# keeps the size from blowing up completely. We keep the current behavior for
# now.
#
# All tests set up the following dataset, where x is tombstone, o-o is range
# tombstone, [] is intent. The dataset is recreated for every test.
#
#  T
#  6                      f6
#  5          o-------------------o           k5
#  4  x   x       d4          x      x
#  3      o-------o   e3  x   o------oi3              o---o
#  2  a2          d2      f2  g2
#  1  o---------------------------------------o
#     a   b   c   d   e   f   g   h   i   j   k   l   m   n

# Clear the entire span using clearRangeThreshold=1, clearRangeThreshold=2, and
# clearRangeThreshold=1000.
run ok
del_range_ts k=a end=k ts=1
put k=a ts=2 v=a2
del k=a ts=4
put k=d ts=2 v=d2
del_range_ts k=b end=d ts=3
del k=b ts=4
put k=d ts=4 v=d4
put k=e ts=3 v=e3
put k=f ts=2 v=f2
del k=f ts=3
put k=g ts=2 v=g2
del_range_ts k=g end=i ts=3
del k=g ts=4
del_range_ts k=c end=h ts=5
put k=f ts=6 v=f6
put k=i ts=3 v=i3
del k=i ts=4
put k=k ts=5 v=k5
del_range_ts k=m end=n ts=3 localTs=2
----
del: "a": found key true
del: "b": found key false
del: "f": found key true
del: "g": found key false
del: "i": found key true
>> at end:
rangekey: {a-b}/[1.000000000,0=/<empty>]
rangekey: {b-c}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {c-d}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {d-g}/[5.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {g-h}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {h-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "a"/4.000000000,0 -> /<empty>
data: "a"/2.000000000,0 -> /BYTES/a2
data: "b"/4.000000000,0 -> /<empty>
data: "d"/4.000000000,0 -> /BYTES/d4
data: "d"/2.000000000,0 -> /BYTES/d2
data: "e"/3.000000000,0 -> /BYTES/e3
data: "f"/6.000000000,0 -> /BYTES/f6
data: "f"/3.000000000,0 -> /<empty>
data: "f"/2.000000000,0 -> /BYTES/f2
data: "g"/4.000000000,0 -> /<empty>
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5

run stats ok
clear_time_range k=a end=z ts=7 targetTs=0 clearRangeThreshold=2
----
>> clear_time_range k=a end=z ts=7 targetTs=0 clearRangeThreshold=2
stats: key_count=-8 key_bytes=-184 val_count=-14 val_bytes=-63 range_key_count=-8 range_key_bytes=-167 range_val_count=-15 range_val_bytes=-13 live_count=-2 live_bytes=-42 gc_bytes_age=-37212
>> at end:
<no data>
stats: 

run ok
del_range_ts k=a end=k ts=1
put k=a ts=2 v=a2
del k=a ts=4
put k=d ts=2 v=d2
del_range_ts k=b end=d ts=3
del k=b ts=4
put k=d ts=4 v=d4
put k=e ts=3 v=e3
put k=f ts=2 v=f2
del k=f ts=3
put k=g ts=2 v=g2
del_range_ts k=g end=i ts=3
del k=g ts=4
del_range_ts k=c end=h ts=5
put k=f ts=6 v=f6
put k=i ts=3 v=i3
del k=i ts=4
put k=k ts=5 v=k5
del_range_ts k=m end=n ts=3 localTs=2
----
del: "a": found key true
del: "b": found key false
del: "f": found key true
del: "g": found key false
del: "i": found key true
>> at end:
rangekey: {a-b}/[1.000000000,0=/<empty>]
rangekey: {b-c}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {c-d}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {d-g}/[5.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {g-h}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {h-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "a"/4.000000000,0 -> /<empty>
data: "a"/2.000000000,0 -> /BYTES/a2
data: "b"/4.000000000,0 -> /<empty>
data: "d"/4.000000000,0 -> /BYTES/d4
data: "d"/2.000000000,0 -> /BYTES/d2
data: "e"/3.000000000,0 -> /BYTES/e3
data: "f"/6.000000000,0 -> /BYTES/f6
data: "f"/3.000000000,0 -> /<empty>
data: "f"/2.000000000,0 -> /BYTES/f2
data: "g"/4.000000000,0 -> /<empty>
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5

run stats ok
clear_time_range k=a end=z ts=7 targetTs=0 clearRangeThreshold=1000
----
>> clear_time_range k=a end=z ts=7 targetTs=0 clearRangeThreshold=1000
stats: key_count=-8 key_bytes=-184 val_count=-14 val_bytes=-63 range_key_count=-8 range_key_bytes=-167 range_val_count=-15 range_val_bytes=-13 live_count=-2 live_bytes=-42 gc_bytes_age=-37212
>> at end:
<no data>
stats: 

run ok
del_range_ts k=a end=k ts=1
put k=a ts=2 v=a2
del k=a ts=4
put k=d ts=2 v=d2
del_range_ts k=b end=d ts=3
del k=b ts=4
put k=d ts=4 v=d4
put k=e ts=3 v=e3
put k=f ts=2 v=f2
del k=f ts=3
put k=g ts=2 v=g2
del_range_ts k=g end=i ts=3
del k=g ts=4
del_range_ts k=c end=h ts=5
put k=f ts=6 v=f6
put k=i ts=3 v=i3
del k=i ts=4
put k=k ts=5 v=k5
del_range_ts k=m end=n ts=3 localTs=2
----
del: "a": found key true
del: "b": found key false
del: "f": found key true
del: "g": found key false
del: "i": found key true
>> at end:
rangekey: {a-b}/[1.000000000,0=/<empty>]
rangekey: {b-c}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {c-d}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {d-g}/[5.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {g-h}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {h-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "a"/4.000000000,0 -> /<empty>
data: "a"/2.000000000,0 -> /BYTES/a2
data: "b"/4.000000000,0 -> /<empty>
data: "d"/4.000000000,0 -> /BYTES/d4
data: "d"/2.000000000,0 -> /BYTES/d2
data: "e"/3.000000000,0 -> /BYTES/e3
data: "f"/6.000000000,0 -> /BYTES/f6
data: "f"/3.000000000,0 -> /<empty>
data: "f"/2.000000000,0 -> /BYTES/f2
data: "g"/4.000000000,0 -> /<empty>
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5

run stats ok
clear_time_range k=a end=z ts=7 targetTs=0 clearRangeThreshold=1
----
>> clear_time_range k=a end=z ts=7 targetTs=0 clearRangeThreshold=1
stats: key_count=-8 key_bytes=-184 val_count=-14 val_bytes=-63 range_key_count=-8 range_key_bytes=-167 range_val_count=-15 range_val_bytes=-13 live_count=-2 live_bytes=-42 gc_bytes_age=-37212
>> at end:
<no data>
stats: 

# Clear the entire span using clearRangeThreshold=1000 and maxBatchSize=3.
run ok
del_range_ts k=a end=k ts=1
put k=a ts=2 v=a2
del k=a ts=4
put k=d ts=2 v=d2
del_range_ts k=b end=d ts=3
del k=b ts=4
put k=d ts=4 v=d4
put k=e ts=3 v=e3
put k=f ts=2 v=f2
del k=f ts=3
put k=g ts=2 v=g2
del_range_ts k=g end=i ts=3
del k=g ts=4
del_range_ts k=c end=h ts=5
put k=f ts=6 v=f6
put k=i ts=3 v=i3
del k=i ts=4
put k=k ts=5 v=k5
del_range_ts k=m end=n ts=3 localTs=2
----
del: "a": found key true
del: "b": found key false
del: "f": found key true
del: "g": found key false
del: "i": found key true
>> at end:
rangekey: {a-b}/[1.000000000,0=/<empty>]
rangekey: {b-c}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {c-d}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {d-g}/[5.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {g-h}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {h-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "a"/4.000000000,0 -> /<empty>
data: "a"/2.000000000,0 -> /BYTES/a2
data: "b"/4.000000000,0 -> /<empty>
data: "d"/4.000000000,0 -> /BYTES/d4
data: "d"/2.000000000,0 -> /BYTES/d2
data: "e"/3.000000000,0 -> /BYTES/e3
data: "f"/6.000000000,0 -> /BYTES/f6
data: "f"/3.000000000,0 -> /<empty>
data: "f"/2.000000000,0 -> /BYTES/f2
data: "g"/4.000000000,0 -> /<empty>
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5

run stats ok
clear_time_range k=a end=z ts=7 targetTs=0 clearRangeThreshold=1000 maxBatchSize=3
----
>> clear_time_range k=a end=z ts=7 targetTs=0 clearRangeThreshold=1000 maxBatchSize=3
clear_time_range: resume="c"
stats: key_count=-2 key_bytes=-40 val_count=-3 val_bytes=-7 range_key_count=-2 range_key_bytes=-35 range_val_count=-3 gc_bytes_age=-7951
>> at end:
rangekey: {c-d}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {d-g}/[5.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {g-h}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {h-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "d"/4.000000000,0 -> /BYTES/d4
data: "d"/2.000000000,0 -> /BYTES/d2
data: "e"/3.000000000,0 -> /BYTES/e3
data: "f"/6.000000000,0 -> /BYTES/f6
data: "f"/3.000000000,0 -> /<empty>
data: "f"/2.000000000,0 -> /BYTES/f2
data: "g"/4.000000000,0 -> /<empty>
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5
stats: key_count=6 key_bytes=144 val_count=11 val_bytes=56 range_key_count=6 range_key_bytes=132 range_val_count=12 range_val_bytes=13 live_count=2 live_bytes=42 gc_bytes_age=29261

run stats ok
clear_time_range k=a end=z ts=7 targetTs=0 clearRangeThreshold=1000 maxBatchSize=3
----
>> clear_time_range k=a end=z ts=7 targetTs=0 clearRangeThreshold=1000 maxBatchSize=3
clear_time_range: resume="d"
stats: range_key_count=-1 range_key_bytes=-31 range_val_count=-3 gc_bytes_age=-2999
>> at end:
rangekey: {d-g}/[5.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {g-h}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {h-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "d"/4.000000000,0 -> /BYTES/d4
data: "d"/2.000000000,0 -> /BYTES/d2
data: "e"/3.000000000,0 -> /BYTES/e3
data: "f"/6.000000000,0 -> /BYTES/f6
data: "f"/3.000000000,0 -> /<empty>
data: "f"/2.000000000,0 -> /BYTES/f2
data: "g"/4.000000000,0 -> /<empty>
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5
stats: key_count=6 key_bytes=144 val_count=11 val_bytes=56 range_key_count=5 range_key_bytes=101 range_val_count=9 range_val_bytes=13 live_count=2 live_bytes=42 gc_bytes_age=26262

run stats ok
clear_time_range k=a end=z ts=7 targetTs=0 clearRangeThreshold=1000 maxBatchSize=3
----
>> clear_time_range k=a end=z ts=7 targetTs=0 clearRangeThreshold=1000 maxBatchSize=3
clear_time_range: resume="h"
stats: key_count=-4 key_bytes=-104 val_count=-8 val_bytes=-42 range_key_count=-2 range_key_bytes=-53 range_val_count=-5 live_count=-1 live_bytes=-21 gc_bytes_age=-17133
>> at end:
rangekey: {h-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5
stats: key_count=2 key_bytes=40 val_count=3 val_bytes=14 range_key_count=3 range_key_bytes=48 range_val_count=4 range_val_bytes=13 live_count=1 live_bytes=21 gc_bytes_age=9129

run stats ok
clear_time_range k=a end=z ts=7 targetTs=0 clearRangeThreshold=1000 maxBatchSize=3
----
>> clear_time_range k=a end=z ts=7 targetTs=0 clearRangeThreshold=1000 maxBatchSize=3
clear_time_range: resume="k"
stats: key_count=-1 key_bytes=-26 val_count=-2 val_bytes=-7 range_key_count=-2 range_key_bytes=-35 range_val_count=-3 gc_bytes_age=-6607
>> at end:
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "k"/5.000000000,0 -> /BYTES/k5
stats: key_count=1 key_bytes=14 val_count=1 val_bytes=7 range_key_count=1 range_key_bytes=13 range_val_count=1 range_val_bytes=13 live_count=1 live_bytes=21 gc_bytes_age=2522

run stats ok
clear_time_range k=a end=z ts=7 targetTs=0 clearRangeThreshold=1000 maxBatchSize=3
----
>> clear_time_range k=a end=z ts=7 targetTs=0 clearRangeThreshold=1000 maxBatchSize=3
stats: key_count=-1 key_bytes=-14 val_count=-1 val_bytes=-7 range_key_count=-1 range_key_bytes=-13 range_val_count=-1 range_val_bytes=-13 live_count=-1 live_bytes=-21 gc_bytes_age=-2522
>> at end:
<no data>
stats: 

# Clear timestamps 4-6 using clearRangeThreshold=1000 and maxBatchSize=3,
# and then the remainder using maxBatchByteSize=1.
run ok
del_range_ts k=a end=k ts=1
put k=a ts=2 v=a2
del k=a ts=4
put k=d ts=2 v=d2
del_range_ts k=b end=d ts=3
del k=b ts=4
put k=d ts=4 v=d4
put k=e ts=3 v=e3
put k=f ts=2 v=f2
del k=f ts=3
put k=g ts=2 v=g2
del_range_ts k=g end=i ts=3
del k=g ts=4
del_range_ts k=c end=h ts=5
put k=f ts=6 v=f6
put k=i ts=3 v=i3
del k=i ts=4
put k=k ts=5 v=k5
del_range_ts k=m end=n ts=3 localTs=2
----
del: "a": found key true
del: "b": found key false
del: "f": found key true
del: "g": found key false
del: "i": found key true
>> at end:
rangekey: {a-b}/[1.000000000,0=/<empty>]
rangekey: {b-c}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {c-d}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {d-g}/[5.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {g-h}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {h-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "a"/4.000000000,0 -> /<empty>
data: "a"/2.000000000,0 -> /BYTES/a2
data: "b"/4.000000000,0 -> /<empty>
data: "d"/4.000000000,0 -> /BYTES/d4
data: "d"/2.000000000,0 -> /BYTES/d2
data: "e"/3.000000000,0 -> /BYTES/e3
data: "f"/6.000000000,0 -> /BYTES/f6
data: "f"/3.000000000,0 -> /<empty>
data: "f"/2.000000000,0 -> /BYTES/f2
data: "g"/4.000000000,0 -> /<empty>
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5

run stats ok
clear_time_range k=a end=z ts=6 targetTs=3 clearRangeThreshold=1000 maxBatchSize=3
----
>> clear_time_range k=a end=z ts=6 targetTs=3 clearRangeThreshold=1000 maxBatchSize=3
clear_time_range: resume="e"
stats: key_count=-1 key_bytes=-38 val_count=-3 val_bytes=-7 range_key_bytes=-18 range_val_count=-2 live_count=+2 live_bytes=+42 gc_bytes_age=-10043
>> at end:
rangekey: {a-b}/[1.000000000,0=/<empty>]
rangekey: {b-d}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {d-e}/[1.000000000,0=/<empty>]
rangekey: {e-g}/[5.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {g-h}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {h-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "a"/2.000000000,0 -> /BYTES/a2
data: "d"/2.000000000,0 -> /BYTES/d2
data: "e"/3.000000000,0 -> /BYTES/e3
data: "f"/6.000000000,0 -> /BYTES/f6
data: "f"/3.000000000,0 -> /<empty>
data: "f"/2.000000000,0 -> /BYTES/f2
data: "g"/4.000000000,0 -> /<empty>
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5
stats: key_count=7 key_bytes=146 val_count=11 val_bytes=56 range_key_count=8 range_key_bytes=149 range_val_count=13 range_val_bytes=13 live_count=4 live_bytes=84 gc_bytes_age=27169

run stats ok
clear_time_range k=a end=z ts=6 targetTs=3 clearRangeThreshold=1000 maxBatchSize=3
----
>> clear_time_range k=a end=z ts=6 targetTs=3 clearRangeThreshold=1000 maxBatchSize=3
clear_time_range: resume="h"
stats: key_bytes=-24 val_count=-2 val_bytes=-7 range_key_count=-2 range_key_bytes=-53 range_val_count=-5 gc_bytes_age=-8076
>> at end:
rangekey: {a-b}/[1.000000000,0=/<empty>]
rangekey: {b-d}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {d-g}/[1.000000000,0=/<empty>]
rangekey: {g-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "a"/2.000000000,0 -> /BYTES/a2
data: "d"/2.000000000,0 -> /BYTES/d2
data: "e"/3.000000000,0 -> /BYTES/e3
data: "f"/3.000000000,0 -> /<empty>
data: "f"/2.000000000,0 -> /BYTES/f2
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5
stats: key_count=7 key_bytes=122 val_count=9 val_bytes=49 range_key_count=6 range_key_bytes=96 range_val_count=8 range_val_bytes=13 live_count=4 live_bytes=84 gc_bytes_age=19093

run stats ok
clear_time_range k=a end=z ts=6 targetTs=3 clearRangeThreshold=1000 maxBatchSize=3
----
>> clear_time_range k=a end=z ts=6 targetTs=3 clearRangeThreshold=1000 maxBatchSize=3
stats: key_count=-1 key_bytes=-26 val_count=-2 val_bytes=-7 gc_bytes_age=-3168
>> at end:
rangekey: {a-b}/[1.000000000,0=/<empty>]
rangekey: {b-d}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {d-g}/[1.000000000,0=/<empty>]
rangekey: {g-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "a"/2.000000000,0 -> /BYTES/a2
data: "d"/2.000000000,0 -> /BYTES/d2
data: "e"/3.000000000,0 -> /BYTES/e3
data: "f"/3.000000000,0 -> /<empty>
data: "f"/2.000000000,0 -> /BYTES/f2
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/3.000000000,0 -> /BYTES/i3
stats: key_count=6 key_bytes=96 val_count=7 val_bytes=42 range_key_count=6 range_key_bytes=96 range_val_count=8 range_val_bytes=13 live_count=4 live_bytes=84 gc_bytes_age=15925

run stats ok
clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchSize=1
----
>> clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchSize=1
clear_time_range: resume="b"
stats: key_count=-1 key_bytes=-14 val_count=-1 val_bytes=-7 range_key_count=-1 range_key_bytes=-13 range_val_count=-1 live_count=-1 live_bytes=-21 gc_bytes_age=-1287
>> at end:
rangekey: {b-d}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {d-g}/[1.000000000,0=/<empty>]
rangekey: {g-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "d"/2.000000000,0 -> /BYTES/d2
data: "e"/3.000000000,0 -> /BYTES/e3
data: "f"/3.000000000,0 -> /<empty>
data: "f"/2.000000000,0 -> /BYTES/f2
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/3.000000000,0 -> /BYTES/i3
stats: key_count=5 key_bytes=82 val_count=6 val_bytes=35 range_key_count=5 range_key_bytes=83 range_val_count=7 range_val_bytes=13 live_count=3 live_bytes=63 gc_bytes_age=14638

run stats ok
clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchSize=1
----
>> clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchSize=1
clear_time_range: resume="d"
stats: range_key_count=-1 range_key_bytes=-22 range_val_count=-2 gc_bytes_age=-2152
>> at end:
rangekey: {d-g}/[1.000000000,0=/<empty>]
rangekey: {g-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "d"/2.000000000,0 -> /BYTES/d2
data: "e"/3.000000000,0 -> /BYTES/e3
data: "f"/3.000000000,0 -> /<empty>
data: "f"/2.000000000,0 -> /BYTES/f2
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/3.000000000,0 -> /BYTES/i3
stats: key_count=5 key_bytes=82 val_count=6 val_bytes=35 range_key_count=4 range_key_bytes=61 range_val_count=5 range_val_bytes=13 live_count=3 live_bytes=63 gc_bytes_age=12486

run stats ok
clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchSize=1
----
>> clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchSize=1
clear_time_range: resume="g"
stats: key_count=-3 key_bytes=-54 val_count=-4 val_bytes=-21 range_key_count=-1 range_key_bytes=-13 range_val_count=-1 live_count=-2 live_bytes=-42 gc_bytes_age=-4488
>> at end:
rangekey: {g-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/3.000000000,0 -> /BYTES/i3
stats: key_count=2 key_bytes=28 val_count=2 val_bytes=14 range_key_count=3 range_key_bytes=48 range_val_count=4 range_val_bytes=13 live_count=1 live_bytes=21 gc_bytes_age=7998

run stats ok
clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchSize=1
----
>> clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchSize=1
clear_time_range: resume="i"
stats: key_count=-1 key_bytes=-14 val_count=-1 val_bytes=-7 range_key_count=-1 range_key_bytes=-22 range_val_count=-2 gc_bytes_age=-4189
>> at end:
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "i"/3.000000000,0 -> /BYTES/i3
stats: key_count=1 key_bytes=14 val_count=1 val_bytes=7 range_key_count=2 range_key_bytes=26 range_val_count=2 range_val_bytes=13 live_count=1 live_bytes=21 gc_bytes_age=3809

run stats ok
clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchSize=1
----
>> clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchSize=1
clear_time_range: resume="m"
stats: key_count=-1 key_bytes=-14 val_count=-1 val_bytes=-7 range_key_count=-1 range_key_bytes=-13 range_val_count=-1 live_count=-1 live_bytes=-21 gc_bytes_age=-1287
>> at end:
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
stats: range_key_count=1 range_key_bytes=13 range_val_count=1 range_val_bytes=13 gc_bytes_age=2522

run stats ok
clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchSize=1
----
>> clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchSize=1
stats: range_key_count=-1 range_key_bytes=-13 range_val_count=-1 range_val_bytes=-13 gc_bytes_age=-2522
>> at end:
<no data>
stats: 

# Clear the entire span using clearRangeThreshold=1000 and maxBatchByteSize=1.
run ok
del_range_ts k=a end=k ts=1
put k=a ts=2 v=a2
del k=a ts=4
put k=d ts=2 v=d2
del_range_ts k=b end=d ts=3
del k=b ts=4
put k=d ts=4 v=d4
put k=e ts=3 v=e3
put k=f ts=2 v=f2
del k=f ts=3
put k=g ts=2 v=g2
del_range_ts k=g end=i ts=3
del k=g ts=4
del_range_ts k=c end=h ts=5
put k=f ts=6 v=f6
put k=i ts=3 v=i3
del k=i ts=4
put k=k ts=5 v=k5
del_range_ts k=m end=n ts=3 localTs=2
----
del: "a": found key true
del: "b": found key false
del: "f": found key true
del: "g": found key false
del: "i": found key true
>> at end:
rangekey: {a-b}/[1.000000000,0=/<empty>]
rangekey: {b-c}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {c-d}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {d-g}/[5.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {g-h}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {h-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "a"/4.000000000,0 -> /<empty>
data: "a"/2.000000000,0 -> /BYTES/a2
data: "b"/4.000000000,0 -> /<empty>
data: "d"/4.000000000,0 -> /BYTES/d4
data: "d"/2.000000000,0 -> /BYTES/d2
data: "e"/3.000000000,0 -> /BYTES/e3
data: "f"/6.000000000,0 -> /BYTES/f6
data: "f"/3.000000000,0 -> /<empty>
data: "f"/2.000000000,0 -> /BYTES/f2
data: "g"/4.000000000,0 -> /<empty>
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5

run stats ok
clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchByteSize=1
----
>> clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchByteSize=1
clear_time_range: resume="b"
stats: key_count=-1 key_bytes=-26 val_count=-2 val_bytes=-7 range_key_count=-1 range_key_bytes=-13 range_val_count=-1 gc_bytes_age=-4455
>> at end:
rangekey: {b-c}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {c-d}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {d-g}/[5.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {g-h}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {h-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "b"/4.000000000,0 -> /<empty>
data: "d"/4.000000000,0 -> /BYTES/d4
data: "d"/2.000000000,0 -> /BYTES/d2
data: "e"/3.000000000,0 -> /BYTES/e3
data: "f"/6.000000000,0 -> /BYTES/f6
data: "f"/3.000000000,0 -> /<empty>
data: "f"/2.000000000,0 -> /BYTES/f2
data: "g"/4.000000000,0 -> /<empty>
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5
stats: key_count=7 key_bytes=158 val_count=12 val_bytes=56 range_key_count=7 range_key_bytes=154 range_val_count=14 range_val_bytes=13 live_count=2 live_bytes=42 gc_bytes_age=32757

run stats ok
clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchByteSize=1
----
>> clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchByteSize=1
clear_time_range: resume="c"
stats: key_count=-1 key_bytes=-14 val_count=-1 range_key_count=-1 range_key_bytes=-22 range_val_count=-2 gc_bytes_age=-3496
>> at end:
rangekey: {c-d}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {d-g}/[5.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {g-h}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {h-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "d"/4.000000000,0 -> /BYTES/d4
data: "d"/2.000000000,0 -> /BYTES/d2
data: "e"/3.000000000,0 -> /BYTES/e3
data: "f"/6.000000000,0 -> /BYTES/f6
data: "f"/3.000000000,0 -> /<empty>
data: "f"/2.000000000,0 -> /BYTES/f2
data: "g"/4.000000000,0 -> /<empty>
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5
stats: key_count=6 key_bytes=144 val_count=11 val_bytes=56 range_key_count=6 range_key_bytes=132 range_val_count=12 range_val_bytes=13 live_count=2 live_bytes=42 gc_bytes_age=29261

run stats ok
clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchByteSize=1
----
>> clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchByteSize=1
clear_time_range: resume="d"
stats: range_key_count=-1 range_key_bytes=-31 range_val_count=-3 gc_bytes_age=-2999
>> at end:
rangekey: {d-g}/[5.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {g-h}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {h-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "d"/4.000000000,0 -> /BYTES/d4
data: "d"/2.000000000,0 -> /BYTES/d2
data: "e"/3.000000000,0 -> /BYTES/e3
data: "f"/6.000000000,0 -> /BYTES/f6
data: "f"/3.000000000,0 -> /<empty>
data: "f"/2.000000000,0 -> /BYTES/f2
data: "g"/4.000000000,0 -> /<empty>
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5
stats: key_count=6 key_bytes=144 val_count=11 val_bytes=56 range_key_count=5 range_key_bytes=101 range_val_count=9 range_val_bytes=13 live_count=2 live_bytes=42 gc_bytes_age=26262

run stats ok
clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchByteSize=1
----
>> clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchByteSize=1
clear_time_range: resume="g"
stats: key_count=-3 key_bytes=-78 val_count=-6 val_bytes=-35 range_key_count=-1 range_key_bytes=-22 range_val_count=-2 live_count=-1 live_bytes=-21 gc_bytes_age=-10947
>> at end:
rangekey: {g-h}/[5.000000000,0=/<empty> 3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {h-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "g"/4.000000000,0 -> /<empty>
data: "g"/2.000000000,0 -> /BYTES/g2
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5
stats: key_count=3 key_bytes=66 val_count=5 val_bytes=21 range_key_count=4 range_key_bytes=79 range_val_count=7 range_val_bytes=13 live_count=1 live_bytes=21 gc_bytes_age=15315

run stats ok
clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchByteSize=1
----
>> clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchByteSize=1
clear_time_range: resume="h"
stats: key_count=-1 key_bytes=-26 val_count=-2 val_bytes=-7 range_key_count=-1 range_key_bytes=-31 range_val_count=-3 gc_bytes_age=-6186
>> at end:
rangekey: {h-i}/[3.000000000,0=/<empty> 1.000000000,0=/<empty>]
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5
stats: key_count=2 key_bytes=40 val_count=3 val_bytes=14 range_key_count=3 range_key_bytes=48 range_val_count=4 range_val_bytes=13 live_count=1 live_bytes=21 gc_bytes_age=9129

run stats ok
clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchByteSize=1
----
>> clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchByteSize=1
clear_time_range: resume="i"
stats: range_key_count=-1 range_key_bytes=-22 range_val_count=-2 gc_bytes_age=-2152
>> at end:
rangekey: {i-k}/[1.000000000,0=/<empty>]
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "i"/4.000000000,0 -> /<empty>
data: "i"/3.000000000,0 -> /BYTES/i3
data: "k"/5.000000000,0 -> /BYTES/k5
stats: key_count=2 key_bytes=40 val_count=3 val_bytes=14 range_key_count=2 range_key_bytes=26 range_val_count=2 range_val_bytes=13 live_count=1 live_bytes=21 gc_bytes_age=6977

run stats ok
clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchByteSize=1
----
>> clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchByteSize=1
clear_time_range: resume="k"
stats: key_count=-1 key_bytes=-26 val_count=-2 val_bytes=-7 range_key_count=-1 range_key_bytes=-13 range_val_count=-1 gc_bytes_age=-4455
>> at end:
rangekey: {m-n}/[3.000000000,0={localTs=2.000000000,0}/<empty>]
data: "k"/5.000000000,0 -> /BYTES/k5
stats: key_count=1 key_bytes=14 val_count=1 val_bytes=7 range_key_count=1 range_key_bytes=13 range_val_count=1 range_val_bytes=13 live_count=1 live_bytes=21 gc_bytes_age=2522

run stats ok
clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchByteSize=1
----
>> clear_time_range k=a end=z ts=6 targetTs=0 clearRangeThreshold=1000 maxBatchByteSize=1
stats: key_count=-1 key_bytes=-14 val_count=-1 val_bytes=-7 range_key_count=-1 range_key_bytes=-13 range_val_count=-1 range_val_bytes=-13 live_count=-1 live_bytes=-21 gc_bytes_age=-2522
>> at end:
<no data>
stats: 
