ceremonyclient/pebble/testdata/iter_histories/range_keys_simple
Cassandra Heart 2e2a1e4789
v1.2.0 (#31)
2024-01-03 01:31:42 -06:00

509 lines
8.4 KiB
Plaintext

reset
----
# Use the key string as the value so that it's easy to tell when we surface the
# wrong value.
batch commit
set a a
set b b
set c c
set d d
range-key-set b c @5 boop
range-key-set cat dog @3 beep
----
committed 6 keys
# Scan forward
combined-iter
seek-ge a
next
next
next
next
next
----
a: (a, .)
b: (b, [b-c) @5=boop UPDATED)
c: (c, . UPDATED)
cat: (., [cat-dog) @3=beep UPDATED)
d: (d, [cat-dog) @3=beep)
.
# Do the above forward iteration but with a mask suffix. The results should be
# identical despite range keys serving as masks, because none of the point keys
# have suffixes.
combined-iter mask-suffix=@9
seek-ge a
next
next
next
next
next
----
a: (a, .)
b: (b, [b-c) @5=boop UPDATED)
c: (c, . UPDATED)
cat: (., [cat-dog) @3=beep UPDATED)
d: (d, [cat-dog) @3=beep)
.
# Scan backward
combined-iter
seek-lt z
prev
prev
prev
prev
prev
----
d: (d, [cat-dog) @3=beep UPDATED)
cat: (., [cat-dog) @3=beep)
c: (c, . UPDATED)
b: (b, [b-c) @5=boop UPDATED)
a: (a, . UPDATED)
.
combined-iter
seek-ge ace
seek-ge b
seek-ge c
seek-ge cab
seek-ge cat
seek-ge d
seek-ge day
seek-ge dog
----
b: (b, [b-c) @5=boop UPDATED)
b: (b, [b-c) @5=boop)
c: (c, . UPDATED)
cat: (., [cat-dog) @3=beep UPDATED)
cat: (., [cat-dog) @3=beep)
d: (d, [cat-dog) @3=beep)
day: (., [cat-dog) @3=beep)
.
combined-iter
seek-lt 1
seek-lt ace
seek-lt b
seek-lt c
seek-lt cab
seek-lt cat
seek-lt d
seek-lt day
seek-lt dog
seek-lt zebra
----
.
a: (a, .)
a: (a, .)
b: (b, [b-c) @5=boop UPDATED)
c: (c, . UPDATED)
c: (c, .)
cat: (., [cat-dog) @3=beep UPDATED)
d: (d, [cat-dog) @3=beep)
d: (d, [cat-dog) @3=beep)
d: (d, [cat-dog) @3=beep)
rangekey-iter
first
next
next
set-bounds lower=bat upper=catatonic
first
next
next
----
b [b-c) @5=boop UPDATED
cat [cat-dog) @3=beep UPDATED
.
.
bat [bat-c) @5=boop UPDATED
cat [cat-catatonic) @3=beep UPDATED
.
rangekey-iter
seek-ge bat
----
bat [b-c) @5=boop UPDATED
# Delete 'b': The Iterator should still stop at b because of the range key
# with a start boundary at b.
batch commit
del b
----
committed 1 keys
combined-iter
seek-ge b
seek-ge ace
----
b: (., [b-c) @5=boop UPDATED)
b: (., [b-c) @5=boop)
rangekey-iter
seek-ge b
seek-ge ace
----
b [b-c) @5=boop UPDATED
b [b-c) @5=boop
# Delete the b-c range key and the beginning of the cat-dog range key,
# truncating it to now begin at 'd'.
batch name=indexed
range-key-del b d
----
wrote 1 keys to batch "indexed"
# Reading through the indexed batch, we should see the beginning of the cat-dog
# range key now beginning at 'd'.
combined-iter reader=indexed
seek-ge b
next
----
c: (c, .)
d: (d, [d-dog) @3=beep UPDATED)
commit batch=indexed
----
committed 1 keys
# Reading through the database after applying the batch, we should still see the
# beginning of the cat-dog range key now beginning at 'd'.
combined-iter
seek-ge b
next
----
c: (c, .)
d: (d, [d-dog) @3=beep UPDATED)
# Reading through the database after flushing, we should still see the
# beginning of the cat-dog range key now beginning at 'd'.
flush
----
combined-iter
seek-ge b
next
----
c: (c, .)
d: (d, [d-dog) @3=beep UPDATED)
reset
----
batch commit
range-key-set c d @1 boop
range-key-set apple c @3 beep
range-key-set ace apple @3 beep
set a a1
set b b1
set c c1
del a
set b b2
set c c2
----
committed 9 keys
# Test that reverse iteration surfaces range key start boundaries alongside
# point keys at the same key, and defragments logically equivalent ranges.
combined-iter
last
prev
prev
prev
----
c: (c2, [c-d) @1=boop UPDATED)
b: (b2, [ace-c) @3=beep UPDATED)
ace: (., [ace-c) @3=beep)
.
# Test that forward iteration surfaces range key start boundaries alongside
# point keys at the same key, and defragments logically equivalent ranges.
combined-iter
first
next
next
next
----
ace: (., [ace-c) @3=beep UPDATED)
b: (b2, [ace-c) @3=beep)
c: (c2, [c-d) @1=boop UPDATED)
.
# NB: seek-prefix-ge truncates bounds to the prefix.
combined-iter
seek-prefix-ge b
next
----
b: (b2, [b-"b\x00") @3=beep UPDATED)
.
reset
----
# For all prefixes a, aa, ab, ... zz, write 3 keys at timestamps @1, @10, @100.
# This populates a total of (26**2 + 26) * 3 = 2106 keys.
populate keylen=2 timestamps=(1, 10, 100)
----
wrote 2106 keys
batch commit
range-key-set b c @5 beep
range-key-unset c d @1
range-key-del d e
----
committed 3 keys
flush
----
metrics
----
Metrics.Keys.RangeKeySetsCount = 1
combined-iter
seek-ge az
next
next
next
next
next
seek-ge bz@10
next
next
----
az@100: (az@100, .)
az@10: (az@10, .)
az@1: (az@1, .)
b: (., [b-c) @5=beep UPDATED)
b@100: (b@100, [b-c) @5=beep)
b@10: (b@10, [b-c) @5=beep)
bz@10: (bz@10, [b-c) @5=beep)
bz@1: (bz@1, [b-c) @5=beep)
c@100: (c@100, . UPDATED)
# Perform the same iteration with all range keys serving as masks. The bz@1
# point key should be elided.
combined-iter mask-suffix=@100
seek-ge az
next
next
next
next
next
seek-ge bz@10
next
next
----
az@100: (az@100, .)
az@10: (az@10, .)
az@1: (az@1, .)
b: (., [b-c) @5=beep UPDATED)
b@100: (b@100, [b-c) @5=beep)
b@10: (b@10, [b-c) @5=beep)
bz@10: (bz@10, [b-c) @5=beep)
c@100: (c@100, . UPDATED)
c@10: (c@10, .)
# Ensure that a cloned iterator includes range keys.
combined-iter
seek-ge bz@10
clone
seek-ge bz@10
----
bz@10: (bz@10, [b-c) @5=beep UPDATED)
.
bz@10: (bz@10, [b-c) @5=beep UPDATED)
# Within a batch, later writes overwrite earlier writes. Here, the range-key-del
# of [bat, bus) overwrites the earlier writes of [b,c) and [b,e).
batch commit
range-key-set b c @5 beep
range-key-set b e @1 bop
range-key-set c z @1000 boop
range-key-del bat bus
----
committed 4 keys
flush
----
lsm
----
0.1:
000008:[b#2120,RANGEKEYSET-z#inf,RANGEKEYSET]
0.0:
000006:[a@100#12,SET-zz@1#2113,SET]
scan-rangekeys
----
[b, bat)
@5=beep, @1=bop
[bus, c)
@5=beep, @1=bop
[c, e)
@1000=boop, @1=bop
[e, z)
@1000=boop
# NB: There are now 8 range key sets in the database. See the 7 range keys in
# the above scan-rangekeys. Additionally, the sstable flushed earlier up above
# included a rangekeyset [b,c) @5=beep.
metrics
----
Metrics.Keys.RangeKeySetsCount = 8
combined-iter
seek-prefix-ge ca
next
seek-prefix-ge ca@100
----
ca: (., [ca-"ca\x00") @1000=boop, @1=bop UPDATED)
ca@100: (ca@100, [ca-"ca\x00") @1000=boop, @1=bop)
ca@100: (ca@100, [ca-"ca\x00") @1000=boop, @1=bop)
# Perform the same iteration as above, but with @1000 range-key masking. The
# previously encountered point keys should be elided.
combined-iter mask-suffix=@1000
seek-prefix-ge ca
next
seek-prefix-ge ca@100
----
ca: (., [ca-"ca\x00") @1000=boop, @1=bop UPDATED)
.
ca@100: (., [ca-"ca\x00") @1000=boop, @1=bop UPDATED)
# Test masked, non-prefixed iteration. We should see the range keys, but all the
# points should be masked except those beginning with z which were excluded by
# the range key's exclusive z end bound.
combined-iter mask-suffix=@1000
seek-ge ca
next
next
next
next
next
----
ca: (., [c-e) @1000=boop, @1=bop UPDATED)
e: (., [e-z) @1000=boop UPDATED)
z@100: (z@100, . UPDATED)
z@10: (z@10, .)
z@1: (z@1, .)
za@100: (za@100, .)
# Applying range keys to a DB running with a version that doesn't support them
# results in an error. Range keys were added in version 7.
reset format-major-version=6
----
batch commit
range-key-set a z @5 boop
----
pebble: batch requires at least format major version 8 (current: 6)
# Constructing iterator over range keys on a DB that doesn't support them
# results in an error.
reset format-major-version=6
----
combined-iter
----
pebble: range keys require at least format major version 8 (current: 6)
# Test Prev-ing back over a synthetic range key marker. Synthetic range-key
# markers (the keys interleaved at 'c' during a SeekGE(c) when there's a
# straddling range key) are ephemeral, and Prev-ing back must move back the
# appropriate number of times.
reset
----
batch commit
set a a
range-key-set b e @1 foo
----
committed 2 keys
flush
----
combined-iter
seek-ge b
prev
seek-ge c
prev
----
b: (., [b-e) @1=foo UPDATED)
a: (a, . UPDATED)
c: (., [b-e) @1=foo UPDATED)
b: (., [b-e) @1=foo)
define
L6
a.RANGEDEL.3:z
rangekey:b-d:{(#5,RANGEKEYSET,@2,foo)}
----
6:
000004:[a#3,RANGEDEL-z#inf,RANGEDEL]
combined-iter
seek-lt apple
----
.
combined-iter
seek-ge apple
seek-ge z
seek-lt apple
seek-lt z
first
last
----
b: (., [b-d) @2=foo UPDATED)
.
.
b: (., [b-d) @2=foo UPDATED)
b: (., [b-d) @2=foo)
b: (., [b-d) @2=foo)
combined-iter
seek-ge apple
prev
last
next
prev
seek-lt c
prev
----
b: (., [b-d) @2=foo UPDATED)
.
b: (., [b-d) @2=foo UPDATED)
.
b: (., [b-d) @2=foo UPDATED)
b: (., [b-d) @2=foo)
.