build ext0 format=pebblev2 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 ---- lsm ---- 0.0: 000006:[d#11,SET-f#12,SET] 6: 000004:[a#10,SET-l#10,SET] excise c k ---- would excise 2 files, use ingest-and-excise to excise. deleted: L0 000006 deleted: L6 000004 added: L6 000007:[a#10,SET-a#10,SET] seqnums:[10-10] points:[a#10,SET-a#10,SET] added: L6 000008:[l#10,SET-l#10,SET] seqnums:[10-10] points:[l#10,SET-l#10,SET] excise a e ---- would excise 2 files, use ingest-and-excise to excise. deleted: L0 000006 deleted: L6 000004 added: L0 000009:[f#12,SET-f#12,SET] seqnums:[11-12] points:[f#12,SET-f#12,SET] added: L6 000010:[l#10,SET-l#10,SET] seqnums:[10-10] points:[l#10,SET-l#10,SET] excise e z ---- would excise 2 files, use ingest-and-excise to excise. deleted: L0 000006 deleted: L6 000004 added: L0 000011:[d#11,SET-d#11,SET] seqnums:[11-12] points:[d#11,SET-d#11,SET] added: L6 000012:[a#10,SET-a#10,SET] seqnums:[10-10] points:[a#10,SET-a#10,SET] excise f l ---- would excise 2 files, use ingest-and-excise to excise. deleted: L0 000006 deleted: L6 000004 added: L0 000013:[d#11,SET-d#11,SET] seqnums:[11-12] points:[d#11,SET-d#11,SET] added: L6 000014:[a#10,SET-a#10,SET] seqnums:[10-10] points:[a#10,SET-a#10,SET] added: L6 000015:[l#10,SET-l#10,SET] seqnums:[10-10] points:[l#10,SET-l#10,SET] excise f ll ---- would excise 2 files, use ingest-and-excise to excise. deleted: L0 000006 deleted: L6 000004 added: L0 000016:[d#11,SET-d#11,SET] seqnums:[11-12] points:[d#11,SET-d#11,SET] added: L6 000017:[a#10,SET-a#10,SET] seqnums:[10-10] points:[a#10,SET-a#10,SET] excise p q ---- would excise 0 files, use ingest-and-excise to excise. lsm ---- 0.0: 000006:[d#11,SET-f#12,SET] 6: 000004:[a#10,SET-l#10,SET] iter first next next next next ---- a: (1, .) d: (foo, .) f: (bar, .) l: (2, .) . build ext1 format=pebblev2 set d foo3 set e bar2 ---- ingest-and-excise ext1 excise=c-k ---- lsm ---- 6: 000019:[a#10,SET-a#10,SET] 000018:[d#13,SET-e#13,SET] 000020:[l#10,SET-l#10,SET] iter first next next next next ---- a: (1, .) d: (foo3, .) e: (bar2, .) l: (2, .) . # More complex cases, with the truncation of file bounds happening at rangedel # and rangekey bounds. reset ---- build ext3 format=pebblev2 range-key-set c f @4 foobar ---- ingest ext3 ---- build ext4 format=pebblev2 set b bar del-range g i ---- ingest ext4 ---- lsm ---- 0.0: 000005:[b#11,SET-i#inf,RANGEDEL] 6: 000004:[c#10,RANGEKEYSET-f#inf,RANGEKEYSET] excise f g ---- would excise 1 files, use ingest-and-excise to excise. deleted: L0 000005 added: L0 000006:[b#11,SET-b#11,SET] seqnums:[11-11] points:[b#11,SET-b#11,SET] added: L0 000007:[g#11,RANGEDEL-i#inf,RANGEDEL] seqnums:[11-11] points:[g#11,RANGEDEL-i#inf,RANGEDEL] excise b c ---- would excise 1 files, use ingest-and-excise to excise. deleted: L0 000005 added: L0 000008:[g#11,RANGEDEL-i#inf,RANGEDEL] seqnums:[11-11] points:[g#11,RANGEDEL-i#inf,RANGEDEL] excise i j ---- would excise 0 files, use ingest-and-excise to excise. # Excise mid range key. This will not happen in practice, but excise() # supports it. excise c d ---- would excise 2 files, use ingest-and-excise to excise. deleted: L0 000005 deleted: L6 000004 added: L0 000009:[b#11,SET-b#11,SET] seqnums:[11-11] points:[b#11,SET-b#11,SET] added: L0 000010:[g#11,RANGEDEL-i#inf,RANGEDEL] seqnums:[11-11] points:[g#11,RANGEDEL-i#inf,RANGEDEL] added: L6 000011:[d#10,RANGEKEYSET-f#inf,RANGEKEYSET] seqnums:[10-10] ranges:[d#10,RANGEKEYSET-f#inf,RANGEKEYSET] reset ---- # Create an sstable with a range key set. batch set a a set b b set d d range-key-set e ee @1 foo ---- flush ---- lsm ---- 0.0: 000005:[a#10,SET-ee#inf,RANGEKEYSET] build ext2 set z z ---- ingest-and-excise ext2 excise=b-c ---- lsm ---- 0.0: 000007:[a#10,SET-a#10,SET] 000008:[d#12,SET-ee#inf,RANGEKEYSET] 6: 000006:[z#14,SET-z#14,SET] # Regression test for https://github.com/cockroachdb/pebble/issues/2947. reset ---- batch set a a set b b set c c set d d set e e set f f set g g set h h set i i set j j ---- flush ---- lsm ---- 0.0: 000005:[a#10,SET-j#19,SET] build ext2 set z z ---- ingest-and-excise ext2 excise=d-e ---- lsm ---- 0.0: 000007:[a#10,SET-c#12,SET] 000008:[e#14,SET-j#19,SET] 6: 000006:[z#20,SET-z#20,SET] build ext3 set zz zz ---- ingest-and-excise ext3 excise=g-h ---- # 7, 10, 11 should have the same file backing struct. lsm ---- 0.0: 000007:[a#10,SET-c#12,SET] 000010:[e#14,SET-f#15,SET] 000011:[h#17,SET-j#19,SET] 6: 000006:[z#20,SET-z#20,SET] 000009:[zz#21,SET-zz#21,SET] confirm-backing 7 10 11 ---- file backings are the same reopen ---- # 7, 10, 11 should still have the same file backing struct even after manifest # replay. lsm ---- 0.0: 000007:[a#10,SET-c#12,SET] 000010:[e#14,SET-f#15,SET] 000011:[h#17,SET-j#19,SET] 6: 000006:[z#20,SET-z#20,SET] 000009:[zz#21,SET-zz#21,SET] confirm-backing 7 10 11 ---- file backings are the same # Excise one boundary, the file backing should still be set. reset ---- batch set a a set b b set c c set d d set e e ---- flush ---- lsm ---- 0.0: 000005:[a#10,SET-e#14,SET] build ext2 set z z ---- ingest-and-excise ext2 excise=d-f ---- lsm ---- 0.0: 000007:[a#10,SET-c#12,SET] 6: 000006:[z#15,SET-z#15,SET] reopen ---- lsm ---- 0.0: 000007:[a#10,SET-c#12,SET] 6: 000006:[z#15,SET-z#15,SET]