mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 12:17:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			147 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# Test case for bug https://github.com/cockroachdb/pebble/issues/2036 Build
 | 
						|
# sstable with two-level index, with two data blocks in each lower-level index
 | 
						|
# block.
 | 
						|
build block-size=1 index-block-size=40 print-layout=true
 | 
						|
c@10.SET.10:cAT10
 | 
						|
d@7.SET.9:dAT7
 | 
						|
e@15.SET.8:eAT15
 | 
						|
f@7.SET.5:fAT7
 | 
						|
----
 | 
						|
index entries:
 | 
						|
 d@7: size 53
 | 
						|
   c@10: size 29
 | 
						|
   d@7: size 27
 | 
						|
 g: size 51
 | 
						|
   e@15: size 29
 | 
						|
   g: size 27
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
<c@10:10>
 | 
						|
<d@7:9>
 | 
						|
<e@15:8>
 | 
						|
<f@7:5>
 | 
						|
 | 
						|
 | 
						|
# The block property filter matches data block 2 and 4.
 | 
						|
iter block-property-filter=(7,8)
 | 
						|
first
 | 
						|
next
 | 
						|
----
 | 
						|
<d@7:9>
 | 
						|
<f@7:5>
 | 
						|
 | 
						|
# Use the same block property filter, but use seeks to find these entries.
 | 
						|
# With the bug the second seek-ge below would step to the second lower-level
 | 
						|
# index block and only see the entry in the data block 4.
 | 
						|
iter block-property-filter=(7,8)
 | 
						|
set-bounds lower=a upper=c
 | 
						|
seek-ge a
 | 
						|
seek-ge b true
 | 
						|
set-bounds lower=c upper=g
 | 
						|
seek-ge c
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
.
 | 
						|
.
 | 
						|
.
 | 
						|
.
 | 
						|
<d@7:9>
 | 
						|
<f@7:5>
 | 
						|
.
 | 
						|
 | 
						|
# Regression test for #2816
 | 
						|
#
 | 
						|
# This unit test tests a scenario where the two-level index iterator's position
 | 
						|
# could diverge from the currently loaded index block. When taking advantage of
 | 
						|
# the monotonic bounds optimization at the two-level index level, the iterator
 | 
						|
# would mistakenly seek within the wrong index block.
 | 
						|
#
 | 
						|
# This allowed the final `seek-ge wc` and `next` to both return wz@8.
 | 
						|
 | 
						|
build  block-size=1 index-block-size=1 print-layout=true
 | 
						|
eu@2.SET.2:eu
 | 
						|
wb@2.SET.2:wb
 | 
						|
wz@8.SET.8:wzAT8
 | 
						|
ye@1.SET.1:yeAT1
 | 
						|
----
 | 
						|
index entries:
 | 
						|
 f: size 26
 | 
						|
   f: size 26
 | 
						|
 wc: size 27
 | 
						|
   wc: size 26
 | 
						|
 x: size 26
 | 
						|
   x: size 29
 | 
						|
 z: size 26
 | 
						|
   z: size 29
 | 
						|
 | 
						|
iter block-property-filter=(8,9)
 | 
						|
set-bounds lower=v upper=v
 | 
						|
seek-ge wz@8
 | 
						|
internal-iter-state
 | 
						|
seek-ge wb@2
 | 
						|
internal-iter-state
 | 
						|
set-bounds lower=v upper=z
 | 
						|
internal-iter-state
 | 
						|
seek-ge wc
 | 
						|
internal-iter-state
 | 
						|
next
 | 
						|
----
 | 
						|
.
 | 
						|
.
 | 
						|
| *sstable.twoLevelIterator:
 | 
						|
|  topLevelIndex.Key() = "x#72057594037927935,17"
 | 
						|
|  topLevelIndex.InPlaceValue() = (Offset: 193, Length: 26, Props: 00020801)
 | 
						|
|  topLevelIndex.isDataInvalidated()=false
 | 
						|
|  index.Key() = "x#72057594037927935,17"
 | 
						|
|  index.InPlaceValue() = (Offset: 62, Length: 29, Props: 00020801)
 | 
						|
|  index.isDataInvalidated()=false
 | 
						|
|  data.isDataInvalidated()=false
 | 
						|
|  hideObsoletePoints = false
 | 
						|
|  dataBH = (Offset: 62, Length: 29)
 | 
						|
|  (boundsCmp,positionedUsingLatestBounds) = (0,true)
 | 
						|
|  exhaustedBounds = 1
 | 
						|
.
 | 
						|
| *sstable.twoLevelIterator:
 | 
						|
|  topLevelIndex.Key() = "wc#72057594037927935,17"
 | 
						|
|  topLevelIndex.InPlaceValue() = (Offset: 161, Length: 27, Props: 00020201)
 | 
						|
|  topLevelIndex.isDataInvalidated()=false
 | 
						|
|  index iter invalid
 | 
						|
|  index.isDataInvalidated()=true
 | 
						|
|  data.isDataInvalidated()=true
 | 
						|
|  hideObsoletePoints = false
 | 
						|
|  dataBH = (Offset: 62, Length: 29)
 | 
						|
|  (boundsCmp,positionedUsingLatestBounds) = (0,true)
 | 
						|
|  exhaustedBounds = 1
 | 
						|
.
 | 
						|
| *sstable.twoLevelIterator:
 | 
						|
|  topLevelIndex.Key() = "wc#72057594037927935,17"
 | 
						|
|  topLevelIndex.InPlaceValue() = (Offset: 161, Length: 27, Props: 00020201)
 | 
						|
|  topLevelIndex.isDataInvalidated()=false
 | 
						|
|  index iter invalid
 | 
						|
|  index.isDataInvalidated()=true
 | 
						|
|  data.isDataInvalidated()=true
 | 
						|
|  hideObsoletePoints = false
 | 
						|
|  dataBH = (Offset: 62, Length: 29)
 | 
						|
|  (boundsCmp,positionedUsingLatestBounds) = (1,false)
 | 
						|
|  exhaustedBounds = 1
 | 
						|
<wz@8:8>
 | 
						|
| *sstable.twoLevelIterator:
 | 
						|
|  topLevelIndex.Key() = "x#72057594037927935,17"
 | 
						|
|  topLevelIndex.InPlaceValue() = (Offset: 193, Length: 26, Props: 00020801)
 | 
						|
|  topLevelIndex.isDataInvalidated()=false
 | 
						|
|  index.Key() = "x#72057594037927935,17"
 | 
						|
|  index.InPlaceValue() = (Offset: 62, Length: 29, Props: 00020801)
 | 
						|
|  index.isDataInvalidated()=false
 | 
						|
|  data.isDataInvalidated()=false
 | 
						|
|  hideObsoletePoints = false
 | 
						|
|  dataBH = (Offset: 62, Length: 29)
 | 
						|
|  (boundsCmp,positionedUsingLatestBounds) = (0,false)
 | 
						|
|  exhaustedBounds = 0
 | 
						|
.
 |