github.com/cockroachdb/pebble@v1.1.1-0.20240513155919-3622ade60459/testdata/ingest (about)

     1  ingest
     2  ----
     3  
     4  ingest non-existent
     5  ----
     6  open non-existent: file does not exist
     7  
     8  # Elide ingestion of empty sstables.
     9  
    10  build ext0
    11  ----
    12  
    13  ingest ext0
    14  ----
    15  
    16  lsm
    17  ----
    18  
    19  build ext0 format=pebblev2
    20  set a 1
    21  set b 2
    22  ----
    23  
    24  ingest ext0
    25  ----
    26  
    27  lsm
    28  ----
    29  6:
    30    000006:[a#10,SET-b#10,SET]
    31  
    32  metrics
    33  ----
    34        |                             |       |       |   ingested   |     moved    |    written   |       |    amp
    35  level | tables  size val-bl vtables | score |   in  | tables  size | tables  size | tables  size |  read |   r   w
    36  ------+-----------------------------+-------+-------+--------------+--------------+--------------+-------+---------
    37      0 |     0     0B     0B       0 |  0.00 |    0B |     0     0B |     0     0B |     0     0B |    0B |   0  0.0
    38      1 |     0     0B     0B       0 |  0.00 |    0B |     0     0B |     0     0B |     0     0B |    0B |   0  0.0
    39      2 |     0     0B     0B       0 |  0.00 |    0B |     0     0B |     0     0B |     0     0B |    0B |   0  0.0
    40      3 |     0     0B     0B       0 |  0.00 |    0B |     0     0B |     0     0B |     0     0B |    0B |   0  0.0
    41      4 |     0     0B     0B       0 |  0.00 |    0B |     0     0B |     0     0B |     0     0B |    0B |   0  0.0
    42      5 |     0     0B     0B       0 |  0.00 |    0B |     0     0B |     0     0B |     0     0B |    0B |   0  0.0
    43      6 |     1   696B     0B       0 |     - |    0B |     1   696B |     0     0B |     0     0B |    0B |   1  0.0
    44  total |     1   696B     0B       0 |     - |  696B |     1   696B |     0     0B |     0   696B |    0B |   1  1.0
    45  -------------------------------------------------------------------------------------------------------------------
    46  WAL: 1 files (0B)  in: 0B  written: 0B (0% overhead)
    47  Flushes: 0
    48  Compactions: 0  estimated debt: 0B  in progress: 0 (0B)
    49               default: 0  delete: 0  elision: 0  move: 0  read: 0  rewrite: 0  multi-level: 0
    50  MemTables: 1 (256KB)  zombie: 0 (0B)
    51  Zombie tables: 0 (0B)
    52  Backing tables: 0 (0B)
    53  Virtual tables: 0 (0B)
    54  Block cache: 6 entries (1.2KB)  hit rate: 35.7%
    55  Table cache: 1 entries (800B)  hit rate: 50.0%
    56  Secondary cache: 0 entries (0B)  hit rate: 0.0%
    57  Snapshots: 0  earliest seq num: 0
    58  Table iters: 0
    59  Filter utility: 0.0%
    60  Ingestions: 1  as flushable: 0 (0B in 0 tables)
    61  
    62  
    63  iter
    64  seek-ge a
    65  next
    66  next
    67  ----
    68  a: (1, .)
    69  b: (2, .)
    70  .
    71  
    72  get
    73  a
    74  b
    75  ----
    76  a:1
    77  b:2
    78  
    79  wait-pending-table-stats
    80  000006
    81  ----
    82  num-entries: 2
    83  num-deletions: 0
    84  num-range-key-sets: 0
    85  point-deletions-bytes-estimate: 0
    86  range-deletions-bytes-estimate: 0
    87  
    88  build ext1
    89  set a 3
    90  del b
    91  ----
    92  
    93  ingest ext1
    94  ----
    95  
    96  lsm
    97  ----
    98  0.0:
    99    000007:[a#11,SET-b#11,DEL]
   100  6:
   101    000006:[a#10,SET-b#10,SET]
   102  
   103  iter
   104  seek-ge a
   105  next
   106  ----
   107  a: (3, .)
   108  .
   109  
   110  get
   111  a
   112  b
   113  ----
   114  a:3
   115  b: pebble: not found
   116  
   117  build ext2 format=pebblev2
   118  set a 4
   119  set b 5
   120  set c 6
   121  ----
   122  
   123  ingest ext2
   124  ----
   125  
   126  lsm
   127  ----
   128  0.1:
   129    000008:[a#12,SET-c#12,SET]
   130  0.0:
   131    000007:[a#11,SET-b#11,DEL]
   132  6:
   133    000006:[a#10,SET-b#10,SET]
   134  
   135  iter
   136  seek-ge a
   137  next
   138  next
   139  ----
   140  a: (4, .)
   141  b: (5, .)
   142  c: (6, .)
   143  
   144  get
   145  a
   146  b
   147  c
   148  ----
   149  a:4
   150  b:5
   151  c:6
   152  
   153  build ext3
   154  merge b 5
   155  del c
   156  ----
   157  
   158  ingest ext3
   159  ----
   160  
   161  lsm
   162  ----
   163  0.2:
   164    000009:[b#13,MERGE-c#13,DEL]
   165  0.1:
   166    000008:[a#12,SET-c#12,SET]
   167  0.0:
   168    000007:[a#11,SET-b#11,DEL]
   169  6:
   170    000006:[a#10,SET-b#10,SET]
   171  
   172  iter
   173  seek-ge a
   174  next
   175  next
   176  ----
   177  a: (4, .)
   178  b: (55, .)
   179  .
   180  
   181  get
   182  a
   183  b
   184  c
   185  ----
   186  a:4
   187  b:55
   188  c: pebble: not found
   189  
   190  build ext4
   191  set x 7
   192  set y 8
   193  ----
   194  
   195  ingest ext4
   196  ----
   197  
   198  lsm
   199  ----
   200  0.2:
   201    000009:[b#13,MERGE-c#13,DEL]
   202  0.1:
   203    000008:[a#12,SET-c#12,SET]
   204  0.0:
   205    000007:[a#11,SET-b#11,DEL]
   206  6:
   207    000006:[a#10,SET-b#10,SET]
   208    000010:[x#14,SET-y#14,SET]
   209  
   210  iter
   211  seek-lt y
   212  prev
   213  prev
   214  ----
   215  x: (7, .)
   216  b: (55, .)
   217  a: (4, .)
   218  
   219  get
   220  x
   221  y
   222  ----
   223  x:7
   224  y:8
   225  
   226  batch
   227  set j 9
   228  set k 10
   229  ----
   230  
   231  # Overlap with point keys in memtable, hence memtable will be flushed.
   232  
   233  build ext5
   234  set k 11
   235  ----
   236  
   237  ingest ext5
   238  ----
   239  memtable flushed
   240  
   241  lsm
   242  ----
   243  0.2:
   244    000009:[b#13,MERGE-c#13,DEL]
   245  0.1:
   246    000008:[a#12,SET-c#12,SET]
   247    000011:[k#17,SET-k#17,SET]
   248  0.0:
   249    000007:[a#11,SET-b#11,DEL]
   250    000014:[j#15,SET-k#16,SET]
   251  6:
   252    000006:[a#10,SET-b#10,SET]
   253    000010:[x#14,SET-y#14,SET]
   254  
   255  iter
   256  seek-ge j
   257  next
   258  ----
   259  j: (9, .)
   260  k: (11, .)
   261  
   262  get
   263  j
   264  k
   265  ----
   266  j:9
   267  k:11
   268  
   269  # No data overlap in memtable, hence it will not be flushed.
   270  
   271  batch
   272  set m 12
   273  ----
   274  
   275  build ext6
   276  set n 13
   277  ----
   278  
   279  ingest ext6
   280  ----
   281  
   282  lsm
   283  ----
   284  0.2:
   285    000009:[b#13,MERGE-c#13,DEL]
   286  0.1:
   287    000008:[a#12,SET-c#12,SET]
   288    000011:[k#17,SET-k#17,SET]
   289  0.0:
   290    000007:[a#11,SET-b#11,DEL]
   291    000014:[j#15,SET-k#16,SET]
   292  6:
   293    000006:[a#10,SET-b#10,SET]
   294    000015:[n#19,SET-n#19,SET]
   295    000010:[x#14,SET-y#14,SET]
   296  
   297  get
   298  m
   299  n
   300  ----
   301  m:12
   302  n:13
   303  
   304  build ext7 format=pebblev2
   305  del-range a c
   306  del-range x z
   307  ----
   308  
   309  ingest ext7
   310  ----
   311  memtable flushed
   312  
   313  lsm
   314  ----
   315  0.3:
   316    000016:[a#20,RANGEDEL-z#inf,RANGEDEL]
   317  0.2:
   318    000009:[b#13,MERGE-c#13,DEL]
   319  0.1:
   320    000008:[a#12,SET-c#12,SET]
   321    000011:[k#17,SET-k#17,SET]
   322  0.0:
   323    000007:[a#11,SET-b#11,DEL]
   324    000014:[j#15,SET-k#16,SET]
   325    000019:[m#18,SET-m#18,SET]
   326  6:
   327    000006:[a#10,SET-b#10,SET]
   328    000015:[n#19,SET-n#19,SET]
   329    000010:[x#14,SET-y#14,SET]
   330  
   331  get
   332  a
   333  b
   334  c
   335  j
   336  k
   337  m
   338  n
   339  x
   340  y
   341  ----
   342  a: pebble: not found
   343  b: pebble: not found
   344  c: pebble: not found
   345  j:9
   346  k:11
   347  m:12
   348  n:13
   349  x: pebble: not found
   350  y: pebble: not found
   351  
   352  wait-pending-table-stats
   353  000016
   354  ----
   355  num-entries: 2
   356  num-deletions: 2
   357  num-range-key-sets: 0
   358  point-deletions-bytes-estimate: 0
   359  range-deletions-bytes-estimate: 1420
   360  
   361  # A set operation takes precedence over a range deletion at the same
   362  # sequence number as can occur during ingestion.
   363  
   364  build ext8
   365  set j 20
   366  del-range j k
   367  set m 30
   368  ----
   369  
   370  ingest ext8
   371  ----
   372  
   373  get
   374  j
   375  k
   376  m
   377  ----
   378  j:20
   379  k:11
   380  m:30
   381  
   382  build ext9
   383  set a 40
   384  set f 40
   385  set g 40
   386  ----
   387  
   388  ingest ext9
   389  ----
   390  
   391  lsm
   392  ----
   393  0.4:
   394    000021:[a#22,SET-g#22,SET]
   395    000020:[j#21,RANGEDEL-m#21,SET]
   396  0.3:
   397    000016:[a#20,RANGEDEL-z#inf,RANGEDEL]
   398  0.2:
   399    000009:[b#13,MERGE-c#13,DEL]
   400  0.1:
   401    000008:[a#12,SET-c#12,SET]
   402    000011:[k#17,SET-k#17,SET]
   403  0.0:
   404    000007:[a#11,SET-b#11,DEL]
   405    000014:[j#15,SET-k#16,SET]
   406    000019:[m#18,SET-m#18,SET]
   407  6:
   408    000006:[a#10,SET-b#10,SET]
   409    000015:[n#19,SET-n#19,SET]
   410    000010:[x#14,SET-y#14,SET]
   411  
   412  # Overlap with sst boundary containing range del sentinel (fileNum 000015) is not considered an overlap since
   413  # range del's end key is exclusive. Hence ext9 gets ingested into L6.
   414  
   415  build ext10
   416  set z 40
   417  ----
   418  
   419  # Although ext11 falls into sst boundaries of fileNum 000019, 000015, they don't actually contain any key within ext11's boundary.
   420  # Hence ext11 is allowed to go further down and get ingested into L6.
   421  
   422  build ext11
   423  set d 40
   424  ----
   425  
   426  # Overlap with fileNum 000018 is not considered an overlap since ext12's end key is range del sentinel which is exclusive.
   427  
   428  build ext12
   429  del-range i j
   430  ----
   431  
   432  # Ingesting multiple files into L0 is allowed.
   433  
   434  ingest ext10 ext11 ext12
   435  ----
   436  
   437  get
   438  z
   439  d
   440  ----
   441  z:40
   442  d:40
   443  
   444  lsm
   445  ----
   446  0.4:
   447    000021:[a#22,SET-g#22,SET]
   448    000020:[j#21,RANGEDEL-m#21,SET]
   449  0.3:
   450    000016:[a#20,RANGEDEL-z#inf,RANGEDEL]
   451  0.2:
   452    000009:[b#13,MERGE-c#13,DEL]
   453  0.1:
   454    000008:[a#12,SET-c#12,SET]
   455    000011:[k#17,SET-k#17,SET]
   456  0.0:
   457    000007:[a#11,SET-b#11,DEL]
   458    000014:[j#15,SET-k#16,SET]
   459    000019:[m#18,SET-m#18,SET]
   460  6:
   461    000006:[a#10,SET-b#10,SET]
   462    000023:[d#23,SET-d#23,SET]
   463    000024:[i#24,RANGEDEL-j#inf,RANGEDEL]
   464    000015:[n#19,SET-n#19,SET]
   465    000010:[x#14,SET-y#14,SET]
   466    000022:[z#25,SET-z#25,SET]
   467  
   468  # No overlap between fileNum 000019 that contains point key f, since f is ingested file's range del sentinel.
   469  
   470  build ext13
   471  del-range e f
   472  ----
   473  
   474  ingest ext13
   475  ----
   476  
   477  lsm
   478  ----
   479  0.4:
   480    000021:[a#22,SET-g#22,SET]
   481    000020:[j#21,RANGEDEL-m#21,SET]
   482  0.3:
   483    000016:[a#20,RANGEDEL-z#inf,RANGEDEL]
   484  0.2:
   485    000009:[b#13,MERGE-c#13,DEL]
   486  0.1:
   487    000008:[a#12,SET-c#12,SET]
   488    000011:[k#17,SET-k#17,SET]
   489  0.0:
   490    000007:[a#11,SET-b#11,DEL]
   491    000014:[j#15,SET-k#16,SET]
   492    000019:[m#18,SET-m#18,SET]
   493  6:
   494    000006:[a#10,SET-b#10,SET]
   495    000023:[d#23,SET-d#23,SET]
   496    000025:[e#26,RANGEDEL-f#inf,RANGEDEL]
   497    000024:[i#24,RANGEDEL-j#inf,RANGEDEL]
   498    000015:[n#19,SET-n#19,SET]
   499    000010:[x#14,SET-y#14,SET]
   500    000022:[z#25,SET-z#25,SET]
   501  
   502  # Overlap with range delete keys in memtable, hence memtable will be flushed.
   503  
   504  batch
   505  del-range a d
   506  ----
   507  
   508  build ext14
   509  set b 1
   510  ----
   511  
   512  ingest ext14
   513  ----
   514  memtable flushed
   515  
   516  lsm
   517  ----
   518  0.6:
   519    000026:[b#28,SET-b#28,SET]
   520  0.5:
   521    000029:[a#27,RANGEDEL-d#inf,RANGEDEL]
   522  0.4:
   523    000021:[a#22,SET-g#22,SET]
   524    000020:[j#21,RANGEDEL-m#21,SET]
   525  0.3:
   526    000016:[a#20,RANGEDEL-z#inf,RANGEDEL]
   527  0.2:
   528    000009:[b#13,MERGE-c#13,DEL]
   529  0.1:
   530    000008:[a#12,SET-c#12,SET]
   531    000011:[k#17,SET-k#17,SET]
   532  0.0:
   533    000007:[a#11,SET-b#11,DEL]
   534    000014:[j#15,SET-k#16,SET]
   535    000019:[m#18,SET-m#18,SET]
   536  6:
   537    000006:[a#10,SET-b#10,SET]
   538    000023:[d#23,SET-d#23,SET]
   539    000025:[e#26,RANGEDEL-f#inf,RANGEDEL]
   540    000024:[i#24,RANGEDEL-j#inf,RANGEDEL]
   541    000015:[n#19,SET-n#19,SET]
   542    000010:[x#14,SET-y#14,SET]
   543    000022:[z#25,SET-z#25,SET]
   544  
   545  reset
   546  ----
   547  
   548  # Tests to show that keys don't overlap with range delete sentinels.
   549  
   550  batch
   551  set b 1
   552  ----
   553  
   554  build ext15
   555  del-range a b
   556  ----
   557  
   558  ingest ext15
   559  ----
   560  
   561  lsm
   562  ----
   563  6:
   564    000004:[a#11,RANGEDEL-b#inf,RANGEDEL]
   565  
   566  reset
   567  ----
   568  
   569  batch
   570  del-range b c
   571  ----
   572  
   573  build ext16
   574  del-range a b
   575  ----
   576  
   577  ingest ext16
   578  ----
   579  
   580  lsm
   581  ----
   582  6:
   583    000004:[a#11,RANGEDEL-b#inf,RANGEDEL]
   584  
   585  reset
   586  ----
   587  
   588  # Tests for branch coverage of method overlapWithIterator,
   589  # when levelIter is used and it produces a range del sentinel boundary
   590  # because it finds no overlapping point key.
   591  
   592  # Case 1) levelIter produced boundary is less than ingested file's largest key.
   593  
   594  build ext17
   595  del-range a b
   596  ----
   597  
   598  ingest ext17
   599  ----
   600  
   601  build ext18
   602  set a 10
   603  set c 10
   604  ----
   605  
   606  ingest ext18
   607  ----
   608  
   609  lsm
   610  ----
   611  0.0:
   612    000005:[a#11,SET-c#11,SET]
   613  6:
   614    000004:[a#10,RANGEDEL-b#inf,RANGEDEL]
   615  
   616  reset
   617  ----
   618  
   619  # Case 2) levelIter produced boundary is more than ingested file's largest key.
   620  
   621  build ext19
   622  del-range c d
   623  ----
   624  
   625  ingest ext19
   626  ----
   627  
   628  build ext20
   629  set a 10
   630  set b 10
   631  ----
   632  
   633  ingest ext20
   634  ----
   635  
   636  build ext21
   637  set c 10
   638  ----
   639  
   640  ingest ext21
   641  ----
   642  
   643  lsm
   644  ----
   645  0.0:
   646    000006:[c#12,SET-c#12,SET]
   647  6:
   648    000005:[a#11,SET-b#11,SET]
   649    000004:[c#10,RANGEDEL-d#inf,RANGEDEL]
   650  
   651  reset
   652  ----
   653  
   654  # Case 3) levelIter produced boundary is equal to ingested file's largest key,
   655  # where the latter is not a range del sentinel.
   656  
   657  build ext22
   658  del-range a b
   659  ----
   660  
   661  ingest ext22
   662  ----
   663  
   664  build ext23
   665  set a 10
   666  set b 10
   667  ----
   668  
   669  ingest ext23
   670  ----
   671  
   672  lsm
   673  ----
   674  0.0:
   675    000005:[a#11,SET-b#11,SET]
   676  6:
   677    000004:[a#10,RANGEDEL-b#inf,RANGEDEL]
   678  
   679  reset
   680  ----
   681  
   682  # Case 4) levelIter produced boundary is equal to ingested file's largest key,
   683  # where the latter is a range del sentinel.
   684  
   685  build ext24
   686  del-range a b
   687  ----
   688  
   689  ingest ext24
   690  ----
   691  
   692  build ext25
   693  del-range a b
   694  ----
   695  
   696  ingest ext25
   697  ----
   698  
   699  lsm
   700  ----
   701  0.0:
   702    000005:[a#11,RANGEDEL-b#inf,RANGEDEL]
   703  6:
   704    000004:[a#10,RANGEDEL-b#inf,RANGEDEL]
   705  
   706  # Check for range key ingestion bug fix in
   707  # https://github.com/cockroachdb/pebble/pull/2082. Without the fix, we expect
   708  # the range key associated with the table ext3 to get elided. This test checks
   709  # that the elision does not happen.
   710  reset
   711  ----
   712  
   713  build ext1
   714  range-key-set d g 1 val1
   715  ----
   716  
   717  ingest ext1
   718  ----
   719  
   720  lsm
   721  ----
   722  6:
   723    000004:[d#10,RANGEKEYSET-g#inf,RANGEKEYSET]
   724  
   725  build ext2
   726  range-key-set b e 1 val2
   727  ----
   728  
   729  ingest ext2
   730  ----
   731  
   732  lsm
   733  ----
   734  0.0:
   735    000005:[b#11,RANGEKEYSET-e#inf,RANGEKEYSET]
   736  6:
   737    000004:[d#10,RANGEKEYSET-g#inf,RANGEKEYSET]
   738  
   739  build ext3
   740  range-key-del a c
   741  ----
   742  
   743  ingest ext3
   744  ----
   745  
   746  # Without the fix in #2082 we would expect ext3 file to be ingested into L6.
   747  lsm
   748  ----
   749  0.1:
   750    000006:[a#12,RANGEKEYDEL-c#inf,RANGEKEYDEL]
   751  0.0:
   752    000005:[b#11,RANGEKEYSET-e#inf,RANGEKEYSET]
   753  6:
   754    000004:[d#10,RANGEKEYSET-g#inf,RANGEKEYSET]
   755  
   756  build ext4
   757  set a a
   758  ----
   759  
   760  ingest ext4
   761  ----
   762  
   763  lsm
   764  ----
   765  0.2:
   766    000007:[a#13,SET-a#13,SET]
   767  0.1:
   768    000006:[a#12,RANGEKEYDEL-c#inf,RANGEKEYDEL]
   769  0.0:
   770    000005:[b#11,RANGEKEYSET-e#inf,RANGEKEYSET]
   771  6:
   772    000004:[d#10,RANGEKEYSET-g#inf,RANGEKEYSET]
   773  
   774  compact a aa
   775  ----
   776  
   777  # Without the fix in #2082, we would expect the range key delete a-c to
   778  # get elided as it would be in L6 beneath the b-e range key in L0.
   779  lsm
   780  ----
   781  6:
   782    000008:[a#0,SET-g#inf,RANGEKEYSET]
   783  
   784  # Shouldn't show results for the b-c range as it must be deleted.
   785  iter
   786  first
   787  next
   788  next
   789  next
   790  ----
   791  a: (a, .)
   792  c: (., [c-e) 1=val2 UPDATED)
   793  e: (., [e-g) 1=val1 UPDATED)
   794  .
   795  
   796  # Keys can have exclusive sentinels. Check that files boundaries which contain
   797  # such keys are ingested ingested into the lowest level possible.
   798  reset
   799  ----
   800  
   801  build ext1
   802  set c c
   803  set e e
   804  ----
   805  
   806  ingest ext1
   807  ----
   808  
   809  lsm
   810  ----
   811  6:
   812    000004:[c#10,SET-e#10,SET]
   813  
   814  
   815  build ext2
   816  range-key-set a c 1 val1
   817  ----
   818  
   819  ingest ext2
   820  ----
   821  
   822  lsm
   823  ----
   824  6:
   825    000005:[a#11,RANGEKEYSET-c#inf,RANGEKEYSET]
   826    000004:[c#10,SET-e#10,SET]
   827  
   828  # The following test cases will test that files where the end bound is an
   829  # exclusive sentinel due to range keys are ingested into the correct levels.
   830  build ext3
   831  set f f
   832  set h h
   833  ----
   834  
   835  ingest ext3
   836  ----
   837  
   838  lsm
   839  ----
   840  6:
   841    000005:[a#11,RANGEKEYSET-c#inf,RANGEKEYSET]
   842    000004:[c#10,SET-e#10,SET]
   843    000006:[f#12,SET-h#12,SET]
   844  
   845  
   846  build ext4
   847  range-key-unset eee f 1
   848  ----
   849  
   850  ingest ext4
   851  ----
   852  
   853  lsm
   854  ----
   855  6:
   856    000005:[a#11,RANGEKEYSET-c#inf,RANGEKEYSET]
   857    000004:[c#10,SET-e#10,SET]
   858    000007:[eee#13,RANGEKEYUNSET-f#inf,RANGEKEYUNSET]
   859    000006:[f#12,SET-h#12,SET]
   860  
   861  build ext5
   862  range-key-set ee eee 1 val3
   863  ----
   864  
   865  ingest ext5
   866  ----
   867  
   868  lsm
   869  ----
   870  6:
   871    000005:[a#11,RANGEKEYSET-c#inf,RANGEKEYSET]
   872    000004:[c#10,SET-e#10,SET]
   873    000008:[ee#14,RANGEKEYSET-eee#inf,RANGEKEYSET]
   874    000007:[eee#13,RANGEKEYUNSET-f#inf,RANGEKEYUNSET]
   875    000006:[f#12,SET-h#12,SET]
   876  
   877  build ext6
   878  set x x
   879  set y y
   880  ----
   881  
   882  ingest ext6
   883  ----
   884  
   885  lsm
   886  ----
   887  6:
   888    000005:[a#11,RANGEKEYSET-c#inf,RANGEKEYSET]
   889    000004:[c#10,SET-e#10,SET]
   890    000008:[ee#14,RANGEKEYSET-eee#inf,RANGEKEYSET]
   891    000007:[eee#13,RANGEKEYUNSET-f#inf,RANGEKEYUNSET]
   892    000006:[f#12,SET-h#12,SET]
   893    000009:[x#15,SET-y#15,SET]
   894  
   895  build ext7
   896  range-key-del s x
   897  ----
   898  
   899  ingest ext7
   900  ----
   901  
   902  lsm
   903  ----
   904  6:
   905    000005:[a#11,RANGEKEYSET-c#inf,RANGEKEYSET]
   906    000004:[c#10,SET-e#10,SET]
   907    000008:[ee#14,RANGEKEYSET-eee#inf,RANGEKEYSET]
   908    000007:[eee#13,RANGEKEYUNSET-f#inf,RANGEKEYUNSET]
   909    000006:[f#12,SET-h#12,SET]
   910    000010:[s#16,RANGEKEYDEL-x#inf,RANGEKEYDEL]
   911    000009:[x#15,SET-y#15,SET]
   912  
   913  reset enable-split
   914  ----
   915  
   916  build ext10
   917  set a foo
   918  set e bar
   919  ----
   920  
   921  ingest ext10
   922  ----
   923  
   924  lsm
   925  ----
   926  6:
   927    000004:[a#10,SET-e#10,SET]
   928  
   929  # The below ingestion should split one existing file.
   930  
   931  build ext11
   932  set b foobar
   933  set d foobar
   934  ----
   935  
   936  ingest ext11
   937  ----
   938  
   939  lsm
   940  ----
   941  6:
   942    000006:[a#10,SET-a#10,SET]
   943    000005:[b#11,SET-d#11,SET]
   944    000007:[e#10,SET-e#10,SET]
   945  
   946  iter
   947  first
   948  next
   949  next
   950  next
   951  ----
   952  a: (foo, .)
   953  b: (foobar, .)
   954  d: (foobar, .)
   955  e: (bar, .)
   956  
   957  # This ingestion should not split any files due to data overlap.
   958  
   959  build ext12
   960  set c foobar
   961  set e baz
   962  ----
   963  
   964  ingest ext12
   965  ----
   966  
   967  lsm
   968  ----
   969  0.0:
   970    000008:[c#12,SET-e#12,SET]
   971  6:
   972    000006:[a#10,SET-a#10,SET]
   973    000005:[b#11,SET-d#11,SET]
   974    000007:[e#10,SET-e#10,SET]
   975  
   976  # The below ingestion should fall through one existing file and split another
   977  # file.
   978  
   979  build ext13
   980  set cc foo
   981  set ccc foooo
   982  ----
   983  
   984  ingest ext13
   985  ----
   986  
   987  lsm
   988  ----
   989  0.0:
   990    000008:[c#12,SET-e#12,SET]
   991  6:
   992    000006:[a#10,SET-a#10,SET]
   993    000010:[b#11,SET-b#11,SET]
   994    000009:[cc#13,SET-ccc#13,SET]
   995    000011:[d#11,SET-d#11,SET]
   996    000007:[e#10,SET-e#10,SET]
   997  
   998  iter
   999  seek-ge c
  1000  next
  1001  next
  1002  next
  1003  next
  1004  ----
  1005  c: (foobar, .)
  1006  cc: (foo, .)
  1007  ccc: (foooo, .)
  1008  d: (foobar, .)
  1009  e: (baz, .)
  1010  
  1011  # Ingestion splitting doesn't kick in at L0.
  1012  
  1013  build ext14
  1014  set d updated
  1015  set dd new
  1016  ----
  1017  
  1018  ingest ext14
  1019  ----
  1020  
  1021  lsm
  1022  ----
  1023  0.1:
  1024    000012:[d#14,SET-dd#14,SET]
  1025  0.0:
  1026    000008:[c#12,SET-e#12,SET]
  1027  6:
  1028    000006:[a#10,SET-a#10,SET]
  1029    000010:[b#11,SET-b#11,SET]
  1030    000009:[cc#13,SET-ccc#13,SET]
  1031    000011:[d#11,SET-d#11,SET]
  1032    000007:[e#10,SET-e#10,SET]
  1033  
  1034  iter
  1035  seek-lt d
  1036  next
  1037  next
  1038  next
  1039  next
  1040  ----
  1041  ccc: (foooo, .)
  1042  d: (updated, .)
  1043  dd: (new, .)
  1044  e: (baz, .)
  1045  .
  1046  
  1047  # Multi-sstable ingestion batches. This exercises logic to find the appropriate
  1048  # file to split for each newly ingested file, as we will be repeatedly splitting
  1049  # files into smaller virtual files.
  1050  
  1051  reset enable-split
  1052  ----
  1053  
  1054  build ext10
  1055  set a foo
  1056  set e bar
  1057  set g baz
  1058  ----
  1059  
  1060  ingest ext10
  1061  ----
  1062  
  1063  lsm
  1064  ----
  1065  6:
  1066    000004:[a#10,SET-g#10,SET]
  1067  
  1068  build ext11
  1069  set b foobar
  1070  set c foobar
  1071  ----
  1072  
  1073  build ext12
  1074  set cc foobar
  1075  set d foobar
  1076  ----
  1077  
  1078  # This ingestion should slide in the same gap between keys in ext10.
  1079  
  1080  ingest ext11 ext12
  1081  ----
  1082  
  1083  lsm
  1084  ----
  1085  6:
  1086    000007:[a#10,SET-a#10,SET]
  1087    000005:[b#11,SET-c#11,SET]
  1088    000006:[cc#12,SET-d#12,SET]
  1089    000008:[e#10,SET-g#10,SET]
  1090  
  1091  # A virtual sstable produced from an ingest split can be ingest split again.
  1092  
  1093  build ext13
  1094  set ee foooo
  1095  set f bar
  1096  ----
  1097  
  1098  ingest ext13
  1099  ----
  1100  
  1101  lsm
  1102  ----
  1103  6:
  1104    000007:[a#10,SET-a#10,SET]
  1105    000005:[b#11,SET-c#11,SET]
  1106    000006:[cc#12,SET-d#12,SET]
  1107    000010:[e#10,SET-e#10,SET]
  1108    000009:[ee#13,SET-f#13,SET]
  1109    000011:[g#10,SET-g#10,SET]
  1110  
  1111  reset enable-split
  1112  ----
  1113  
  1114  build ext10
  1115  set a foo
  1116  set e bar
  1117  set g baz
  1118  ----
  1119  
  1120  ingest ext10
  1121  ----
  1122  
  1123  lsm
  1124  ----
  1125  6:
  1126    000004:[a#10,SET-g#10,SET]
  1127  
  1128  build ext11
  1129  set b foobar
  1130  set c foobar
  1131  ----
  1132  
  1133  build ext12
  1134  set cc foobar
  1135  set d foobar
  1136  ----
  1137  
  1138  build ext13
  1139  set ee foooo
  1140  set f bar
  1141  ----
  1142  
  1143  # This ingestion should split ext10 twice, and land two files on one side
  1144  # of a key in it, and another file on another side of it.
  1145  
  1146  ingest ext11 ext12 ext13
  1147  ----
  1148  
  1149  lsm
  1150  ----
  1151  6:
  1152    000008:[a#10,SET-a#10,SET]
  1153    000005:[b#11,SET-c#11,SET]
  1154    000006:[cc#12,SET-d#12,SET]
  1155    000010:[e#10,SET-e#10,SET]
  1156    000007:[ee#13,SET-f#13,SET]
  1157    000011:[g#10,SET-g#10,SET]
  1158  
  1159  iter
  1160  first
  1161  next
  1162  next
  1163  next
  1164  next
  1165  next
  1166  next
  1167  next
  1168  next
  1169  next
  1170  ----
  1171  a: (foo, .)
  1172  b: (foobar, .)
  1173  c: (foobar, .)
  1174  cc: (foobar, .)
  1175  d: (foobar, .)
  1176  e: (bar, .)
  1177  ee: (foooo, .)
  1178  f: (bar, .)
  1179  g: (baz, .)
  1180  .