mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 00:37:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			1126 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1126 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
switch 1
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
build ext0
 | 
						|
set a 1
 | 
						|
set l 2
 | 
						|
----
 | 
						|
 | 
						|
ingest ext0
 | 
						|
----
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
6:
 | 
						|
  000004:[a#10,SET-l#10,SET]
 | 
						|
 | 
						|
 | 
						|
batch
 | 
						|
set d foo
 | 
						|
set f bar
 | 
						|
----
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
compact a-z
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
6:
 | 
						|
  000007:[a#0,SET-l#0,SET]
 | 
						|
 | 
						|
switch 2
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
----
 | 
						|
.
 | 
						|
 | 
						|
replicate 1 2 d g
 | 
						|
----
 | 
						|
replicated 1 shared SSTs
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
6:
 | 
						|
  000005:[d#10,SET-f#10,SET]
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
d: (foo, .)
 | 
						|
f: (bar, .)
 | 
						|
.
 | 
						|
 | 
						|
batch
 | 
						|
set e bar
 | 
						|
set f bar2
 | 
						|
set g bar3
 | 
						|
----
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
d: (foo, .)
 | 
						|
e: (bar, .)
 | 
						|
f: (bar2, .)
 | 
						|
g: (bar3, .)
 | 
						|
 | 
						|
compact a-z
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
d: (foo, .)
 | 
						|
e: (bar, .)
 | 
						|
f: (bar2, .)
 | 
						|
g: (bar3, .)
 | 
						|
 | 
						|
# Write a new key at f, but don't compact it down.
 | 
						|
 | 
						|
batch
 | 
						|
set f bar3
 | 
						|
----
 | 
						|
 | 
						|
switch 1
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
6:
 | 
						|
  000007:[a#0,SET-l#0,SET]
 | 
						|
 | 
						|
excise e gg
 | 
						|
----
 | 
						|
would excise 1 files, use ingest-and-excise to excise.
 | 
						|
  deleted:       L6 000007
 | 
						|
  added:         L6 000008:[a#0,1-d#0,1]
 | 
						|
  added:         L6 000009:[l#0,1-l#0,1]
 | 
						|
 | 
						|
replicate 2 1 e gg
 | 
						|
----
 | 
						|
replicated 1 shared SSTs
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a: (1, .)
 | 
						|
d: (foo, .)
 | 
						|
e: (bar, .)
 | 
						|
f: (bar3, .)
 | 
						|
g: (bar3, .)
 | 
						|
 | 
						|
# Range key masking test. Write some masked keys, then replicate before
 | 
						|
# compacting, then compact, then replicate back.
 | 
						|
 | 
						|
batch
 | 
						|
set h@3 foobar
 | 
						|
set i@5 baz
 | 
						|
range-key-set g j @4 value
 | 
						|
----
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a: (1, .)
 | 
						|
d: (foo, .)
 | 
						|
e: (bar, .)
 | 
						|
f: (bar3, .)
 | 
						|
g: (bar3, [g-j) @4=value UPDATED)
 | 
						|
h@3: (foobar, [g-j) @4=value)
 | 
						|
i@5: (baz, [g-j) @4=value)
 | 
						|
l: (2, . UPDATED)
 | 
						|
 | 
						|
iter mask-filter mask-suffix=@6
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a: (1, .)
 | 
						|
d: (foo, .)
 | 
						|
e: (bar, .)
 | 
						|
f: (bar3, .)
 | 
						|
g: (bar3, [g-j) @4=value UPDATED)
 | 
						|
i@5: (baz, [g-j) @4=value)
 | 
						|
l: (2, . UPDATED)
 | 
						|
 | 
						|
switch 2
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
replicate 1 2 a z
 | 
						|
----
 | 
						|
replicated 3 shared SSTs
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a: (1, .)
 | 
						|
d: (foo, .)
 | 
						|
e: (bar, .)
 | 
						|
f: (bar3, .)
 | 
						|
g: (bar3, [g-j) @4=value UPDATED)
 | 
						|
h@3: (foobar, [g-j) @4=value)
 | 
						|
i@5: (baz, [g-j) @4=value)
 | 
						|
l: (2, . UPDATED)
 | 
						|
 | 
						|
iter mask-filter mask-suffix=@6
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a: (1, .)
 | 
						|
d: (foo, .)
 | 
						|
e: (bar, .)
 | 
						|
f: (bar3, .)
 | 
						|
g: (bar3, [g-j) @4=value UPDATED)
 | 
						|
i@5: (baz, [g-j) @4=value)
 | 
						|
l: (2, . UPDATED)
 | 
						|
 | 
						|
compact a-z
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
replicate 2 1 a z
 | 
						|
----
 | 
						|
replicated 3 shared SSTs
 | 
						|
 | 
						|
restart
 | 
						|
----
 | 
						|
ok, note that the active db has been set to 1 (use 'switch' to change)
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a: (1, .)
 | 
						|
d: (foo, .)
 | 
						|
e: (bar, .)
 | 
						|
f: (bar3, .)
 | 
						|
g: (bar3, [g-j) @4=value UPDATED)
 | 
						|
h@3: (foobar, [g-j) @4=value)
 | 
						|
i@5: (baz, [g-j) @4=value)
 | 
						|
l: (2, . UPDATED)
 | 
						|
.
 | 
						|
 | 
						|
iter mask-filter mask-suffix=@6
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a: (1, .)
 | 
						|
d: (foo, .)
 | 
						|
e: (bar, .)
 | 
						|
f: (bar3, .)
 | 
						|
g: (bar3, [g-j) @4=value UPDATED)
 | 
						|
i@5: (baz, [g-j) @4=value)
 | 
						|
l: (2, . UPDATED)
 | 
						|
.
 | 
						|
 | 
						|
# Reverse iteration test with masking.
 | 
						|
 | 
						|
iter mask-filter mask-suffix=@6
 | 
						|
last
 | 
						|
prev
 | 
						|
prev
 | 
						|
prev
 | 
						|
prev
 | 
						|
prev
 | 
						|
prev
 | 
						|
prev
 | 
						|
----
 | 
						|
l: (2, .)
 | 
						|
i@5: (baz, [g-j) @4=value UPDATED)
 | 
						|
g: (bar3, [g-j) @4=value)
 | 
						|
f: (bar3, . UPDATED)
 | 
						|
e: (bar, .)
 | 
						|
d: (foo, .)
 | 
						|
a: (1, .)
 | 
						|
.
 | 
						|
 | 
						|
# Range del tests.
 | 
						|
 | 
						|
reset
 | 
						|
----
 | 
						|
 | 
						|
switch 1
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
batch
 | 
						|
set a@3 o
 | 
						|
set b@5 foo
 | 
						|
set c@6 bar
 | 
						|
set e baz
 | 
						|
----
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
compact a-z
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
batch
 | 
						|
del-range b d
 | 
						|
----
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
batch
 | 
						|
set a@3 abc
 | 
						|
set b@7 notdeleted
 | 
						|
set c@9 foobar
 | 
						|
----
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
0.1:
 | 
						|
  000009:[a@3#15,SET-c@9#17,SET]
 | 
						|
0.0:
 | 
						|
  000007:[b#14,RANGEDEL-d#inf,RANGEDEL]
 | 
						|
6:
 | 
						|
  000005:[a@3#10,SET-e#13,SET]
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a@3: (abc, .)
 | 
						|
b@7: (notdeleted, .)
 | 
						|
c@9: (foobar, .)
 | 
						|
e: (baz, .)
 | 
						|
.
 | 
						|
 | 
						|
replicate 1 2 a z
 | 
						|
----
 | 
						|
replicated 1 shared SSTs
 | 
						|
 | 
						|
switch 2
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
0.0:
 | 
						|
  000004:[a@3#11,SET-d#inf,RANGEDEL]
 | 
						|
6:
 | 
						|
  000005:[a@3#10,SET-e#10,SET]
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a@3: (abc, .)
 | 
						|
b@7: (notdeleted, .)
 | 
						|
c@9: (foobar, .)
 | 
						|
e: (baz, .)
 | 
						|
.
 | 
						|
 | 
						|
# Similar to the above test, except this time we bring the rangedel into
 | 
						|
# L5 using an ingestion.
 | 
						|
 | 
						|
reset
 | 
						|
----
 | 
						|
 | 
						|
switch 1
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
batch
 | 
						|
set a@3 o
 | 
						|
set b@5 foo
 | 
						|
set c@6 bar
 | 
						|
set e baz
 | 
						|
----
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
compact a-z
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
build s1
 | 
						|
del-range b d
 | 
						|
----
 | 
						|
 | 
						|
ingest s1
 | 
						|
----
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
5:
 | 
						|
  000006:[b#14,RANGEDEL-d#inf,RANGEDEL]
 | 
						|
6:
 | 
						|
  000005:[a@3#10,SET-e#13,SET]
 | 
						|
 | 
						|
batch
 | 
						|
set a@3 abc
 | 
						|
set b@7 notdeleted
 | 
						|
set c@9 foobar
 | 
						|
----
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
0.0:
 | 
						|
  000008:[a@3#15,SET-c@9#17,SET]
 | 
						|
5:
 | 
						|
  000006:[b#14,RANGEDEL-d#inf,RANGEDEL]
 | 
						|
6:
 | 
						|
  000005:[a@3#10,SET-e#13,SET]
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a@3: (abc, .)
 | 
						|
b@7: (notdeleted, .)
 | 
						|
c@9: (foobar, .)
 | 
						|
e: (baz, .)
 | 
						|
.
 | 
						|
.
 | 
						|
 | 
						|
replicate 1 2 a z
 | 
						|
----
 | 
						|
replicated 2 shared SSTs
 | 
						|
 | 
						|
switch 2
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
0.0:
 | 
						|
  000004:[a@3#12,SET-c@9#12,SET]
 | 
						|
5:
 | 
						|
  000005:[b#11,RANGEDEL-d#inf,RANGEDEL]
 | 
						|
6:
 | 
						|
  000006:[a@3#10,SET-e#10,SET]
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a@3: (abc, .)
 | 
						|
b@7: (notdeleted, .)
 | 
						|
c@9: (foobar, .)
 | 
						|
e: (baz, .)
 | 
						|
.
 | 
						|
 | 
						|
# Test for cases where an excise produces a range key on one side and point keys
 | 
						|
# on the other.
 | 
						|
 | 
						|
reset
 | 
						|
----
 | 
						|
 | 
						|
switch 1
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
batch
 | 
						|
range-key-set a aaa @3 foo
 | 
						|
set d foobar
 | 
						|
set e barbaz
 | 
						|
----
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
compact a-z
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
6:
 | 
						|
  000005:[a#10,RANGEKEYSET-e#12,SET]
 | 
						|
 | 
						|
switch 2
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
batch
 | 
						|
set b bcd
 | 
						|
set c cde
 | 
						|
----
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
compact a-z
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
replicate 2 1 b cc
 | 
						|
----
 | 
						|
replicated 1 shared SSTs
 | 
						|
 | 
						|
switch 1
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
6:
 | 
						|
  000008:[a#10,RANGEKEYSET-aaa#inf,RANGEKEYSET]
 | 
						|
  000007:[b#13,SET-c#13,SET]
 | 
						|
  000009:[d#11,SET-e#12,SET]
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a: (., [a-aaa) @3=foo UPDATED)
 | 
						|
b: (bcd, . UPDATED)
 | 
						|
c: (cde, .)
 | 
						|
d: (foobar, .)
 | 
						|
e: (barbaz, .)
 | 
						|
 | 
						|
reset
 | 
						|
----
 | 
						|
 | 
						|
switch 1
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
batch
 | 
						|
set a@3 o
 | 
						|
set b@5 foo
 | 
						|
set c@6 bar
 | 
						|
set e baz
 | 
						|
----
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
compact a-z
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
build s2
 | 
						|
del-range bb g
 | 
						|
----
 | 
						|
 | 
						|
ingest s2
 | 
						|
----
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
5:
 | 
						|
  000006:[bb#14,RANGEDEL-g#inf,RANGEDEL]
 | 
						|
6:
 | 
						|
  000005:[a@3#10,SET-e#13,SET]
 | 
						|
 | 
						|
switch 2
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
batch
 | 
						|
set ff notdeleted
 | 
						|
----
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
compact a-z
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
6:
 | 
						|
  000005:[ff#10,SET-ff#10,SET]
 | 
						|
 | 
						|
# This replication should truncate the range deletion in pebble instance 1
 | 
						|
# at f, leaving ff undeleted.
 | 
						|
 | 
						|
replicate 1 2 b f
 | 
						|
----
 | 
						|
replicated 2 shared SSTs
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
5:
 | 
						|
  000007:[bb#12,RANGEDEL-f#inf,RANGEDEL]
 | 
						|
6:
 | 
						|
  000008:[b@5#11,SET-e#11,SET]
 | 
						|
  000005:[ff#10,SET-ff#10,SET]
 | 
						|
 | 
						|
iter
 | 
						|
seek-ge b
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
b@5: (foo, .)
 | 
						|
ff: (notdeleted, .)
 | 
						|
.
 | 
						|
 | 
						|
restart
 | 
						|
----
 | 
						|
ok, note that the active db has been set to 1 (use 'switch' to change)
 | 
						|
 | 
						|
switch 2
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
iter
 | 
						|
seek-ge b
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
b@5: (foo, .)
 | 
						|
ff: (notdeleted, .)
 | 
						|
.
 | 
						|
 | 
						|
# Same as above, but with a truncated range key instead of a truncated range del.
 | 
						|
 | 
						|
reset
 | 
						|
----
 | 
						|
 | 
						|
switch 1
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
batch
 | 
						|
set a@3 o
 | 
						|
set b@5 foo
 | 
						|
set c@6 bar
 | 
						|
set e baz
 | 
						|
----
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
compact a-z
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
build s3
 | 
						|
range-key-set bb g @8 foo
 | 
						|
----
 | 
						|
 | 
						|
ingest s3
 | 
						|
----
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
5:
 | 
						|
  000006:[bb#14,RANGEKEYSET-g#inf,RANGEKEYSET]
 | 
						|
6:
 | 
						|
  000005:[a@3#10,SET-e#13,SET]
 | 
						|
 | 
						|
switch 2
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
batch
 | 
						|
set ff notcovered
 | 
						|
----
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
compact a-z
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
6:
 | 
						|
  000005:[ff#10,SET-ff#10,SET]
 | 
						|
 | 
						|
# This replication should truncate the range key in pebble instance 1
 | 
						|
# at f, leaving ff uncovered.
 | 
						|
 | 
						|
replicate 1 2 b f
 | 
						|
----
 | 
						|
replicated 2 shared SSTs
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
5:
 | 
						|
  000007:[bb#12,RANGEKEYSET-f#inf,RANGEKEYSET]
 | 
						|
6:
 | 
						|
  000008:[b@5#11,SET-e#11,SET]
 | 
						|
  000005:[ff#10,SET-ff#10,SET]
 | 
						|
 | 
						|
iter
 | 
						|
seek-ge b
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
b@5: (foo, .)
 | 
						|
bb: (., [bb-f) @8=foo UPDATED)
 | 
						|
c@6: (bar, [bb-f) @8=foo)
 | 
						|
e: (baz, [bb-f) @8=foo)
 | 
						|
ff: (notcovered, . UPDATED)
 | 
						|
.
 | 
						|
 | 
						|
 | 
						|
iter mask-filter mask-suffix=@9
 | 
						|
seek-ge b
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
b@5: (foo, .)
 | 
						|
bb: (., [bb-f) @8=foo UPDATED)
 | 
						|
e: (baz, [bb-f) @8=foo)
 | 
						|
ff: (notcovered, . UPDATED)
 | 
						|
.
 | 
						|
 | 
						|
# Tests for Eventually file-only snapshots.
 | 
						|
 | 
						|
reset
 | 
						|
----
 | 
						|
 | 
						|
switch 1
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
batch
 | 
						|
set a foo
 | 
						|
set b bar
 | 
						|
set c baz
 | 
						|
----
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
compact a-z
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
switch 2
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
batch
 | 
						|
set b foobar
 | 
						|
----
 | 
						|
 | 
						|
file-only-snapshot s1
 | 
						|
 aa bb
 | 
						|
 e f
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
 | 
						|
iter snapshot=s1
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
b: (foobar, .)
 | 
						|
.
 | 
						|
.
 | 
						|
 | 
						|
# The below call should do a flush.
 | 
						|
 | 
						|
wait-for-file-only-snapshot s1
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
0.0:
 | 
						|
  000005:[b#10,SET-b#10,SET]
 | 
						|
 | 
						|
iter snapshot=s1
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
b: (foobar, .)
 | 
						|
.
 | 
						|
.
 | 
						|
 | 
						|
replicate 1 2 a d
 | 
						|
----
 | 
						|
replicated 1 shared SSTs
 | 
						|
 | 
						|
iter snapshot=s1
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
b: (foobar, .)
 | 
						|
.
 | 
						|
.
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a: (foo, .)
 | 
						|
b: (bar, .)
 | 
						|
c: (baz, .)
 | 
						|
.
 | 
						|
 | 
						|
switch 1
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
batch
 | 
						|
del c
 | 
						|
----
 | 
						|
 | 
						|
# The below excise and wait should succeed as the flush will end up transitioning
 | 
						|
# the file-only snapshot.
 | 
						|
 | 
						|
lsm
 | 
						|
----
 | 
						|
6:
 | 
						|
  000005:[a#10,SET-c#12,SET]
 | 
						|
 | 
						|
file-only-snapshot s2
 | 
						|
 a cc
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
iter snapshot=s2
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a: (foo, .)
 | 
						|
b: (bar, .)
 | 
						|
.
 | 
						|
.
 | 
						|
.
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
compact a-z
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
replicate 2 1 a d
 | 
						|
----
 | 
						|
replicated 1 shared SSTs
 | 
						|
 | 
						|
wait-for-file-only-snapshot s2
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
iter snapshot=s2
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a: (foo, .)
 | 
						|
b: (bar, .)
 | 
						|
.
 | 
						|
.
 | 
						|
 | 
						|
iter snapshot=s2
 | 
						|
first
 | 
						|
clone
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a: (foo, .)
 | 
						|
.
 | 
						|
a: (foo, .)
 | 
						|
b: (bar, .)
 | 
						|
.
 | 
						|
.
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a: (foo, .)
 | 
						|
b: (bar, .)
 | 
						|
c: (baz, .)
 | 
						|
.
 | 
						|
.
 | 
						|
 | 
						|
batch
 | 
						|
set d foo
 | 
						|
set e bar
 | 
						|
----
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
compact a-z
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
switch 2
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
batch
 | 
						|
set f foobar
 | 
						|
----
 | 
						|
 | 
						|
# The below file-only snapshot is the more challenging case of a partial overlap
 | 
						|
# between an excise and a file-only snapshot. In this case the EFOS transition
 | 
						|
# blocks on the memtable but the excise proceeds through, causing the EFOS'
 | 
						|
# WaitForFileOnlySnapshot() call to error out. Opening iterators also returns
 | 
						|
# the same errors.
 | 
						|
 | 
						|
file-only-snapshot s3
 | 
						|
 c g
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
iter snapshot=s3
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a: (foo, .)
 | 
						|
b: (bar, .)
 | 
						|
c: (baz, .)
 | 
						|
f: (foobar, .)
 | 
						|
.
 | 
						|
 | 
						|
iter snapshot=s3
 | 
						|
first
 | 
						|
next
 | 
						|
clone
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a: (foo, .)
 | 
						|
b: (bar, .)
 | 
						|
.
 | 
						|
a: (foo, .)
 | 
						|
b: (bar, .)
 | 
						|
c: (baz, .)
 | 
						|
f: (foobar, .)
 | 
						|
 | 
						|
 | 
						|
replicate 1 2 b e
 | 
						|
----
 | 
						|
replicated 2 shared SSTs
 | 
						|
 | 
						|
wait-for-file-only-snapshot s3
 | 
						|
----
 | 
						|
pebble: snapshot excised before conversion to file-only snapshot
 | 
						|
 | 
						|
iter snapshot=s3
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
pebble: snapshot excised before conversion to file-only snapshot
 | 
						|
 | 
						|
iter snapshot=s3
 | 
						|
first
 | 
						|
next
 | 
						|
clone
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
pebble: snapshot excised before conversion to file-only snapshot
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
a: (foo, .)
 | 
						|
b: (bar, .)
 | 
						|
c: (baz, .)
 | 
						|
d: (foo, .)
 | 
						|
f: (foobar, .)
 | 
						|
 | 
						|
# The below example tests for a file-only snapshot that overlaps completely
 | 
						|
# with an excise right after it. The wait succeeds and snapshot consistency is
 | 
						|
# maintained.
 | 
						|
 | 
						|
reset
 | 
						|
----
 | 
						|
 | 
						|
switch 1
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
batch
 | 
						|
set a foo
 | 
						|
set b bar
 | 
						|
set c baz
 | 
						|
----
 | 
						|
 | 
						|
flush
 | 
						|
----
 | 
						|
 | 
						|
compact a-z
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
switch 2
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
batch
 | 
						|
set d foobar
 | 
						|
----
 | 
						|
 | 
						|
file-only-snapshot s4
 | 
						|
 b e
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
iter snapshot=s4
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
d: (foobar, .)
 | 
						|
.
 | 
						|
.
 | 
						|
 | 
						|
replicate 1 2 b e
 | 
						|
----
 | 
						|
replicated 1 shared SSTs
 | 
						|
 | 
						|
wait-for-file-only-snapshot s4
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
iter snapshot=s4
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
d: (foobar, .)
 | 
						|
.
 | 
						|
.
 | 
						|
 | 
						|
compact a-z
 | 
						|
----
 | 
						|
ok
 | 
						|
 | 
						|
iter snapshot=s4
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
d: (foobar, .)
 | 
						|
.
 | 
						|
.
 | 
						|
 | 
						|
iter
 | 
						|
first
 | 
						|
next
 | 
						|
next
 | 
						|
----
 | 
						|
b: (bar, .)
 | 
						|
c: (baz, .)
 | 
						|
.
 |