github.com/cockroachdb/pebble@v0.0.0-20231214172447-ab4952c5f87b/testdata/level_checker (about)

     1  # Format for define command:
     2  # Levels are ordered from higher to lower, and each new level starts with an L
     3  # Each level is defined using an even number of lines where every pair of lines represents
     4  # a file. The files within a level are ordered from smaller to larger keys.
     5  # Each file is defined using: the first line specifies the smallest and largest internal
     6  # keys and the second line the point key-value pairs in the sstable in order. The rangedel
     7  # key-value pairs should also be in increasing order relative to the other rangedel pairs.
     8  # The largest file key can take the form of <userkey>.RANGEDEL.72057594037927935, which
     9  # represents the range deletion sentinel.
    10  #
    11  # Many of the correct case definitions are borrowed from merging_iter since it defines
    12  # some tricky configurations.
    13  
    14  # The untruncated range tombstone at the higher level does not overlap with the lower level once
    15  # we consider the file boundaries, which is why its lower sequence number is ok.
    16  define
    17  L
    18  a.SET.30 e.RANGEDEL.72057594037927935
    19  a.SET.30:30 c.SET.27:27 a.RANGEDEL.8:f
    20  L
    21  e.SET.10 g.SET.20
    22  e.SET.10:10 g.SET.20:20 e.RANGEDEL.8:f
    23  ----
    24  Level 1
    25    file 0: [a#30,1-e#72057594037927935,15]
    26  Level 2
    27    file 0: [e#10,1-g#20,1]
    28  
    29  check
    30  ----
    31  
    32  # The untruncated range tombstone at the higher level does not overlap with the g point at the
    33  # lower level once we consider the file boundaries, which is why its lower sequence number is ok.
    34  define
    35  L
    36  a.SET.15 f.SET.16
    37  a.SET.15:15 c.SET.13:13 f.SET.16:16 a.RANGEDEL.12:h
    38  L
    39  e.SET.10 g.SET.15
    40  e.SET.10:10 g.SET.15:15
    41  ----
    42  Level 1
    43    file 0: [a#15,1-f#16,1]
    44  Level 2
    45    file 0: [e#10,1-g#15,1]
    46  
    47  check
    48  ----
    49  
    50  # The untruncated range tombstones in both levels do not overlap once we consider the file
    51  # boundaries (which are non-overlapping).
    52  define
    53  L
    54  c.SET.30 f.RANGEDEL.0
    55  c.SET.30:30 d.SET.27:27 a.RANGEDEL.8:f
    56  L
    57  a.SET.10 c.RANGEDEL.72057594037927935
    58  a.SET.10:10 b.SET.12:12 a.RANGEDEL.8:f
    59  ----
    60  Level 1
    61    file 0: [c#30,1-f#0,15]
    62  Level 2
    63    file 0: [a#10,1-c#72057594037927935,15]
    64  
    65  check
    66  ----
    67  
    68  # The range tombstone in the higher level does not overlap with the b point in the lower level,
    69  # which has a higher sequence number, when we consider the file boundaries.
    70  define
    71  L
    72  c.SET.15 g.SET.16
    73  c.SET.15:15 f.SET.13:13 g.SET.16:16 a.RANGEDEL.12:h
    74  L
    75  b.SET.14 d.SET.10
    76  b.SET.14:14 d.SET.10:10
    77  ----
    78  Level 1
    79    file 0: [c#15,1-g#16,1]
    80  Level 2
    81    file 0: [b#14,1-d#10,1]
    82  
    83  check
    84  ----
    85  
    86  # The two files do not overlap despite the seeming overlap of the range tombstones.
    87  define
    88  L
    89  a.SET.30 e.RANGEDEL.72057594037927935
    90  a.SET.30:30 c.SET.27:27 a.RANGEDEL.8:g
    91  L
    92  e.SET.10 g.SET.20
    93  e.SET.10:10 g.SET.20:20 e.RANGEDEL.8:g
    94  ----
    95  Level 1
    96    file 0: [a#30,1-e#72057594037927935,15]
    97  Level 2
    98    file 0: [e#10,1-g#20,1]
    99  
   100  check
   101  ----
   102  
   103  define
   104  L
   105  a.SET.30 e.RANGEDEL.72057594037927935
   106  a.SET.30:30 c.SET.27:27 a.RANGEDEL.8:g
   107  L
   108  a.SET.10 g.SET.20
   109  a.SET.10:10 c.SET.28:28 g.SET.20:20
   110  ----
   111  Level 1
   112    file 0: [a#30,1-e#72057594037927935,15]
   113  Level 2
   114    file 0: [a#10,1-g#20,1]
   115  
   116  check
   117  ----
   118  found InternalKey c#27,SET in L1: fileNum=000010 and InternalKey c#28,SET in L2: fileNum=000011
   119  
   120  # The sentinel key for the RANGEDEL should not violate g having a higher seq num at a
   121  # lower level.
   122  define
   123  L
   124  a.SET.30 g.RANGEDEL.72057594037927935
   125  a.SET.30:30 c.SET.27:27 a.RANGEDEL.8:g
   126  L
   127  g.SET.10 j.SET.20
   128  g.SET.10:10 j.SET.20:20
   129  ----
   130  Level 1
   131    file 0: [a#30,1-g#72057594037927935,15]
   132  Level 2
   133    file 0: [g#10,1-j#20,1]
   134  
   135  check
   136  ----
   137  
   138  define
   139  L
   140  a.SET.30 g.SET.8
   141  a.SET.30:30 c.SET.27:27 a.RANGEDEL.8:g g.SET.8:8
   142  L
   143  g.SET.10 j.SET.20
   144  g.SET.10:10 j.SET.20:20
   145  ----
   146  Level 1
   147    file 0: [a#30,1-g#8,1]
   148  Level 2
   149    file 0: [g#10,1-j#20,1]
   150  
   151  check
   152  ----
   153  found InternalKey g#8,SET in L1: fileNum=000014 and InternalKey g#10,SET in L2: fileNum=000015
   154  
   155  define
   156  L
   157  a.SET.30 g.SET.30
   158  a.SET.30:30 c.SET.8:8 g.SET.30:30
   159  L
   160  a.SET.10 j.SET.20
   161  a.SET.10:10 j.SET.20:20 b.RANGEDEL.10:g
   162  ----
   163  Level 1
   164    file 0: [a#30,1-g#30,1]
   165  Level 2
   166    file 0: [a#10,1-j#20,1]
   167  
   168  check
   169  ----
   170  tombstone b-g:{(#10,RANGEDEL)} in L2: fileNum=000017 deletes key c#8,SET in L1: fileNum=000016
   171  
   172  define
   173  L
   174  a.RANGEDEL.8 c.RANGEDEL.72057594037927935
   175  a.RANGEDEL.8:c
   176  L
   177  a.RANGEDEL.6 d.RANGEDEL.72057594037927935
   178  a.RANGEDEL.6:d b.RANGEDEL.10:c
   179  ----
   180  Level 1
   181    file 0: [a#8,15-c#72057594037927935,15]
   182  Level 2
   183    file 0: [a#6,15-d#72057594037927935,15]
   184  
   185  check
   186  ----
   187  encountered tombstone b-c:{(#8,RANGEDEL)} in L1: fileNum=000018 that has a lower seqnum than the same tombstone in L2: fileNum=000019
   188  
   189  # Check incorrect ordering of point keys in an sstable.
   190  define disable-key-order-checks
   191  L
   192  a.SET.3 e.SET.4
   193  e.SET.4:e a.SET.3:a
   194  L
   195  d.SET.1 f.SET.2
   196  d.SET.1:d f.SET.2:f
   197  ----
   198  Level 1
   199    file 0: [a#3,1-e#4,1]
   200  Level 2
   201    file 0: [d#1,1-f#2,1]
   202  
   203  check
   204  ----
   205  out of order keys e#4,SET >= a#3,SET in L1: fileNum=000020
   206  
   207  # Check successive sstables on a level are ordered.
   208  define disable-key-order-checks
   209  L
   210  a.SET.1 b.SET.2
   211  a.SET.1:a b.SET.2:b
   212  b.SET.3 c.SET.4
   213  b.SET.3:b c.SET.4:c
   214  ----
   215  Level 1
   216    file 0: [a#1,1-b#2,1]
   217    file 1: [b#3,1-c#4,1]
   218  
   219  check
   220  ----
   221  out of order keys b#2,SET >= b#3,SET in L1: fileNum=000023
   222  
   223  # Check range delete keys are fragmented and ordered in an sstable having
   224  # rangeDelV2 formatted range delete blocks.
   225  
   226  # Case 1: Fragmented but not ordered.
   227  define write-unfragmented disable-key-order-checks
   228  L
   229  a.RANGEDEL.1 g.RANGEDEL.72057594037927935
   230  d.RANGEDEL.2:e d.RANGEDEL.1:e f.RANGEDEL.3:g a.RANGEDEL.4:b
   231  ----
   232  Level 1
   233    file 0: [a#1,15-g#72057594037927935,15]
   234  
   235  check
   236  ----
   237  unordered or unfragmented range delete tombstones f-g:{(#3,RANGEDEL)}, a-b:{(#4,RANGEDEL)} in L1: fileNum=000024
   238  
   239  # Case 2: Ordered but not fragmented.
   240  define write-unfragmented disable-key-order-checks
   241  L
   242  a.RANGEDEL.1 d.RANGEDEL.72057594037927935
   243  a.RANGEDEL.1:d b.RANGEDEL.2:c
   244  ----
   245  Level 1
   246    file 0: [a#1,15-d#72057594037927935,15]
   247  
   248  check
   249  ----
   250  unordered or unfragmented range delete tombstones a-d:{(#1,RANGEDEL)}, b-c:{(#2,RANGEDEL)} in L1: fileNum=000025
   251  
   252  # Case 3: Verify check is done before truncation.
   253  define write-unfragmented disable-key-order-checks
   254  L
   255  a.RANGEDEL.1 b.RANGEDEL.72057594037927935
   256  a.RANGEDEL.1:z d.RANGEDEL.2:e
   257  ----
   258  Level 1
   259    file 0: [a#1,15-b#72057594037927935,15]
   260  
   261  check
   262  ----
   263  unordered or unfragmented range delete tombstones a-z:{(#1,RANGEDEL)}, d-e:{(#2,RANGEDEL)} in L1: fileNum=000026
   264  
   265  # Merge record processing.
   266  
   267  # Case 1: Latest versions of a key are MERGE records and processing one of
   268  # them fails.
   269  define
   270  L
   271  a.MERGE.10 a.MERGE.9
   272  a.MERGE.10:10 a.MERGE.9:fail-merge
   273  ----
   274  Level 1
   275    file 0: [a#10,2-a#9,2]
   276  
   277  check merger=fail-merger
   278  ----
   279  merge processing error on key a#9,MERGE in L1: fileNum=000027: merge failed
   280  
   281  # Case 2: Last checked key is a MERGE record.
   282  define
   283  L
   284  a.MERGE.10 a.MERGE.9
   285  a.MERGE.10:10 a.MERGE.9:fail-finish
   286  ----
   287  Level 1
   288    file 0: [a#10,2-a#9,2]
   289  
   290  check merger=fail-merger
   291  ----
   292  merge processing error on key a#9,MERGE in L1: fileNum=000028: finish failed
   293  
   294  # Case 3: MERGE records succeeded by newer versions of a key are also
   295  # processed.
   296  define
   297  L
   298  a.MERGE.10 a.SINGLEDEL.3
   299  a.MERGE.10:10 a.MERGE.9:9 a.SET.8:8 a.MERGE.7:7 a.MERGE.6:6 a.DEL.5: a.MERGE.4:fail-finish a.SINGLEDEL.3:
   300  ----
   301  Level 1
   302    file 0: [a#10,2-a#3,7]
   303  
   304  check merger=fail-merger
   305  ----
   306  merge processing error on key a#3,SINGLEDEL in L1: fileNum=000029: finish failed
   307  
   308  # Case 4: Finish processing on key change.
   309  define
   310  L
   311  a.MERGE.10 b.SET.11
   312  a.MERGE.10:10 a.MERGE.9:fail-finish b.SET.11:11
   313  ----
   314  Level 1
   315    file 0: [a#10,2-b#11,1]
   316  
   317  check merger=fail-merger
   318  ----
   319  merge processing error on key b#11,SET in L1: fileNum=000030: finish failed
   320  
   321  # Case 5: SET finishes MERGE record processing.
   322  define
   323  L
   324  a.MERGE.10 a.SET.9
   325  a.MERGE.10:10 a.SET.9:fail-finish
   326  ----
   327  Level 1
   328    file 0: [a#10,2-a#9,1]
   329  
   330  check merger=fail-merger
   331  ----
   332  merge processing error on key a#9,SET in L1: fileNum=000031: finish failed
   333  
   334  # Case 6: DEL finishes MERGE record processing.
   335  define
   336  L
   337  a.MERGE.10 a.DEL.9
   338  a.MERGE.10:fail-finish a.DEL.9:
   339  ----
   340  Level 1
   341    file 0: [a#10,2-a#9,0]
   342  
   343  check merger=fail-merger
   344  ----
   345  merge processing error on key a#9,DEL in L1: fileNum=000032: finish failed
   346  
   347  # Case 7: SINGLEDEL finishes MERGE record processing.
   348  define
   349  L
   350  a.MERGE.10 a.SINGLEDEL.9
   351  a.MERGE.10:fail-finish a.SINGLEDEL.9:
   352  ----
   353  Level 1
   354    file 0: [a#10,2-a#9,7]
   355  
   356  check merger=fail-merger
   357  ----
   358  merge processing error on key a#9,SINGLEDEL in L1: fileNum=000033: finish failed