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

     1  build
     2  a.SET.1:a
     3  ----
     4  point:    [a#1,1-a#1,1]
     5  seqnums:  [1-1]
     6  
     7  scan
     8  ----
     9  a#1,1:a
    10  
    11  scan-range-del
    12  ----
    13  
    14  scan-range-key
    15  ----
    16  
    17  build props=(deletions,deleted)
    18  a.SET.1:a
    19  b.DEL.2:
    20  c.MERGE.3:c
    21  d.RANGEDEL.4:e
    22  f.SET.5:f
    23  g.DEL.6:
    24  h.MERGE.7:h
    25  i.RANGEDEL.8:j
    26  rangekey: j-k:{(#9,RANGEKEYDEL)}
    27  rangekey: k-l:{(#10,RANGEKEYUNSET,@t5)}
    28  rangekey: l-m:{(#11,RANGEKEYSET,@t10,foo)}
    29  ----
    30  point:    [a#1,1-h#7,2]
    31  rangedel: [d#4,15-j#72057594037927935,15]
    32  rangekey: [j#9,19-m#72057594037927935,21]
    33  seqnums:  [1-11]
    34  props "deletions":
    35    rocksdb.num.range-deletions: 2
    36  props "deleted":
    37    rocksdb.deleted.keys: 4
    38  
    39  
    40  build props=(deletions,deleted)
    41  a.SET.1:a
    42  b.DEL.2:
    43  c.MERGE.3:c
    44  d.SINGLEDEL.4:
    45  e.SINGLEDEL.5:
    46  f.SET.6:f
    47  g.DEL.7:
    48  h.SINGLEDEL.8:
    49  rangekey: j-k:{(#9,RANGEKEYDEL)}
    50  rangekey: k-l:{(#10,RANGEKEYUNSET,@t5)}
    51  rangekey: l-m:{(#11,RANGEKEYSET,@t10,foo)}
    52  ----
    53  point:    [a#1,1-h#8,7]
    54  rangekey: [j#9,19-m#72057594037927935,21]
    55  seqnums:  [1-11]
    56  props "deletions":
    57    rocksdb.num.range-deletions: 0
    58  props "deleted":
    59    rocksdb.deleted.keys: 5
    60  
    61  
    62  build
    63  a.SET.1:a
    64  b.DEL.2:
    65  c.MERGE.3:c
    66  d.RANGEDEL.4:e
    67  f.SET.5:f
    68  g.DEL.6:
    69  h.MERGE.7:h
    70  i.RANGEDEL.8:j
    71  ----
    72  point:    [a#1,1-h#7,2]
    73  rangedel: [d#4,15-j#72057594037927935,15]
    74  seqnums:  [1-8]
    75  
    76  scan
    77  ----
    78  a#1,1:a
    79  b#2,0:
    80  c#3,2:c
    81  f#5,1:f
    82  g#6,0:
    83  h#7,2:h
    84  
    85  scan-range-del
    86  ----
    87  d-e:{(#4,RANGEDEL)}
    88  i-j:{(#8,RANGEDEL)}
    89  
    90  # 3: a-----------m
    91  # 2:      f------------s
    92  # 1:          j---------------z
    93  
    94  build
    95  a.RANGEDEL.3:m
    96  f.RANGEDEL.2:s
    97  j.RANGEDEL.1:z
    98  ----
    99  rangedel: [a#3,15-z#72057594037927935,15]
   100  seqnums:  [1-3]
   101  
   102  scan
   103  ----
   104  
   105  scan-range-del
   106  ----
   107  a-f:{(#3,RANGEDEL)}
   108  f-j:{(#3,RANGEDEL) (#2,RANGEDEL)}
   109  j-m:{(#3,RANGEDEL) (#2,RANGEDEL) (#1,RANGEDEL)}
   110  m-s:{(#2,RANGEDEL) (#1,RANGEDEL)}
   111  s-z:{(#1,RANGEDEL)}
   112  
   113  scan-range-key
   114  ----
   115  
   116  # The range tombstone upper bound is exclusive, so a point operation
   117  # on that same key will be the actual boundary.
   118  
   119  build
   120  a.RANGEDEL.3:b
   121  b.SET.4:c
   122  ----
   123  point:    [b#4,1-b#4,1]
   124  rangedel: [a#3,15-b#72057594037927935,15]
   125  seqnums:  [3-4]
   126  
   127  build
   128  a.RANGEDEL.3:b
   129  b.SET.2:c
   130  ----
   131  point:    [b#2,1-b#2,1]
   132  rangedel: [a#3,15-b#72057594037927935,15]
   133  seqnums:  [2-3]
   134  
   135  build
   136  a.RANGEDEL.3:c
   137  b.SET.2:c
   138  ----
   139  point:    [b#2,1-b#2,1]
   140  rangedel: [a#3,15-c#72057594037927935,15]
   141  seqnums:  [2-3]
   142  
   143  # Keys must be added in order.
   144  
   145  build
   146  a.SET.1:b
   147  a.SET.2:c
   148  ----
   149  pebble: keys must be added in strictly increasing order: a#1,SET, a#2,SET
   150  
   151  build
   152  b.SET.1:a
   153  a.SET.2:b
   154  ----
   155  pebble: keys must be added in strictly increasing order: b#1,SET, a#2,SET
   156  
   157  build
   158  b.RANGEDEL.1:c
   159  a.RANGEDEL.2:b
   160  ----
   161  pebble: keys must be added in order: b > a
   162  
   163  build-raw
   164  .RANGEDEL.1:b
   165  ----
   166  rangedel: [#1,15-b#72057594037927935,15]
   167  seqnums:  [1-1]
   168  
   169  build-raw
   170  a.RANGEDEL.1:c
   171  a.RANGEDEL.2:c
   172  ----
   173  pebble: keys must be added in strictly increasing order: a#1,RANGEDEL, a#2,RANGEDEL
   174  
   175  build-raw
   176  a.RANGEDEL.1:c
   177  b.RANGEDEL.2:d
   178  ----
   179  pebble: overlapping tombstones must be fragmented: a-c:{(#1,RANGEDEL)} vs b-d:{(#2,RANGEDEL)}
   180  
   181  build-raw
   182  a.RANGEDEL.2:c
   183  a.RANGEDEL.1:d
   184  ----
   185  pebble: overlapping tombstones must be fragmented: a-c:{(#2,RANGEDEL)} vs a-d:{(#1,RANGEDEL)}
   186  
   187  build-raw
   188  a.RANGEDEL.1:c
   189  c.RANGEDEL.2:d
   190  ----
   191  rangedel: [a#1,15-d#72057594037927935,15]
   192  seqnums:  [1-2]
   193  
   194  build-raw
   195  rangekey: a-b:{(#1,RANGEKEYSET,@t10,foo)}
   196  rangekey: a-b:{(#2,RANGEKEYSET,@t10,foo)}
   197  ----
   198  rangekey: [a#2,21-b#72057594037927935,21]
   199  seqnums:  [1-2]
   200  
   201  build-raw
   202  rangekey: b-c:{(#2,RANGEKEYSET,@t10,foo)}
   203  rangekey: a-b:{(#1,RANGEKEYSET,@t10,foo)}
   204  ----
   205  pebble: spans must be added in order: b > a
   206  
   207  build-raw
   208  a.RANGEKEYDEL.1:c
   209  b.RANGEKEYDEL.2:d
   210  ----
   211  pebble: overlapping range keys must be fragmented: a#1,RANGEKEYDEL, b#2,RANGEKEYDEL
   212  
   213  build-raw
   214  a.RANGEKEYDEL.2:c
   215  a.RANGEKEYDEL.1:d
   216  ----
   217  pebble: overlapping range keys must be fragmented: a#2,RANGEKEYDEL, a#1,RANGEKEYDEL
   218  
   219  build-raw
   220  rangekey: a-c:{(#1,RANGEKEYSET,@t10,foo)}
   221  rangekey: c-d:{(#2,RANGEKEYSET,@t10,foo)}
   222  ----
   223  rangekey: [a#1,21-d#72057594037927935,21]
   224  seqnums:  [1-2]
   225  
   226  # Range keys may have perfectly aligned spans (including sequence numbers),
   227  # though the key kinds must be ordered (descending).
   228  
   229  build-raw
   230  a.RANGEKEYDEL.1:b
   231  a.RANGEKEYDEL.1:b
   232  ----
   233  pebble: range keys starts must be added in increasing order: a#1,RANGEKEYDEL, a#1,RANGEKEYDEL
   234  
   235  build-raw
   236  rangekey: a-b:{(#1,RANGEKEYSET,@t10,foo) (#1,RANGEKEYUNSET,@t10) (#1,RANGEKEYDEL)}
   237  ----
   238  rangekey: [a#1,21-b#72057594037927935,19]
   239  seqnums:  [1-1]
   240  
   241  # The range-del-v1 format supports unfragmented and unsorted range
   242  # tombstones.
   243  
   244  build-raw range-del-v1
   245  a.RANGEDEL.1:c
   246  a.RANGEDEL.2:c
   247  ----
   248  rangedel: [a#2,15-c#72057594037927935,15]
   249  seqnums:  [1-2]
   250  
   251  scan-range-del
   252  ----
   253  a-c:{(#2,RANGEDEL) (#1,RANGEDEL)}
   254  
   255  build-raw range-del-v1
   256  a.RANGEDEL.1:c
   257  b.RANGEDEL.2:d
   258  ----
   259  rangedel: [a#1,15-d#72057594037927935,15]
   260  seqnums:  [1-2]
   261  
   262  scan-range-del
   263  ----
   264  a-b:{(#1,RANGEDEL)}
   265  b-c:{(#2,RANGEDEL) (#1,RANGEDEL)}
   266  c-d:{(#2,RANGEDEL)}
   267  
   268  build-raw range-del-v1
   269  a.RANGEDEL.2:c
   270  a.RANGEDEL.1:d
   271  ----
   272  rangedel: [a#2,15-d#72057594037927935,15]
   273  seqnums:  [1-2]
   274  
   275  scan-range-del
   276  ----
   277  a-c:{(#2,RANGEDEL) (#1,RANGEDEL)}
   278  c-d:{(#1,RANGEDEL)}
   279  
   280  # This matches an early test case, except we're passing overlapping
   281  # range tombstones to the sstable writer and requiring them to be
   282  # fragmented at read time.
   283  
   284  build-raw range-del-v1
   285  j.RANGEDEL.1:z
   286  f.RANGEDEL.2:s
   287  a.RANGEDEL.3:m
   288  ----
   289  rangedel: [a#3,15-z#72057594037927935,15]
   290  seqnums:  [1-3]
   291  
   292  scan-range-del
   293  ----
   294  a-f:{(#3,RANGEDEL)}
   295  f-j:{(#3,RANGEDEL) (#2,RANGEDEL)}
   296  j-m:{(#3,RANGEDEL) (#2,RANGEDEL) (#1,RANGEDEL)}
   297  m-s:{(#2,RANGEDEL) (#1,RANGEDEL)}
   298  s-z:{(#1,RANGEDEL)}
   299  
   300  # Setting a very small index-block-size results in a two-level index.
   301  
   302  build block-size=1 index-block-size=1
   303  a.SET.1:a
   304  b.SET.1:b
   305  c.SET.1:c
   306  ----
   307  point:    [a#1,1-c#1,1]
   308  seqnums:  [1-1]
   309  
   310  layout
   311  ----
   312           0  data (21)
   313          26  data (21)
   314          52  data (21)
   315          78  index (22)
   316         105  index (22)
   317         132  index (22)
   318         159  top-index (50)
   319         214  properties (580)
   320         799  meta-index (33)
   321         837  footer (53)
   322         890  EOF
   323  
   324  scan
   325  ----
   326  a#1,1:a
   327  b#1,1:b
   328  c#1,1:c
   329  
   330  # Enabling leveldb format disables the creation of a two-level index
   331  # (the input data here mirrors the test case above).
   332  
   333  build leveldb block-size=1 index-block-size=1
   334  a.SET.1:a
   335  b.SET.1:b
   336  c.SET.1:c
   337  ----
   338  point:    [a#1,1-c#1,1]
   339  seqnums:  [1-1]
   340  
   341  layout
   342  ----
   343           0  data (21)
   344          26  data (21)
   345          52  data (21)
   346          78  index (47)
   347         130  properties (678)
   348         813  meta-index (33)
   349         851  leveldb-footer (48)
   350         899  EOF
   351  
   352  # Range keys, if present, are shown in the layout.
   353  
   354  build
   355  rangekey: a-b:{(#3,RANGEKEYSET,@t3,foo)}
   356  rangekey: b-c:{(#2,RANGEKEYSET,@t2,bar)}
   357  rangekey: c-d:{(#1,RANGEKEYSET,@t1,baz)}
   358  ----
   359  rangekey: [a#3,21-d#72057594037927935,21]
   360  seqnums:  [1-3]
   361  
   362  layout
   363  ----
   364           0  data (8)
   365          13  index (21)
   366          39  range-key (82)
   367         126  properties (628)
   368         759  meta-index (57)
   369         821  footer (53)
   370         874  EOF