mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 03:57:44 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			325 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			325 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
define
 | 
						|
----
 | 
						|
 | 
						|
# An empty LSM ingests into the bottom level.
 | 
						|
target
 | 
						|
a-b
 | 
						|
----
 | 
						|
6
 | 
						|
 | 
						|
define
 | 
						|
L5
 | 
						|
  b.SET.1:1
 | 
						|
  c.SET.2:2
 | 
						|
----
 | 
						|
5:
 | 
						|
  000004:[b#1,SET-c#2,SET]
 | 
						|
 | 
						|
# Overlapping cases.
 | 
						|
target
 | 
						|
a-b
 | 
						|
b-c
 | 
						|
c-d
 | 
						|
----
 | 
						|
4
 | 
						|
4
 | 
						|
4
 | 
						|
 | 
						|
# Non-overlapping cases:
 | 
						|
# - Ingested file lies entirely before the existing file.
 | 
						|
# - Ingested file lies entirely after the existing file.
 | 
						|
# - Ingested file has no data overlap (falls through the middle of the existing
 | 
						|
#   file).
 | 
						|
target
 | 
						|
a-aa
 | 
						|
d-e
 | 
						|
bb-bb
 | 
						|
----
 | 
						|
6
 | 
						|
6
 | 
						|
6
 | 
						|
 | 
						|
define
 | 
						|
L0
 | 
						|
  b.SET.3:3
 | 
						|
  e.SET.4:4
 | 
						|
L0
 | 
						|
  d.SET.5:5
 | 
						|
  f.SET.6:6
 | 
						|
L0
 | 
						|
  x.SET.7:7
 | 
						|
  y.SET.8:8
 | 
						|
L3
 | 
						|
  g.SET.1:1
 | 
						|
  h.SET.2:2
 | 
						|
----
 | 
						|
0.1:
 | 
						|
  000005:[d#5,SET-f#6,SET]
 | 
						|
0.0:
 | 
						|
  000004:[b#3,SET-e#4,SET]
 | 
						|
  000006:[x#7,SET-y#8,SET]
 | 
						|
3:
 | 
						|
  000007:[g#1,SET-h#2,SET]
 | 
						|
 | 
						|
# Files overlap with L0. Files ingested into L0.
 | 
						|
target
 | 
						|
b-c
 | 
						|
d-e
 | 
						|
----
 | 
						|
0
 | 
						|
0
 | 
						|
 | 
						|
# Files overlap with L3. Files ingested into L2.
 | 
						|
target
 | 
						|
g-m
 | 
						|
----
 | 
						|
2
 | 
						|
 | 
						|
# No overlap. Files ingested into L6.
 | 
						|
target
 | 
						|
i-m
 | 
						|
c-c
 | 
						|
----
 | 
						|
6
 | 
						|
6
 | 
						|
 | 
						|
define
 | 
						|
L5
 | 
						|
  a.SET.4:4
 | 
						|
L5
 | 
						|
  c.SET.3:3
 | 
						|
L6
 | 
						|
  a.SET.2:2
 | 
						|
L6
 | 
						|
  c.SET.1:1
 | 
						|
----
 | 
						|
5:
 | 
						|
  000004:[a#4,SET-a#4,SET]
 | 
						|
  000005:[c#3,SET-c#3,SET]
 | 
						|
6:
 | 
						|
  000006:[a#2,SET-a#2,SET]
 | 
						|
  000007:[c#1,SET-c#1,SET]
 | 
						|
 | 
						|
# The ingested file slips through the gaps in both L5 and L6.
 | 
						|
target
 | 
						|
b-b
 | 
						|
----
 | 
						|
6
 | 
						|
 | 
						|
define
 | 
						|
L5
 | 
						|
  a.SET.4:4
 | 
						|
L5
 | 
						|
  c.SET.3:3
 | 
						|
L6
 | 
						|
  a.SET.2:2
 | 
						|
L6
 | 
						|
  c.SET.1:1
 | 
						|
  compact:a-c
 | 
						|
----
 | 
						|
5:
 | 
						|
  000004:[a#4,SET-a#4,SET]
 | 
						|
  000005:[c#3,SET-c#3,SET]
 | 
						|
6:
 | 
						|
  000006:[a#2,SET-a#2,SET]
 | 
						|
  000007:[c#1,SET-c#1,SET]
 | 
						|
 | 
						|
# The ingested file cannot reach L6 as there is a compaction outputting a file
 | 
						|
# into the range [a,c].
 | 
						|
target
 | 
						|
b-b
 | 
						|
----
 | 
						|
5
 | 
						|
 | 
						|
define
 | 
						|
L0
 | 
						|
  c.SET.4:4
 | 
						|
  d.SET.3:3
 | 
						|
  d.RANGEDEL.2:g
 | 
						|
L2
 | 
						|
  a.RANGEDEL.1:g
 | 
						|
----
 | 
						|
0.0:
 | 
						|
  000004:[c#4,SET-g#inf,RANGEDEL]
 | 
						|
2:
 | 
						|
  000005:[a#1,RANGEDEL-g#inf,RANGEDEL]
 | 
						|
 | 
						|
# Overlapping cases:
 | 
						|
# - The ingested file overlaps with with [c,c].
 | 
						|
# - The rangedel over [d,g) keeps the ingested file in L0.
 | 
						|
# - Ditto.
 | 
						|
target
 | 
						|
c-c
 | 
						|
d-d
 | 
						|
e-e
 | 
						|
----
 | 
						|
0
 | 
						|
0
 | 
						|
0
 | 
						|
 | 
						|
# Non-overlapping cases:
 | 
						|
# - The ingested file [cc,cc] slips through L0, but is kept at L1 by the
 | 
						|
#   rangedel in L2.
 | 
						|
# - The ingested file is to completely to right of all files.
 | 
						|
# - The ingested file is to the left of all files in L0, but is kept at L1 by
 | 
						|
#   the rangedel in L2.
 | 
						|
target
 | 
						|
cc-cc
 | 
						|
g-g
 | 
						|
a-a
 | 
						|
----
 | 
						|
1
 | 
						|
6
 | 
						|
1
 | 
						|
 | 
						|
# A more complicated example demonstrating data overlap.
 | 
						|
#            |--|        ingested file: [d-e] - data overlap
 | 
						|
#          |-|           ingested file: [cc-d] - no data overlap
 | 
						|
#                |--|    ingested file: [ee-ff] - no data overlap
 | 
						|
#  |*--*--*----*------*| existing file: [a-g], points: [a, b, c, dd, g]
 | 
						|
#  _____________________
 | 
						|
#   a  b  c  d  e  f  g
 | 
						|
define
 | 
						|
L1
 | 
						|
  a.SET.0:a
 | 
						|
  b.SET.0:b
 | 
						|
  c.SET.0:c
 | 
						|
  dd.SET.0:dd
 | 
						|
  g.SET.0:g
 | 
						|
----
 | 
						|
1:
 | 
						|
  000004:[a#0,SET-g#0,SET]
 | 
						|
 | 
						|
# Data overlap.
 | 
						|
target
 | 
						|
d-e
 | 
						|
----
 | 
						|
0
 | 
						|
 | 
						|
# No data overlap.
 | 
						|
target
 | 
						|
cc-d
 | 
						|
ee-ff
 | 
						|
----
 | 
						|
6
 | 
						|
6
 | 
						|
 | 
						|
# Range key-point key data overlap will always correctly identify overlap because
 | 
						|
# we seek using the combined point and range key bounds of the ingested file
 | 
						|
# to determine overlap and don't check the data within the ingested file.
 | 
						|
define
 | 
						|
L5
 | 
						|
  a.SET.0:a
 | 
						|
  b.SET.0:b
 | 
						|
  c.SET.0:c
 | 
						|
----
 | 
						|
5:
 | 
						|
  000004:[a#0,SET-c#0,SET]
 | 
						|
 | 
						|
target
 | 
						|
rkey:a-c
 | 
						|
----
 | 
						|
4
 | 
						|
 | 
						|
# Point key-range key overlap
 | 
						|
define
 | 
						|
L5
 | 
						|
  rangekey:a-c:{(#1,RANGEKEYSET,@t10,foo)}
 | 
						|
----
 | 
						|
5:
 | 
						|
  000004:[a#1,RANGEKEYSET-c#inf,RANGEKEYSET]
 | 
						|
 | 
						|
target
 | 
						|
a-c
 | 
						|
----
 | 
						|
4
 | 
						|
 | 
						|
# Range key-range key overlap.
 | 
						|
define
 | 
						|
L5
 | 
						|
  rangekey:a-c:{(#1,RANGEKEYSET,@t10,foo)}
 | 
						|
----
 | 
						|
5:
 | 
						|
  000004:[a#1,RANGEKEYSET-c#inf,RANGEKEYSET]
 | 
						|
 | 
						|
target
 | 
						|
rkey:a-c
 | 
						|
----
 | 
						|
4
 | 
						|
 | 
						|
# Cases with boundary overlap and no data overlap. With suggest-split off
 | 
						|
# we get a target level of L0, but with suggest-split on, we get suggested
 | 
						|
# a file split.
 | 
						|
 | 
						|
define
 | 
						|
L6
 | 
						|
  a.SET.2:2
 | 
						|
  d.SET.3:3
 | 
						|
L6
 | 
						|
  f.SET.4:4
 | 
						|
  k.SET.6:6
 | 
						|
----
 | 
						|
6:
 | 
						|
  000004:[a#2,SET-d#3,SET]
 | 
						|
  000005:[f#4,SET-k#6,SET]
 | 
						|
 | 
						|
target
 | 
						|
b-c
 | 
						|
e-g
 | 
						|
----
 | 
						|
5
 | 
						|
5
 | 
						|
 | 
						|
target suggest-split
 | 
						|
b-c
 | 
						|
e-g
 | 
						|
----
 | 
						|
6 (split file: 000004)
 | 
						|
5
 | 
						|
 | 
						|
target suggest-split
 | 
						|
g-i
 | 
						|
----
 | 
						|
6 (split file: 000005)
 | 
						|
 | 
						|
# suggest-split recognizes and avoids in-progress compactions.
 | 
						|
 | 
						|
define
 | 
						|
L6
 | 
						|
  a.SET.2:2
 | 
						|
  d.SET.3:3
 | 
						|
L6
 | 
						|
  f.SET.4:4
 | 
						|
  k.SET.6:6
 | 
						|
  compact:f-k
 | 
						|
----
 | 
						|
6:
 | 
						|
  000004:[a#2,SET-d#3,SET]
 | 
						|
  000005:[f#4,SET-k#6,SET]
 | 
						|
 | 
						|
target suggest-split
 | 
						|
g-i
 | 
						|
----
 | 
						|
5
 | 
						|
 | 
						|
# Ingestion splitting correctly recognizes data overlap in L6, and suggests
 | 
						|
# split in L5.
 | 
						|
 | 
						|
define
 | 
						|
L5
 | 
						|
  a.SET.2:2
 | 
						|
  e.SET.3:3
 | 
						|
L6
 | 
						|
  c.SET.1:1
 | 
						|
  k.SET.1:1
 | 
						|
----
 | 
						|
5:
 | 
						|
  000004:[a#2,SET-e#3,SET]
 | 
						|
6:
 | 
						|
  000005:[c#1,SET-k#1,SET]
 | 
						|
 | 
						|
target suggest-split
 | 
						|
b-c
 | 
						|
----
 | 
						|
5 (split file: 000004)
 |