mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 12:07:27 +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)
 | 
						|
.
 |