mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 11:07:27 +00:00 
			
		
		
		
	
		
			
	
	
		
			593 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			593 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								# Format for define command:
							 | 
						||
| 
								 | 
							
								# Levels are ordered from higher to lower, and each new level starts with an L
							 | 
						||
| 
								 | 
							
								# Each level is defined using an even number of lines where every pair of lines represents
							 | 
						||
| 
								 | 
							
								# a file. The files within a level are ordered from smaller to larger keys.
							 | 
						||
| 
								 | 
							
								# Each file is defined using: the first line specifies the smallest and largest internal
							 | 
						||
| 
								 | 
							
								# keys and the second line the point key-value pairs in the sstable in order. The rangedel
							 | 
						||
| 
								 | 
							
								# key-value pairs should also be in increasing order relative to the other rangedel pairs.
							 | 
						||
| 
								 | 
							
								# The largest file key can take the form of <userkey>.RANGEDEL.72057594037927935, which
							 | 
						||
| 
								 | 
							
								# represents the range deletion sentinel.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# The rangedel should not delete any points in any sstable.  The two files were involved in a
							 | 
						||
| 
								 | 
							
								# compaction and then the second file got moved to a lower level.
							 | 
						||
| 
								 | 
							
								define
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								a.SET.30 e.RANGEDEL.72057594037927935
							 | 
						||
| 
								 | 
							
								a.SET.30:30 c.SET.27:27 a.RANGEDEL.8:f
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								e.SET.10 g.SET.20
							 | 
						||
| 
								 | 
							
								e.SET.10:10 g.SET.20:20 e.RANGEDEL.8:f
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
								  000000:[a#30,SET-e#inf,RANGEDEL]
							 | 
						||
| 
								 | 
							
								2:
							 | 
						||
| 
								 | 
							
								  000001:[e#10,SET-g#20,SET]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# isNextEntryDeleted() should not allow the rangedel to act on the points in the lower sstable
							 | 
						||
| 
								 | 
							
								# that are after it.
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								first
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								stats
							 | 
						||
| 
								 | 
							
								reset-stats
							 | 
						||
| 
								 | 
							
								stats
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								a#30,1:30
							 | 
						||
| 
								 | 
							
								c#27,1:27
							 | 
						||
| 
								 | 
							
								e#10,1:10
							 | 
						||
| 
								 | 
							
								g#20,1:20
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								{BlockBytes:116 BlockBytesInCache:0 BlockReadDuration:0s KeyBytes:5 ValueBytes:8 PointCount:5 PointsCoveredByRangeTombstones:0 SeparatedPointValue:{Count:0 ValueBytes:0 ValueBytesFetched:0}}
							 | 
						||
| 
								 | 
							
								{BlockBytes:0 BlockBytesInCache:0 BlockReadDuration:0s KeyBytes:0 ValueBytes:0 PointCount:0 PointsCoveredByRangeTombstones:0 SeparatedPointValue:{Count:0 ValueBytes:0 ValueBytesFetched:0}}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# seekGE() should not allow the rangedel to act on points in the lower sstable that are after it.
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								seek-ge d
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								e#10,1:10
							 | 
						||
| 
								 | 
							
								g#20,1:20
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# isPrevEntryDeleted() should not allow the rangedel to act on the points in the lower sstable
							 | 
						||
| 
								 | 
							
								# that are after it.
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								last
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								g#20,1:20
							 | 
						||
| 
								 | 
							
								e#10,1:10
							 | 
						||
| 
								 | 
							
								c#27,1:27
							 | 
						||
| 
								 | 
							
								a#30,1:30
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# seekLT() should not allow the rangedel to act on points in the lower sstable that are after it.
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								seek-lt h
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								g#20,1:20
							 | 
						||
| 
								 | 
							
								e#10,1:10
							 | 
						||
| 
								 | 
							
								c#27,1:27
							 | 
						||
| 
								 | 
							
								a#30,1:30
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# We keep the rangedel alive by having a point in the higher level past the first point in the
							 | 
						||
| 
								 | 
							
								# lower level. This rangedel hides that first point in the lower level but we should not seek to
							 | 
						||
| 
								 | 
							
								# h and hide the second point.
							 | 
						||
| 
								 | 
							
								define
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								a.SET.15 f.SET.16
							 | 
						||
| 
								 | 
							
								a.SET.15:15 c.SET.13:13 f.SET.16:16 a.RANGEDEL.12:h
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								e.SET.10 g.SET.15
							 | 
						||
| 
								 | 
							
								e.SET.10:10 g.SET.15:15
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
								  000002:[a#15,SET-f#16,SET]
							 | 
						||
| 
								 | 
							
								2:
							 | 
						||
| 
								 | 
							
								  000003:[e#10,SET-g#15,SET]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								first
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								a#15,1:15
							 | 
						||
| 
								 | 
							
								c#13,1:13
							 | 
						||
| 
								 | 
							
								f#16,1:16
							 | 
						||
| 
								 | 
							
								g#15,1:15
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								seek-ge d
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								f#16,1:16
							 | 
						||
| 
								 | 
							
								g#15,1:15
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								last
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								g#15,1:15
							 | 
						||
| 
								 | 
							
								f#16,1:16
							 | 
						||
| 
								 | 
							
								c#13,1:13
							 | 
						||
| 
								 | 
							
								a#15,1:15
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# The rangedel should not delete any points in any sstable.  The two files were involved in an
							 | 
						||
| 
								 | 
							
								# compaction and then the first file got moved to a lower level.
							 | 
						||
| 
								 | 
							
								define
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								c.SET.30 f.RANGEDEL.0
							 | 
						||
| 
								 | 
							
								c.SET.30:30 d.SET.27:27 a.RANGEDEL.8:f
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								a.SET.10 c.RANGEDEL.72057594037927935
							 | 
						||
| 
								 | 
							
								a.SET.10:10 b.SET.12:12 a.RANGEDEL.8:f
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
								  000004:[c#30,SET-f#0,RANGEDEL]
							 | 
						||
| 
								 | 
							
								2:
							 | 
						||
| 
								 | 
							
								  000005:[a#10,SET-c#inf,RANGEDEL]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# isNextEntryDeleted() should not allow the rangedel to act on the points in the lower sstable
							 | 
						||
| 
								 | 
							
								# that are before it.
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								first
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								a#10,1:10
							 | 
						||
| 
								 | 
							
								b#12,1:12
							 | 
						||
| 
								 | 
							
								c#30,1:30
							 | 
						||
| 
								 | 
							
								d#27,1:27
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# seekGE() should not allow the rangedel to act on points in the lower sstable that are before it.
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								seek-ge a
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								a#10,1:10
							 | 
						||
| 
								 | 
							
								b#12,1:12
							 | 
						||
| 
								 | 
							
								c#30,1:30
							 | 
						||
| 
								 | 
							
								d#27,1:27
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# isPrevEntryDeleted() should not allow the rangedel to act on the points in the lower sstable
							 | 
						||
| 
								 | 
							
								# that are before it.
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								last
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								d#27,1:27
							 | 
						||
| 
								 | 
							
								c#30,1:30
							 | 
						||
| 
								 | 
							
								b#12,1:12
							 | 
						||
| 
								 | 
							
								a#10,1:10
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# seekLT() should not allow the rangedel to act on points in the lower sstable that are before it.
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								seek-lt e
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								d#27,1:27
							 | 
						||
| 
								 | 
							
								c#30,1:30
							 | 
						||
| 
								 | 
							
								b#12,1:12
							 | 
						||
| 
								 | 
							
								a#10,1:10
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# We keep the rangedel alive in prev iteration by having a point in the higher level before
							 | 
						||
| 
								 | 
							
								# the last point in the lower level. This rangedel hides that first point in the lower level
							 | 
						||
| 
								 | 
							
								# but we should not seek to a and hide the second point.
							 | 
						||
| 
								 | 
							
								define
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								c.SET.15 g.SET.16
							 | 
						||
| 
								 | 
							
								c.SET.15:15 f.SET.13:13 g.SET.16:16 a.RANGEDEL.12:h
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								b.SET.14 d.SET.10
							 | 
						||
| 
								 | 
							
								b.SET.14:14 d.SET.10:10
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
								  000006:[c#15,SET-g#16,SET]
							 | 
						||
| 
								 | 
							
								2:
							 | 
						||
| 
								 | 
							
								  000007:[b#14,SET-d#10,SET]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								last
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								g#16,1:16
							 | 
						||
| 
								 | 
							
								f#13,1:13
							 | 
						||
| 
								 | 
							
								c#15,1:15
							 | 
						||
| 
								 | 
							
								b#14,1:14
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								seek-lt f
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								c#15,1:15
							 | 
						||
| 
								 | 
							
								b#14,1:14
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# The rangedel should not delete anything.
							 | 
						||
| 
								 | 
							
								define
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								a.SET.30 e.RANGEDEL.72057594037927935
							 | 
						||
| 
								 | 
							
								a.SET.30:30 c.SET.27:27 a.RANGEDEL.8:g
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								e.SET.10 g.SET.20
							 | 
						||
| 
								 | 
							
								e.SET.10:10 g.SET.20:20 e.RANGEDEL.8:g
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
								  000008:[a#30,SET-e#inf,RANGEDEL]
							 | 
						||
| 
								 | 
							
								2:
							 | 
						||
| 
								 | 
							
								  000009:[e#10,SET-g#20,SET]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# When doing seek-lt f, the rangedel should not apply to e in the lower sstable. This is the
							 | 
						||
| 
								 | 
							
								# reason we cannot just use largest user key to constrain the rangedel and we need to
							 | 
						||
| 
								 | 
							
								# know whether it is the sentinel key.
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								seek-lt f
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								e#10,1:10
							 | 
						||
| 
								 | 
							
								c#27,1:27
							 | 
						||
| 
								 | 
							
								a#30,1:30
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								seek-ge e
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								e#10,1:10
							 | 
						||
| 
								 | 
							
								g#20,1:20
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								first
							 | 
						||
| 
								 | 
							
								seek-ge e
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								a#30,1:30
							 | 
						||
| 
								 | 
							
								e#10,1:10
							 | 
						||
| 
								 | 
							
								g#20,1:20
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								first
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								a#30,1:30
							 | 
						||
| 
								 | 
							
								c#27,1:27
							 | 
						||
| 
								 | 
							
								e#10,1:10
							 | 
						||
| 
								 | 
							
								g#20,1:20
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Verify that switching directions respects lower/upper bound.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								define
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								a.SET.9 d.SET.6
							 | 
						||
| 
								 | 
							
								a.SET.9:9 b.SET.8:8 c.SET.7:7 d.SET.6:6
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
								  000010:[a#9,SET-d#6,SET]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Verify the lower bound is respected in switchToMinHeap() when the
							 | 
						||
| 
								 | 
							
								# heap is empty.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								set-bounds lower=c
							 | 
						||
| 
								 | 
							
								seek-ge c
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								c#7,1:7
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								c#7,1:7
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Verify the upper bound is respected in switchToMaxHeap() when the
							 | 
						||
| 
								 | 
							
								# heap is empty.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								set-bounds upper=c
							 | 
						||
| 
								 | 
							
								seek-lt c
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								b#8,1:8
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								b#8,1:8
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Verify the lower bound is respected in switchToMinHeap() when the
							 | 
						||
| 
								 | 
							
								# heap is not empty.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								define
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								a.SET.9 d.SET.6
							 | 
						||
| 
								 | 
							
								a.SET.9:9 b.SET.8:8 c.SET.7:7 d.SET.6:6
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								c.SET.5 f.SET.2
							 | 
						||
| 
								 | 
							
								c.SET.5:5 d.SET.4:4 e.SET.3:3 f.SET.2:2
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
								  000011:[a#9,SET-d#6,SET]
							 | 
						||
| 
								 | 
							
								2:
							 | 
						||
| 
								 | 
							
								  000012:[c#5,SET-f#2,SET]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								set-bounds lower=d
							 | 
						||
| 
								 | 
							
								seek-ge d
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								d#6,1:6
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								d#6,1:6
							 | 
						||
| 
								 | 
							
								d#4,1:4
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Check the behavior of reverse prefix iteration.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								seek-prefix-ge d
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								d#6,1:6
							 | 
						||
| 
								 | 
							
								err=pebble: unsupported reverse prefix iteration
							 | 
						||
| 
								 | 
							
								err=pebble: unsupported reverse prefix iteration
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Verify the upper bound is respected in switchToMaxHeap() when the
							 | 
						||
| 
								 | 
							
								# heap is not empty.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								define
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								c.SET.9 f.SET.6
							 | 
						||
| 
								 | 
							
								c.SET.9:9 d.SET.8:8 e.SET.7:7 f.SET.6:6
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								a.SET.5 d.SET.2
							 | 
						||
| 
								 | 
							
								a.SET.5:5 b.SET.4:4 c.SET.3:3 d.SET.2:2
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
								  000013:[c#9,SET-f#6,SET]
							 | 
						||
| 
								 | 
							
								2:
							 | 
						||
| 
								 | 
							
								  000014:[a#5,SET-d#2,SET]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								set-bounds upper=d
							 | 
						||
| 
								 | 
							
								seek-lt d
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								c#3,1:3
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								c#3,1:3
							 | 
						||
| 
								 | 
							
								c#9,1:9
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Verify that the tombstone for the current level is updated correctly
							 | 
						||
| 
								 | 
							
								# when we advance the iterator on the level and step into a new
							 | 
						||
| 
								 | 
							
								# sstable. In the scenario below, the keys "c" and "d" should not show
							 | 
						||
| 
								 | 
							
								# up in the iteration output.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								define
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								a.SET.2 a.SET.2
							 | 
						||
| 
								 | 
							
								a.SET.2:2
							 | 
						||
| 
								 | 
							
								c.RANGEDEL.4 e.RANGEDEL.72057594037927935
							 | 
						||
| 
								 | 
							
								c.RANGEDEL.4:e
							 | 
						||
| 
								 | 
							
								f.SET.3 f.SET.3
							 | 
						||
| 
								 | 
							
								f.SET.3:3
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								a.SET.0 f.SET.0
							 | 
						||
| 
								 | 
							
								a.SET.0:1 b.SET.0:1 c.SET.0:1 d.SET.0:1 e.SET.0:1 f.SET.0:1
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
								  000015:[a#2,SET-a#2,SET]
							 | 
						||
| 
								 | 
							
								  000016:[c#4,RANGEDEL-e#inf,RANGEDEL]
							 | 
						||
| 
								 | 
							
								  000017:[f#3,SET-f#3,SET]
							 | 
						||
| 
								 | 
							
								2:
							 | 
						||
| 
								 | 
							
								  000018:[a#0,SET-f#0,SET]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								first
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								a#2,1:2
							 | 
						||
| 
								 | 
							
								a#0,1:1
							 | 
						||
| 
								 | 
							
								b#0,1:1
							 | 
						||
| 
								 | 
							
								e#0,1:1
							 | 
						||
| 
								 | 
							
								f#3,1:3
							 | 
						||
| 
								 | 
							
								f#0,1:1
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								last
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								f#0,1:1
							 | 
						||
| 
								 | 
							
								f#3,1:3
							 | 
						||
| 
								 | 
							
								e#0,1:1
							 | 
						||
| 
								 | 
							
								b#0,1:1
							 | 
						||
| 
								 | 
							
								a#0,1:1
							 | 
						||
| 
								 | 
							
								a#2,1:2
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Verify the upper bound is respected when switching directions at a RANGEDEL
							 | 
						||
| 
								 | 
							
								# boundary.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								define
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								kq.RANGEDEL.100 p.RANGEDEL.72057594037927935
							 | 
						||
| 
								 | 
							
								kq.RANGEDEL.100:p
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								b.SET.90 o.SET.65
							 | 
						||
| 
								 | 
							
								b.SET.90:90 cat.SET.70:70 g.SET.80:80 o.SET.65:65
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								a.SET.41 z.RANGEDEL.72057594037927935
							 | 
						||
| 
								 | 
							
								a.SET.41:41 koujdlp.MERGE.37:37 ok.SET.46:46 v.SET.43:43 v.RANGEDEL.19:z
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
								  000019:[kq#100,RANGEDEL-p#inf,RANGEDEL]
							 | 
						||
| 
								 | 
							
								2:
							 | 
						||
| 
								 | 
							
								  000020:[b#90,SET-o#65,SET]
							 | 
						||
| 
								 | 
							
								3:
							 | 
						||
| 
								 | 
							
								  000021:[a#41,SET-z#inf,RANGEDEL]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								set-bounds upper=n
							 | 
						||
| 
								 | 
							
								seek-ge krgywquurww
							 | 
						||
| 
								 | 
							
								prev
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								koujdlp#37,2:37
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Verify the lower bound is respected when switching directions at a RANGEDEL
							 | 
						||
| 
								 | 
							
								# boundary.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								define
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								a.SET.103 jyk.RANGEDEL.72057594037927935
							 | 
						||
| 
								 | 
							
								a.SET.103:103 imd.SET.793:793 iwoeionch.SET.792:792 c.RANGEDEL.101:jyk
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								b.SET.90 o.SET.65
							 | 
						||
| 
								 | 
							
								b.SET.90:90 cat.SET.70:70 g.SET.80:80 o.SET.65:65
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								all.SET.0 zk.SET.722
							 | 
						||
| 
								 | 
							
								all.SET.0:0 c.SET.0:0 zk.SET.722:722
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
								  000022:[a#103,SET-jyk#inf,RANGEDEL]
							 | 
						||
| 
								 | 
							
								2:
							 | 
						||
| 
								 | 
							
								  000023:[b#90,SET-o#65,SET]
							 | 
						||
| 
								 | 
							
								3:
							 | 
						||
| 
								 | 
							
								  000024:[all#0,SET-zk#722,SET]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								set-bounds lower=cz upper=jd
							 | 
						||
| 
								 | 
							
								seek-lt jd
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								iwoeionch#792,1:792
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Exercise the early stopping behavior for prefix iteration when encountering
							 | 
						||
| 
								 | 
							
								# range deletion tombstones. Keys a, d are not deleted, while the rest are.
							 | 
						||
| 
								 | 
							
								define
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								a.SET.10 d.SET.10
							 | 
						||
| 
								 | 
							
								a.SET.10:a10 b.SET.10:b10 c.SET.10:c10 d.SET.10:d10 b.RANGEDEL.12:d
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
								  000025:[a#10,SET-d#10,SET]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								first
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								a#10,1:a10
							 | 
						||
| 
								 | 
							
								d#10,1:d10
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# The seek to c finds d since iteration cannot stop at c as it matches the
							 | 
						||
| 
								 | 
							
								# prefix, and when it steps to d, it finds d is not deleted. Note that
							 | 
						||
| 
								 | 
							
								# mergingIter is an InternalIterator and does not need to guarantee prefix
							 | 
						||
| 
								 | 
							
								# match -- that is job of the higher-level Iterator. So "seek-prefix-ge c" is
							 | 
						||
| 
								 | 
							
								# allowed to return d.
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								seek-prefix-ge a false
							 | 
						||
| 
								 | 
							
								seek-prefix-ge aa true
							 | 
						||
| 
								 | 
							
								seek-prefix-ge b true
							 | 
						||
| 
								 | 
							
								seek-prefix-ge c true
							 | 
						||
| 
								 | 
							
								seek-prefix-ge d true
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								a#10,1:a10
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								d#10,1:d10
							 | 
						||
| 
								 | 
							
								d#10,1:d10
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								seek-prefix-ge a false
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								seek-prefix-ge b false
							 | 
						||
| 
								 | 
							
								seek-prefix-ge d true
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								a#10,1:a10
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								d#10,1:d10
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Create a sstable which has a range tombstone that covers 4 points in the
							 | 
						||
| 
								 | 
							
								# same sstable. This tests the PointsCoveredByRangeTombstones and PointCount
							 | 
						||
| 
								 | 
							
								# stats.
							 | 
						||
| 
								 | 
							
								define
							 | 
						||
| 
								 | 
							
								L
							 | 
						||
| 
								 | 
							
								a.SET.30 g.RANGEDEL.72057594037927935
							 | 
						||
| 
								 | 
							
								a.SET.30:30 a.RANGEDEL.20:g b.SET.19:19 c.SET.18:18 d.SET.17:17 e.SET.16:16 f.SET.21:21
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
								  000026:[a#30,SET-g#inf,RANGEDEL]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iter
							 | 
						||
| 
								 | 
							
								first
							 | 
						||
| 
								 | 
							
								stats
							 | 
						||
| 
								 | 
							
								reset-stats
							 | 
						||
| 
								 | 
							
								stats
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								stats
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								stats
							 | 
						||
| 
								 | 
							
								next
							 | 
						||
| 
								 | 
							
								stats
							 | 
						||
| 
								 | 
							
								----
							 | 
						||
| 
								 | 
							
								a#30,1:30
							 | 
						||
| 
								 | 
							
								{BlockBytes:97 BlockBytesInCache:0 BlockReadDuration:0s KeyBytes:1 ValueBytes:2 PointCount:1 PointsCoveredByRangeTombstones:0 SeparatedPointValue:{Count:0 ValueBytes:0 ValueBytesFetched:0}}
							 | 
						||
| 
								 | 
							
								{BlockBytes:0 BlockBytesInCache:0 BlockReadDuration:0s KeyBytes:0 ValueBytes:0 PointCount:0 PointsCoveredByRangeTombstones:0 SeparatedPointValue:{Count:0 ValueBytes:0 ValueBytesFetched:0}}
							 | 
						||
| 
								 | 
							
								f#21,1:21
							 | 
						||
| 
								 | 
							
								{BlockBytes:0 BlockBytesInCache:0 BlockReadDuration:0s KeyBytes:5 ValueBytes:10 PointCount:5 PointsCoveredByRangeTombstones:4 SeparatedPointValue:{Count:0 ValueBytes:0 ValueBytesFetched:0}}
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								{BlockBytes:0 BlockBytesInCache:0 BlockReadDuration:0s KeyBytes:6 ValueBytes:10 PointCount:6 PointsCoveredByRangeTombstones:4 SeparatedPointValue:{Count:0 ValueBytes:0 ValueBytesFetched:0}}
							 | 
						||
| 
								 | 
							
								.
							 | 
						||
| 
								 | 
							
								{BlockBytes:0 BlockBytesInCache:0 BlockReadDuration:0s KeyBytes:6 ValueBytes:10 PointCount:6 PointsCoveredByRangeTombstones:4 SeparatedPointValue:{Count:0 ValueBytes:0 ValueBytesFetched:0}}
							 |