mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 15:27:27 +00:00 
			
		
		
		
	
		
			
	
	
		
			279 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			279 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								build ext1
							 | 
						||
| 
								 | 
							
								merge a 1
							 | 
						||
| 
								 | 
							
								set c 2
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ingest ext1
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								6:
							 | 
						||
| 
								 | 
							
								  000004:[a#10,MERGE-c#10,SET]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								build ext2
							 | 
						||
| 
								 | 
							
								del-range b c
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ingest ext2
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								0.0:
							 | 
						||
| 
								 | 
							
								  000005:[b#11,RANGEDEL-c#inf,RANGEDEL]
							 | 
						||
| 
								 | 
							
								6:
							 | 
						||
| 
								 | 
							
								  000004:[a#10,MERGE-c#10,SET]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Regression test for a bug where range tombstones were not properly
							 | 
						||
| 
								 | 
							
								# ignored by Iterator.prevUserKey when switching from forward to
							 | 
						||
| 
								 | 
							
								# reverse iteration. In the forward direction, the Iterator sees the
							 | 
						||
| 
								 | 
							
								# keys:
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#   a#1,MERGE
							 | 
						||
| 
								 | 
							
								#   c#1,SET
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Due to the synthetic boundary key generated for sstable 5, in the
							 | 
						||
| 
								 | 
							
								# reverse direction Iterator sees the keys:
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#   c#1,SET
							 | 
						||
| 
								 | 
							
								#   b#2,RANGEDEL
							 | 
						||
| 
								 | 
							
								#   a#1,MERGE
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Normally the record b#2,RANGEDEL is skipped by Iterator during
							 | 
						||
| 
								 | 
							
								# iteration, but logic to do so was missing from Iterator.prevUserKey.
							 | 
						||
| 
								 | 
							
								# The result was that prev could return the same key that iterator was
							 | 
						||
| 
								 | 
							
								# currently pointed at.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								first
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								a: (1, .)
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								reset
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								build ext1
							 | 
						||
| 
								 | 
							
								set t 1
							 | 
						||
| 
								 | 
							
								merge z 2
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ingest ext1
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								6:
							 | 
						||
| 
								 | 
							
								  000004:[t#10,SET-z#10,MERGE]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								build ext2
							 | 
						||
| 
								 | 
							
								del-range x y
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ingest ext2
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								0.0:
							 | 
						||
| 
								 | 
							
								  000005:[x#11,RANGEDEL-y#inf,RANGEDEL]
							 | 
						||
| 
								 | 
							
								6:
							 | 
						||
| 
								 | 
							
								  000004:[t#10,SET-z#10,MERGE]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Regression test for a bug where range tombstones were not properly
							 | 
						||
| 
								 | 
							
								# ignored by Iterator.nextUserKey when switching from reverse to
							 | 
						||
| 
								 | 
							
								# forward iteration. In the reverse direction, the Iterator sees the
							 | 
						||
| 
								 | 
							
								# keys:
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#   z#1,MERGE
							 | 
						||
| 
								 | 
							
								#   t#1,SET
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Due to the synthetic boundary key generated for sstable 5, in the
							 | 
						||
| 
								 | 
							
								# forward direction Iterator sees the keys:
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#   t#1,SET
							 | 
						||
| 
								 | 
							
								#   y#72057594037927935,RANGEDEL
							 | 
						||
| 
								 | 
							
								#   z#1,MERGE
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Normally the record y#72057594037927935,RANGEDEL is skipped by
							 | 
						||
| 
								 | 
							
								# Iterator during iteration, but logic to do so was missing from
							 | 
						||
| 
								 | 
							
								# Iterator.nextUserKey. The result was that next could return the same
							 | 
						||
| 
								 | 
							
								# key that iterator was currently pointed at.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								last
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								z: (2, .)
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Verify that switching from reverse iteration to forward iteration
							 | 
						||
| 
								 | 
							
								# properly skips over range tombstones at the start of forward
							 | 
						||
| 
								 | 
							
								# iteration.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								reset
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								build ext1
							 | 
						||
| 
								 | 
							
								set e e
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ingest ext1
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								6:
							 | 
						||
| 
								 | 
							
								  000004:[e#10,SET-e#10,SET]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								build ext2
							 | 
						||
| 
								 | 
							
								set b b
							 | 
						||
| 
								 | 
							
								del-range c d
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ingest ext2
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								6:
							 | 
						||
| 
								 | 
							
								  000005:[b#11,SET-d#inf,RANGEDEL]
							 | 
						||
| 
								 | 
							
								  000004:[e#10,SET-e#10,SET]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# The scenario requires iteration at a snapshot. The "last" operation
							 | 
						||
| 
								 | 
							
								# will exhaust the mergingIter looking backwards for visible
							 | 
						||
| 
								 | 
							
								# records. The subsequent "next" will seek-ge(lower) which will skip
							 | 
						||
| 
								 | 
							
								# over the "b" record and find the boundary key due to the range
							 | 
						||
| 
								 | 
							
								# deletion sentinel.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter seq=11
							 | 
						||
| 
								 | 
							
								set-bounds lower=c upper=f
							 | 
						||
| 
								 | 
							
								last
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								e: (e, .)
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Test that the cloned iterator sees all the keys.
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								set-bounds lower=a upper=f
							 | 
						||
| 
								 | 
							
								first
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								clone
							 | 
						||
| 
								 | 
							
								seek-ge a
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								b: (b, .)
							 | 
						||
| 
								 | 
							
								e: (e, .)
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								b: (b, .)
							 | 
						||
| 
								 | 
							
								e: (e, .)
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Test that the cloned iterator respects the original bounds.
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								set-bounds lower=a upper=d
							 | 
						||
| 
								 | 
							
								first
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								clone
							 | 
						||
| 
								 | 
							
								seek-ge a
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								b: (b, .)
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								b: (b, .)
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Test that a cloned iterator set with new bounds, respects the new bounds and
							 | 
						||
| 
								 | 
							
								# options.
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								set-bounds lower=a upper=d
							 | 
						||
| 
								 | 
							
								first
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								clone lower=a upper=z key-types=both
							 | 
						||
| 
								 | 
							
								seek-ge a
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								b: (b, .)
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								b: (b, .)
							 | 
						||
| 
								 | 
							
								e: (e, .)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Test that the cloned iterator respects the seq num.
							 | 
						||
| 
								 | 
							
								iter seq=11
							 | 
						||
| 
								 | 
							
								set-bounds lower=a upper=f
							 | 
						||
| 
								 | 
							
								first
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								clone
							 | 
						||
| 
								 | 
							
								last
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								e: (e, .)
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								e: (e, .)
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Verify that switching from forward iteration to reverse iteration
							 | 
						||
| 
								 | 
							
								# properly skips over range tombstones at the end of reverse
							 | 
						||
| 
								 | 
							
								# iteration.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								reset
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								build ext1
							 | 
						||
| 
								 | 
							
								merge a a
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ingest ext1
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								6:
							 | 
						||
| 
								 | 
							
								  000004:[a#10,MERGE-a#10,MERGE]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								build ext2
							 | 
						||
| 
								 | 
							
								set e e
							 | 
						||
| 
								 | 
							
								del-range c d
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ingest ext2
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								6:
							 | 
						||
| 
								 | 
							
								  000004:[a#10,MERGE-a#10,MERGE]
							 | 
						||
| 
								 | 
							
								  000005:[c#11,RANGEDEL-e#11,SET]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter seq=11
							 | 
						||
| 
								 | 
							
								set-bounds lower=a upper=e
							 | 
						||
| 
								 | 
							
								first
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								a: (a, .)
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								reset
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Test demonstrating inadvertent exposure of ordering effects of the
							 | 
						||
| 
								 | 
							
								# InternalKeyKind numbering. We build an sst with a (del/singledel, set) pair
							 | 
						||
| 
								 | 
							
								# for two user keys. When ingested, all 4 keys have the same seqnum. The set
							 | 
						||
| 
								 | 
							
								# overrides the del, and the singedel overrides the set.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# The test input setup looks peculiar because the build uses an indexed batch,
							 | 
						||
| 
								 | 
							
								# and iterates over it to write to the sst, so we need to place the set after
							 | 
						||
| 
								 | 
							
								# the del, and the singledel after the set in order for the batch ordering to
							 | 
						||
| 
								 | 
							
								# be one that is suitable for feeding into the sstable writer. All 4 keys are
							 | 
						||
| 
								 | 
							
								# being written to the sst (notice the bounds in the ingest).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								build ext1
							 | 
						||
| 
								 | 
							
								del a
							 | 
						||
| 
								 | 
							
								set a 1
							 | 
						||
| 
								 | 
							
								set b 2
							 | 
						||
| 
								 | 
							
								singledel b
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ingest ext1
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								6:
							 | 
						||
| 
								 | 
							
								  000004:[a#10,SET-b#10,SET]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								first
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								a: (1, .)
							 | 
						||
| 
								 | 
							
								.
							 |