mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-15 04:35:17 +00:00
509 lines
8.4 KiB
Plaintext
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)
|
||
|
.
|