mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-10-31 21:47: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)
 | |
| .
 | 
