github.com/zuoyebang/bitalostable@v1.0.1-0.20240229032404-e3b99a834294/testdata/range_del (about)

     1  # 1 memtable.
     2  
     3  define
     4  mem
     5    a.SET.1:b
     6    a.SET.3:c
     7    a.SET.5:d
     8    b.MERGE.1:b
     9    b.MERGE.3:c
    10    b.MERGE.5:d
    11    b.RANGEDEL.6:c
    12    b.MERGE.7:e
    13    c.SET.1:b
    14    c.SET.3:c
    15    c.SET.5:d
    16  ----
    17  mem: 1
    18  
    19  get seq=2
    20  a
    21  b
    22  c
    23  ----
    24  a:b
    25  b:b
    26  c:b
    27  
    28  get seq=4
    29  a
    30  b
    31  c
    32  ----
    33  a:c
    34  b:bc
    35  c:c
    36  
    37  get seq=6
    38  a
    39  b
    40  c
    41  ----
    42  a:d
    43  b:bcd
    44  c:d
    45  
    46  get seq=7
    47  a
    48  b
    49  c
    50  ----
    51  a:d
    52  b: bitable: not found
    53  c:d
    54  
    55  get seq=8
    56  a
    57  b
    58  c
    59  ----
    60  a:d
    61  b:e
    62  c:d
    63  
    64  get seq=6
    65  a
    66  b
    67  c
    68  ----
    69  a:d
    70  b:bcd
    71  c:d
    72  
    73  iter seq=6
    74  first
    75  next
    76  next
    77  next
    78  seek-ge a
    79  seek-ge b
    80  seek-ge c
    81  seek-ge d
    82  last
    83  prev
    84  prev
    85  prev
    86  seek-lt a
    87  seek-lt b
    88  seek-lt c
    89  seek-lt d
    90  ----
    91  a:d
    92  b:bcd
    93  c:d
    94  .
    95  a:d
    96  b:bcd
    97  c:d
    98  .
    99  c:d
   100  b:bcd
   101  a:d
   102  .
   103  .
   104  a:d
   105  b:bcd
   106  c:d
   107  
   108  iter seq=7
   109  first
   110  next
   111  next
   112  seek-ge a
   113  seek-ge b
   114  seek-ge c
   115  seek-ge d
   116  last
   117  prev
   118  prev
   119  seek-lt a
   120  seek-lt b
   121  seek-lt c
   122  seek-lt d
   123  ----
   124  a:d
   125  c:d
   126  .
   127  a:d
   128  c:d
   129  c:d
   130  .
   131  c:d
   132  a:d
   133  .
   134  .
   135  a:d
   136  a:d
   137  c:d
   138  
   139  # Multiple memtables.
   140  
   141  define
   142  mem
   143    a.SET.1:b
   144    b.MERGE.1:b
   145    c.SET.1:b
   146  mem
   147    a.SET.3:c
   148    b.MERGE.3:c
   149    c.SET.3:c
   150  mem
   151    a.SET.5:d
   152    b.MERGE.5:d
   153    c.SET.5:d
   154  mem
   155    b.RANGEDEL.6:c
   156  mem
   157    b.MERGE.7:e
   158  ----
   159  mem: 5
   160  
   161  get seq=2
   162  a
   163  b
   164  c
   165  ----
   166  a:b
   167  b:b
   168  c:b
   169  
   170  get seq=4
   171  a
   172  b
   173  c
   174  ----
   175  a:c
   176  b:bc
   177  c:c
   178  
   179  get seq=6
   180  a
   181  b
   182  c
   183  ----
   184  a:d
   185  b:bcd
   186  c:d
   187  
   188  get seq=7
   189  a
   190  b
   191  c
   192  ----
   193  a:d
   194  b: bitable: not found
   195  c:d
   196  
   197  get seq=8
   198  a
   199  b
   200  c
   201  ----
   202  a:d
   203  b:e
   204  c:d
   205  
   206  get seq=6
   207  a
   208  b
   209  c
   210  ----
   211  a:d
   212  b:bcd
   213  c:d
   214  
   215  iter seq=6
   216  first
   217  next
   218  next
   219  next
   220  seek-ge a
   221  seek-ge b
   222  seek-ge c
   223  seek-ge d
   224  last
   225  prev
   226  prev
   227  prev
   228  seek-lt a
   229  seek-lt b
   230  seek-lt c
   231  seek-lt d
   232  ----
   233  a:d
   234  b:bcd
   235  c:d
   236  .
   237  a:d
   238  b:bcd
   239  c:d
   240  .
   241  c:d
   242  b:bcd
   243  a:d
   244  .
   245  .
   246  a:d
   247  b:bcd
   248  c:d
   249  
   250  iter seq=7
   251  first
   252  next
   253  next
   254  seek-ge a
   255  seek-ge b
   256  seek-ge c
   257  seek-ge d
   258  last
   259  prev
   260  prev
   261  seek-lt a
   262  seek-lt b
   263  seek-lt c
   264  seek-lt d
   265  ----
   266  a:d
   267  c:d
   268  .
   269  a:d
   270  c:d
   271  c:d
   272  .
   273  c:d
   274  a:d
   275  .
   276  .
   277  a:d
   278  a:d
   279  c:d
   280  
   281  # Overlapping range deletions in the same memtable.
   282  
   283  define
   284  mem
   285    a.SET.1:1
   286    a.SET.3:2
   287    a.SET.5:3
   288    a.SET.7:4
   289    b.SET.1:1
   290    b.SET.3:2
   291    b.SET.5:3
   292    b.SET.7:4
   293    c.SET.1:1
   294    c.SET.3:2
   295    c.SET.5:3
   296    c.SET.7:4
   297    d.SET.1:1
   298    d.SET.3:2
   299    d.SET.5:3
   300    d.SET.7:4
   301    a.RANGEDEL.2:b
   302    b.RANGEDEL.4:c
   303    b.RANGEDEL.2:c
   304    c.RANGEDEL.6:d
   305    c.RANGEDEL.4:d
   306    c.RANGEDEL.2:d
   307  ----
   308  mem: 1
   309  
   310  get seq=2
   311  a
   312  b
   313  c
   314  d
   315  ----
   316  a:1
   317  b:1
   318  c:1
   319  d:1
   320  
   321  get seq=3
   322  a
   323  b
   324  c
   325  d
   326  ----
   327  a: bitable: not found
   328  b: bitable: not found
   329  c: bitable: not found
   330  d:1
   331  
   332  get seq=5
   333  a
   334  b
   335  c
   336  d
   337  ----
   338  a:2
   339  b: bitable: not found
   340  c: bitable: not found
   341  d:2
   342  
   343  get seq=7
   344  a
   345  b
   346  c
   347  d
   348  ----
   349  a:3
   350  b:3
   351  c: bitable: not found
   352  d:3
   353  
   354  get seq=9
   355  a
   356  b
   357  c
   358  d
   359  ----
   360  a:4
   361  b:4
   362  c:4
   363  d:4
   364  
   365  iter seq=2
   366  first
   367  next
   368  next
   369  next
   370  next
   371  last
   372  prev
   373  prev
   374  prev
   375  prev
   376  ----
   377  a:1
   378  b:1
   379  c:1
   380  d:1
   381  .
   382  d:1
   383  c:1
   384  b:1
   385  a:1
   386  .
   387  
   388  iter seq=3
   389  first
   390  next
   391  last
   392  prev
   393  ----
   394  d:1
   395  .
   396  d:1
   397  .
   398  
   399  iter seq=5
   400  first
   401  next
   402  next
   403  last
   404  prev
   405  prev
   406  ----
   407  a:2
   408  d:2
   409  .
   410  d:2
   411  a:2
   412  .
   413  
   414  iter seq=7
   415  first
   416  next
   417  next
   418  next
   419  last
   420  prev
   421  prev
   422  prev
   423  ----
   424  a:3
   425  b:3
   426  d:3
   427  .
   428  d:3
   429  b:3
   430  a:3
   431  .
   432  
   433  iter seq=9
   434  first
   435  next
   436  next
   437  next
   438  next
   439  last
   440  prev
   441  prev
   442  prev
   443  prev
   444  ----
   445  a:4
   446  b:4
   447  c:4
   448  d:4
   449  .
   450  d:4
   451  c:4
   452  b:4
   453  a:4
   454  .
   455  
   456  # Overlapping range deletions in different memtables. Note that the
   457  # range tombstones are not fragmented in this case.
   458  
   459  define
   460  mem
   461    a.SET.1:1
   462    b.SET.1:1
   463    c.SET.1:1
   464    d.SET.1:1
   465  mem
   466    a.SET.3:2
   467    b.SET.3:2
   468    c.SET.3:2
   469    d.SET.3:2
   470    a.RANGEDEL.2:d
   471  mem
   472    a.SET.5:3
   473    b.SET.5:3
   474    c.SET.5:3
   475    d.SET.5:3
   476    b.RANGEDEL.4:d
   477  mem
   478    a.SET.7:4
   479    b.SET.7:4
   480    c.SET.7:4
   481    d.SET.7:4
   482    c.RANGEDEL.4:d
   483  ----
   484  mem: 4
   485  
   486  get seq=2
   487  a
   488  b
   489  c
   490  d
   491  ----
   492  a:1
   493  b:1
   494  c:1
   495  d:1
   496  
   497  get seq=3
   498  a
   499  b
   500  c
   501  d
   502  ----
   503  a: bitable: not found
   504  b: bitable: not found
   505  c: bitable: not found
   506  d:1
   507  
   508  get seq=5
   509  a
   510  b
   511  c
   512  d
   513  ----
   514  a:2
   515  b: bitable: not found
   516  c: bitable: not found
   517  d:2
   518  
   519  get seq=7
   520  a
   521  b
   522  c
   523  d
   524  ----
   525  a:3
   526  b:3
   527  c: bitable: not found
   528  d:3
   529  
   530  get seq=9
   531  a
   532  b
   533  c
   534  d
   535  ----
   536  a:4
   537  b:4
   538  c:4
   539  d:4
   540  
   541  iter seq=2
   542  first
   543  next
   544  next
   545  next
   546  next
   547  last
   548  prev
   549  prev
   550  prev
   551  prev
   552  ----
   553  a:1
   554  b:1
   555  c:1
   556  d:1
   557  .
   558  d:1
   559  c:1
   560  b:1
   561  a:1
   562  .
   563  
   564  iter seq=3
   565  first
   566  next
   567  last
   568  prev
   569  ----
   570  d:1
   571  .
   572  d:1
   573  .
   574  
   575  iter seq=5
   576  first
   577  next
   578  next
   579  last
   580  prev
   581  prev
   582  ----
   583  a:2
   584  d:2
   585  .
   586  d:2
   587  a:2
   588  .
   589  
   590  iter seq=7
   591  first
   592  next
   593  next
   594  next
   595  last
   596  prev
   597  prev
   598  prev
   599  ----
   600  a:3
   601  b:3
   602  d:3
   603  .
   604  d:3
   605  b:3
   606  a:3
   607  .
   608  
   609  iter seq=9
   610  first
   611  next
   612  next
   613  next
   614  next
   615  last
   616  prev
   617  prev
   618  prev
   619  prev
   620  ----
   621  a:4
   622  b:4
   623  c:4
   624  d:4
   625  .
   626  d:4
   627  c:4
   628  b:4
   629  a:4
   630  .
   631  
   632  # User-key that spans tables in a level.
   633  
   634  define
   635  L1
   636    a.SET.3:3
   637  L1
   638    a.SET.2:2
   639  L1
   640    a.SET.1:1
   641  ----
   642  mem: 1
   643  1:
   644    000004:[a#3,SET-a#3,SET]
   645    000005:[a#2,SET-a#2,SET]
   646    000006:[a#1,SET-a#1,SET]
   647  
   648  get seq=1
   649  a
   650  ----
   651  a: bitable: not found
   652  
   653  get seq=2
   654  a
   655  ----
   656  a:1
   657  
   658  get seq=3
   659  a
   660  ----
   661  a:2
   662  
   663  get seq=4
   664  a
   665  ----
   666  a:3
   667  
   668  iter seq=2
   669  first
   670  seek-ge a
   671  seek-ge b
   672  last
   673  seek-lt a
   674  seek-lt b
   675  ----
   676  a:1
   677  a:1
   678  .
   679  a:1
   680  .
   681  a:1
   682  
   683  iter seq=3
   684  first
   685  seek-ge a
   686  seek-ge b
   687  last
   688  seek-lt a
   689  seek-lt b
   690  ----
   691  a:2
   692  a:2
   693  .
   694  a:2
   695  .
   696  a:2
   697  
   698  iter seq=4
   699  first
   700  seek-ge a
   701  seek-ge b
   702  last
   703  seek-lt a
   704  seek-lt b
   705  ----
   706  a:3
   707  a:3
   708  .
   709  a:3
   710  .
   711  a:3
   712  
   713  define
   714  L1
   715    a.MERGE.3:3
   716  L1
   717    a.MERGE.2:2
   718  L1
   719    a.MERGE.1:1
   720  ----
   721  mem: 1
   722  1:
   723    000004:[a#3,MERGE-a#3,MERGE]
   724    000005:[a#2,MERGE-a#2,MERGE]
   725    000006:[a#1,MERGE-a#1,MERGE]
   726  
   727  get seq=1
   728  a
   729  ----
   730  a: bitable: not found
   731  
   732  get seq=2
   733  a
   734  ----
   735  a:1
   736  
   737  get seq=3
   738  a
   739  ----
   740  a:12
   741  
   742  get seq=4
   743  a
   744  ----
   745  a:123
   746  
   747  iter seq=2
   748  first
   749  seek-ge a
   750  seek-ge b
   751  last
   752  seek-lt a
   753  seek-lt b
   754  ----
   755  a:1
   756  a:1
   757  .
   758  a:1
   759  .
   760  a:1
   761  
   762  iter seq=3
   763  first
   764  seek-ge a
   765  seek-ge b
   766  last
   767  seek-lt a
   768  seek-lt b
   769  ----
   770  a:12
   771  a:12
   772  .
   773  a:12
   774  .
   775  a:12
   776  
   777  iter seq=4
   778  first
   779  seek-ge a
   780  seek-ge b
   781  last
   782  seek-lt a
   783  seek-lt b
   784  ----
   785  a:123
   786  a:123
   787  .
   788  a:123
   789  .
   790  a:123
   791  
   792  # User-key spread across multiple levels.
   793  
   794  define
   795  mem
   796    a.MERGE.4:4
   797  L1
   798    a.MERGE.3:3
   799  L2
   800    a.MERGE.2:2
   801  L3
   802    a.MERGE.1:1
   803  ----
   804  mem: 1
   805  1:
   806    000004:[a#3,MERGE-a#3,MERGE]
   807  2:
   808    000005:[a#2,MERGE-a#2,MERGE]
   809  3:
   810    000006:[a#1,MERGE-a#1,MERGE]
   811  
   812  get seq=1
   813  a
   814  ----
   815  a: bitable: not found
   816  
   817  get seq=2
   818  a
   819  ----
   820  a:1
   821  
   822  get seq=3
   823  a
   824  ----
   825  a:12
   826  
   827  get seq=4
   828  a
   829  ----
   830  a:123
   831  
   832  get seq=5
   833  a
   834  ----
   835  a:1234
   836  
   837  iter seq=2
   838  first
   839  seek-ge a
   840  seek-ge b
   841  last
   842  seek-lt a
   843  seek-lt b
   844  ----
   845  a:1
   846  a:1
   847  .
   848  a:1
   849  .
   850  a:1
   851  
   852  iter seq=3
   853  first
   854  seek-ge a
   855  seek-ge b
   856  last
   857  seek-lt a
   858  seek-lt b
   859  ----
   860  a:12
   861  a:12
   862  .
   863  a:12
   864  .
   865  a:12
   866  
   867  iter seq=4
   868  first
   869  seek-ge a
   870  seek-ge b
   871  last
   872  seek-lt a
   873  seek-lt b
   874  ----
   875  a:123
   876  a:123
   877  .
   878  a:123
   879  .
   880  a:123
   881  
   882  iter seq=5
   883  first
   884  seek-ge a
   885  seek-ge b
   886  last
   887  seek-lt a
   888  seek-lt b
   889  ----
   890  a:1234
   891  a:1234
   892  .
   893  a:1234
   894  .
   895  a:1234
   896  
   897  # Range deletions on multiple levels.
   898  define
   899  L0
   900    a.SET.4:4
   901    b.SET.4:4
   902    d.SET.4:4
   903    c.RANGEDEL.4:d
   904  L1
   905    a.SET.3:3
   906    d.SET.3:3
   907    b.RANGEDEL.3:d
   908  L2
   909    d.SET.2:2
   910    a.RANGEDEL.2:d
   911  L3
   912    a.SET.1:1
   913    b.SET.1:1
   914    c.SET.1:1
   915    d.SET.1:1
   916  ----
   917  mem: 1
   918  0.0:
   919    000004:[a#4,SET-d#4,SET]
   920  1:
   921    000005:[a#3,SET-d#3,SET]
   922  2:
   923    000006:[a#2,RANGEDEL-d#2,SET]
   924  3:
   925    000007:[a#1,SET-d#1,SET]
   926  
   927  get seq=2
   928  a
   929  b
   930  c
   931  d
   932  ----
   933  a:1
   934  b:1
   935  c:1
   936  d:1
   937  
   938  get seq=3
   939  a
   940  b
   941  c
   942  d
   943  ----
   944  a: bitable: not found
   945  b: bitable: not found
   946  c: bitable: not found
   947  d:2
   948  
   949  get seq=4
   950  a
   951  b
   952  c
   953  d
   954  ----
   955  a:3
   956  b: bitable: not found
   957  c: bitable: not found
   958  d:3
   959  
   960  get seq=5
   961  a
   962  b
   963  c
   964  d
   965  ----
   966  a:4
   967  b:4
   968  c: bitable: not found
   969  d:4
   970  
   971  iter seq=2
   972  first
   973  next
   974  next
   975  next
   976  last
   977  prev
   978  prev
   979  prev
   980  ----
   981  a:1
   982  b:1
   983  c:1
   984  d:1
   985  d:1
   986  c:1
   987  b:1
   988  a:1
   989  
   990  iter seq=3
   991  first
   992  last
   993  ----
   994  d:2
   995  d:2
   996  
   997  iter seq=4
   998  first
   999  next
  1000  last
  1001  prev
  1002  ----
  1003  a:3
  1004  d:3
  1005  d:3
  1006  a:3
  1007  
  1008  iter seq=5
  1009  first
  1010  next
  1011  next
  1012  last
  1013  prev
  1014  prev
  1015  ----
  1016  a:4
  1017  b:4
  1018  d:4
  1019  d:4
  1020  b:4
  1021  a:4
  1022  
  1023  # Range deletions spanning tables within a level.
  1024  
  1025  define
  1026  mem
  1027    a.SET.3:3
  1028    b.SET.3:3
  1029    c.SET.3:3
  1030    d.SET.3:3
  1031  L1
  1032    a.RANGEDEL.2:b
  1033  L1
  1034    b.RANGEDEL.2:c
  1035  L1
  1036    c.RANGEDEL.2:d
  1037  L2
  1038    a.SET.1:1
  1039    b.SET.1:1
  1040    c.SET.1:1
  1041    d.SET.1:1
  1042  ----
  1043  mem: 1
  1044  1:
  1045    000004:[a#2,RANGEDEL-b#72057594037927935,RANGEDEL]
  1046    000005:[b#2,RANGEDEL-c#72057594037927935,RANGEDEL]
  1047    000006:[c#2,RANGEDEL-d#72057594037927935,RANGEDEL]
  1048  2:
  1049    000007:[a#1,SET-d#1,SET]
  1050  
  1051  get seq=2
  1052  a
  1053  b
  1054  c
  1055  d
  1056  ----
  1057  a:1
  1058  b:1
  1059  c:1
  1060  d:1
  1061  
  1062  get seq=3
  1063  a
  1064  b
  1065  c
  1066  d
  1067  ----
  1068  a: bitable: not found
  1069  b: bitable: not found
  1070  c: bitable: not found
  1071  d:1
  1072  
  1073  get seq=4
  1074  a
  1075  b
  1076  c
  1077  d
  1078  ----
  1079  a:3
  1080  b:3
  1081  c:3
  1082  d:3
  1083  
  1084  iter seq=2
  1085  first
  1086  next
  1087  next
  1088  next
  1089  last
  1090  prev
  1091  prev
  1092  prev
  1093  ----
  1094  a:1
  1095  b:1
  1096  c:1
  1097  d:1
  1098  d:1
  1099  c:1
  1100  b:1
  1101  a:1
  1102  
  1103  iter seq=3
  1104  first
  1105  last
  1106  ----
  1107  d:1
  1108  d:1
  1109  
  1110  iter seq=4
  1111  first
  1112  next
  1113  next
  1114  next
  1115  last
  1116  prev
  1117  prev
  1118  prev
  1119  ----
  1120  a:3
  1121  b:3
  1122  c:3
  1123  d:3
  1124  d:3
  1125  c:3
  1126  b:3
  1127  a:3
  1128  
  1129  # Invalid LSM structure (range deletion at newer level covers newer
  1130  # write at an older level). This LSM structure is not generated
  1131  # naturally, but tested here to show the level-by-level nature of Get.
  1132  
  1133  define
  1134  L1
  1135    a.RANGEDEL.1:b
  1136  L2
  1137    a.SET.2:2
  1138  ----
  1139  mem: 1
  1140  1:
  1141    000004:[a#1,RANGEDEL-b#72057594037927935,RANGEDEL]
  1142  2:
  1143    000005:[a#2,SET-a#2,SET]
  1144  
  1145  get seq=3
  1146  a
  1147  ----
  1148  a: bitable: not found
  1149  
  1150  # A range tombstone straddles two SSTs. One is compacted to a lower level. Its
  1151  # keys that are newer than the range tombstone should not disappear.
  1152  #
  1153  # Uses a snapshot to prevent range tombstone from being elided when it gets
  1154  # compacted to the bottommost level.
  1155  
  1156  define target-file-sizes=(100, 1) snapshots=(1)
  1157  L0
  1158    a.RANGEDEL.1:e
  1159  L0
  1160    a.SET.2:v
  1161  L0
  1162    c.SET.3:v
  1163  ----
  1164  mem: 1
  1165  0.1:
  1166    000005:[a#2,SET-a#2,SET]
  1167    000006:[c#3,SET-c#3,SET]
  1168  0.0:
  1169    000004:[a#1,RANGEDEL-e#72057594037927935,RANGEDEL]
  1170  
  1171  compact a-e
  1172  ----
  1173  1:
  1174    000007:[a#2,SET-c#72057594037927935,RANGEDEL]
  1175    000008:[c#3,SET-e#72057594037927935,RANGEDEL]
  1176  
  1177  compact d-e
  1178  ----
  1179  1:
  1180    000007:[a#2,SET-c#72057594037927935,RANGEDEL]
  1181  2:
  1182    000008:[c#3,SET-e#72057594037927935,RANGEDEL]
  1183  
  1184  iter seq=4
  1185  seek-ge b
  1186  next
  1187  ----
  1188  c:v
  1189  .
  1190  
  1191  # Reverse the above test: compact the left file containing the split range
  1192  # tombstone downwards, and iterate from right to left.
  1193  
  1194  define target-file-sizes=(100, 1) snapshots=(1)
  1195  L0
  1196    a.RANGEDEL.1:e
  1197  L0
  1198    a.SET.2:v
  1199  L0
  1200    c.SET.3:v
  1201  ----
  1202  mem: 1
  1203  0.1:
  1204    000005:[a#2,SET-a#2,SET]
  1205    000006:[c#3,SET-c#3,SET]
  1206  0.0:
  1207    000004:[a#1,RANGEDEL-e#72057594037927935,RANGEDEL]
  1208  
  1209  compact a-e
  1210  ----
  1211  1:
  1212    000007:[a#2,SET-c#72057594037927935,RANGEDEL]
  1213    000008:[c#3,SET-e#72057594037927935,RANGEDEL]
  1214  
  1215  compact a-b
  1216  ----
  1217  1:
  1218    000008:[c#3,SET-e#72057594037927935,RANGEDEL]
  1219  2:
  1220    000007:[a#2,SET-c#72057594037927935,RANGEDEL]
  1221  
  1222  iter seq=4
  1223  seek-lt d
  1224  prev
  1225  prev
  1226  ----
  1227  c:v
  1228  a:v
  1229  .
  1230  
  1231  # A range tombstone straddles two sstables. One is compacted two
  1232  # levels lower. The other is compacted one level lower. The one that
  1233  # is compacted one level lower should not see its boundaries expand
  1234  # causing it to delete more keys. A snapshot is used to prevent range
  1235  # tombstone from being elided when it gets compacted to the bottommost
  1236  # level.
  1237  
  1238  define target-file-sizes=(100, 1) snapshots=(1)
  1239  L0
  1240    a.RANGEDEL.1:e
  1241  L0
  1242    a.SET.2:v
  1243  L0
  1244    c.SET.3:v
  1245  L2
  1246    d.SET.0:v
  1247  ----
  1248  mem: 1
  1249  0.1:
  1250    000005:[a#2,SET-a#2,SET]
  1251    000006:[c#3,SET-c#3,SET]
  1252  0.0:
  1253    000004:[a#1,RANGEDEL-e#72057594037927935,RANGEDEL]
  1254  2:
  1255    000007:[d#0,SET-d#0,SET]
  1256  
  1257  compact a-b
  1258  ----
  1259  1:
  1260    000008:[a#2,SET-c#72057594037927935,RANGEDEL]
  1261    000009:[c#3,SET-d#72057594037927935,RANGEDEL]
  1262    000010:[d#1,RANGEDEL-e#72057594037927935,RANGEDEL]
  1263  2:
  1264    000007:[d#0,SET-d#0,SET]
  1265  
  1266  compact d-e
  1267  ----
  1268  1:
  1269    000008:[a#2,SET-c#72057594037927935,RANGEDEL]
  1270    000009:[c#3,SET-d#72057594037927935,RANGEDEL]
  1271  3:
  1272    000011:[d#1,RANGEDEL-e#72057594037927935,RANGEDEL]
  1273  
  1274  get seq=4
  1275  c
  1276  ----
  1277  c:v
  1278  
  1279  compact a-b L1
  1280  ----
  1281  1:
  1282    000009:[c#3,SET-d#72057594037927935,RANGEDEL]
  1283  2:
  1284    000008:[a#2,SET-c#72057594037927935,RANGEDEL]
  1285  3:
  1286    000011:[d#1,RANGEDEL-e#72057594037927935,RANGEDEL]
  1287  
  1288  get seq=4
  1289  c
  1290  ----
  1291  c:v
  1292  
  1293  # A slight variation on the scenario above where a range tombstone is
  1294  # expanded past the boundaries of its "atomic compaction unit".
  1295  
  1296  define target-file-sizes=(100, 1) snapshots=(1)
  1297  L0
  1298    a.RANGEDEL.1:e
  1299  L0
  1300    a.SET.2:v
  1301  L0
  1302    c.SET.3:v
  1303  L0
  1304    f.SET.4:v
  1305  L2
  1306    d.SET.0:v
  1307  ----
  1308  mem: 1
  1309  0.1:
  1310    000005:[a#2,SET-a#2,SET]
  1311    000006:[c#3,SET-c#3,SET]
  1312  0.0:
  1313    000004:[a#1,RANGEDEL-e#72057594037927935,RANGEDEL]
  1314    000007:[f#4,SET-f#4,SET]
  1315  2:
  1316    000008:[d#0,SET-d#0,SET]
  1317  
  1318  compact a-b
  1319  ----
  1320  0.0:
  1321    000007:[f#4,SET-f#4,SET]
  1322  1:
  1323    000009:[a#2,SET-c#72057594037927935,RANGEDEL]
  1324    000010:[c#3,SET-d#72057594037927935,RANGEDEL]
  1325    000011:[d#1,RANGEDEL-e#72057594037927935,RANGEDEL]
  1326  2:
  1327    000008:[d#0,SET-d#0,SET]
  1328  
  1329  compact d-e
  1330  ----
  1331  0.0:
  1332    000007:[f#4,SET-f#4,SET]
  1333  1:
  1334    000009:[a#2,SET-c#72057594037927935,RANGEDEL]
  1335    000010:[c#3,SET-d#72057594037927935,RANGEDEL]
  1336  3:
  1337    000012:[d#1,RANGEDEL-e#72057594037927935,RANGEDEL]
  1338  
  1339  get seq=4
  1340  c
  1341  ----
  1342  c:v
  1343  
  1344  compact f-f L0
  1345  ----
  1346  1:
  1347    000009:[a#2,SET-c#72057594037927935,RANGEDEL]
  1348    000010:[c#3,SET-d#72057594037927935,RANGEDEL]
  1349    000007:[f#4,SET-f#4,SET]
  1350  3:
  1351    000012:[d#1,RANGEDEL-e#72057594037927935,RANGEDEL]
  1352  
  1353  compact a-f L1
  1354  ----
  1355  2:
  1356    000013:[a#2,SET-c#72057594037927935,RANGEDEL]
  1357    000014:[c#3,SET-d#72057594037927935,RANGEDEL]
  1358    000015:[f#4,SET-f#4,SET]
  1359  3:
  1360    000012:[d#1,RANGEDEL-e#72057594037927935,RANGEDEL]
  1361  
  1362  get seq=4
  1363  c
  1364  ----
  1365  c:v
  1366  
  1367  define
  1368  L0
  1369    a.RANGEDEL.3:f
  1370  L0
  1371    a.RANGEDEL.4:c
  1372    c.RANGEDEL.4:f
  1373  L1
  1374    b.RANGEDEL.2:e
  1375  L2
  1376    c.RANGEDEL.1:d
  1377  ----
  1378  mem: 1
  1379  0.1:
  1380    000005:[a#4,RANGEDEL-f#72057594037927935,RANGEDEL]
  1381  0.0:
  1382    000004:[a#3,RANGEDEL-f#72057594037927935,RANGEDEL]
  1383  1:
  1384    000006:[b#2,RANGEDEL-e#72057594037927935,RANGEDEL]
  1385  2:
  1386    000007:[c#1,RANGEDEL-d#72057594037927935,RANGEDEL]
  1387  
  1388  wait-pending-table-stats
  1389  000007
  1390  ----
  1391  num-entries: 1
  1392  num-deletions: 1
  1393  num-range-key-sets: 0
  1394  point-deletions-bytes-estimate: 0
  1395  range-deletions-bytes-estimate: 0
  1396  
  1397  wait-pending-table-stats
  1398  000006
  1399  ----
  1400  num-entries: 1
  1401  num-deletions: 1
  1402  num-range-key-sets: 0
  1403  point-deletions-bytes-estimate: 0
  1404  range-deletions-bytes-estimate: 836
  1405  
  1406  wait-pending-table-stats
  1407  000004
  1408  ----
  1409  num-entries: 1
  1410  num-deletions: 1
  1411  num-range-key-sets: 0
  1412  point-deletions-bytes-estimate: 0
  1413  range-deletions-bytes-estimate: 1672
  1414  
  1415  wait-pending-table-stats
  1416  000005
  1417  ----
  1418  num-entries: 2
  1419  num-deletions: 2
  1420  num-range-key-sets: 0
  1421  point-deletions-bytes-estimate: 0
  1422  range-deletions-bytes-estimate: 1672
  1423  
  1424  
  1425  # Range deletions with varying overlap.
  1426  define
  1427  L0
  1428    a.SET.4:4
  1429    b.SET.4:4
  1430    d.SET.4:4
  1431    c.RANGEDEL.4:d
  1432  L1
  1433    a.SET.3:3
  1434    d.SET.3:3
  1435    b.RANGEDEL.3:d
  1436  L2
  1437    d.SET.2:2
  1438    a.RANGEDEL.2:d
  1439  L3
  1440    a.SET.1:1
  1441    b.SET.1:1
  1442    c.SET.1:1
  1443    d.SET.1:1
  1444  ----
  1445  mem: 1
  1446  0.0:
  1447    000004:[a#4,SET-d#4,SET]
  1448  1:
  1449    000005:[a#3,SET-d#3,SET]
  1450  2:
  1451    000006:[a#2,RANGEDEL-d#2,SET]
  1452  3:
  1453    000007:[a#1,SET-d#1,SET]
  1454  
  1455  wait-pending-table-stats
  1456  000007
  1457  ----
  1458  num-entries: 4
  1459  num-deletions: 0
  1460  num-range-key-sets: 0
  1461  point-deletions-bytes-estimate: 0
  1462  range-deletions-bytes-estimate: 0
  1463  
  1464  wait-pending-table-stats
  1465  000006
  1466  ----
  1467  num-entries: 2
  1468  num-deletions: 1
  1469  num-range-key-sets: 0
  1470  point-deletions-bytes-estimate: 0
  1471  range-deletions-bytes-estimate: 42
  1472  
  1473  wait-pending-table-stats
  1474  000005
  1475  ----
  1476  num-entries: 3
  1477  num-deletions: 1
  1478  num-range-key-sets: 0
  1479  point-deletions-bytes-estimate: 0
  1480  range-deletions-bytes-estimate: 68
  1481  
  1482  wait-pending-table-stats
  1483  000004
  1484  ----
  1485  num-entries: 4
  1486  num-deletions: 1
  1487  num-range-key-sets: 0
  1488  point-deletions-bytes-estimate: 0
  1489  range-deletions-bytes-estimate: 100
  1490  
  1491  # Multiple Range deletions in a table.
  1492  define
  1493  L0
  1494    a.RANGEDEL.6:d
  1495    e.RANGEDEL.6:z
  1496  L0
  1497    a.RANGEDEL.5:d
  1498  L0
  1499    e.RANGEDEL.4:z
  1500  L1
  1501    a.SET.2:1
  1502    b.SET.2:1
  1503    c.SET.2:1
  1504  L2
  1505    x.SET.1:2
  1506  ----
  1507  mem: 1
  1508  0.1:
  1509    000004:[a#6,RANGEDEL-z#72057594037927935,RANGEDEL]
  1510  0.0:
  1511    000005:[a#5,RANGEDEL-d#72057594037927935,RANGEDEL]
  1512    000006:[e#4,RANGEDEL-z#72057594037927935,RANGEDEL]
  1513  1:
  1514    000007:[a#2,SET-c#2,SET]
  1515  2:
  1516    000008:[x#1,SET-x#1,SET]
  1517  
  1518  wait-pending-table-stats
  1519  000005
  1520  ----
  1521  num-entries: 1
  1522  num-deletions: 1
  1523  num-range-key-sets: 0
  1524  point-deletions-bytes-estimate: 0
  1525  range-deletions-bytes-estimate: 782
  1526  
  1527  wait-pending-table-stats
  1528  000006
  1529  ----
  1530  num-entries: 1
  1531  num-deletions: 1
  1532  num-range-key-sets: 0
  1533  point-deletions-bytes-estimate: 0
  1534  range-deletions-bytes-estimate: 771
  1535  
  1536  wait-pending-table-stats
  1537  000004
  1538  ----
  1539  num-entries: 2
  1540  num-deletions: 2
  1541  num-range-key-sets: 0
  1542  point-deletions-bytes-estimate: 0
  1543  range-deletions-bytes-estimate: 1553