github.com/cockroachdb/pebble@v0.0.0-20231214172447-ab4952c5f87b/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