# Tests MVCC stats calculations when resolving intents. Intermediate states are
# tested through stats traces. Initial state:
#
# (x is tombstone, o---o is range tombstone, [] is intent)
#
# 7 [a7][b7][c7][x] [x] [x] [g7][h7][i7][x] [x] [x] [m7][n7][o7][x] [x] [x]
# 6                                                      n6  x       q6  x
# 5                          o-----------------------------------------------o
# 4                           o------o    o------o    o------o    o------o
# 3                          o-----------------------------------------------o
# 2 
# 1      b1  x       e1  x       h1  x       k1  x
#    a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   p   q   r   s
#
# This uses multiple range tombstones, since the lowest is the one that matters
# for point key GCBytesAge, and to try to provoke bugs when stepping from a lone
# intent with no previous value and landing on a bare range key. It also uses
# points below/above range tombstones, because iterators surface range keys
# separately from point keys, which can cause bugs if callers don't step onto
# the point key. Additionally, it sets a local timestamp for some tombstones, to
# ensure non-empty tombstone values are handled correctly.
#
# TODO(erikgrinaker): This is probably better handled by randomized or
# generative testing, since the combinations are getting unwieldy. But it'll do
# for now.

run stats ok
with ts=1
  put k=b v=b1
  del k=c localTs=0.9
  put k=e v=e1
  del k=f localTs=0.9
  put k=h v=h1
  del k=i localTs=0.9
  put k=k v=k1
  del k=l localTs=0.9
del_range_ts k=g end=s ts=3
del_range_ts k=ggg end=i ts=4
del_range_ts k=jjj end=l ts=4
del_range_ts k=mmm end=o ts=4
del_range_ts k=ppp end=r ts=4
del_range_ts k=g end=s ts=5
with ts=6
  put k=n v=n6
  del k=o localTs=0.9
  put k=q v=q6
  del k=r localTs=0.9
with t=A
  txn_begin ts=7
  put k=a v=a7
  put k=b v=b7
  put k=c v=c7
  del k=d
  del k=e
  del k=f localTs=5.9
  put k=g v=g7
  put k=h v=h7
  put k=i v=i7
  del k=j
  del k=k
  del k=l localTs=5.9
  put k=m v=m7
  put k=n v=n7
  put k=o v=o7
  del k=p
  del k=q
  del k=r localTs=5.9
----
>> put k=b v=b1 ts=1
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21
>> del k=c localTs=0.9 ts=1
del: "c": found key false
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+9 gc_bytes_age=+2277
>> put k=e v=e1 ts=1
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21
>> del k=f localTs=0.9 ts=1
del: "f": found key false
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+9 gc_bytes_age=+2277
>> put k=h v=h1 ts=1
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21
>> del k=i localTs=0.9 ts=1
del: "i": found key false
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+9 gc_bytes_age=+2277
>> put k=k v=k1 ts=1
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21
>> del k=l localTs=0.9 ts=1
del: "l": found key false
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+9 gc_bytes_age=+2277
>> del_range_ts k=g end=s 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=ggg end=i ts=4
stats: range_key_count=+2 range_key_bytes=+39 range_val_count=+3 gc_bytes_age=+3768
>> del_range_ts k=jjj end=l ts=4
stats: range_key_count=+2 range_key_bytes=+39 range_val_count=+3 gc_bytes_age=+3768
>> del_range_ts k=mmm end=o ts=4
stats: range_key_count=+2 range_key_bytes=+39 range_val_count=+3 gc_bytes_age=+3768
>> del_range_ts k=ppp end=r ts=4
stats: range_key_count=+2 range_key_bytes=+39 range_val_count=+3 gc_bytes_age=+3768
>> del_range_ts k=g end=s ts=5
stats: range_key_bytes=+81 range_val_count=+9 gc_bytes_age=+7615
>> put k=n v=n6 ts=6
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21
>> del k=o localTs=0.9 ts=6
del: "o": found key false
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+9 gc_bytes_age=+2162
>> put k=q v=q6 ts=6
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21
>> del k=r localTs=0.9 ts=6
del: "r": found key false
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+9 gc_bytes_age=+2162
>> put k=a v=a7 t=A
put: lock acquisition = {a id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+55 live_count=+1 live_bytes=+69 intent_count=+1 intent_bytes=+19 lock_count=+1 lock_age=+93
>> put k=b v=b7 t=A
put: lock acquisition = {b id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1767 intent_count=+1 intent_bytes=+19 lock_count=+1 lock_age=+93
>> put k=c v=c7 t=A
put: lock acquisition = {c id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_count=+1 live_bytes=+69 gc_bytes_age=-198 intent_count=+1 intent_bytes=+19 lock_count=+1 lock_age=+93
>> del k=d t=A
del: "d": found key false
del: lock acquisition = {d id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 lock_count=+1 lock_age=+93
>> del k=e t=A
del: "e": found key true
del: lock acquisition = {e id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_bytes=+12 val_count=+1 val_bytes=+48 live_count=-1 live_bytes=-21 gc_bytes_age=+7533 intent_count=+1 intent_bytes=+12 lock_count=+1 lock_age=+93
>> del k=f localTs=5.9 t=A
del: "f": found key false
del: lock acquisition = {f id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6777 intent_count=+1 intent_bytes=+25 lock_count=+1 lock_age=+93
>> put k=g v=g7 t=A
put: lock acquisition = {g id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+55 live_count=+1 live_bytes=+69 intent_count=+1 intent_bytes=+19 lock_count=+1 lock_age=+93
>> put k=h v=h7 t=A
put: lock acquisition = {h id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_count=+1 live_bytes=+69 gc_bytes_age=-194 intent_count=+1 intent_bytes=+19 lock_count=+1 lock_age=+93
>> put k=i v=i7 t=A
put: lock acquisition = {i id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_count=+1 live_bytes=+69 gc_bytes_age=-198 intent_count=+1 intent_bytes=+19 lock_count=+1 lock_age=+93
>> del k=j t=A
del: "j": found key false
del: lock acquisition = {j id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 lock_count=+1 lock_age=+93
>> del k=k t=A
del: "k": found key false
del: lock acquisition = {k id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_bytes=+12 val_count=+1 val_bytes=+48 gc_bytes_age=+5572 intent_count=+1 intent_bytes=+12 lock_count=+1 lock_age=+93
>> del k=l localTs=5.9 t=A
del: "l": found key false
del: lock acquisition = {l id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6777 intent_count=+1 intent_bytes=+25 lock_count=+1 lock_age=+93
>> put k=m v=m7 t=A
put: lock acquisition = {m id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+55 live_count=+1 live_bytes=+69 intent_count=+1 intent_bytes=+19 lock_count=+1 lock_age=+93
>> put k=n v=n7 t=A
put: lock acquisition = {n id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1767 intent_count=+1 intent_bytes=+19 lock_count=+1 lock_age=+93
>> put k=o v=o7 t=A
put: lock acquisition = {o id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_count=+1 live_bytes=+69 gc_bytes_age=-188 intent_count=+1 intent_bytes=+19 lock_count=+1 lock_age=+93
>> del k=p t=A
del: "p": found key false
del: lock acquisition = {p id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 lock_count=+1 lock_age=+93
>> del k=q t=A
del: "q": found key true
del: lock acquisition = {q id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_bytes=+12 val_count=+1 val_bytes=+48 live_count=-1 live_bytes=-21 gc_bytes_age=+7533 intent_count=+1 intent_bytes=+12 lock_count=+1 lock_age=+93
>> del k=r localTs=5.9 t=A
del: "r": found key false
del: lock acquisition = {r id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0 Replicated Intent []}
stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6787 intent_count=+1 intent_bytes=+25 lock_count=+1 lock_age=+93
>> at end:
txn: "A" meta={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=7.000000000,0 wto=false gul=0,0
rangekey: g{-gg}/[5.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {ggg-i}/[5.000000000,0=/<empty> 4.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {i-jjj}/[5.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {jjj-l}/[5.000000000,0=/<empty> 4.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {l-mmm}/[5.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {mmm-o}/[5.000000000,0=/<empty> 4.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {o-ppp}/[5.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {ppp-r}/[5.000000000,0=/<empty> 4.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {r-s}/[5.000000000,0=/<empty> 3.000000000,0=/<empty>]
meta: "a"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "a"/7.000000000,0 -> /BYTES/a7
meta: "b"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "b"/7.000000000,0 -> /BYTES/b7
data: "b"/1.000000000,0 -> /BYTES/b1
meta: "c"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "c"/7.000000000,0 -> /BYTES/c7
data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/<empty>
meta: "d"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "d"/7.000000000,0 -> /<empty>
meta: "e"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "e"/7.000000000,0 -> /<empty>
data: "e"/1.000000000,0 -> /BYTES/e1
meta: "f"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=13 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "f"/7.000000000,0 -> {localTs=5.000000009,0}/<empty>
data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/<empty>
meta: "g"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "g"/7.000000000,0 -> /BYTES/g7
meta: "h"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "h"/7.000000000,0 -> /BYTES/h7
data: "h"/1.000000000,0 -> /BYTES/h1
meta: "i"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "i"/7.000000000,0 -> /BYTES/i7
data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/<empty>
meta: "j"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "j"/7.000000000,0 -> /<empty>
meta: "k"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "k"/7.000000000,0 -> /<empty>
data: "k"/1.000000000,0 -> /BYTES/k1
meta: "l"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=13 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "l"/7.000000000,0 -> {localTs=5.000000009,0}/<empty>
data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/<empty>
meta: "m"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "m"/7.000000000,0 -> /BYTES/m7
meta: "n"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "n"/7.000000000,0 -> /BYTES/n7
data: "n"/6.000000000,0 -> /BYTES/n6
meta: "o"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "o"/7.000000000,0 -> /BYTES/o7
data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/<empty>
meta: "p"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "p"/7.000000000,0 -> /<empty>
meta: "q"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "q"/7.000000000,0 -> /<empty>
data: "q"/6.000000000,0 -> /BYTES/q6
meta: "r"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=13 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "r"/7.000000000,0 -> {localTs=5.000000009,0}/<empty>
data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/<empty>
stats: key_count=18 key_bytes=396 val_count=30 val_bytes=1062 range_key_count=9 range_key_bytes=250 range_val_count=22 live_count=9 live_bytes=621 gc_bytes_age=102487 intent_count=18 intent_bytes=318 lock_count=18 lock_age=1674

run stats ok
txn_advance t=A ts=8
resolve_intent_range t=A k=a end=z status=COMMITTED
----
>> resolve_intent_range t=A k=a end=z status=COMMITTED
resolve_intent_range: "a"-"z" -> resolved 18 key(s)
stats: val_bytes=-669 live_bytes=-315 gc_bytes_age=-33241 intent_count=-18 intent_bytes=-318 lock_count=-18 lock_age=-1674
>> at end:
txn: "A" meta={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=8.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=7.000000000,0 wto=false gul=0,0
rangekey: g{-gg}/[5.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {ggg-i}/[5.000000000,0=/<empty> 4.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {i-jjj}/[5.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {jjj-l}/[5.000000000,0=/<empty> 4.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {l-mmm}/[5.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {mmm-o}/[5.000000000,0=/<empty> 4.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {o-ppp}/[5.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {ppp-r}/[5.000000000,0=/<empty> 4.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {r-s}/[5.000000000,0=/<empty> 3.000000000,0=/<empty>]
data: "a"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/a7
data: "b"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/b7
data: "b"/1.000000000,0 -> /BYTES/b1
data: "c"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/c7
data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/<empty>
data: "d"/8.000000000,0 -> {localTs=7.000000000,0}/<empty>
data: "e"/8.000000000,0 -> {localTs=7.000000000,0}/<empty>
data: "e"/1.000000000,0 -> /BYTES/e1
data: "f"/8.000000000,0 -> {localTs=5.000000009,0}/<empty>
data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/<empty>
data: "g"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/g7
data: "h"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/h7
data: "h"/1.000000000,0 -> /BYTES/h1
data: "i"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/i7
data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/<empty>
data: "j"/8.000000000,0 -> {localTs=7.000000000,0}/<empty>
data: "k"/8.000000000,0 -> {localTs=7.000000000,0}/<empty>
data: "k"/1.000000000,0 -> /BYTES/k1
data: "l"/8.000000000,0 -> {localTs=5.000000009,0}/<empty>
data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/<empty>
data: "m"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/m7
data: "n"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/n7
data: "n"/6.000000000,0 -> /BYTES/n6
data: "o"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/o7
data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/<empty>
data: "p"/8.000000000,0 -> {localTs=7.000000000,0}/<empty>
data: "q"/8.000000000,0 -> {localTs=7.000000000,0}/<empty>
data: "q"/6.000000000,0 -> /BYTES/q6
data: "r"/8.000000000,0 -> {localTs=5.000000009,0}/<empty>
data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/<empty>
stats: key_count=18 key_bytes=396 val_count=30 val_bytes=393 range_key_count=9 range_key_bytes=250 range_val_count=22 live_count=9 live_bytes=306 gc_bytes_age=69246

# A second intent resolution should be a noop.
run stats ok
txn_advance t=A ts=9
resolve_intent_range t=A k=a end=z status=COMMITTED
----
>> resolve_intent_range t=A k=a end=z status=COMMITTED
resolve_intent_range: "a"-"z" -> resolved 0 key(s)
stats: no change
>> at end:
txn: "A" meta={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=9.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=7.000000000,0 wto=false gul=0,0
rangekey: g{-gg}/[5.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {ggg-i}/[5.000000000,0=/<empty> 4.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {i-jjj}/[5.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {jjj-l}/[5.000000000,0=/<empty> 4.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {l-mmm}/[5.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {mmm-o}/[5.000000000,0=/<empty> 4.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {o-ppp}/[5.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {ppp-r}/[5.000000000,0=/<empty> 4.000000000,0=/<empty> 3.000000000,0=/<empty>]
rangekey: {r-s}/[5.000000000,0=/<empty> 3.000000000,0=/<empty>]
data: "a"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/a7
data: "b"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/b7
data: "b"/1.000000000,0 -> /BYTES/b1
data: "c"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/c7
data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/<empty>
data: "d"/8.000000000,0 -> {localTs=7.000000000,0}/<empty>
data: "e"/8.000000000,0 -> {localTs=7.000000000,0}/<empty>
data: "e"/1.000000000,0 -> /BYTES/e1
data: "f"/8.000000000,0 -> {localTs=5.000000009,0}/<empty>
data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/<empty>
data: "g"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/g7
data: "h"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/h7
data: "h"/1.000000000,0 -> /BYTES/h1
data: "i"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/i7
data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/<empty>
data: "j"/8.000000000,0 -> {localTs=7.000000000,0}/<empty>
data: "k"/8.000000000,0 -> {localTs=7.000000000,0}/<empty>
data: "k"/1.000000000,0 -> /BYTES/k1
data: "l"/8.000000000,0 -> {localTs=5.000000009,0}/<empty>
data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/<empty>
data: "m"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/m7
data: "n"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/n7
data: "n"/6.000000000,0 -> /BYTES/n6
data: "o"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/o7
data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/<empty>
data: "p"/8.000000000,0 -> {localTs=7.000000000,0}/<empty>
data: "q"/8.000000000,0 -> {localTs=7.000000000,0}/<empty>
data: "q"/6.000000000,0 -> /BYTES/q6
data: "r"/8.000000000,0 -> {localTs=5.000000009,0}/<empty>
data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/<empty>
stats: key_count=18 key_bytes=396 val_count=30 val_bytes=393 range_key_count=9 range_key_bytes=250 range_val_count=22 live_count=9 live_bytes=306 gc_bytes_age=69246
