# Tests basic MVCC stats for put, del, and del_range_ts.
#
# Final state, where x is tombstone, o---o is range tombstone, [] is intent:
#
# 6     b6      d6  e6  f6
# 5         x               x   x   x
# 4             o-----------------------o   Two range tombstones: the lowest is the one
# 3     x   c3  o-----------------------o   that matters for point key GCBytesAge.
# 2     x
# 1     b1  x       e1  x       h1  x
# 0 a0
#   a   b   c   d   e   f   g   h   i   j

run stats ok
put k=a ts=0 v=a0
put k=b ts=1 v=b1
del k=b ts=2
del k=b ts=3
put k=b ts=6 v=b6
del k=c ts=1
put k=c ts=3 v=c3
del k=c ts=5
put k=e ts=1 v=e1
del k=f ts=1
put k=h ts=1 v=h1
del k=i ts=1
del_range_ts k=d end=j ts=3
del_range_ts k=d end=f ts=4 localTs=3 # Write as two to test split/merge.
del_range_ts k=f end=j ts=4 localTs=3
put k=d ts=6 v=d6
put k=e ts=6 v=e6
put k=f ts=6 v=f6
del k=g ts=5
del k=h ts=5
del k=i ts=5
----
>> put k=a ts=0 v=a0
stats: key_count=+1 key_bytes=+2 val_count=+1 val_bytes=+21 live_count=+1 live_bytes=+23
>> put k=b ts=1 v=b1
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21
>> del k=b ts=2
del: "b": found key true
stats: key_bytes=+12 val_count=+1 live_count=-1 live_bytes=-21 gc_bytes_age=+3234
>> del k=b ts=3
del: "b": found key false
stats: key_bytes=+12 val_count=+1 gc_bytes_age=+1162
>> put k=b ts=6 v=b6
stats: key_bytes=+12 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21 gc_bytes_age=-194
>> del k=c ts=1
del: "c": found key false
stats: key_count=+1 key_bytes=+14 val_count=+1 gc_bytes_age=+1386
>> put k=c ts=3 v=c3
stats: key_bytes=+12 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21 gc_bytes_age=-198
>> del k=c ts=5
del: "c": found key true
stats: key_bytes=+12 val_count=+1 live_count=-1 live_bytes=-21 gc_bytes_age=+3135
>> put k=e ts=1 v=e1
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21
>> del k=f ts=1
del: "f": found key false
stats: key_count=+1 key_bytes=+14 val_count=+1 gc_bytes_age=+1386
>> put k=h ts=1 v=h1
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21
>> del k=i ts=1
del: "i": found key false
stats: key_count=+1 key_bytes=+14 val_count=+1 gc_bytes_age=+1386
>> del_range_ts k=d end=j ts=3
stats: range_key_count=+1 range_key_bytes=+13 range_val_count=+1 live_count=-2 live_bytes=-42 gc_bytes_age=+5335
>> del_range_ts k=d end=f ts=4 localTs=3 # Write as two to test split/merge.
stats: range_key_count=+1 range_key_bytes=+22 range_val_count=+2 range_val_bytes=+13 gc_bytes_age=+3369
>> del_range_ts k=f end=j ts=4 localTs=3
stats: range_key_count=-1 range_key_bytes=-13 range_val_count=-1 gc_bytes_age=-1261
>> put k=d ts=6 v=d6
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21
>> put k=e ts=6 v=e6
stats: key_bytes=+12 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21 gc_bytes_age=-194
>> put k=f ts=6 v=f6
stats: key_bytes=+12 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21 gc_bytes_age=-198
>> del k=g ts=5
del: "g": found key false
stats: key_count=+1 key_bytes=+14 val_count=+1 gc_bytes_age=+1330
>> del k=h ts=5
del: "h": found key false
stats: key_bytes=+12 val_count=+1 gc_bytes_age=+1136
>> del k=i ts=5
del: "i": found key false
stats: key_bytes=+12 val_count=+1 gc_bytes_age=+1132
>> at end:
rangekey: {d-j}/[4.000000000,0={localTs=3.000000000,0}/<empty> 3.000000000,0=/<empty>]
meta: "a"/0,0 -> txn={<nil>} ts=0,0 del=false klen=0 vlen=0 raw=/BYTES/a0 mergeTs=<nil> txnDidNotUpdateMeta=false
data: "b"/6.000000000,0 -> /BYTES/b6
data: "b"/3.000000000,0 -> /<empty>
data: "b"/2.000000000,0 -> /<empty>
data: "b"/1.000000000,0 -> /BYTES/b1
data: "c"/5.000000000,0 -> /<empty>
data: "c"/3.000000000,0 -> /BYTES/c3
data: "c"/1.000000000,0 -> /<empty>
data: "d"/6.000000000,0 -> /BYTES/d6
data: "e"/6.000000000,0 -> /BYTES/e6
data: "e"/1.000000000,0 -> /BYTES/e1
data: "f"/6.000000000,0 -> /BYTES/f6
data: "f"/1.000000000,0 -> /<empty>
data: "g"/5.000000000,0 -> /<empty>
data: "h"/5.000000000,0 -> /<empty>
data: "h"/1.000000000,0 -> /BYTES/h1
data: "i"/5.000000000,0 -> /<empty>
data: "i"/1.000000000,0 -> /<empty>
stats: key_count=9 key_bytes=222 val_count=18 val_bytes=77 range_key_count=1 range_key_bytes=22 range_val_count=2 range_val_bytes=13 live_count=5 live_bytes=107 gc_bytes_age=21946

# Finally, let's delete everything -- first in parts, then all again. We can't
# delete the inline value at "a" though.
run stats ok
del_range_ts k=c end=d ts=8 localTs=7
del_range_ts k=e end=f ts=8 localTs=7
del_range_ts k=d end=e ts=8 localTs=7
del_range_ts k=b end=c ts=8 localTs=7
del_range_ts k=f end=j ts=8
del_range_ts k=b end=j ts=9
----
>> del_range_ts k=c end=d ts=8 localTs=7
stats: range_key_count=+1 range_key_bytes=+13 range_val_count=+1 range_val_bytes=+13 gc_bytes_age=+2392
>> del_range_ts k=e end=f ts=8 localTs=7
stats: range_key_count=+2 range_key_bytes=+53 range_val_count=+5 range_val_bytes=+39 live_count=-1 live_bytes=-21 gc_bytes_age=+10678
>> del_range_ts k=d end=e ts=8 localTs=7
stats: range_key_count=-1 range_key_bytes=-22 range_val_count=-2 range_val_bytes=-13 live_count=-1 live_bytes=-21 gc_bytes_age=-1437
>> del_range_ts k=b end=c ts=8 localTs=7
stats: live_count=-1 live_bytes=-21 gc_bytes_age=+1932
>> del_range_ts k=f end=j ts=8
stats: range_key_bytes=+9 range_val_count=+1 live_count=-1 live_bytes=-21 gc_bytes_age=+2744
>> del_range_ts k=b end=j ts=9
stats: range_key_bytes=+27 range_val_count=+3 gc_bytes_age=+2445
>> at end:
rangekey: {b-d}/[9.000000000,0=/<empty> 8.000000000,0={localTs=7.000000000,0}/<empty>]
rangekey: {d-f}/[9.000000000,0=/<empty> 8.000000000,0={localTs=7.000000000,0}/<empty> 4.000000000,0={localTs=3.000000000,0}/<empty> 3.000000000,0=/<empty>]
rangekey: {f-j}/[9.000000000,0=/<empty> 8.000000000,0=/<empty> 4.000000000,0={localTs=3.000000000,0}/<empty> 3.000000000,0=/<empty>]
meta: "a"/0,0 -> txn={<nil>} ts=0,0 del=false klen=0 vlen=0 raw=/BYTES/a0 mergeTs=<nil> txnDidNotUpdateMeta=false
data: "b"/6.000000000,0 -> /BYTES/b6
data: "b"/3.000000000,0 -> /<empty>
data: "b"/2.000000000,0 -> /<empty>
data: "b"/1.000000000,0 -> /BYTES/b1
data: "c"/5.000000000,0 -> /<empty>
data: "c"/3.000000000,0 -> /BYTES/c3
data: "c"/1.000000000,0 -> /<empty>
data: "d"/6.000000000,0 -> /BYTES/d6
data: "e"/6.000000000,0 -> /BYTES/e6
data: "e"/1.000000000,0 -> /BYTES/e1
data: "f"/6.000000000,0 -> /BYTES/f6
data: "f"/1.000000000,0 -> /<empty>
data: "g"/5.000000000,0 -> /<empty>
data: "h"/5.000000000,0 -> /<empty>
data: "h"/1.000000000,0 -> /BYTES/h1
data: "i"/5.000000000,0 -> /<empty>
data: "i"/1.000000000,0 -> /<empty>
stats: key_count=9 key_bytes=222 val_count=18 val_bytes=77 range_key_count=3 range_key_bytes=102 range_val_count=10 range_val_bytes=52 live_count=1 live_bytes=23 gc_bytes_age=40700
