diff --git a/pkg/storage/testdata/mvcc_histories/delete_range_predicate b/pkg/storage/testdata/mvcc_histories/delete_range_predicate index 043f1368e22c..fab880c3ae7b 100644 --- a/pkg/storage/testdata/mvcc_histories/delete_range_predicate +++ b/pkg/storage/testdata/mvcc_histories/delete_range_predicate @@ -70,7 +70,8 @@ meta: "i"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=7.000000000,0 data: "i"/7.000000000,0 -> /BYTES/i7 stats: key_count=8 key_bytes=160 val_count=12 val_bytes=111 range_key_count=2 range_key_bytes=27 range_val_count=2 live_count=3 live_bytes=111 gc_bytes_age=17863 intent_count=1 intent_bytes=19 separated_intent_count=1 intent_age=93 -# error on intent, no tombstones should be written +# Error on intent, no tombstones should be written. We try both the +# point tombstone and range tombstone paths. run stats error del_range_pred k=a end=p ts=6 startTime=1 ---- @@ -95,6 +96,30 @@ data: "i"/7.000000000,0 -> /BYTES/i7 stats: key_count=8 key_bytes=160 val_count=12 val_bytes=111 range_key_count=2 range_key_bytes=27 range_val_count=2 live_count=3 live_bytes=111 gc_bytes_age=17863 intent_count=1 intent_bytes=19 separated_intent_count=1 intent_age=93 error: (*roachpb.WriteIntentError:) conflicting intents on "i" +run stats error +del_range_pred k=i end=+i ts=6 startTime=1 +---- +>> del_range_pred k=i end=+i ts=6 startTime=1 +stats: no change +>> at end: +rangekey: {f-h\x00}/[5.000000000,0=/] +rangekey: {k-p}/[4.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "b"/3.000000000,0 -> /BYTES/b3 +data: "d"/5.000000000,0 -> / +data: "d"/4.000000000,0 -> /BYTES/d4 +data: "d"/1.000000000,0 -> /BYTES/d1 +data: "e"/2.000000000,0 -> /BYTES/e2 +data: "f"/4.000000000,0 -> /BYTES/f4 +data: "g"/4.000000000,0 -> / +data: "g"/2.000000000,0 -> /BYTES/g2 +data: "h"/4.000000000,0 -> /BYTES/h4 +meta: "i"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "i"/7.000000000,0 -> /BYTES/i7 +stats: key_count=8 key_bytes=160 val_count=12 val_bytes=111 range_key_count=2 range_key_bytes=27 range_val_count=2 live_count=3 live_bytes=111 gc_bytes_age=17863 intent_count=1 intent_bytes=19 separated_intent_count=1 intent_age=93 +error: (*roachpb.WriteIntentError:) conflicting intents on "i" + # error encountering point key at d5. # a tombstone should not get written at c5 or e5, since # DeleteRange didn't flush before reaching d5. diff --git a/pkg/storage/testdata/mvcc_histories/delete_range_predicate_complex b/pkg/storage/testdata/mvcc_histories/delete_range_predicate_complex new file mode 100644 index 000000000000..406238d482dc --- /dev/null +++ b/pkg/storage/testdata/mvcc_histories/delete_range_predicate_complex @@ -0,0 +1,606 @@ +# Tests MVCCPredicateDeleteRange with a more complex dataset. +# +# Sets up the following dataset, where x is tombstone, o-o is range tombstone, [] is intent. +# +# T +# 6 f6 x p6 +# 5 o-------------------o i5 o-----------o +# 4 x x d4 f4 g4 +# 3 o-------o e3 o-------oh3 o---o +# 2 a2 d2 f2 g2 j2 k2 +# 1 o-------------------o o-----------o +# a b c d e f g h i j k l m n o p +# +run stats ok +del_range_ts k=a end=f ts=1 +del_range_ts k=h end=k ts=1 +del_range_ts k=b end=d ts=3 +del_range_ts k=n end=o ts=3 +del_range_ts k=l end=o ts=5 +put k=a ts=2 v=a2 +del k=a ts=4 +del k=b ts=4 +put k=d ts=2 v=d2 +put k=d ts=4 v=d4 +put k=e ts=3 v=e3 +put k=f ts=2 v=f2 +put k=g ts=2 v=g2 +put k=i ts=5 v=i5 +put k=j ts=2 v=j2 +del k=j ts=6 +put k=k ts=2 v=k2 +del_range_ts k=f end=h ts=3 localTs=4 +put k=f ts=4 v=f4 +put k=g ts=4 v=g4 +del_range_ts k=c end=h ts=5 +put k=f ts=6 v=f6 +put k=h ts=3 v=h3 +put k=p ts=6 v=p6 +---- +>> del_range_ts k=a end=f ts=1 +stats: range_key_count=+1 range_key_bytes=+13 range_val_count=+1 gc_bytes_age=+1287 +>> del_range_ts k=h end=k ts=1 +stats: range_key_count=+1 range_key_bytes=+13 range_val_count=+1 gc_bytes_age=+1287 +>> del_range_ts k=b end=d ts=3 +stats: range_key_count=+2 range_key_bytes=+35 range_val_count=+3 gc_bytes_age=+3439 +>> del_range_ts k=n end=o ts=3 +stats: range_key_count=+1 range_key_bytes=+13 range_val_count=+1 gc_bytes_age=+1261 +>> del_range_ts k=l end=o ts=5 +stats: range_key_count=+1 range_key_bytes=+22 range_val_count=+2 gc_bytes_age=+2082 +>> put k=a ts=2 v=a2 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21 +>> del k=a ts=4 +del: "a": found key true +stats: key_bytes=+12 val_count=+1 live_count=-1 live_bytes=-21 gc_bytes_age=+3168 +>> del k=b ts=4 +del: "b": found key false +stats: key_count=+1 key_bytes=+14 val_count=+1 gc_bytes_age=+1344 +>> put k=d ts=2 v=d2 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21 +>> put k=d ts=4 v=d4 +stats: key_bytes=+12 val_count=+1 val_bytes=+7 gc_bytes_age=+1824 +>> put k=e ts=3 v=e3 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21 +>> put k=f ts=2 v=f2 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21 +>> put k=g ts=2 v=g2 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21 +>> put k=i ts=5 v=i5 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21 +>> put k=j ts=2 v=j2 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21 +>> del k=j ts=6 +del: "j": found key true +stats: key_bytes=+12 val_count=+1 live_count=-1 live_bytes=-21 gc_bytes_age=+3102 +>> put k=k ts=2 v=k2 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21 +>> del_range_ts k=f end=h ts=3 localTs=4 +stats: range_key_count=+1 range_key_bytes=+13 range_val_count=+1 live_count=-2 live_bytes=-42 gc_bytes_age=+5335 +>> put k=f ts=4 v=f4 +stats: key_bytes=+12 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21 gc_bytes_age=-194 +>> put k=g ts=4 v=g4 +stats: key_bytes=+12 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21 gc_bytes_age=-194 +>> del_range_ts k=c end=h ts=5 +stats: range_key_count=+1 range_key_bytes=+49 range_val_count=+5 live_count=-4 live_bytes=-84 gc_bytes_age=+12665 +>> 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=-190 +>> put k=h ts=3 v=h3 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21 +>> put k=p ts=6 v=p6 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+7 live_count=+1 live_bytes=+21 +>> at end: +rangekey: {a-b}/[1.000000000,0=/] +rangekey: {b-c}/[3.000000000,0=/ 1.000000000,0=/] +rangekey: {c-d}/[5.000000000,0=/ 3.000000000,0=/ 1.000000000,0=/] +rangekey: {d-f}/[5.000000000,0=/ 1.000000000,0=/] +rangekey: {f-h}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {h-k}/[1.000000000,0=/] +rangekey: {l-n}/[5.000000000,0=/] +rangekey: {n-o}/[5.000000000,0=/ 3.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "b"/4.000000000,0 -> / +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"/4.000000000,0 -> /BYTES/f4 +data: "f"/2.000000000,0 -> /BYTES/f2 +data: "g"/4.000000000,0 -> /BYTES/g4 +data: "g"/2.000000000,0 -> /BYTES/g2 +data: "h"/3.000000000,0 -> /BYTES/h3 +data: "i"/5.000000000,0 -> /BYTES/i5 +data: "j"/6.000000000,0 -> / +data: "j"/2.000000000,0 -> /BYTES/j2 +data: "k"/2.000000000,0 -> /BYTES/k2 +data: "p"/6.000000000,0 -> /BYTES/p6 +stats: key_count=11 key_bytes=226 val_count=17 val_bytes=98 range_key_count=8 range_key_bytes=158 range_val_count=14 live_count=5 live_bytes=105 gc_bytes_age=36216 + +# Delete the entire span, using both point and range tombstones. +run stats ok +del_range_pred k=a end=z ts=10 startTime=0 rangeThreshold=10 +---- +>> del_range_pred k=a end=z ts=10 startTime=0 rangeThreshold=10 +stats: key_bytes=+60 val_count=+5 live_count=-5 live_bytes=-105 gc_bytes_age=+14850 +>> at end: +rangekey: {a-b}/[1.000000000,0=/] +rangekey: {b-c}/[3.000000000,0=/ 1.000000000,0=/] +rangekey: {c-d}/[5.000000000,0=/ 3.000000000,0=/ 1.000000000,0=/] +rangekey: {d-f}/[5.000000000,0=/ 1.000000000,0=/] +rangekey: {f-h}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {h-k}/[1.000000000,0=/] +rangekey: {l-n}/[5.000000000,0=/] +rangekey: {n-o}/[5.000000000,0=/ 3.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "b"/4.000000000,0 -> / +data: "d"/4.000000000,0 -> /BYTES/d4 +data: "d"/2.000000000,0 -> /BYTES/d2 +data: "e"/3.000000000,0 -> /BYTES/e3 +data: "f"/10.000000000,0 -> / +data: "f"/6.000000000,0 -> /BYTES/f6 +data: "f"/4.000000000,0 -> /BYTES/f4 +data: "f"/2.000000000,0 -> /BYTES/f2 +data: "g"/4.000000000,0 -> /BYTES/g4 +data: "g"/2.000000000,0 -> /BYTES/g2 +data: "h"/10.000000000,0 -> / +data: "h"/3.000000000,0 -> /BYTES/h3 +data: "i"/10.000000000,0 -> / +data: "i"/5.000000000,0 -> /BYTES/i5 +data: "j"/6.000000000,0 -> / +data: "j"/2.000000000,0 -> /BYTES/j2 +data: "k"/10.000000000,0 -> / +data: "k"/2.000000000,0 -> /BYTES/k2 +data: "p"/10.000000000,0 -> / +data: "p"/6.000000000,0 -> /BYTES/p6 +stats: key_count=11 key_bytes=286 val_count=22 val_bytes=98 range_key_count=8 range_key_bytes=158 range_val_count=14 gc_bytes_age=51066 + +run stats ok +clear_time_range k=a end=z ts=10 targetTs=6 +---- +>> clear_time_range k=a end=z ts=10 targetTs=6 +stats: key_bytes=-60 val_count=-5 live_count=+5 live_bytes=+105 gc_bytes_age=-14850 +>> at end: +rangekey: {a-b}/[1.000000000,0=/] +rangekey: {b-c}/[3.000000000,0=/ 1.000000000,0=/] +rangekey: {c-d}/[5.000000000,0=/ 3.000000000,0=/ 1.000000000,0=/] +rangekey: {d-f}/[5.000000000,0=/ 1.000000000,0=/] +rangekey: {f-h}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {h-k}/[1.000000000,0=/] +rangekey: {l-n}/[5.000000000,0=/] +rangekey: {n-o}/[5.000000000,0=/ 3.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "b"/4.000000000,0 -> / +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"/4.000000000,0 -> /BYTES/f4 +data: "f"/2.000000000,0 -> /BYTES/f2 +data: "g"/4.000000000,0 -> /BYTES/g4 +data: "g"/2.000000000,0 -> /BYTES/g2 +data: "h"/3.000000000,0 -> /BYTES/h3 +data: "i"/5.000000000,0 -> /BYTES/i5 +data: "j"/6.000000000,0 -> / +data: "j"/2.000000000,0 -> /BYTES/j2 +data: "k"/2.000000000,0 -> /BYTES/k2 +data: "p"/6.000000000,0 -> /BYTES/p6 +stats: key_count=11 key_bytes=226 val_count=17 val_bytes=98 range_key_count=8 range_key_bytes=158 range_val_count=14 live_count=5 live_bytes=105 gc_bytes_age=36216 + +run stats ok +del_range_pred k=a end=z ts=10 startTime=0 rangeThreshold=1 +---- +>> del_range_pred k=a end=z ts=10 startTime=0 rangeThreshold=1 +stats: range_key_count=+2 range_key_bytes=+63 range_val_count=+6 live_count=-5 live_bytes=-105 gc_bytes_age=+15024 +>> at end: +rangekey: {a-b}/[1.000000000,0=/] +rangekey: {b-c}/[3.000000000,0=/ 1.000000000,0=/] +rangekey: {c-d}/[5.000000000,0=/ 3.000000000,0=/ 1.000000000,0=/] +rangekey: {d-f}/[5.000000000,0=/ 1.000000000,0=/] +rangekey: {f-h}/[10.000000000,0=/ 5.000000000,0=/ 3.000000000,0=/] +rangekey: {h-k}/[10.000000000,0=/ 1.000000000,0=/] +rangekey: {k-l}/[10.000000000,0=/] +rangekey: {l-n}/[10.000000000,0=/ 5.000000000,0=/] +rangekey: {n-o}/[10.000000000,0=/ 5.000000000,0=/ 3.000000000,0=/] +rangekey: {o-p\x00}/[10.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "b"/4.000000000,0 -> / +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"/4.000000000,0 -> /BYTES/f4 +data: "f"/2.000000000,0 -> /BYTES/f2 +data: "g"/4.000000000,0 -> /BYTES/g4 +data: "g"/2.000000000,0 -> /BYTES/g2 +data: "h"/3.000000000,0 -> /BYTES/h3 +data: "i"/5.000000000,0 -> /BYTES/i5 +data: "j"/6.000000000,0 -> / +data: "j"/2.000000000,0 -> /BYTES/j2 +data: "k"/2.000000000,0 -> /BYTES/k2 +data: "p"/6.000000000,0 -> /BYTES/p6 +stats: key_count=11 key_bytes=226 val_count=17 val_bytes=98 range_key_count=10 range_key_bytes=221 range_val_count=20 gc_bytes_age=51240 + +run stats ok +clear_time_range k=a end=z ts=10 targetTs=6 +---- +>> clear_time_range k=a end=z ts=10 targetTs=6 +stats: range_key_count=-2 range_key_bytes=-63 range_val_count=-6 live_count=+5 live_bytes=+105 gc_bytes_age=-15024 +>> at end: +rangekey: {a-b}/[1.000000000,0=/] +rangekey: {b-c}/[3.000000000,0=/ 1.000000000,0=/] +rangekey: {c-d}/[5.000000000,0=/ 3.000000000,0=/ 1.000000000,0=/] +rangekey: {d-f}/[5.000000000,0=/ 1.000000000,0=/] +rangekey: {f-h}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {h-k}/[1.000000000,0=/] +rangekey: {l-n}/[5.000000000,0=/] +rangekey: {n-o}/[5.000000000,0=/ 3.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "b"/4.000000000,0 -> / +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"/4.000000000,0 -> /BYTES/f4 +data: "f"/2.000000000,0 -> /BYTES/f2 +data: "g"/4.000000000,0 -> /BYTES/g4 +data: "g"/2.000000000,0 -> /BYTES/g2 +data: "h"/3.000000000,0 -> /BYTES/h3 +data: "i"/5.000000000,0 -> /BYTES/i5 +data: "j"/6.000000000,0 -> / +data: "j"/2.000000000,0 -> /BYTES/j2 +data: "k"/2.000000000,0 -> /BYTES/k2 +data: "p"/6.000000000,0 -> /BYTES/p6 +stats: key_count=11 key_bytes=226 val_count=17 val_bytes=98 range_key_count=8 range_key_bytes=158 range_val_count=14 live_count=5 live_bytes=105 gc_bytes_age=36216 + +# Range tombstone deletion of times (5-10]. +run stats ok +del_range_pred k=a end=z ts=10 startTime=5 rangeThreshold=1 +---- +>> del_range_pred k=a end=z ts=10 startTime=5 rangeThreshold=1 +stats: range_key_count=+2 range_key_bytes=+47 range_val_count=+4 live_count=-2 live_bytes=-42 gc_bytes_age=+8123 +>> at end: +rangekey: {a-b}/[1.000000000,0=/] +rangekey: {b-c}/[3.000000000,0=/ 1.000000000,0=/] +rangekey: {c-d}/[5.000000000,0=/ 3.000000000,0=/ 1.000000000,0=/] +rangekey: {d-f}/[5.000000000,0=/ 1.000000000,0=/] +rangekey: f{-\x00}/[10.000000000,0=/ 5.000000000,0=/ 3.000000000,0=/] +rangekey: {f\x00-h}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {h-k}/[1.000000000,0=/] +rangekey: {l-n}/[5.000000000,0=/] +rangekey: {n-o}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: p{-\x00}/[10.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "b"/4.000000000,0 -> / +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"/4.000000000,0 -> /BYTES/f4 +data: "f"/2.000000000,0 -> /BYTES/f2 +data: "g"/4.000000000,0 -> /BYTES/g4 +data: "g"/2.000000000,0 -> /BYTES/g2 +data: "h"/3.000000000,0 -> /BYTES/h3 +data: "i"/5.000000000,0 -> /BYTES/i5 +data: "j"/6.000000000,0 -> / +data: "j"/2.000000000,0 -> /BYTES/j2 +data: "k"/2.000000000,0 -> /BYTES/k2 +data: "p"/6.000000000,0 -> /BYTES/p6 +stats: key_count=11 key_bytes=226 val_count=17 val_bytes=98 range_key_count=10 range_key_bytes=205 range_val_count=18 live_count=3 live_bytes=63 gc_bytes_age=44339 + +run stats ok +clear_time_range k=a end=z ts=10 targetTs=6 +---- +>> clear_time_range k=a end=z ts=10 targetTs=6 +stats: range_key_count=-2 range_key_bytes=-47 range_val_count=-4 live_count=+2 live_bytes=+42 gc_bytes_age=-8123 +>> at end: +rangekey: {a-b}/[1.000000000,0=/] +rangekey: {b-c}/[3.000000000,0=/ 1.000000000,0=/] +rangekey: {c-d}/[5.000000000,0=/ 3.000000000,0=/ 1.000000000,0=/] +rangekey: {d-f}/[5.000000000,0=/ 1.000000000,0=/] +rangekey: {f-h}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {h-k}/[1.000000000,0=/] +rangekey: {l-n}/[5.000000000,0=/] +rangekey: {n-o}/[5.000000000,0=/ 3.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "b"/4.000000000,0 -> / +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"/4.000000000,0 -> /BYTES/f4 +data: "f"/2.000000000,0 -> /BYTES/f2 +data: "g"/4.000000000,0 -> /BYTES/g4 +data: "g"/2.000000000,0 -> /BYTES/g2 +data: "h"/3.000000000,0 -> /BYTES/h3 +data: "i"/5.000000000,0 -> /BYTES/i5 +data: "j"/6.000000000,0 -> / +data: "j"/2.000000000,0 -> /BYTES/j2 +data: "k"/2.000000000,0 -> /BYTES/k2 +data: "p"/6.000000000,0 -> /BYTES/p6 +stats: key_count=11 key_bytes=226 val_count=17 val_bytes=98 range_key_count=8 range_key_bytes=158 range_val_count=14 live_count=5 live_bytes=105 gc_bytes_age=36216 + +# Range tombstone deletion of times (5-10]. +run stats ok +del_range_pred k=a end=z ts=10 startTime=5 rangeThreshold=1 +---- +>> del_range_pred k=a end=z ts=10 startTime=5 rangeThreshold=1 +stats: range_key_count=+2 range_key_bytes=+47 range_val_count=+4 live_count=-2 live_bytes=-42 gc_bytes_age=+8123 +>> at end: +rangekey: {a-b}/[1.000000000,0=/] +rangekey: {b-c}/[3.000000000,0=/ 1.000000000,0=/] +rangekey: {c-d}/[5.000000000,0=/ 3.000000000,0=/ 1.000000000,0=/] +rangekey: {d-f}/[5.000000000,0=/ 1.000000000,0=/] +rangekey: f{-\x00}/[10.000000000,0=/ 5.000000000,0=/ 3.000000000,0=/] +rangekey: {f\x00-h}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {h-k}/[1.000000000,0=/] +rangekey: {l-n}/[5.000000000,0=/] +rangekey: {n-o}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: p{-\x00}/[10.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "b"/4.000000000,0 -> / +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"/4.000000000,0 -> /BYTES/f4 +data: "f"/2.000000000,0 -> /BYTES/f2 +data: "g"/4.000000000,0 -> /BYTES/g4 +data: "g"/2.000000000,0 -> /BYTES/g2 +data: "h"/3.000000000,0 -> /BYTES/h3 +data: "i"/5.000000000,0 -> /BYTES/i5 +data: "j"/6.000000000,0 -> / +data: "j"/2.000000000,0 -> /BYTES/j2 +data: "k"/2.000000000,0 -> /BYTES/k2 +data: "p"/6.000000000,0 -> /BYTES/p6 +stats: key_count=11 key_bytes=226 val_count=17 val_bytes=98 range_key_count=10 range_key_bytes=205 range_val_count=18 live_count=3 live_bytes=63 gc_bytes_age=44339 + +run stats ok +clear_time_range k=a end=z ts=10 targetTs=6 +---- +>> clear_time_range k=a end=z ts=10 targetTs=6 +stats: range_key_count=-2 range_key_bytes=-47 range_val_count=-4 live_count=+2 live_bytes=+42 gc_bytes_age=-8123 +>> at end: +rangekey: {a-b}/[1.000000000,0=/] +rangekey: {b-c}/[3.000000000,0=/ 1.000000000,0=/] +rangekey: {c-d}/[5.000000000,0=/ 3.000000000,0=/ 1.000000000,0=/] +rangekey: {d-f}/[5.000000000,0=/ 1.000000000,0=/] +rangekey: {f-h}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {h-k}/[1.000000000,0=/] +rangekey: {l-n}/[5.000000000,0=/] +rangekey: {n-o}/[5.000000000,0=/ 3.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "b"/4.000000000,0 -> / +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"/4.000000000,0 -> /BYTES/f4 +data: "f"/2.000000000,0 -> /BYTES/f2 +data: "g"/4.000000000,0 -> /BYTES/g4 +data: "g"/2.000000000,0 -> /BYTES/g2 +data: "h"/3.000000000,0 -> /BYTES/h3 +data: "i"/5.000000000,0 -> /BYTES/i5 +data: "j"/6.000000000,0 -> / +data: "j"/2.000000000,0 -> /BYTES/j2 +data: "k"/2.000000000,0 -> /BYTES/k2 +data: "p"/6.000000000,0 -> /BYTES/p6 +stats: key_count=11 key_bytes=226 val_count=17 val_bytes=98 range_key_count=8 range_key_bytes=158 range_val_count=14 live_count=5 live_bytes=105 gc_bytes_age=36216 + +# Range tombstone deletion of times (4-10]. +run stats ok +del_range_pred k=a end=z ts=10 startTime=4 rangeThreshold=1 +---- +>> del_range_pred k=a end=z ts=10 startTime=4 rangeThreshold=1 +stats: range_key_count=+4 range_key_bytes=+84 range_val_count=+7 live_count=-3 live_bytes=-63 gc_bytes_age=+13550 +>> at end: +rangekey: {a-b}/[1.000000000,0=/] +rangekey: {b-c}/[3.000000000,0=/ 1.000000000,0=/] +rangekey: {c-d}/[5.000000000,0=/ 3.000000000,0=/ 1.000000000,0=/] +rangekey: {d-f}/[5.000000000,0=/ 1.000000000,0=/] +rangekey: f{-\x00}/[10.000000000,0=/ 5.000000000,0=/ 3.000000000,0=/] +rangekey: {f\x00-h}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {h-i}/[1.000000000,0=/] +rangekey: i{-\x00}/[10.000000000,0=/ 1.000000000,0=/] +rangekey: {i\x00-k}/[1.000000000,0=/] +rangekey: {l-n}/[5.000000000,0=/] +rangekey: {n-o}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: p{-\x00}/[10.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "b"/4.000000000,0 -> / +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"/4.000000000,0 -> /BYTES/f4 +data: "f"/2.000000000,0 -> /BYTES/f2 +data: "g"/4.000000000,0 -> /BYTES/g4 +data: "g"/2.000000000,0 -> /BYTES/g2 +data: "h"/3.000000000,0 -> /BYTES/h3 +data: "i"/5.000000000,0 -> /BYTES/i5 +data: "j"/6.000000000,0 -> / +data: "j"/2.000000000,0 -> /BYTES/j2 +data: "k"/2.000000000,0 -> /BYTES/k2 +data: "p"/6.000000000,0 -> /BYTES/p6 +stats: key_count=11 key_bytes=226 val_count=17 val_bytes=98 range_key_count=12 range_key_bytes=242 range_val_count=21 live_count=2 live_bytes=42 gc_bytes_age=49766 + +run stats ok +clear_time_range k=a end=z ts=10 targetTs=6 +---- +>> clear_time_range k=a end=z ts=10 targetTs=6 +stats: range_key_count=-4 range_key_bytes=-84 range_val_count=-7 live_count=+3 live_bytes=+63 gc_bytes_age=-13550 +>> at end: +rangekey: {a-b}/[1.000000000,0=/] +rangekey: {b-c}/[3.000000000,0=/ 1.000000000,0=/] +rangekey: {c-d}/[5.000000000,0=/ 3.000000000,0=/ 1.000000000,0=/] +rangekey: {d-f}/[5.000000000,0=/ 1.000000000,0=/] +rangekey: {f-h}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {h-k}/[1.000000000,0=/] +rangekey: {l-n}/[5.000000000,0=/] +rangekey: {n-o}/[5.000000000,0=/ 3.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "b"/4.000000000,0 -> / +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"/4.000000000,0 -> /BYTES/f4 +data: "f"/2.000000000,0 -> /BYTES/f2 +data: "g"/4.000000000,0 -> /BYTES/g4 +data: "g"/2.000000000,0 -> /BYTES/g2 +data: "h"/3.000000000,0 -> /BYTES/h3 +data: "i"/5.000000000,0 -> /BYTES/i5 +data: "j"/6.000000000,0 -> / +data: "j"/2.000000000,0 -> /BYTES/j2 +data: "k"/2.000000000,0 -> /BYTES/k2 +data: "p"/6.000000000,0 -> /BYTES/p6 +stats: key_count=11 key_bytes=226 val_count=17 val_bytes=98 range_key_count=8 range_key_bytes=158 range_val_count=14 live_count=5 live_bytes=105 gc_bytes_age=36216 + +# Range tombstone deletion of times (3-10]. +run stats ok +del_range_pred k=a end=z ts=10 startTime=3 rangeThreshold=1 +---- +>> del_range_pred k=a end=z ts=10 startTime=3 rangeThreshold=1 +stats: range_key_count=+4 range_key_bytes=+84 range_val_count=+7 live_count=-3 live_bytes=-63 gc_bytes_age=+13550 +>> at end: +rangekey: {a-b}/[1.000000000,0=/] +rangekey: {b-c}/[3.000000000,0=/ 1.000000000,0=/] +rangekey: {c-d}/[5.000000000,0=/ 3.000000000,0=/ 1.000000000,0=/] +rangekey: {d-f}/[5.000000000,0=/ 1.000000000,0=/] +rangekey: f{-\x00}/[10.000000000,0=/ 5.000000000,0=/ 3.000000000,0=/] +rangekey: {f\x00-h}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {h-i}/[1.000000000,0=/] +rangekey: i{-\x00}/[10.000000000,0=/ 1.000000000,0=/] +rangekey: {i\x00-k}/[1.000000000,0=/] +rangekey: {l-n}/[5.000000000,0=/] +rangekey: {n-o}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: p{-\x00}/[10.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "b"/4.000000000,0 -> / +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"/4.000000000,0 -> /BYTES/f4 +data: "f"/2.000000000,0 -> /BYTES/f2 +data: "g"/4.000000000,0 -> /BYTES/g4 +data: "g"/2.000000000,0 -> /BYTES/g2 +data: "h"/3.000000000,0 -> /BYTES/h3 +data: "i"/5.000000000,0 -> /BYTES/i5 +data: "j"/6.000000000,0 -> / +data: "j"/2.000000000,0 -> /BYTES/j2 +data: "k"/2.000000000,0 -> /BYTES/k2 +data: "p"/6.000000000,0 -> /BYTES/p6 +stats: key_count=11 key_bytes=226 val_count=17 val_bytes=98 range_key_count=12 range_key_bytes=242 range_val_count=21 live_count=2 live_bytes=42 gc_bytes_age=49766 + +run stats ok +clear_time_range k=a end=z ts=10 targetTs=6 +---- +>> clear_time_range k=a end=z ts=10 targetTs=6 +stats: range_key_count=-4 range_key_bytes=-84 range_val_count=-7 live_count=+3 live_bytes=+63 gc_bytes_age=-13550 +>> at end: +rangekey: {a-b}/[1.000000000,0=/] +rangekey: {b-c}/[3.000000000,0=/ 1.000000000,0=/] +rangekey: {c-d}/[5.000000000,0=/ 3.000000000,0=/ 1.000000000,0=/] +rangekey: {d-f}/[5.000000000,0=/ 1.000000000,0=/] +rangekey: {f-h}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {h-k}/[1.000000000,0=/] +rangekey: {l-n}/[5.000000000,0=/] +rangekey: {n-o}/[5.000000000,0=/ 3.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "b"/4.000000000,0 -> / +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"/4.000000000,0 -> /BYTES/f4 +data: "f"/2.000000000,0 -> /BYTES/f2 +data: "g"/4.000000000,0 -> /BYTES/g4 +data: "g"/2.000000000,0 -> /BYTES/g2 +data: "h"/3.000000000,0 -> /BYTES/h3 +data: "i"/5.000000000,0 -> /BYTES/i5 +data: "j"/6.000000000,0 -> / +data: "j"/2.000000000,0 -> /BYTES/j2 +data: "k"/2.000000000,0 -> /BYTES/k2 +data: "p"/6.000000000,0 -> /BYTES/p6 +stats: key_count=11 key_bytes=226 val_count=17 val_bytes=98 range_key_count=8 range_key_bytes=158 range_val_count=14 live_count=5 live_bytes=105 gc_bytes_age=36216 + +# Range tombstone deletion of times (2-10]. +run stats ok +del_range_pred k=a end=z ts=10 startTime=2 rangeThreshold=1 +---- +>> del_range_pred k=a end=z ts=10 startTime=2 rangeThreshold=1 +stats: range_key_count=+2 range_key_bytes=+47 range_val_count=+4 live_count=-4 live_bytes=-84 gc_bytes_age=+11860 +>> at end: +rangekey: {a-b}/[1.000000000,0=/] +rangekey: {b-c}/[3.000000000,0=/ 1.000000000,0=/] +rangekey: {c-d}/[5.000000000,0=/ 3.000000000,0=/ 1.000000000,0=/] +rangekey: {d-f}/[5.000000000,0=/ 1.000000000,0=/] +rangekey: {f-h}/[10.000000000,0=/ 5.000000000,0=/ 3.000000000,0=/] +rangekey: {h-i\x00}/[10.000000000,0=/ 1.000000000,0=/] +rangekey: {i\x00-k}/[1.000000000,0=/] +rangekey: {l-n}/[5.000000000,0=/] +rangekey: {n-o}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: p{-\x00}/[10.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "b"/4.000000000,0 -> / +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"/4.000000000,0 -> /BYTES/f4 +data: "f"/2.000000000,0 -> /BYTES/f2 +data: "g"/4.000000000,0 -> /BYTES/g4 +data: "g"/2.000000000,0 -> /BYTES/g2 +data: "h"/3.000000000,0 -> /BYTES/h3 +data: "i"/5.000000000,0 -> /BYTES/i5 +data: "j"/6.000000000,0 -> / +data: "j"/2.000000000,0 -> /BYTES/j2 +data: "k"/2.000000000,0 -> /BYTES/k2 +data: "p"/6.000000000,0 -> /BYTES/p6 +stats: key_count=11 key_bytes=226 val_count=17 val_bytes=98 range_key_count=10 range_key_bytes=205 range_val_count=18 live_count=1 live_bytes=21 gc_bytes_age=48076 + +run stats ok +clear_time_range k=a end=z ts=10 targetTs=6 +---- +>> clear_time_range k=a end=z ts=10 targetTs=6 +stats: range_key_count=-2 range_key_bytes=-47 range_val_count=-4 live_count=+4 live_bytes=+84 gc_bytes_age=-11860 +>> at end: +rangekey: {a-b}/[1.000000000,0=/] +rangekey: {b-c}/[3.000000000,0=/ 1.000000000,0=/] +rangekey: {c-d}/[5.000000000,0=/ 3.000000000,0=/ 1.000000000,0=/] +rangekey: {d-f}/[5.000000000,0=/ 1.000000000,0=/] +rangekey: {f-h}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {h-k}/[1.000000000,0=/] +rangekey: {l-n}/[5.000000000,0=/] +rangekey: {n-o}/[5.000000000,0=/ 3.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "b"/4.000000000,0 -> / +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"/4.000000000,0 -> /BYTES/f4 +data: "f"/2.000000000,0 -> /BYTES/f2 +data: "g"/4.000000000,0 -> /BYTES/g4 +data: "g"/2.000000000,0 -> /BYTES/g2 +data: "h"/3.000000000,0 -> /BYTES/h3 +data: "i"/5.000000000,0 -> /BYTES/i5 +data: "j"/6.000000000,0 -> / +data: "j"/2.000000000,0 -> /BYTES/j2 +data: "k"/2.000000000,0 -> /BYTES/k2 +data: "p"/6.000000000,0 -> /BYTES/p6 +stats: key_count=11 key_bytes=226 val_count=17 val_bytes=98 range_key_count=8 range_key_bytes=158 range_val_count=14 live_count=5 live_bytes=105 gc_bytes_age=36216 diff --git a/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_abort b/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_abort index 65f85ce3dbb9..1a9794ac305a 100644 --- a/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_abort +++ b/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_abort @@ -3,20 +3,22 @@ # # (x is tombstone, o---o is range tombstone, [] is intent) # -# 6 [a6][b6][c6][x] [x] [x] [g6][h6][i6][x] [x] [x] [m6][n6][o6][x] [x] [x] -# 5 n5 x q5 x -# 4 o-----------------------------------------------o +# 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 two range tombstones, since the lowest is the one that matters for -# point key GCBytesAge. 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. +# 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 @@ -33,29 +35,33 @@ with ts=1 put k=k v=k1 del k=l localTs=0.9 del_range_ts k=g end=s ts=3 -del_range_ts k=g end=s ts=4 -with ts=5 - put k=n v=n5 +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=q5 + put k=q v=q6 del k=r localTs=0.9 with t=A - txn_begin ts=6 - put k=a v=a6 - put k=b v=b6 - put k=c v=c6 + 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=g6 - put k=h v=h6 - put k=i v=i6 + 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=m6 - put k=n v=n6 - put k=o v=o6 + 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 @@ -82,115 +88,131 @@ 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=g end=s ts=4 -stats: range_key_bytes=+9 range_val_count=+1 gc_bytes_age=+860 ->> put k=n v=n5 ts=5 +>> 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=5 +>> 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=+2185 ->> put k=q v=q5 ts=5 +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=5 +>> 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=+2185 ->> put k=a v=a6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=b v=b6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1786 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 ->> put k=c v=c6 t=A -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 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+9 gc_bytes_age=+2162 +>> put k=a v=a7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=b v=b7 t=A +stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1767 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+93 +>> put k=c v=c7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=d t=A del: "d": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=e t=A del: "e": found key true -stats: key_bytes=+12 val_count=+1 val_bytes=+48 live_count=-1 live_bytes=-21 gc_bytes_age=+7614 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +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 separated_intent_count=+1 intent_age=+93 >> del k=f localTs=5.9 t=A del: "f": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6852 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 ->> put k=g v=g6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=h v=h6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=i v=i6 t=A -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 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6777 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 +>> put k=g v=g7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=h v=h7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=i v=i7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=j t=A del: "j": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=k t=A del: "k": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+48 gc_bytes_age=+5634 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+48 gc_bytes_age=+5572 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=l localTs=5.9 t=A del: "l": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6852 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 ->> put k=m v=m6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=n v=n6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1786 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 ->> put k=o v=o6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_count=+1 live_bytes=+69 gc_bytes_age=-190 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6777 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 +>> put k=m v=m7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=n v=n7 t=A +stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1767 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+93 +>> put k=o v=o7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=p t=A del: "p": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=q t=A del: "q": found key true -stats: key_bytes=+12 val_count=+1 val_bytes=+48 live_count=-1 live_bytes=-21 gc_bytes_age=+7614 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +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 separated_intent_count=+1 intent_age=+93 >> del k=r localTs=5.9 t=A del: "r": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6860 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6787 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 >> at end: -txn: "A" meta={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=6.000000000,0 wto=false gul=0,0 -rangekey: {g-s}/[4.000000000,0=/ 3.000000000,0=/] -meta: "a"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "a"/6.000000000,0 -> /BYTES/a6 -meta: "b"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "b"/6.000000000,0 -> /BYTES/b6 +txn: "A" meta={id=00000000 key=/Min 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=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +meta: "a"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "a"/7.000000000,0 -> /BYTES/a7 +meta: "b"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "b"/7.000000000,0 -> /BYTES/b7 data: "b"/1.000000000,0 -> /BYTES/b1 -meta: "c"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "c"/6.000000000,0 -> /BYTES/c6 +meta: "c"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "c"/7.000000000,0 -> /BYTES/c7 data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "d"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "d"/6.000000000,0 -> / -meta: "e"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "e"/6.000000000,0 -> / +meta: "d"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "d"/7.000000000,0 -> / +meta: "e"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "e"/7.000000000,0 -> / data: "e"/1.000000000,0 -> /BYTES/e1 -meta: "f"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "f"/6.000000000,0 -> {localTs=5.000000009,0}/ +meta: "f"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "f"/7.000000000,0 -> {localTs=5.000000009,0}/ data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "g"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "g"/6.000000000,0 -> /BYTES/g6 -meta: "h"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "h"/6.000000000,0 -> /BYTES/h6 +meta: "g"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "g"/7.000000000,0 -> /BYTES/g7 +meta: "h"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "h"/7.000000000,0 -> /BYTES/h7 data: "h"/1.000000000,0 -> /BYTES/h1 -meta: "i"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "i"/6.000000000,0 -> /BYTES/i6 +meta: "i"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "i"/7.000000000,0 -> /BYTES/i7 data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "j"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "j"/6.000000000,0 -> / -meta: "k"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "k"/6.000000000,0 -> / +meta: "j"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "j"/7.000000000,0 -> / +meta: "k"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "k"/7.000000000,0 -> / data: "k"/1.000000000,0 -> /BYTES/k1 -meta: "l"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "l"/6.000000000,0 -> {localTs=5.000000009,0}/ +meta: "l"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "l"/7.000000000,0 -> {localTs=5.000000009,0}/ data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "m"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "m"/6.000000000,0 -> /BYTES/m6 -meta: "n"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true +meta: "m"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "m"/7.000000000,0 -> /BYTES/m7 +meta: "n"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "n"/7.000000000,0 -> /BYTES/n7 data: "n"/6.000000000,0 -> /BYTES/n6 -data: "n"/5.000000000,0 -> /BYTES/n5 -meta: "o"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "o"/6.000000000,0 -> /BYTES/o6 -data: "o"/5.000000000,0 -> {localTs=0.000000009,0}/ -meta: "p"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "p"/6.000000000,0 -> / -meta: "q"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "q"/6.000000000,0 -> / -data: "q"/5.000000000,0 -> /BYTES/q5 -meta: "r"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "r"/6.000000000,0 -> {localTs=5.000000009,0}/ -data: "r"/5.000000000,0 -> {localTs=0.000000009,0}/ -stats: key_count=18 key_bytes=396 val_count=30 val_bytes=1062 range_key_count=1 range_key_bytes=22 range_val_count=2 live_count=9 live_bytes=621 gc_bytes_age=81375 intent_count=18 intent_bytes=318 separated_intent_count=18 intent_age=1692 +meta: "o"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "o"/7.000000000,0 -> /BYTES/o7 +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +meta: "p"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "p"/7.000000000,0 -> / +meta: "q"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "q"/7.000000000,0 -> / +data: "q"/6.000000000,0 -> /BYTES/q6 +meta: "r"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "r"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +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 separated_intent_count=18 intent_age=1674 run stats ok with t=A status=ABORTED @@ -214,43 +236,51 @@ with t=A status=ABORTED resolve_intent k=r ---- >> resolve_intent k=a t=A status=ABORTED -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 separated_intent_count=-1 intent_age=-94 +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 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=b t=A status=ABORTED -stats: key_bytes=-12 val_count=-1 val_bytes=-55 live_bytes=-48 gc_bytes_age=-1786 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: key_bytes=-12 val_count=-1 val_bytes=-55 live_bytes=-48 gc_bytes_age=-1767 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=c t=A status=ABORTED -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 separated_intent_count=-1 intent_age=-94 +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 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=d t=A status=ABORTED -stats: key_count=-1 key_bytes=-14 val_count=-1 val_bytes=-48 gc_bytes_age=-5828 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +stats: key_count=-1 key_bytes=-14 val_count=-1 val_bytes=-48 gc_bytes_age=-5766 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=e t=A status=ABORTED -stats: key_bytes=-12 val_count=-1 val_bytes=-48 live_count=+1 live_bytes=+21 gc_bytes_age=-7614 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +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 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=f t=A status=ABORTED -stats: key_bytes=-12 val_count=-1 val_bytes=-61 gc_bytes_age=-6852 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-94 +stats: key_bytes=-12 val_count=-1 val_bytes=-61 gc_bytes_age=-6777 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=g t=A status=ABORTED -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 separated_intent_count=-1 intent_age=-94 +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 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=h t=A status=ABORTED -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 separated_intent_count=-1 intent_age=-94 +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 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=i t=A status=ABORTED -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 separated_intent_count=-1 intent_age=-94 +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 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=j t=A status=ABORTED -stats: key_count=-1 key_bytes=-14 val_count=-1 val_bytes=-48 gc_bytes_age=-5828 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +stats: key_count=-1 key_bytes=-14 val_count=-1 val_bytes=-48 gc_bytes_age=-5766 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=k t=A status=ABORTED -stats: key_bytes=-12 val_count=-1 val_bytes=-48 gc_bytes_age=-5634 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +stats: key_bytes=-12 val_count=-1 val_bytes=-48 gc_bytes_age=-5572 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=l t=A status=ABORTED -stats: key_bytes=-12 val_count=-1 val_bytes=-61 gc_bytes_age=-6852 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-94 +stats: key_bytes=-12 val_count=-1 val_bytes=-61 gc_bytes_age=-6777 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=m t=A status=ABORTED -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 separated_intent_count=-1 intent_age=-94 +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 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=n t=A status=ABORTED -stats: key_bytes=-12 val_count=-1 val_bytes=-55 live_bytes=-48 gc_bytes_age=-1786 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: key_bytes=-12 val_count=-1 val_bytes=-55 live_bytes=-48 gc_bytes_age=-1767 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=o t=A status=ABORTED -stats: key_bytes=-12 val_count=-1 val_bytes=-55 live_count=-1 live_bytes=-69 gc_bytes_age=+190 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +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 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=p t=A status=ABORTED -stats: key_count=-1 key_bytes=-14 val_count=-1 val_bytes=-48 gc_bytes_age=-5828 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +stats: key_count=-1 key_bytes=-14 val_count=-1 val_bytes=-48 gc_bytes_age=-5766 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=q t=A status=ABORTED -stats: key_bytes=-12 val_count=-1 val_bytes=-48 live_count=+1 live_bytes=+21 gc_bytes_age=-7614 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +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 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=r t=A status=ABORTED -stats: key_bytes=-12 val_count=-1 val_bytes=-61 gc_bytes_age=-6860 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-94 +stats: key_bytes=-12 val_count=-1 val_bytes=-61 gc_bytes_age=-6787 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-93 >> at end: -rangekey: {g-s}/[4.000000000,0=/ 3.000000000,0=/] +rangekey: g{-gg}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] data: "b"/1.000000000,0 -> /BYTES/b1 data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ data: "e"/1.000000000,0 -> /BYTES/e1 @@ -259,8 +289,55 @@ data: "h"/1.000000000,0 -> /BYTES/h1 data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ data: "k"/1.000000000,0 -> /BYTES/k1 data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "n"/5.000000000,0 -> /BYTES/n5 -data: "o"/5.000000000,0 -> {localTs=0.000000009,0}/ -data: "q"/5.000000000,0 -> /BYTES/q5 -data: "r"/5.000000000,0 -> {localTs=0.000000009,0}/ -stats: key_count=12 key_bytes=168 val_count=12 val_bytes=96 range_key_count=1 range_key_bytes=22 range_val_count=2 live_count=4 live_bytes=84 gc_bytes_age=19673 +data: "n"/6.000000000,0 -> /BYTES/n6 +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +data: "q"/6.000000000,0 -> /BYTES/q6 +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +stats: key_count=12 key_bytes=168 val_count=12 val_bytes=96 range_key_count=9 range_key_bytes=250 range_val_count=22 live_count=4 live_bytes=84 gc_bytes_age=41454 + +# Make sure missing intents are handled correctly, both across point keys, point +# tombstones, range tombstones, and empty keyspans. +run stats ok +with t=A status=ABORTED + resolve_intent k=aaa + resolve_intent k=a + resolve_intent k=d + resolve_intent k=ggg + resolve_intent k=g + resolve_intent k=j +---- +>> resolve_intent k=aaa t=A status=ABORTED +stats: no change +>> resolve_intent k=a t=A status=ABORTED +stats: no change +>> resolve_intent k=d t=A status=ABORTED +stats: no change +>> resolve_intent k=ggg t=A status=ABORTED +stats: no change +>> resolve_intent k=g t=A status=ABORTED +stats: no change +>> resolve_intent k=j t=A status=ABORTED +stats: no change +>> at end: +rangekey: g{-gg}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +data: "b"/1.000000000,0 -> /BYTES/b1 +data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ +data: "e"/1.000000000,0 -> /BYTES/e1 +data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ +data: "h"/1.000000000,0 -> /BYTES/h1 +data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ +data: "k"/1.000000000,0 -> /BYTES/k1 +data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ +data: "n"/6.000000000,0 -> /BYTES/n6 +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +data: "q"/6.000000000,0 -> /BYTES/q6 +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +stats: key_count=12 key_bytes=168 val_count=12 val_bytes=96 range_key_count=9 range_key_bytes=250 range_val_count=22 live_count=4 live_bytes=84 gc_bytes_age=41454 diff --git a/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_commit b/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_commit index 0b0f6525433b..3686d0e258d1 100644 --- a/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_commit +++ b/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_commit @@ -3,20 +3,22 @@ # # (x is tombstone, o---o is range tombstone, [] is intent) # -# 6 [a6][b6][c6][x] [x] [x] [g6][h6][i6][x] [x] [x] [m6][n6][o6][x] [x] [x] -# 5 n5 x q5 x -# 4 o-----------------------------------------------o +# 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 two range tombstones, since the lowest is the one that matters for -# point key GCBytesAge. 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. +# 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 @@ -33,29 +35,33 @@ with ts=1 put k=k v=k1 del k=l localTs=0.9 del_range_ts k=g end=s ts=3 -del_range_ts k=g end=s ts=4 -with ts=5 - put k=n v=n5 +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=q5 + put k=q v=q6 del k=r localTs=0.9 with t=A - txn_begin ts=6 - put k=a v=a6 - put k=b v=b6 - put k=c v=c6 + 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=g6 - put k=h v=h6 - put k=i v=i6 + 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=m6 - put k=n v=n6 - put k=o v=o6 + 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 @@ -82,115 +88,131 @@ 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=g end=s ts=4 -stats: range_key_bytes=+9 range_val_count=+1 gc_bytes_age=+860 ->> put k=n v=n5 ts=5 +>> 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=5 +>> 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=+2185 ->> put k=q v=q5 ts=5 +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=5 +>> 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=+2185 ->> put k=a v=a6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=b v=b6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1786 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 ->> put k=c v=c6 t=A -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 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+9 gc_bytes_age=+2162 +>> put k=a v=a7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=b v=b7 t=A +stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1767 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+93 +>> put k=c v=c7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=d t=A del: "d": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=e t=A del: "e": found key true -stats: key_bytes=+12 val_count=+1 val_bytes=+48 live_count=-1 live_bytes=-21 gc_bytes_age=+7614 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +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 separated_intent_count=+1 intent_age=+93 >> del k=f localTs=5.9 t=A del: "f": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6852 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 ->> put k=g v=g6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=h v=h6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=i v=i6 t=A -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 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6777 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 +>> put k=g v=g7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=h v=h7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=i v=i7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=j t=A del: "j": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=k t=A del: "k": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+48 gc_bytes_age=+5634 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+48 gc_bytes_age=+5572 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=l localTs=5.9 t=A del: "l": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6852 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 ->> put k=m v=m6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=n v=n6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1786 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 ->> put k=o v=o6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_count=+1 live_bytes=+69 gc_bytes_age=-190 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6777 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 +>> put k=m v=m7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=n v=n7 t=A +stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1767 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+93 +>> put k=o v=o7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=p t=A del: "p": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=q t=A del: "q": found key true -stats: key_bytes=+12 val_count=+1 val_bytes=+48 live_count=-1 live_bytes=-21 gc_bytes_age=+7614 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +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 separated_intent_count=+1 intent_age=+93 >> del k=r localTs=5.9 t=A del: "r": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6860 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6787 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 >> at end: -txn: "A" meta={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=6.000000000,0 wto=false gul=0,0 -rangekey: {g-s}/[4.000000000,0=/ 3.000000000,0=/] -meta: "a"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "a"/6.000000000,0 -> /BYTES/a6 -meta: "b"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "b"/6.000000000,0 -> /BYTES/b6 +txn: "A" meta={id=00000000 key=/Min 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=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +meta: "a"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "a"/7.000000000,0 -> /BYTES/a7 +meta: "b"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "b"/7.000000000,0 -> /BYTES/b7 data: "b"/1.000000000,0 -> /BYTES/b1 -meta: "c"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "c"/6.000000000,0 -> /BYTES/c6 +meta: "c"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "c"/7.000000000,0 -> /BYTES/c7 data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "d"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "d"/6.000000000,0 -> / -meta: "e"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "e"/6.000000000,0 -> / +meta: "d"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "d"/7.000000000,0 -> / +meta: "e"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "e"/7.000000000,0 -> / data: "e"/1.000000000,0 -> /BYTES/e1 -meta: "f"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "f"/6.000000000,0 -> {localTs=5.000000009,0}/ +meta: "f"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "f"/7.000000000,0 -> {localTs=5.000000009,0}/ data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "g"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "g"/6.000000000,0 -> /BYTES/g6 -meta: "h"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "h"/6.000000000,0 -> /BYTES/h6 +meta: "g"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "g"/7.000000000,0 -> /BYTES/g7 +meta: "h"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "h"/7.000000000,0 -> /BYTES/h7 data: "h"/1.000000000,0 -> /BYTES/h1 -meta: "i"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "i"/6.000000000,0 -> /BYTES/i6 +meta: "i"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "i"/7.000000000,0 -> /BYTES/i7 data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "j"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "j"/6.000000000,0 -> / -meta: "k"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "k"/6.000000000,0 -> / +meta: "j"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "j"/7.000000000,0 -> / +meta: "k"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "k"/7.000000000,0 -> / data: "k"/1.000000000,0 -> /BYTES/k1 -meta: "l"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "l"/6.000000000,0 -> {localTs=5.000000009,0}/ +meta: "l"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "l"/7.000000000,0 -> {localTs=5.000000009,0}/ data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "m"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "m"/6.000000000,0 -> /BYTES/m6 -meta: "n"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true +meta: "m"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "m"/7.000000000,0 -> /BYTES/m7 +meta: "n"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "n"/7.000000000,0 -> /BYTES/n7 data: "n"/6.000000000,0 -> /BYTES/n6 -data: "n"/5.000000000,0 -> /BYTES/n5 -meta: "o"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "o"/6.000000000,0 -> /BYTES/o6 -data: "o"/5.000000000,0 -> {localTs=0.000000009,0}/ -meta: "p"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "p"/6.000000000,0 -> / -meta: "q"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "q"/6.000000000,0 -> / -data: "q"/5.000000000,0 -> /BYTES/q5 -meta: "r"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "r"/6.000000000,0 -> {localTs=5.000000009,0}/ -data: "r"/5.000000000,0 -> {localTs=0.000000009,0}/ -stats: key_count=18 key_bytes=396 val_count=30 val_bytes=1062 range_key_count=1 range_key_bytes=22 range_val_count=2 live_count=9 live_bytes=621 gc_bytes_age=81375 intent_count=18 intent_bytes=318 separated_intent_count=18 intent_age=1692 +meta: "o"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "o"/7.000000000,0 -> /BYTES/o7 +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +meta: "p"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "p"/7.000000000,0 -> / +meta: "q"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "q"/7.000000000,0 -> / +data: "q"/6.000000000,0 -> /BYTES/q6 +meta: "r"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "r"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +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 separated_intent_count=18 intent_age=1674 run stats ok with t=A status=COMMITTED @@ -214,71 +236,144 @@ with t=A status=COMMITTED resolve_intent k=r ---- >> resolve_intent k=a t=A status=COMMITTED -stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=b t=A status=COMMITTED -stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=c t=A status=COMMITTED -stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=d t=A status=COMMITTED -stats: val_bytes=-48 gc_bytes_age=-4512 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 gc_bytes_age=-4464 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=e t=A status=COMMITTED -stats: val_bytes=-48 gc_bytes_age=-4512 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 gc_bytes_age=-4464 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=f t=A status=COMMITTED -stats: val_bytes=-48 gc_bytes_age=-4512 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 gc_bytes_age=-4464 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=g t=A status=COMMITTED -stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=h t=A status=COMMITTED -stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=i t=A status=COMMITTED -stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=j t=A status=COMMITTED -stats: val_bytes=-48 gc_bytes_age=-4512 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 gc_bytes_age=-4464 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=k t=A status=COMMITTED -stats: val_bytes=-48 gc_bytes_age=-4512 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 gc_bytes_age=-4464 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=l t=A status=COMMITTED -stats: val_bytes=-48 gc_bytes_age=-4512 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 gc_bytes_age=-4464 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=m t=A status=COMMITTED -stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=n t=A status=COMMITTED -stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=o t=A status=COMMITTED -stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 live_bytes=-48 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=p t=A status=COMMITTED -stats: val_bytes=-48 gc_bytes_age=-4512 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 gc_bytes_age=-4464 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=q t=A status=COMMITTED -stats: val_bytes=-48 gc_bytes_age=-4512 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 gc_bytes_age=-4464 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=r t=A status=COMMITTED -stats: val_bytes=-48 gc_bytes_age=-4512 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 gc_bytes_age=-4464 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-93 +>> at end: +rangekey: g{-gg}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +data: "a"/7.000000000,0 -> /BYTES/a7 +data: "b"/7.000000000,0 -> /BYTES/b7 +data: "b"/1.000000000,0 -> /BYTES/b1 +data: "c"/7.000000000,0 -> /BYTES/c7 +data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ +data: "d"/7.000000000,0 -> / +data: "e"/7.000000000,0 -> / +data: "e"/1.000000000,0 -> /BYTES/e1 +data: "f"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ +data: "g"/7.000000000,0 -> /BYTES/g7 +data: "h"/7.000000000,0 -> /BYTES/h7 +data: "h"/1.000000000,0 -> /BYTES/h1 +data: "i"/7.000000000,0 -> /BYTES/i7 +data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ +data: "j"/7.000000000,0 -> / +data: "k"/7.000000000,0 -> / +data: "k"/1.000000000,0 -> /BYTES/k1 +data: "l"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ +data: "m"/7.000000000,0 -> /BYTES/m7 +data: "n"/7.000000000,0 -> /BYTES/n7 +data: "n"/6.000000000,0 -> /BYTES/n6 +data: "o"/7.000000000,0 -> /BYTES/o7 +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +data: "p"/7.000000000,0 -> / +data: "q"/7.000000000,0 -> / +data: "q"/6.000000000,0 -> /BYTES/q6 +data: "r"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +stats: key_count=18 key_bytes=396 val_count=30 val_bytes=198 range_key_count=9 range_key_bytes=250 range_val_count=22 live_count=9 live_bytes=189 gc_bytes_age=62311 + +# Make sure missing intents are handled correctly, both across point keys, point +# tombstones, range tombstones, and empty keyspans. +run stats ok +with t=A status=COMMITTED + resolve_intent k=aaa + resolve_intent k=a + resolve_intent k=d + resolve_intent k=ggg + resolve_intent k=g + resolve_intent k=j +---- +>> resolve_intent k=aaa t=A status=COMMITTED +stats: no change +>> resolve_intent k=a t=A status=COMMITTED +stats: no change +>> resolve_intent k=d t=A status=COMMITTED +stats: no change +>> resolve_intent k=ggg t=A status=COMMITTED +stats: no change +>> resolve_intent k=g t=A status=COMMITTED +stats: no change +>> resolve_intent k=j t=A status=COMMITTED +stats: no change >> at end: -rangekey: {g-s}/[4.000000000,0=/ 3.000000000,0=/] -data: "a"/6.000000000,0 -> /BYTES/a6 -data: "b"/6.000000000,0 -> /BYTES/b6 +rangekey: g{-gg}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +data: "a"/7.000000000,0 -> /BYTES/a7 +data: "b"/7.000000000,0 -> /BYTES/b7 data: "b"/1.000000000,0 -> /BYTES/b1 -data: "c"/6.000000000,0 -> /BYTES/c6 +data: "c"/7.000000000,0 -> /BYTES/c7 data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "d"/6.000000000,0 -> / -data: "e"/6.000000000,0 -> / +data: "d"/7.000000000,0 -> / +data: "e"/7.000000000,0 -> / data: "e"/1.000000000,0 -> /BYTES/e1 -data: "f"/6.000000000,0 -> {localTs=5.000000009,0}/ +data: "f"/7.000000000,0 -> {localTs=5.000000009,0}/ data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "g"/6.000000000,0 -> /BYTES/g6 -data: "h"/6.000000000,0 -> /BYTES/h6 +data: "g"/7.000000000,0 -> /BYTES/g7 +data: "h"/7.000000000,0 -> /BYTES/h7 data: "h"/1.000000000,0 -> /BYTES/h1 -data: "i"/6.000000000,0 -> /BYTES/i6 +data: "i"/7.000000000,0 -> /BYTES/i7 data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "j"/6.000000000,0 -> / -data: "k"/6.000000000,0 -> / +data: "j"/7.000000000,0 -> / +data: "k"/7.000000000,0 -> / data: "k"/1.000000000,0 -> /BYTES/k1 -data: "l"/6.000000000,0 -> {localTs=5.000000009,0}/ +data: "l"/7.000000000,0 -> {localTs=5.000000009,0}/ data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "m"/6.000000000,0 -> /BYTES/m6 +data: "m"/7.000000000,0 -> /BYTES/m7 +data: "n"/7.000000000,0 -> /BYTES/n7 data: "n"/6.000000000,0 -> /BYTES/n6 -data: "n"/5.000000000,0 -> /BYTES/n5 -data: "o"/6.000000000,0 -> /BYTES/o6 -data: "o"/5.000000000,0 -> {localTs=0.000000009,0}/ -data: "p"/6.000000000,0 -> / -data: "q"/6.000000000,0 -> / -data: "q"/5.000000000,0 -> /BYTES/q5 -data: "r"/6.000000000,0 -> {localTs=5.000000009,0}/ -data: "r"/5.000000000,0 -> {localTs=0.000000009,0}/ -stats: key_count=18 key_bytes=396 val_count=30 val_bytes=198 range_key_count=1 range_key_bytes=22 range_val_count=2 live_count=9 live_bytes=189 gc_bytes_age=40767 +data: "o"/7.000000000,0 -> /BYTES/o7 +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +data: "p"/7.000000000,0 -> / +data: "q"/7.000000000,0 -> / +data: "q"/6.000000000,0 -> /BYTES/q6 +data: "r"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +stats: key_count=18 key_bytes=396 val_count=30 val_bytes=198 range_key_count=9 range_key_bytes=250 range_val_count=22 live_count=9 live_bytes=189 gc_bytes_age=62311 diff --git a/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_pushed b/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_pushed index 1208ea92bc4b..3432d167a729 100644 --- a/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_pushed +++ b/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_pushed @@ -3,20 +3,22 @@ # # (x is tombstone, o---o is range tombstone, [] is intent) # -# 6 [a6][b6][c6][x] [x] [x] [g6][h6][i6][x] [x] [x] [m6][n6][o6][x] [x] [x] -# 5 n5 x q5 x -# 4 o-----------------------------------------------o +# 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 two range tombstones, since the lowest is the one that matters for -# point key GCBytesAge. 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. +# 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 @@ -33,29 +35,33 @@ with ts=1 put k=k v=k1 del k=l localTs=0.9 del_range_ts k=g end=s ts=3 -del_range_ts k=g end=s ts=4 -with ts=5 - put k=n v=n5 +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=q5 + put k=q v=q6 del k=r localTs=0.9 with t=A - txn_begin ts=6 - put k=a v=a6 - put k=b v=b6 - put k=c v=c6 + 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=g6 - put k=h v=h6 - put k=i v=i6 + 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=m6 - put k=n v=n6 - put k=o v=o6 + 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 @@ -82,119 +88,135 @@ 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=g end=s ts=4 -stats: range_key_bytes=+9 range_val_count=+1 gc_bytes_age=+860 ->> put k=n v=n5 ts=5 +>> 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=5 +>> 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=+2185 ->> put k=q v=q5 ts=5 +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=5 +>> 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=+2185 ->> put k=a v=a6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=b v=b6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1786 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 ->> put k=c v=c6 t=A -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 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+9 gc_bytes_age=+2162 +>> put k=a v=a7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=b v=b7 t=A +stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1767 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+93 +>> put k=c v=c7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=d t=A del: "d": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=e t=A del: "e": found key true -stats: key_bytes=+12 val_count=+1 val_bytes=+48 live_count=-1 live_bytes=-21 gc_bytes_age=+7614 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +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 separated_intent_count=+1 intent_age=+93 >> del k=f localTs=5.9 t=A del: "f": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6852 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 ->> put k=g v=g6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=h v=h6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=i v=i6 t=A -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 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6777 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 +>> put k=g v=g7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=h v=h7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=i v=i7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=j t=A del: "j": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=k t=A del: "k": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+48 gc_bytes_age=+5634 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+48 gc_bytes_age=+5572 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=l localTs=5.9 t=A del: "l": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6852 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 ->> put k=m v=m6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=n v=n6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1786 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 ->> put k=o v=o6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_count=+1 live_bytes=+69 gc_bytes_age=-190 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6777 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 +>> put k=m v=m7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=n v=n7 t=A +stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1767 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+93 +>> put k=o v=o7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=p t=A del: "p": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=q t=A del: "q": found key true -stats: key_bytes=+12 val_count=+1 val_bytes=+48 live_count=-1 live_bytes=-21 gc_bytes_age=+7614 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +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 separated_intent_count=+1 intent_age=+93 >> del k=r localTs=5.9 t=A del: "r": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6860 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6787 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 >> at end: -txn: "A" meta={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=6.000000000,0 wto=false gul=0,0 -rangekey: {g-s}/[4.000000000,0=/ 3.000000000,0=/] -meta: "a"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "a"/6.000000000,0 -> /BYTES/a6 -meta: "b"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "b"/6.000000000,0 -> /BYTES/b6 +txn: "A" meta={id=00000000 key=/Min 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=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +meta: "a"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "a"/7.000000000,0 -> /BYTES/a7 +meta: "b"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "b"/7.000000000,0 -> /BYTES/b7 data: "b"/1.000000000,0 -> /BYTES/b1 -meta: "c"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "c"/6.000000000,0 -> /BYTES/c6 +meta: "c"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "c"/7.000000000,0 -> /BYTES/c7 data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "d"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "d"/6.000000000,0 -> / -meta: "e"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "e"/6.000000000,0 -> / +meta: "d"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "d"/7.000000000,0 -> / +meta: "e"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "e"/7.000000000,0 -> / data: "e"/1.000000000,0 -> /BYTES/e1 -meta: "f"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "f"/6.000000000,0 -> {localTs=5.000000009,0}/ +meta: "f"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "f"/7.000000000,0 -> {localTs=5.000000009,0}/ data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "g"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "g"/6.000000000,0 -> /BYTES/g6 -meta: "h"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "h"/6.000000000,0 -> /BYTES/h6 +meta: "g"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "g"/7.000000000,0 -> /BYTES/g7 +meta: "h"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "h"/7.000000000,0 -> /BYTES/h7 data: "h"/1.000000000,0 -> /BYTES/h1 -meta: "i"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "i"/6.000000000,0 -> /BYTES/i6 +meta: "i"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "i"/7.000000000,0 -> /BYTES/i7 data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "j"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "j"/6.000000000,0 -> / -meta: "k"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "k"/6.000000000,0 -> / +meta: "j"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "j"/7.000000000,0 -> / +meta: "k"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "k"/7.000000000,0 -> / data: "k"/1.000000000,0 -> /BYTES/k1 -meta: "l"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "l"/6.000000000,0 -> {localTs=5.000000009,0}/ +meta: "l"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "l"/7.000000000,0 -> {localTs=5.000000009,0}/ data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "m"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "m"/6.000000000,0 -> /BYTES/m6 -meta: "n"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true +meta: "m"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "m"/7.000000000,0 -> /BYTES/m7 +meta: "n"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "n"/7.000000000,0 -> /BYTES/n7 data: "n"/6.000000000,0 -> /BYTES/n6 -data: "n"/5.000000000,0 -> /BYTES/n5 -meta: "o"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "o"/6.000000000,0 -> /BYTES/o6 -data: "o"/5.000000000,0 -> {localTs=0.000000009,0}/ -meta: "p"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "p"/6.000000000,0 -> / -meta: "q"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "q"/6.000000000,0 -> / -data: "q"/5.000000000,0 -> /BYTES/q5 -meta: "r"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "r"/6.000000000,0 -> {localTs=5.000000009,0}/ -data: "r"/5.000000000,0 -> {localTs=0.000000009,0}/ -stats: key_count=18 key_bytes=396 val_count=30 val_bytes=1062 range_key_count=1 range_key_bytes=22 range_val_count=2 live_count=9 live_bytes=621 gc_bytes_age=81375 intent_count=18 intent_bytes=318 separated_intent_count=18 intent_age=1692 +meta: "o"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "o"/7.000000000,0 -> /BYTES/o7 +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +meta: "p"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "p"/7.000000000,0 -> / +meta: "q"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "q"/7.000000000,0 -> / +data: "q"/6.000000000,0 -> /BYTES/q6 +meta: "r"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "r"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +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 separated_intent_count=18 intent_age=1674 run stats ok with t=A status=COMMITTED - txn_advance ts=7 + txn_advance ts=8 resolve_intent k=a resolve_intent k=b resolve_intent k=c @@ -215,72 +237,147 @@ with t=A status=COMMITTED resolve_intent k=r ---- >> resolve_intent k=a t=A status=COMMITTED -stats: val_bytes=-35 live_bytes=-35 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-35 live_bytes=-35 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=b t=A status=COMMITTED -stats: val_bytes=-35 live_bytes=-35 gc_bytes_age=-19 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-35 live_bytes=-35 gc_bytes_age=-19 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=c t=A status=COMMITTED -stats: val_bytes=-35 live_bytes=-35 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-35 live_bytes=-35 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=d t=A status=COMMITTED -stats: val_bytes=-35 gc_bytes_age=-3317 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-35 gc_bytes_age=-3282 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=e t=A status=COMMITTED -stats: val_bytes=-35 gc_bytes_age=-3336 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-35 gc_bytes_age=-3301 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=f t=A status=COMMITTED -stats: val_bytes=-48 gc_bytes_age=-4539 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 gc_bytes_age=-4491 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=g t=A status=COMMITTED -stats: val_bytes=-35 live_bytes=-35 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-35 live_bytes=-35 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=h t=A status=COMMITTED -stats: val_bytes=-35 live_bytes=-35 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-35 live_bytes=-35 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=i t=A status=COMMITTED -stats: val_bytes=-35 live_bytes=-35 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-35 live_bytes=-35 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=j t=A status=COMMITTED -stats: val_bytes=-35 gc_bytes_age=-3317 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-35 gc_bytes_age=-3282 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=k t=A status=COMMITTED -stats: val_bytes=-35 gc_bytes_age=-3317 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-35 gc_bytes_age=-3282 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=l t=A status=COMMITTED -stats: val_bytes=-48 gc_bytes_age=-4539 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 gc_bytes_age=-4491 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=m t=A status=COMMITTED -stats: val_bytes=-35 live_bytes=-35 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-35 live_bytes=-35 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=n t=A status=COMMITTED -stats: val_bytes=-35 live_bytes=-35 gc_bytes_age=-19 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-35 live_bytes=-35 gc_bytes_age=-19 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=o t=A status=COMMITTED -stats: val_bytes=-35 live_bytes=-35 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-35 live_bytes=-35 intent_count=-1 intent_bytes=-19 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=p t=A status=COMMITTED -stats: val_bytes=-35 gc_bytes_age=-3317 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-35 gc_bytes_age=-3282 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=q t=A status=COMMITTED -stats: val_bytes=-35 gc_bytes_age=-3336 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-35 gc_bytes_age=-3301 intent_count=-1 intent_bytes=-12 separated_intent_count=-1 intent_age=-93 >> resolve_intent k=r t=A status=COMMITTED -stats: val_bytes=-48 gc_bytes_age=-4539 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-94 +stats: val_bytes=-48 gc_bytes_age=-4491 intent_count=-1 intent_bytes=-25 separated_intent_count=-1 intent_age=-93 >> at end: -txn: "A" meta={id=00000000 key=/Min pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=6.000000000,0 wto=false gul=0,0 -rangekey: {g-s}/[4.000000000,0=/ 3.000000000,0=/] -data: "a"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/a6 -data: "b"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/b6 +txn: "A" meta={id=00000000 key=/Min 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=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +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"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/c6 +data: "c"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/c7 data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "d"/7.000000000,0 -> {localTs=6.000000000,0}/ -data: "e"/7.000000000,0 -> {localTs=6.000000000,0}/ +data: "d"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "e"/8.000000000,0 -> {localTs=7.000000000,0}/ data: "e"/1.000000000,0 -> /BYTES/e1 -data: "f"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "f"/8.000000000,0 -> {localTs=5.000000009,0}/ data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "g"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/g6 -data: "h"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/h6 +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"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/i6 +data: "i"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/i7 data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "j"/7.000000000,0 -> {localTs=6.000000000,0}/ -data: "k"/7.000000000,0 -> {localTs=6.000000000,0}/ +data: "j"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "k"/8.000000000,0 -> {localTs=7.000000000,0}/ data: "k"/1.000000000,0 -> /BYTES/k1 -data: "l"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "l"/8.000000000,0 -> {localTs=5.000000009,0}/ data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "m"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/m6 -data: "n"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/n6 -data: "n"/5.000000000,0 -> /BYTES/n5 -data: "o"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/o6 -data: "o"/5.000000000,0 -> {localTs=0.000000009,0}/ -data: "p"/7.000000000,0 -> {localTs=6.000000000,0}/ -data: "q"/7.000000000,0 -> {localTs=6.000000000,0}/ -data: "q"/5.000000000,0 -> /BYTES/q5 -data: "r"/7.000000000,0 -> {localTs=5.000000009,0}/ -data: "r"/5.000000000,0 -> {localTs=0.000000009,0}/ -stats: key_count=18 key_bytes=396 val_count=30 val_bytes=393 range_key_count=1 range_key_bytes=22 range_val_count=2 live_count=9 live_bytes=306 gc_bytes_age=47780 +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}/ +data: "p"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "q"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "q"/6.000000000,0 -> /BYTES/q6 +data: "r"/8.000000000,0 -> {localTs=5.000000009,0}/ +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +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 + +# Make sure missing intents are handled correctly, both across point keys, point +# tombstones, range tombstones, and empty keyspans. +run stats ok +with t=A status=COMMITTED + txn_advance ts=9 + resolve_intent k=aaa + resolve_intent k=a + resolve_intent k=d + resolve_intent k=ggg + resolve_intent k=g + resolve_intent k=j +---- +>> resolve_intent k=aaa t=A status=COMMITTED +stats: no change +>> resolve_intent k=a t=A status=COMMITTED +stats: no change +>> resolve_intent k=d t=A status=COMMITTED +stats: no change +>> resolve_intent k=ggg t=A status=COMMITTED +stats: no change +>> resolve_intent k=g t=A status=COMMITTED +stats: no change +>> resolve_intent k=j t=A status=COMMITTED +stats: no change +>> at end: +txn: "A" meta={id=00000000 key=/Min 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=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +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}/ +data: "d"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "e"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "e"/1.000000000,0 -> /BYTES/e1 +data: "f"/8.000000000,0 -> {localTs=5.000000009,0}/ +data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ +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}/ +data: "j"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "k"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "k"/1.000000000,0 -> /BYTES/k1 +data: "l"/8.000000000,0 -> {localTs=5.000000009,0}/ +data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ +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}/ +data: "p"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "q"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "q"/6.000000000,0 -> /BYTES/q6 +data: "r"/8.000000000,0 -> {localTs=5.000000009,0}/ +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +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 diff --git a/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_range_abort b/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_range_abort index b86ded5783f7..46c37f664b12 100644 --- a/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_range_abort +++ b/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_range_abort @@ -3,20 +3,22 @@ # # (x is tombstone, o---o is range tombstone, [] is intent) # -# 6 [a6][b6][c6][x] [x] [x] [g6][h6][i6][x] [x] [x] [m6][n6][o6][x] [x] [x] -# 5 n5 x q5 x -# 4 o-----------------------------------------------o +# 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 two range tombstones, since the lowest is the one that matters for -# point key GCBytesAge. 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. +# 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 @@ -33,29 +35,33 @@ with ts=1 put k=k v=k1 del k=l localTs=0.9 del_range_ts k=g end=s ts=3 -del_range_ts k=g end=s ts=4 -with ts=5 - put k=n v=n5 +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=q5 + put k=q v=q6 del k=r localTs=0.9 with t=A - txn_begin ts=6 - put k=a v=a6 - put k=b v=b6 - put k=c v=c6 + 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=g6 - put k=h v=h6 - put k=i v=i6 + 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=m6 - put k=n v=n6 - put k=o v=o6 + 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 @@ -82,123 +88,177 @@ 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=g end=s ts=4 -stats: range_key_bytes=+9 range_val_count=+1 gc_bytes_age=+860 ->> put k=n v=n5 ts=5 +>> 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=5 +>> 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=+2185 ->> put k=q v=q5 ts=5 +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=5 +>> 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=+2185 ->> put k=a v=a6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=b v=b6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1786 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 ->> put k=c v=c6 t=A -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 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+9 gc_bytes_age=+2162 +>> put k=a v=a7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=b v=b7 t=A +stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1767 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+93 +>> put k=c v=c7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=d t=A del: "d": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=e t=A del: "e": found key true -stats: key_bytes=+12 val_count=+1 val_bytes=+48 live_count=-1 live_bytes=-21 gc_bytes_age=+7614 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +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 separated_intent_count=+1 intent_age=+93 >> del k=f localTs=5.9 t=A del: "f": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6852 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 ->> put k=g v=g6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=h v=h6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=i v=i6 t=A -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 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6777 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 +>> put k=g v=g7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=h v=h7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=i v=i7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=j t=A del: "j": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=k t=A del: "k": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+48 gc_bytes_age=+5634 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+48 gc_bytes_age=+5572 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=l localTs=5.9 t=A del: "l": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6852 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 ->> put k=m v=m6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=n v=n6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1786 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 ->> put k=o v=o6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_count=+1 live_bytes=+69 gc_bytes_age=-190 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6777 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 +>> put k=m v=m7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=n v=n7 t=A +stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1767 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+93 +>> put k=o v=o7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=p t=A del: "p": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=q t=A del: "q": found key true -stats: key_bytes=+12 val_count=+1 val_bytes=+48 live_count=-1 live_bytes=-21 gc_bytes_age=+7614 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +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 separated_intent_count=+1 intent_age=+93 >> del k=r localTs=5.9 t=A del: "r": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6860 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6787 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 +>> at end: +txn: "A" meta={id=00000000 key=/Min 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=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +meta: "a"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "a"/7.000000000,0 -> /BYTES/a7 +meta: "b"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "b"/7.000000000,0 -> /BYTES/b7 +data: "b"/1.000000000,0 -> /BYTES/b1 +meta: "c"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "c"/7.000000000,0 -> /BYTES/c7 +data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ +meta: "d"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "d"/7.000000000,0 -> / +meta: "e"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "e"/7.000000000,0 -> / +data: "e"/1.000000000,0 -> /BYTES/e1 +meta: "f"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "f"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ +meta: "g"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "g"/7.000000000,0 -> /BYTES/g7 +meta: "h"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "h"/7.000000000,0 -> /BYTES/h7 +data: "h"/1.000000000,0 -> /BYTES/h1 +meta: "i"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "i"/7.000000000,0 -> /BYTES/i7 +data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ +meta: "j"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "j"/7.000000000,0 -> / +meta: "k"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "k"/7.000000000,0 -> / +data: "k"/1.000000000,0 -> /BYTES/k1 +meta: "l"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "l"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ +meta: "m"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "m"/7.000000000,0 -> /BYTES/m7 +meta: "n"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "n"/7.000000000,0 -> /BYTES/n7 +data: "n"/6.000000000,0 -> /BYTES/n6 +meta: "o"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "o"/7.000000000,0 -> /BYTES/o7 +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +meta: "p"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "p"/7.000000000,0 -> / +meta: "q"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "q"/7.000000000,0 -> / +data: "q"/6.000000000,0 -> /BYTES/q6 +meta: "r"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "r"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +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 separated_intent_count=18 intent_age=1674 + +run stats ok +resolve_intent_range t=A k=a end=z status=ABORTED +---- +>> resolve_intent_range t=A k=a end=z status=ABORTED +stats: key_count=-6 key_bytes=-228 val_count=-18 val_bytes=-966 live_count=-5 live_bytes=-537 gc_bytes_age=-61033 intent_count=-18 intent_bytes=-318 separated_intent_count=-18 intent_age=-1674 >> at end: -txn: "A" meta={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=6.000000000,0 wto=false gul=0,0 -rangekey: {g-s}/[4.000000000,0=/ 3.000000000,0=/] -meta: "a"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "a"/6.000000000,0 -> /BYTES/a6 -meta: "b"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "b"/6.000000000,0 -> /BYTES/b6 +rangekey: g{-gg}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] data: "b"/1.000000000,0 -> /BYTES/b1 -meta: "c"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "c"/6.000000000,0 -> /BYTES/c6 data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "d"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "d"/6.000000000,0 -> / -meta: "e"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "e"/6.000000000,0 -> / data: "e"/1.000000000,0 -> /BYTES/e1 -meta: "f"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "f"/6.000000000,0 -> {localTs=5.000000009,0}/ data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "g"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "g"/6.000000000,0 -> /BYTES/g6 -meta: "h"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "h"/6.000000000,0 -> /BYTES/h6 data: "h"/1.000000000,0 -> /BYTES/h1 -meta: "i"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "i"/6.000000000,0 -> /BYTES/i6 data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "j"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "j"/6.000000000,0 -> / -meta: "k"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "k"/6.000000000,0 -> / data: "k"/1.000000000,0 -> /BYTES/k1 -meta: "l"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "l"/6.000000000,0 -> {localTs=5.000000009,0}/ data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "m"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "m"/6.000000000,0 -> /BYTES/m6 -meta: "n"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true data: "n"/6.000000000,0 -> /BYTES/n6 -data: "n"/5.000000000,0 -> /BYTES/n5 -meta: "o"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "o"/6.000000000,0 -> /BYTES/o6 -data: "o"/5.000000000,0 -> {localTs=0.000000009,0}/ -meta: "p"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "p"/6.000000000,0 -> / -meta: "q"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "q"/6.000000000,0 -> / -data: "q"/5.000000000,0 -> /BYTES/q5 -meta: "r"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "r"/6.000000000,0 -> {localTs=5.000000009,0}/ -data: "r"/5.000000000,0 -> {localTs=0.000000009,0}/ -stats: key_count=18 key_bytes=396 val_count=30 val_bytes=1062 range_key_count=1 range_key_bytes=22 range_val_count=2 live_count=9 live_bytes=621 gc_bytes_age=81375 intent_count=18 intent_bytes=318 separated_intent_count=18 intent_age=1692 +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +data: "q"/6.000000000,0 -> /BYTES/q6 +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +stats: key_count=12 key_bytes=168 val_count=12 val_bytes=96 range_key_count=9 range_key_bytes=250 range_val_count=22 live_count=4 live_bytes=84 gc_bytes_age=41454 +# A second intent resolution should be a noop. run stats ok resolve_intent_range t=A k=a end=z status=ABORTED ---- >> resolve_intent_range t=A k=a end=z status=ABORTED -stats: key_count=-6 key_bytes=-228 val_count=-18 val_bytes=-966 live_count=-5 live_bytes=-537 gc_bytes_age=-61702 intent_count=-18 intent_bytes=-318 separated_intent_count=-18 intent_age=-1692 +stats: no change >> at end: -rangekey: {g-s}/[4.000000000,0=/ 3.000000000,0=/] +rangekey: g{-gg}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] data: "b"/1.000000000,0 -> /BYTES/b1 data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ data: "e"/1.000000000,0 -> /BYTES/e1 @@ -207,8 +267,8 @@ data: "h"/1.000000000,0 -> /BYTES/h1 data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ data: "k"/1.000000000,0 -> /BYTES/k1 data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "n"/5.000000000,0 -> /BYTES/n5 -data: "o"/5.000000000,0 -> {localTs=0.000000009,0}/ -data: "q"/5.000000000,0 -> /BYTES/q5 -data: "r"/5.000000000,0 -> {localTs=0.000000009,0}/ -stats: key_count=12 key_bytes=168 val_count=12 val_bytes=96 range_key_count=1 range_key_bytes=22 range_val_count=2 live_count=4 live_bytes=84 gc_bytes_age=19673 +data: "n"/6.000000000,0 -> /BYTES/n6 +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +data: "q"/6.000000000,0 -> /BYTES/q6 +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +stats: key_count=12 key_bytes=168 val_count=12 val_bytes=96 range_key_count=9 range_key_bytes=250 range_val_count=22 live_count=4 live_bytes=84 gc_bytes_age=41454 diff --git a/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_range_commit b/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_range_commit index 46884356abfb..7109b81b078d 100644 --- a/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_range_commit +++ b/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_range_commit @@ -3,20 +3,22 @@ # # (x is tombstone, o---o is range tombstone, [] is intent) # -# 6 [a6][b6][c6][x] [x] [x] [g6][h6][i6][x] [x] [x] [m6][n6][o6][x] [x] [x] -# 5 n5 x q5 x -# 4 o-----------------------------------------------o +# 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 two range tombstones, since the lowest is the one that matters for -# point key GCBytesAge. 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. +# 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 @@ -33,29 +35,33 @@ with ts=1 put k=k v=k1 del k=l localTs=0.9 del_range_ts k=g end=s ts=3 -del_range_ts k=g end=s ts=4 -with ts=5 - put k=n v=n5 +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=q5 + put k=q v=q6 del k=r localTs=0.9 with t=A - txn_begin ts=6 - put k=a v=a6 - put k=b v=b6 - put k=c v=c6 + 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=g6 - put k=h v=h6 - put k=i v=i6 + 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=m6 - put k=n v=n6 - put k=o v=o6 + 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 @@ -82,151 +88,223 @@ 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=g end=s ts=4 -stats: range_key_bytes=+9 range_val_count=+1 gc_bytes_age=+860 ->> put k=n v=n5 ts=5 +>> 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=5 +>> 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=+2185 ->> put k=q v=q5 ts=5 +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=5 +>> 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=+2185 ->> put k=a v=a6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=b v=b6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1786 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 ->> put k=c v=c6 t=A -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 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+9 gc_bytes_age=+2162 +>> put k=a v=a7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=b v=b7 t=A +stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1767 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+93 +>> put k=c v=c7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=d t=A del: "d": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=e t=A del: "e": found key true -stats: key_bytes=+12 val_count=+1 val_bytes=+48 live_count=-1 live_bytes=-21 gc_bytes_age=+7614 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +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 separated_intent_count=+1 intent_age=+93 >> del k=f localTs=5.9 t=A del: "f": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6852 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 ->> put k=g v=g6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=h v=h6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=i v=i6 t=A -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 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6777 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 +>> put k=g v=g7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=h v=h7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=i v=i7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=j t=A del: "j": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=k t=A del: "k": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+48 gc_bytes_age=+5634 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+48 gc_bytes_age=+5572 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=l localTs=5.9 t=A del: "l": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6852 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 ->> put k=m v=m6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=n v=n6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1786 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 ->> put k=o v=o6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_count=+1 live_bytes=+69 gc_bytes_age=-190 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6777 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 +>> put k=m v=m7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=n v=n7 t=A +stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1767 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+93 +>> put k=o v=o7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=p t=A del: "p": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=q t=A del: "q": found key true -stats: key_bytes=+12 val_count=+1 val_bytes=+48 live_count=-1 live_bytes=-21 gc_bytes_age=+7614 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +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 separated_intent_count=+1 intent_age=+93 >> del k=r localTs=5.9 t=A del: "r": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6860 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6787 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 +>> at end: +txn: "A" meta={id=00000000 key=/Min 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=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +meta: "a"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "a"/7.000000000,0 -> /BYTES/a7 +meta: "b"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "b"/7.000000000,0 -> /BYTES/b7 +data: "b"/1.000000000,0 -> /BYTES/b1 +meta: "c"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "c"/7.000000000,0 -> /BYTES/c7 +data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ +meta: "d"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "d"/7.000000000,0 -> / +meta: "e"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "e"/7.000000000,0 -> / +data: "e"/1.000000000,0 -> /BYTES/e1 +meta: "f"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "f"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ +meta: "g"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "g"/7.000000000,0 -> /BYTES/g7 +meta: "h"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "h"/7.000000000,0 -> /BYTES/h7 +data: "h"/1.000000000,0 -> /BYTES/h1 +meta: "i"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "i"/7.000000000,0 -> /BYTES/i7 +data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ +meta: "j"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "j"/7.000000000,0 -> / +meta: "k"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "k"/7.000000000,0 -> / +data: "k"/1.000000000,0 -> /BYTES/k1 +meta: "l"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "l"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ +meta: "m"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "m"/7.000000000,0 -> /BYTES/m7 +meta: "n"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "n"/7.000000000,0 -> /BYTES/n7 +data: "n"/6.000000000,0 -> /BYTES/n6 +meta: "o"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "o"/7.000000000,0 -> /BYTES/o7 +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +meta: "p"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "p"/7.000000000,0 -> / +meta: "q"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "q"/7.000000000,0 -> / +data: "q"/6.000000000,0 -> /BYTES/q6 +meta: "r"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "r"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +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 separated_intent_count=18 intent_age=1674 + +run stats ok +resolve_intent_range t=A k=a end=z status=COMMITTED +---- +>> resolve_intent_range t=A k=a end=z status=COMMITTED +stats: val_bytes=-864 live_bytes=-432 gc_bytes_age=-40176 intent_count=-18 intent_bytes=-318 separated_intent_count=-18 intent_age=-1674 >> at end: -txn: "A" meta={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=6.000000000,0 wto=false gul=0,0 -rangekey: {g-s}/[4.000000000,0=/ 3.000000000,0=/] -meta: "a"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "a"/6.000000000,0 -> /BYTES/a6 -meta: "b"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "b"/6.000000000,0 -> /BYTES/b6 +rangekey: g{-gg}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +data: "a"/7.000000000,0 -> /BYTES/a7 +data: "b"/7.000000000,0 -> /BYTES/b7 data: "b"/1.000000000,0 -> /BYTES/b1 -meta: "c"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "c"/6.000000000,0 -> /BYTES/c6 +data: "c"/7.000000000,0 -> /BYTES/c7 data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "d"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "d"/6.000000000,0 -> / -meta: "e"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "e"/6.000000000,0 -> / +data: "d"/7.000000000,0 -> / +data: "e"/7.000000000,0 -> / data: "e"/1.000000000,0 -> /BYTES/e1 -meta: "f"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "f"/6.000000000,0 -> {localTs=5.000000009,0}/ +data: "f"/7.000000000,0 -> {localTs=5.000000009,0}/ data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "g"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "g"/6.000000000,0 -> /BYTES/g6 -meta: "h"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "h"/6.000000000,0 -> /BYTES/h6 +data: "g"/7.000000000,0 -> /BYTES/g7 +data: "h"/7.000000000,0 -> /BYTES/h7 data: "h"/1.000000000,0 -> /BYTES/h1 -meta: "i"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "i"/6.000000000,0 -> /BYTES/i6 +data: "i"/7.000000000,0 -> /BYTES/i7 data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "j"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "j"/6.000000000,0 -> / -meta: "k"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "k"/6.000000000,0 -> / +data: "j"/7.000000000,0 -> / +data: "k"/7.000000000,0 -> / data: "k"/1.000000000,0 -> /BYTES/k1 -meta: "l"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "l"/6.000000000,0 -> {localTs=5.000000009,0}/ +data: "l"/7.000000000,0 -> {localTs=5.000000009,0}/ data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "m"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "m"/6.000000000,0 -> /BYTES/m6 -meta: "n"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true +data: "m"/7.000000000,0 -> /BYTES/m7 +data: "n"/7.000000000,0 -> /BYTES/n7 data: "n"/6.000000000,0 -> /BYTES/n6 -data: "n"/5.000000000,0 -> /BYTES/n5 -meta: "o"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "o"/6.000000000,0 -> /BYTES/o6 -data: "o"/5.000000000,0 -> {localTs=0.000000009,0}/ -meta: "p"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "p"/6.000000000,0 -> / -meta: "q"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "q"/6.000000000,0 -> / -data: "q"/5.000000000,0 -> /BYTES/q5 -meta: "r"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "r"/6.000000000,0 -> {localTs=5.000000009,0}/ -data: "r"/5.000000000,0 -> {localTs=0.000000009,0}/ -stats: key_count=18 key_bytes=396 val_count=30 val_bytes=1062 range_key_count=1 range_key_bytes=22 range_val_count=2 live_count=9 live_bytes=621 gc_bytes_age=81375 intent_count=18 intent_bytes=318 separated_intent_count=18 intent_age=1692 +data: "o"/7.000000000,0 -> /BYTES/o7 +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +data: "p"/7.000000000,0 -> / +data: "q"/7.000000000,0 -> / +data: "q"/6.000000000,0 -> /BYTES/q6 +data: "r"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +stats: key_count=18 key_bytes=396 val_count=30 val_bytes=198 range_key_count=9 range_key_bytes=250 range_val_count=22 live_count=9 live_bytes=189 gc_bytes_age=62311 +# A second intent resolution should be a noop. run stats ok resolve_intent_range t=A k=a end=z status=COMMITTED ---- >> resolve_intent_range t=A k=a end=z status=COMMITTED -stats: val_bytes=-864 live_bytes=-432 gc_bytes_age=-40608 intent_count=-18 intent_bytes=-318 separated_intent_count=-18 intent_age=-1692 +stats: no change >> at end: -rangekey: {g-s}/[4.000000000,0=/ 3.000000000,0=/] -data: "a"/6.000000000,0 -> /BYTES/a6 -data: "b"/6.000000000,0 -> /BYTES/b6 +rangekey: g{-gg}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +data: "a"/7.000000000,0 -> /BYTES/a7 +data: "b"/7.000000000,0 -> /BYTES/b7 data: "b"/1.000000000,0 -> /BYTES/b1 -data: "c"/6.000000000,0 -> /BYTES/c6 +data: "c"/7.000000000,0 -> /BYTES/c7 data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "d"/6.000000000,0 -> / -data: "e"/6.000000000,0 -> / +data: "d"/7.000000000,0 -> / +data: "e"/7.000000000,0 -> / data: "e"/1.000000000,0 -> /BYTES/e1 -data: "f"/6.000000000,0 -> {localTs=5.000000009,0}/ +data: "f"/7.000000000,0 -> {localTs=5.000000009,0}/ data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "g"/6.000000000,0 -> /BYTES/g6 -data: "h"/6.000000000,0 -> /BYTES/h6 +data: "g"/7.000000000,0 -> /BYTES/g7 +data: "h"/7.000000000,0 -> /BYTES/h7 data: "h"/1.000000000,0 -> /BYTES/h1 -data: "i"/6.000000000,0 -> /BYTES/i6 +data: "i"/7.000000000,0 -> /BYTES/i7 data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "j"/6.000000000,0 -> / -data: "k"/6.000000000,0 -> / +data: "j"/7.000000000,0 -> / +data: "k"/7.000000000,0 -> / data: "k"/1.000000000,0 -> /BYTES/k1 -data: "l"/6.000000000,0 -> {localTs=5.000000009,0}/ +data: "l"/7.000000000,0 -> {localTs=5.000000009,0}/ data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "m"/6.000000000,0 -> /BYTES/m6 +data: "m"/7.000000000,0 -> /BYTES/m7 +data: "n"/7.000000000,0 -> /BYTES/n7 data: "n"/6.000000000,0 -> /BYTES/n6 -data: "n"/5.000000000,0 -> /BYTES/n5 -data: "o"/6.000000000,0 -> /BYTES/o6 -data: "o"/5.000000000,0 -> {localTs=0.000000009,0}/ -data: "p"/6.000000000,0 -> / -data: "q"/6.000000000,0 -> / -data: "q"/5.000000000,0 -> /BYTES/q5 -data: "r"/6.000000000,0 -> {localTs=5.000000009,0}/ -data: "r"/5.000000000,0 -> {localTs=0.000000009,0}/ -stats: key_count=18 key_bytes=396 val_count=30 val_bytes=198 range_key_count=1 range_key_bytes=22 range_val_count=2 live_count=9 live_bytes=189 gc_bytes_age=40767 +data: "o"/7.000000000,0 -> /BYTES/o7 +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +data: "p"/7.000000000,0 -> / +data: "q"/7.000000000,0 -> / +data: "q"/6.000000000,0 -> /BYTES/q6 +data: "r"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +stats: key_count=18 key_bytes=396 val_count=30 val_bytes=198 range_key_count=9 range_key_bytes=250 range_val_count=22 live_count=9 live_bytes=189 gc_bytes_age=62311 diff --git a/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_range_pushed b/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_range_pushed index 4ec1dda0cbad..e4dfab375ab1 100644 --- a/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_range_pushed +++ b/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_resolve_range_pushed @@ -3,20 +3,22 @@ # # (x is tombstone, o---o is range tombstone, [] is intent) # -# 6 [a6][b6][c6][x] [x] [x] [g6][h6][i6][x] [x] [x] [m6][n6][o6][x] [x] [x] -# 5 n5 x q5 x -# 4 o-----------------------------------------------o +# 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 two range tombstones, since the lowest is the one that matters for -# point key GCBytesAge. 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. +# 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 @@ -33,29 +35,33 @@ with ts=1 put k=k v=k1 del k=l localTs=0.9 del_range_ts k=g end=s ts=3 -del_range_ts k=g end=s ts=4 -with ts=5 - put k=n v=n5 +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=q5 + put k=q v=q6 del k=r localTs=0.9 with t=A - txn_begin ts=6 - put k=a v=a6 - put k=b v=b6 - put k=c v=c6 + 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=g6 - put k=h v=h6 - put k=i v=i6 + 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=m6 - put k=n v=n6 - put k=o v=o6 + 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 @@ -82,153 +88,227 @@ 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=g end=s ts=4 -stats: range_key_bytes=+9 range_val_count=+1 gc_bytes_age=+860 ->> put k=n v=n5 ts=5 +>> 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=5 +>> 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=+2185 ->> put k=q v=q5 ts=5 +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=5 +>> 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=+2185 ->> put k=a v=a6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=b v=b6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1786 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 ->> put k=c v=c6 t=A -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 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+9 gc_bytes_age=+2162 +>> put k=a v=a7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=b v=b7 t=A +stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1767 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+93 +>> put k=c v=c7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=d t=A del: "d": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=e t=A del: "e": found key true -stats: key_bytes=+12 val_count=+1 val_bytes=+48 live_count=-1 live_bytes=-21 gc_bytes_age=+7614 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +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 separated_intent_count=+1 intent_age=+93 >> del k=f localTs=5.9 t=A del: "f": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6852 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 ->> put k=g v=g6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=h v=h6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=i v=i6 t=A -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 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6777 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 +>> put k=g v=g7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=h v=h7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=i v=i7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=j t=A del: "j": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=k t=A del: "k": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+48 gc_bytes_age=+5634 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+48 gc_bytes_age=+5572 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=l localTs=5.9 t=A del: "l": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6852 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 ->> put k=m v=m6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=n v=n6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1786 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 ->> put k=o v=o6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_count=+1 live_bytes=+69 gc_bytes_age=-190 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6777 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 +>> put k=m v=m7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=n v=n7 t=A +stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1767 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+93 +>> put k=o v=o7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=p t=A del: "p": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=q t=A del: "q": found key true -stats: key_bytes=+12 val_count=+1 val_bytes=+48 live_count=-1 live_bytes=-21 gc_bytes_age=+7614 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +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 separated_intent_count=+1 intent_age=+93 >> del k=r localTs=5.9 t=A del: "r": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6860 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6787 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 >> at end: -txn: "A" meta={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=6.000000000,0 wto=false gul=0,0 -rangekey: {g-s}/[4.000000000,0=/ 3.000000000,0=/] -meta: "a"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "a"/6.000000000,0 -> /BYTES/a6 -meta: "b"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "b"/6.000000000,0 -> /BYTES/b6 +txn: "A" meta={id=00000000 key=/Min 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=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +meta: "a"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "a"/7.000000000,0 -> /BYTES/a7 +meta: "b"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "b"/7.000000000,0 -> /BYTES/b7 data: "b"/1.000000000,0 -> /BYTES/b1 -meta: "c"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "c"/6.000000000,0 -> /BYTES/c6 +meta: "c"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "c"/7.000000000,0 -> /BYTES/c7 data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "d"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "d"/6.000000000,0 -> / -meta: "e"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "e"/6.000000000,0 -> / +meta: "d"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "d"/7.000000000,0 -> / +meta: "e"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "e"/7.000000000,0 -> / data: "e"/1.000000000,0 -> /BYTES/e1 -meta: "f"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "f"/6.000000000,0 -> {localTs=5.000000009,0}/ +meta: "f"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "f"/7.000000000,0 -> {localTs=5.000000009,0}/ data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "g"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "g"/6.000000000,0 -> /BYTES/g6 -meta: "h"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "h"/6.000000000,0 -> /BYTES/h6 +meta: "g"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "g"/7.000000000,0 -> /BYTES/g7 +meta: "h"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "h"/7.000000000,0 -> /BYTES/h7 data: "h"/1.000000000,0 -> /BYTES/h1 -meta: "i"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "i"/6.000000000,0 -> /BYTES/i6 +meta: "i"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "i"/7.000000000,0 -> /BYTES/i7 data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "j"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "j"/6.000000000,0 -> / -meta: "k"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "k"/6.000000000,0 -> / +meta: "j"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "j"/7.000000000,0 -> / +meta: "k"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "k"/7.000000000,0 -> / data: "k"/1.000000000,0 -> /BYTES/k1 -meta: "l"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "l"/6.000000000,0 -> {localTs=5.000000009,0}/ +meta: "l"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "l"/7.000000000,0 -> {localTs=5.000000009,0}/ data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "m"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "m"/6.000000000,0 -> /BYTES/m6 -meta: "n"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true +meta: "m"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "m"/7.000000000,0 -> /BYTES/m7 +meta: "n"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "n"/7.000000000,0 -> /BYTES/n7 data: "n"/6.000000000,0 -> /BYTES/n6 -data: "n"/5.000000000,0 -> /BYTES/n5 -meta: "o"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "o"/6.000000000,0 -> /BYTES/o6 -data: "o"/5.000000000,0 -> {localTs=0.000000009,0}/ -meta: "p"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "p"/6.000000000,0 -> / -meta: "q"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "q"/6.000000000,0 -> / -data: "q"/5.000000000,0 -> /BYTES/q5 -meta: "r"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "r"/6.000000000,0 -> {localTs=5.000000009,0}/ -data: "r"/5.000000000,0 -> {localTs=0.000000009,0}/ -stats: key_count=18 key_bytes=396 val_count=30 val_bytes=1062 range_key_count=1 range_key_bytes=22 range_val_count=2 live_count=9 live_bytes=621 gc_bytes_age=81375 intent_count=18 intent_bytes=318 separated_intent_count=18 intent_age=1692 +meta: "o"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "o"/7.000000000,0 -> /BYTES/o7 +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +meta: "p"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "p"/7.000000000,0 -> / +meta: "q"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "q"/7.000000000,0 -> / +data: "q"/6.000000000,0 -> /BYTES/q6 +meta: "r"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "r"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +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 separated_intent_count=18 intent_age=1674 run stats ok -txn_advance t=A ts=7 +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 -stats: val_bytes=-669 live_bytes=-315 gc_bytes_age=-33595 intent_count=-18 intent_bytes=-318 separated_intent_count=-18 intent_age=-1692 +stats: val_bytes=-669 live_bytes=-315 gc_bytes_age=-33241 intent_count=-18 intent_bytes=-318 separated_intent_count=-18 intent_age=-1674 >> at end: -txn: "A" meta={id=00000000 key=/Min pri=0.00000000 epo=0 ts=7.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=6.000000000,0 wto=false gul=0,0 -rangekey: {g-s}/[4.000000000,0=/ 3.000000000,0=/] -data: "a"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/a6 -data: "b"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/b6 +txn: "A" meta={id=00000000 key=/Min 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=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +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"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/c6 +data: "c"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/c7 data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "d"/7.000000000,0 -> {localTs=6.000000000,0}/ -data: "e"/7.000000000,0 -> {localTs=6.000000000,0}/ +data: "d"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "e"/8.000000000,0 -> {localTs=7.000000000,0}/ data: "e"/1.000000000,0 -> /BYTES/e1 -data: "f"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "f"/8.000000000,0 -> {localTs=5.000000009,0}/ data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "g"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/g6 -data: "h"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/h6 +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"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/i6 +data: "i"/8.000000000,0 -> {localTs=7.000000000,0}/BYTES/i7 data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "j"/7.000000000,0 -> {localTs=6.000000000,0}/ -data: "k"/7.000000000,0 -> {localTs=6.000000000,0}/ +data: "j"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "k"/8.000000000,0 -> {localTs=7.000000000,0}/ data: "k"/1.000000000,0 -> /BYTES/k1 -data: "l"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "l"/8.000000000,0 -> {localTs=5.000000009,0}/ data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ -data: "m"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/m6 -data: "n"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/n6 -data: "n"/5.000000000,0 -> /BYTES/n5 -data: "o"/7.000000000,0 -> {localTs=6.000000000,0}/BYTES/o6 -data: "o"/5.000000000,0 -> {localTs=0.000000009,0}/ -data: "p"/7.000000000,0 -> {localTs=6.000000000,0}/ -data: "q"/7.000000000,0 -> {localTs=6.000000000,0}/ -data: "q"/5.000000000,0 -> /BYTES/q5 -data: "r"/7.000000000,0 -> {localTs=5.000000009,0}/ -data: "r"/5.000000000,0 -> {localTs=0.000000009,0}/ -stats: key_count=18 key_bytes=396 val_count=30 val_bytes=393 range_key_count=1 range_key_bytes=22 range_val_count=2 live_count=9 live_bytes=306 gc_bytes_age=47780 +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}/ +data: "p"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "q"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "q"/6.000000000,0 -> /BYTES/q6 +data: "r"/8.000000000,0 -> {localTs=5.000000009,0}/ +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +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 +stats: no change +>> at end: +txn: "A" meta={id=00000000 key=/Min 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=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +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}/ +data: "d"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "e"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "e"/1.000000000,0 -> /BYTES/e1 +data: "f"/8.000000000,0 -> {localTs=5.000000009,0}/ +data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ +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}/ +data: "j"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "k"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "k"/1.000000000,0 -> /BYTES/k1 +data: "l"/8.000000000,0 -> {localTs=5.000000009,0}/ +data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ +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}/ +data: "p"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "q"/8.000000000,0 -> {localTs=7.000000000,0}/ +data: "q"/6.000000000,0 -> /BYTES/q6 +data: "r"/8.000000000,0 -> {localTs=5.000000009,0}/ +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +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 diff --git a/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_rewrite b/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_rewrite index ce4bd8a3e774..a4752bd25c7f 100644 --- a/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_rewrite +++ b/pkg/storage/testdata/mvcc_histories/range_tombstone_stats_intent_rewrite @@ -1,22 +1,24 @@ -# Tests MVCC stats calculations when rewriting intents. Intermediate states are +# 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) # -# 6 [a6][b6][c6][x] [x] [x] [g6][h6][i6][x] [x] [x] [m6][n6][o6][x] [x] [x] -# 5 n5 x q5 x -# 4 o-----------------------------------------------o +# 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 two range tombstones, since the lowest is the one that matters for -# point key GCBytesAge. 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. +# 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 @@ -33,29 +35,33 @@ with ts=1 put k=k v=k1 del k=l localTs=0.9 del_range_ts k=g end=s ts=3 -del_range_ts k=g end=s ts=4 -with ts=5 - put k=n v=n5 +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=q5 + put k=q v=q6 del k=r localTs=0.9 with t=A - txn_begin ts=6 - put k=a v=a6 - put k=b v=b6 - put k=c v=c6 + 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=g6 - put k=h v=h6 - put k=i v=i6 + 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=m6 - put k=n v=n6 - put k=o v=o6 + 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 @@ -82,335 +88,388 @@ 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=g end=s ts=4 -stats: range_key_bytes=+9 range_val_count=+1 gc_bytes_age=+860 ->> put k=n v=n5 ts=5 +>> 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=5 +>> 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=+2185 ->> put k=q v=q5 ts=5 +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=5 +>> 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=+2185 ->> put k=a v=a6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=b v=b6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1786 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 ->> put k=c v=c6 t=A -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 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+9 gc_bytes_age=+2162 +>> put k=a v=a7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=b v=b7 t=A +stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1767 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+93 +>> put k=c v=c7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=d t=A del: "d": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=e t=A del: "e": found key true -stats: key_bytes=+12 val_count=+1 val_bytes=+48 live_count=-1 live_bytes=-21 gc_bytes_age=+7614 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +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 separated_intent_count=+1 intent_age=+93 >> del k=f localTs=5.9 t=A del: "f": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6852 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 ->> put k=g v=g6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=h v=h6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=i v=i6 t=A -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 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6777 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 +>> put k=g v=g7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=h v=h7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=i v=i7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=j t=A del: "j": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=k t=A del: "k": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+48 gc_bytes_age=+5634 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+48 gc_bytes_age=+5572 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=l localTs=5.9 t=A del: "l": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6852 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 ->> put k=m v=m6 t=A -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 separated_intent_count=+1 intent_age=+94 ->> put k=n v=n6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1786 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 ->> put k=o v=o6 t=A -stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_count=+1 live_bytes=+69 gc_bytes_age=-190 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6777 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 +>> put k=m v=m7 t=A +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 separated_intent_count=+1 intent_age=+93 +>> put k=n v=n7 t=A +stats: key_bytes=+12 val_count=+1 val_bytes=+55 live_bytes=+48 gc_bytes_age=+1767 intent_count=+1 intent_bytes=+19 separated_intent_count=+1 intent_age=+93 +>> put k=o v=o7 t=A +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 separated_intent_count=+1 intent_age=+93 >> del k=p t=A del: "p": found key false -stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5828 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+48 gc_bytes_age=+5766 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+93 >> del k=q t=A del: "q": found key true -stats: key_bytes=+12 val_count=+1 val_bytes=+48 live_count=-1 live_bytes=-21 gc_bytes_age=+7614 intent_count=+1 intent_bytes=+12 separated_intent_count=+1 intent_age=+94 +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 separated_intent_count=+1 intent_age=+93 >> del k=r localTs=5.9 t=A del: "r": found key false -stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6860 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+94 +stats: key_bytes=+12 val_count=+1 val_bytes=+61 gc_bytes_age=+6787 intent_count=+1 intent_bytes=+25 separated_intent_count=+1 intent_age=+93 >> at end: -txn: "A" meta={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=6.000000000,0 wto=false gul=0,0 -rangekey: {g-s}/[4.000000000,0=/ 3.000000000,0=/] -meta: "a"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "a"/6.000000000,0 -> /BYTES/a6 -meta: "b"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "b"/6.000000000,0 -> /BYTES/b6 +txn: "A" meta={id=00000000 key=/Min 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=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +meta: "a"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "a"/7.000000000,0 -> /BYTES/a7 +meta: "b"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "b"/7.000000000,0 -> /BYTES/b7 data: "b"/1.000000000,0 -> /BYTES/b1 -meta: "c"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "c"/6.000000000,0 -> /BYTES/c6 +meta: "c"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "c"/7.000000000,0 -> /BYTES/c7 data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "d"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "d"/6.000000000,0 -> / -meta: "e"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "e"/6.000000000,0 -> / +meta: "d"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "d"/7.000000000,0 -> / +meta: "e"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "e"/7.000000000,0 -> / data: "e"/1.000000000,0 -> /BYTES/e1 -meta: "f"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "f"/6.000000000,0 -> {localTs=5.000000009,0}/ +meta: "f"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "f"/7.000000000,0 -> {localTs=5.000000009,0}/ data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "g"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "g"/6.000000000,0 -> /BYTES/g6 -meta: "h"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "h"/6.000000000,0 -> /BYTES/h6 +meta: "g"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "g"/7.000000000,0 -> /BYTES/g7 +meta: "h"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "h"/7.000000000,0 -> /BYTES/h7 data: "h"/1.000000000,0 -> /BYTES/h1 -meta: "i"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "i"/6.000000000,0 -> /BYTES/i6 +meta: "i"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "i"/7.000000000,0 -> /BYTES/i7 data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "j"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "j"/6.000000000,0 -> / -meta: "k"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "k"/6.000000000,0 -> / +meta: "j"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "j"/7.000000000,0 -> / +meta: "k"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "k"/7.000000000,0 -> / data: "k"/1.000000000,0 -> /BYTES/k1 -meta: "l"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "l"/6.000000000,0 -> {localTs=5.000000009,0}/ +meta: "l"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "l"/7.000000000,0 -> {localTs=5.000000009,0}/ data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "m"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "m"/6.000000000,0 -> /BYTES/m6 -meta: "n"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true +meta: "m"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "m"/7.000000000,0 -> /BYTES/m7 +meta: "n"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "n"/7.000000000,0 -> /BYTES/n7 data: "n"/6.000000000,0 -> /BYTES/n6 -data: "n"/5.000000000,0 -> /BYTES/n5 -meta: "o"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true -data: "o"/6.000000000,0 -> /BYTES/o6 -data: "o"/5.000000000,0 -> {localTs=0.000000009,0}/ -meta: "p"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "p"/6.000000000,0 -> / -meta: "q"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=true -data: "q"/6.000000000,0 -> / -data: "q"/5.000000000,0 -> /BYTES/q5 -meta: "r"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=true klen=12 vlen=13 mergeTs= txnDidNotUpdateMeta=true -data: "r"/6.000000000,0 -> {localTs=5.000000009,0}/ -data: "r"/5.000000000,0 -> {localTs=0.000000009,0}/ -stats: key_count=18 key_bytes=396 val_count=30 val_bytes=1062 range_key_count=1 range_key_bytes=22 range_val_count=2 live_count=9 live_bytes=621 gc_bytes_age=81375 intent_count=18 intent_bytes=318 separated_intent_count=18 intent_age=1692 +meta: "o"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "o"/7.000000000,0 -> /BYTES/o7 +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +meta: "p"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "p"/7.000000000,0 -> / +meta: "q"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "q"/7.000000000,0 -> / +data: "q"/6.000000000,0 -> /BYTES/q6 +meta: "r"/0,0 -> txn={id=00000000 key=/Min 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= txnDidNotUpdateMeta=true +data: "r"/7.000000000,0 -> {localTs=5.000000009,0}/ +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +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 separated_intent_count=18 intent_age=1674 # Rewrite the same keys at a higher timestamp. run stats ok -with t=A ts=7 +with t=A ts=8 txn_advance txn_restart - put k=a v=a7 - put k=b v=b7 - put k=c v=c7 + put k=a v=a8 + put k=b v=b8 + put k=c v=c8 del k=d del k=e del k=f - put k=g v=g7 - put k=h v=h7 - put k=i v=i7 + put k=g v=g8 + put k=h v=h8 + put k=i v=i8 del k=j del k=k del k=l - put k=m v=m7 - put k=n v=n7 - put k=o v=o7 + put k=m v=m8 + put k=n v=n8 + put k=o v=o8 del k=p del k=q del k=r ---- ->> put k=a v=a7 t=A ts=7 +>> put k=a v=a8 t=A ts=8 stats: intent_age=-1 ->> put k=b v=b7 t=A ts=7 +>> put k=b v=b8 t=A ts=8 stats: gc_bytes_age=-19 intent_age=-1 ->> put k=c v=c7 t=A ts=7 +>> put k=c v=c8 t=A ts=8 stats: intent_age=-1 ->> del k=d t=A ts=7 +>> del k=d t=A ts=8 del: "d": found key false stats: gc_bytes_age=-62 intent_age=-1 ->> del k=e t=A ts=7 +>> del k=e t=A ts=8 del: "e": found key true stats: gc_bytes_age=-81 intent_age=-1 ->> del k=f t=A ts=7 +>> del k=f t=A ts=8 del: "f": found key false -stats: val_bytes=-13 gc_bytes_age=-1284 intent_bytes=-13 intent_age=-1 ->> put k=g v=g7 t=A ts=7 +stats: val_bytes=-13 gc_bytes_age=-1271 intent_bytes=-13 intent_age=-1 +>> put k=g v=g8 t=A ts=8 stats: intent_age=-1 ->> put k=h v=h7 t=A ts=7 +>> put k=h v=h8 t=A ts=8 stats: intent_age=-1 ->> put k=i v=i7 t=A ts=7 +>> put k=i v=i8 t=A ts=8 stats: intent_age=-1 ->> del k=j t=A ts=7 +>> del k=j t=A ts=8 del: "j": found key false stats: gc_bytes_age=-62 intent_age=-1 ->> del k=k t=A ts=7 +>> del k=k t=A ts=8 del: "k": found key false stats: gc_bytes_age=-62 intent_age=-1 ->> del k=l t=A ts=7 +>> del k=l t=A ts=8 del: "l": found key false -stats: val_bytes=-13 gc_bytes_age=-1284 intent_bytes=-13 intent_age=-1 ->> put k=m v=m7 t=A ts=7 +stats: val_bytes=-13 gc_bytes_age=-1271 intent_bytes=-13 intent_age=-1 +>> put k=m v=m8 t=A ts=8 stats: intent_age=-1 ->> put k=n v=n7 t=A ts=7 +>> put k=n v=n8 t=A ts=8 stats: gc_bytes_age=-19 intent_age=-1 ->> put k=o v=o7 t=A ts=7 +>> put k=o v=o8 t=A ts=8 stats: intent_age=-1 ->> del k=p t=A ts=7 +>> del k=p t=A ts=8 del: "p": found key false stats: gc_bytes_age=-62 intent_age=-1 ->> del k=q t=A ts=7 +>> del k=q t=A ts=8 del: "q": found key true stats: gc_bytes_age=-81 intent_age=-1 ->> del k=r t=A ts=7 +>> del k=r t=A ts=8 del: "r": found key false -stats: val_bytes=-13 gc_bytes_age=-1284 intent_bytes=-13 intent_age=-1 +stats: val_bytes=-13 gc_bytes_age=-1271 intent_bytes=-13 intent_age=-1 >> at end: -txn: "A" meta={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=7.000000000,0 wto=false gul=0,0 -rangekey: {g-s}/[4.000000000,0=/ 3.000000000,0=/] -meta: "a"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "a"/7.000000000,0 -> /BYTES/a7 -meta: "b"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "b"/7.000000000,0 -> /BYTES/b7 +txn: "A" meta={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=8.000000000,0 wto=false gul=0,0 +rangekey: g{-gg}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +meta: "a"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "a"/8.000000000,0 -> /BYTES/a8 +meta: "b"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "b"/8.000000000,0 -> /BYTES/b8 data: "b"/1.000000000,0 -> /BYTES/b1 -meta: "c"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "c"/7.000000000,0 -> /BYTES/c7 +meta: "c"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "c"/8.000000000,0 -> /BYTES/c8 data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "d"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "d"/7.000000000,0 -> / -meta: "e"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "e"/7.000000000,0 -> / +meta: "d"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "d"/8.000000000,0 -> / +meta: "e"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "e"/8.000000000,0 -> / data: "e"/1.000000000,0 -> /BYTES/e1 -meta: "f"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "f"/7.000000000,0 -> / +meta: "f"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "f"/8.000000000,0 -> / data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "g"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "g"/7.000000000,0 -> /BYTES/g7 -meta: "h"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "h"/7.000000000,0 -> /BYTES/h7 +meta: "g"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "g"/8.000000000,0 -> /BYTES/g8 +meta: "h"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "h"/8.000000000,0 -> /BYTES/h8 data: "h"/1.000000000,0 -> /BYTES/h1 -meta: "i"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "i"/7.000000000,0 -> /BYTES/i7 +meta: "i"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "i"/8.000000000,0 -> /BYTES/i8 data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "j"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "j"/7.000000000,0 -> / -meta: "k"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "k"/7.000000000,0 -> / +meta: "j"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "j"/8.000000000,0 -> / +meta: "k"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "k"/8.000000000,0 -> / data: "k"/1.000000000,0 -> /BYTES/k1 -meta: "l"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "l"/7.000000000,0 -> / +meta: "l"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "l"/8.000000000,0 -> / data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "m"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "m"/7.000000000,0 -> /BYTES/m7 -meta: "n"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "n"/7.000000000,0 -> /BYTES/n7 -data: "n"/5.000000000,0 -> /BYTES/n5 -meta: "o"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "o"/7.000000000,0 -> /BYTES/o7 -data: "o"/5.000000000,0 -> {localTs=0.000000009,0}/ -meta: "p"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "p"/7.000000000,0 -> / -meta: "q"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "q"/7.000000000,0 -> / -data: "q"/5.000000000,0 -> /BYTES/q5 -meta: "r"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "r"/7.000000000,0 -> / -data: "r"/5.000000000,0 -> {localTs=0.000000009,0}/ -stats: key_count=18 key_bytes=396 val_count=30 val_bytes=1023 range_key_count=1 range_key_bytes=22 range_val_count=2 live_count=9 live_bytes=621 gc_bytes_age=77075 intent_count=18 intent_bytes=279 separated_intent_count=18 intent_age=1674 +meta: "m"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "m"/8.000000000,0 -> /BYTES/m8 +meta: "n"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "n"/8.000000000,0 -> /BYTES/n8 +data: "n"/6.000000000,0 -> /BYTES/n6 +meta: "o"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "o"/8.000000000,0 -> /BYTES/o8 +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +meta: "p"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "p"/8.000000000,0 -> / +meta: "q"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "q"/8.000000000,0 -> / +data: "q"/6.000000000,0 -> /BYTES/q6 +meta: "r"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "r"/8.000000000,0 -> / +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +stats: key_count=18 key_bytes=396 val_count=30 val_bytes=1023 range_key_count=9 range_key_bytes=250 range_val_count=22 live_count=9 live_bytes=621 gc_bytes_age=98226 intent_count=18 intent_bytes=279 separated_intent_count=18 intent_age=1656 # Rewrite keys<->tombstones at a higher timestamp. run stats ok -with t=A ts=8 +with t=A ts=9 txn_advance txn_restart del k=a del k=b del k=c - put k=d v=d8 - put k=e v=e8 - put k=f v=f8 + put k=d v=d9 + put k=e v=e9 + put k=f v=f9 del k=g del k=h del k=i - put k=j v=j8 - put k=k v=k8 - put k=l v=l8 + put k=j v=j9 + put k=k v=k9 + put k=l v=l9 + del k=m + del k=n + del k=o + put k=p v=p9 + put k=q v=q9 + put k=r v=r9 ---- ->> del k=a t=A ts=8 +>> del k=a t=A ts=9 del: "a": found key false -stats: val_bytes=-7 live_count=-1 live_bytes=-69 gc_bytes_age=+5704 intent_bytes=-7 intent_age=-1 ->> del k=b t=A ts=8 +stats: val_bytes=-7 live_count=-1 live_bytes=-69 gc_bytes_age=+5642 intent_bytes=-7 intent_age=-1 +>> del k=b t=A ts=9 del: "b": found key true -stats: val_bytes=-7 live_count=-1 live_bytes=-69 gc_bytes_age=+5685 intent_bytes=-7 intent_age=-1 ->> del k=c t=A ts=8 +stats: val_bytes=-7 live_count=-1 live_bytes=-69 gc_bytes_age=+5623 intent_bytes=-7 intent_age=-1 +>> del k=c t=A ts=9 del: "c": found key false -stats: val_bytes=-7 live_count=-1 live_bytes=-69 gc_bytes_age=+5704 intent_bytes=-7 intent_age=-1 ->> put k=d v=d8 t=A ts=8 -stats: val_bytes=+7 live_count=+1 live_bytes=+69 gc_bytes_age=-5766 intent_bytes=+7 intent_age=-1 ->> put k=e v=e8 t=A ts=8 -stats: val_bytes=+7 live_count=+1 live_bytes=+69 gc_bytes_age=-5785 intent_bytes=+7 intent_age=-1 ->> put k=f v=f8 t=A ts=8 -stats: val_bytes=+7 live_count=+1 live_bytes=+69 gc_bytes_age=-5766 intent_bytes=+7 intent_age=-1 ->> del k=g t=A ts=8 +stats: val_bytes=-7 live_count=-1 live_bytes=-69 gc_bytes_age=+5642 intent_bytes=-7 intent_age=-1 +>> put k=d v=d9 t=A ts=9 +stats: val_bytes=+7 live_count=+1 live_bytes=+69 gc_bytes_age=-5704 intent_bytes=+7 intent_age=-1 +>> put k=e v=e9 t=A ts=9 +stats: val_bytes=+7 live_count=+1 live_bytes=+69 gc_bytes_age=-5723 intent_bytes=+7 intent_age=-1 +>> put k=f v=f9 t=A ts=9 +stats: val_bytes=+7 live_count=+1 live_bytes=+69 gc_bytes_age=-5704 intent_bytes=+7 intent_age=-1 +>> del k=g t=A ts=9 del: "g": found key false -stats: val_bytes=-7 live_count=-1 live_bytes=-69 gc_bytes_age=+5704 intent_bytes=-7 intent_age=-1 ->> del k=h t=A ts=8 +stats: val_bytes=-7 live_count=-1 live_bytes=-69 gc_bytes_age=+5642 intent_bytes=-7 intent_age=-1 +>> del k=h t=A ts=9 del: "h": found key false -stats: val_bytes=-7 live_count=-1 live_bytes=-69 gc_bytes_age=+5704 intent_bytes=-7 intent_age=-1 ->> del k=i t=A ts=8 +stats: val_bytes=-7 live_count=-1 live_bytes=-69 gc_bytes_age=+5642 intent_bytes=-7 intent_age=-1 +>> del k=i t=A ts=9 del: "i": found key false -stats: val_bytes=-7 live_count=-1 live_bytes=-69 gc_bytes_age=+5704 intent_bytes=-7 intent_age=-1 ->> put k=j v=j8 t=A ts=8 -stats: val_bytes=+7 live_count=+1 live_bytes=+69 gc_bytes_age=-5766 intent_bytes=+7 intent_age=-1 ->> put k=k v=k8 t=A ts=8 -stats: val_bytes=+7 live_count=+1 live_bytes=+69 gc_bytes_age=-5766 intent_bytes=+7 intent_age=-1 ->> put k=l v=l8 t=A ts=8 -stats: val_bytes=+7 live_count=+1 live_bytes=+69 gc_bytes_age=-5766 intent_bytes=+7 intent_age=-1 +stats: val_bytes=-7 live_count=-1 live_bytes=-69 gc_bytes_age=+5642 intent_bytes=-7 intent_age=-1 +>> put k=j v=j9 t=A ts=9 +stats: val_bytes=+7 live_count=+1 live_bytes=+69 gc_bytes_age=-5704 intent_bytes=+7 intent_age=-1 +>> put k=k v=k9 t=A ts=9 +stats: val_bytes=+7 live_count=+1 live_bytes=+69 gc_bytes_age=-5704 intent_bytes=+7 intent_age=-1 +>> put k=l v=l9 t=A ts=9 +stats: val_bytes=+7 live_count=+1 live_bytes=+69 gc_bytes_age=-5704 intent_bytes=+7 intent_age=-1 +>> del k=m t=A ts=9 +del: "m": found key false +stats: val_bytes=-7 live_count=-1 live_bytes=-69 gc_bytes_age=+5642 intent_bytes=-7 intent_age=-1 +>> del k=n t=A ts=9 +del: "n": found key true +stats: val_bytes=-7 live_count=-1 live_bytes=-69 gc_bytes_age=+5623 intent_bytes=-7 intent_age=-1 +>> del k=o t=A ts=9 +del: "o": found key false +stats: val_bytes=-7 live_count=-1 live_bytes=-69 gc_bytes_age=+5642 intent_bytes=-7 intent_age=-1 +>> put k=p v=p9 t=A ts=9 +stats: val_bytes=+7 live_count=+1 live_bytes=+69 gc_bytes_age=-5704 intent_bytes=+7 intent_age=-1 +>> put k=q v=q9 t=A ts=9 +stats: val_bytes=+7 live_count=+1 live_bytes=+69 gc_bytes_age=-5723 intent_bytes=+7 intent_age=-1 +>> put k=r v=r9 t=A ts=9 +stats: val_bytes=+7 live_count=+1 live_bytes=+69 gc_bytes_age=-5704 intent_bytes=+7 intent_age=-1 >> at end: -txn: "A" meta={id=00000000 key=/Min pri=0.00000000 epo=2 ts=8.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=8.000000000,0 wto=false gul=0,0 -rangekey: {g-s}/[4.000000000,0=/ 3.000000000,0=/] -meta: "a"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "a"/8.000000000,0 -> / -meta: "b"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "b"/8.000000000,0 -> / +txn: "A" meta={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=9.000000000,0 wto=false gul=0,0 +rangekey: g{-gg}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ggg-i}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {i-jjj}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {jjj-l}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {l-mmm}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {mmm-o}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {o-ppp}/[5.000000000,0=/ 3.000000000,0=/] +rangekey: {ppp-r}/[5.000000000,0=/ 4.000000000,0=/ 3.000000000,0=/] +rangekey: {r-s}/[5.000000000,0=/ 3.000000000,0=/] +meta: "a"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "a"/9.000000000,0 -> / +meta: "b"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "b"/9.000000000,0 -> / data: "b"/1.000000000,0 -> /BYTES/b1 -meta: "c"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "c"/8.000000000,0 -> / +meta: "c"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "c"/9.000000000,0 -> / data: "c"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "d"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "d"/8.000000000,0 -> /BYTES/d8 -meta: "e"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "e"/8.000000000,0 -> /BYTES/e8 +meta: "d"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "d"/9.000000000,0 -> /BYTES/d9 +meta: "e"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "e"/9.000000000,0 -> /BYTES/e9 data: "e"/1.000000000,0 -> /BYTES/e1 -meta: "f"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "f"/8.000000000,0 -> /BYTES/f8 +meta: "f"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "f"/9.000000000,0 -> /BYTES/f9 data: "f"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "g"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "g"/8.000000000,0 -> / -meta: "h"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "h"/8.000000000,0 -> / +meta: "g"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "g"/9.000000000,0 -> / +meta: "h"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "h"/9.000000000,0 -> / data: "h"/1.000000000,0 -> /BYTES/h1 -meta: "i"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "i"/8.000000000,0 -> / +meta: "i"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "i"/9.000000000,0 -> / data: "i"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "j"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "j"/8.000000000,0 -> /BYTES/j8 -meta: "k"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "k"/8.000000000,0 -> /BYTES/k8 +meta: "j"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "j"/9.000000000,0 -> /BYTES/j9 +meta: "k"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "k"/9.000000000,0 -> /BYTES/k9 data: "k"/1.000000000,0 -> /BYTES/k1 -meta: "l"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=8.000000000,0 min=0,0 seq=0} ts=8.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "l"/8.000000000,0 -> /BYTES/l8 +meta: "l"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "l"/9.000000000,0 -> /BYTES/l9 data: "l"/1.000000000,0 -> {localTs=0.000000009,0}/ -meta: "m"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "m"/7.000000000,0 -> /BYTES/m7 -meta: "n"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "n"/7.000000000,0 -> /BYTES/n7 -data: "n"/5.000000000,0 -> /BYTES/n5 -meta: "o"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false -data: "o"/7.000000000,0 -> /BYTES/o7 -data: "o"/5.000000000,0 -> {localTs=0.000000009,0}/ -meta: "p"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "p"/7.000000000,0 -> / -meta: "q"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "q"/7.000000000,0 -> / -data: "q"/5.000000000,0 -> /BYTES/q5 -meta: "r"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=1 ts=7.000000000,0 min=0,0 seq=0} ts=7.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false -data: "r"/7.000000000,0 -> / -data: "r"/5.000000000,0 -> {localTs=0.000000009,0}/ -stats: key_count=18 key_bytes=396 val_count=30 val_bytes=1023 range_key_count=1 range_key_bytes=22 range_val_count=2 live_count=9 live_bytes=621 gc_bytes_age=76665 intent_count=18 intent_bytes=279 separated_intent_count=18 intent_age=1662 +meta: "m"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "m"/9.000000000,0 -> / +meta: "n"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "n"/9.000000000,0 -> / +data: "n"/6.000000000,0 -> /BYTES/n6 +meta: "o"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=true klen=12 vlen=0 mergeTs= txnDidNotUpdateMeta=false +data: "o"/9.000000000,0 -> / +data: "o"/6.000000000,0 -> {localTs=0.000000009,0}/ +meta: "p"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "p"/9.000000000,0 -> /BYTES/p9 +meta: "q"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "q"/9.000000000,0 -> /BYTES/q9 +data: "q"/6.000000000,0 -> /BYTES/q6 +meta: "r"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=2 ts=9.000000000,0 min=0,0 seq=0} ts=9.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=false +data: "r"/9.000000000,0 -> /BYTES/r9 +data: "r"/6.000000000,0 -> {localTs=0.000000009,0}/ +stats: key_count=18 key_bytes=396 val_count=30 val_bytes=1023 range_key_count=9 range_key_bytes=250 range_val_count=22 live_count=9 live_bytes=621 gc_bytes_age=97592 intent_count=18 intent_bytes=279 separated_intent_count=18 intent_age=1638 diff --git a/pkg/storage/testdata/mvcc_histories/range_tombstone_writes_idempotent b/pkg/storage/testdata/mvcc_histories/range_tombstone_writes_idempotent index 245168267137..545c704bb640 100644 --- a/pkg/storage/testdata/mvcc_histories/range_tombstone_writes_idempotent +++ b/pkg/storage/testdata/mvcc_histories/range_tombstone_writes_idempotent @@ -114,6 +114,49 @@ data: "n"/3.000000000,0 -> / meta: "p"/0,0 -> txn={} ts=0,0 del=false klen=0 vlen=0 raw=/BYTES/p0 mergeTs= txnDidNotUpdateMeta=false error: (*roachpb.WriteTooOldError:) WriteTooOldError: write for key "l" at timestamp 3.000000000,0 too old; wrote at 4.000000000,1 +# Writing at the timestamp of a point or range key errors. +run error +del_range_ts k=e end=f ts=4 idempotent +---- +>> at end: +rangekey: {a-d}/[3.000000000,0=/] +rangekey: {k-m}/[4.000000000,0=/] +rangekey: {m-o}/[4.000000000,0=/ 2.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "c"/4.000000000,0 -> /BYTES/c4 +data: "e"/4.000000000,0 -> /BYTES/e4 +data: "f"/4.000000000,0 -> / +data: "g"/2.000000000,0 -> /BYTES/g2 +meta: "i"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true +data: "i"/6.000000000,0 -> /BYTES/i6 +data: "k"/3.000000000,0 -> /BYTES/k3 +data: "m"/1.000000000,0 -> /BYTES/m1 +data: "n"/3.000000000,0 -> / +meta: "p"/0,0 -> txn={} ts=0,0 del=false klen=0 vlen=0 raw=/BYTES/p0 mergeTs= txnDidNotUpdateMeta=false +error: (*roachpb.WriteTooOldError:) WriteTooOldError: write for key "e" at timestamp 4.000000000,0 too old; wrote at 4.000000000,1 + +run error +del_range_ts k=l end=m ts=4 idempotent +---- +>> at end: +rangekey: {a-d}/[3.000000000,0=/] +rangekey: {k-m}/[4.000000000,0=/] +rangekey: {m-o}/[4.000000000,0=/ 2.000000000,0=/] +data: "a"/4.000000000,0 -> / +data: "a"/2.000000000,0 -> /BYTES/a2 +data: "c"/4.000000000,0 -> /BYTES/c4 +data: "e"/4.000000000,0 -> /BYTES/e4 +data: "f"/4.000000000,0 -> / +data: "g"/2.000000000,0 -> /BYTES/g2 +meta: "i"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=6.000000000,0 min=0,0 seq=0} ts=6.000000000,0 del=false klen=12 vlen=7 mergeTs= txnDidNotUpdateMeta=true +data: "i"/6.000000000,0 -> /BYTES/i6 +data: "k"/3.000000000,0 -> /BYTES/k3 +data: "m"/1.000000000,0 -> /BYTES/m1 +data: "n"/3.000000000,0 -> / +meta: "p"/0,0 -> txn={} ts=0,0 del=false klen=0 vlen=0 raw=/BYTES/p0 mergeTs= txnDidNotUpdateMeta=false +error: (*roachpb.WriteTooOldError:) WriteTooOldError: write for key "l" at timestamp 4.000000000,0 too old; wrote at 4.000000000,1 + # Writing below intents error. run error del_range_ts k=i end=j ts=3 idempotent