github.com/cockroachdb/pebble@v1.1.1-0.20240513155919-3622ade60459/testdata/scan_internal (about) 1 2 reset 3 ---- 4 5 batch commit 6 range-key-set a c @5 boop 7 range-key-set c e @5 beep 8 ---- 9 committed 2 keys 10 11 snapshot name=foo 12 ---- 13 14 batch commit 15 set b d 16 set e foo 17 ---- 18 committed 2 keys 19 20 file-only-snapshot efos1 21 b g 22 ---- 23 ok 24 25 # EFOS work with scan-internal. 26 27 scan-internal file-only-snapshot=efos1 28 ---- 29 a-c:{(#0,RANGEKEYSET,@5,boop)} 30 b#12,1 (d) 31 c-e:{(#0,RANGEKEYSET,@5,beep)} 32 e#13,1 (foo) 33 34 flush 35 ---- 36 37 scan-internal 38 ---- 39 a-c:{(#0,RANGEKEYSET,@5,boop)} 40 b#12,1 (d) 41 c-e:{(#0,RANGEKEYSET,@5,beep)} 42 e#13,1 (foo) 43 44 # Keys deleted by rangedels are elided. 45 46 batch commit 47 del-range b d 48 ---- 49 committed 1 keys 50 51 scan-internal 52 ---- 53 a-c:{(#0,RANGEKEYSET,@5,boop)} 54 b-d#14,RANGEDEL 55 c-e:{(#0,RANGEKEYSET,@5,beep)} 56 e#13,1 (foo) 57 58 flush 59 ---- 60 61 scan-internal 62 ---- 63 a-c:{(#0,RANGEKEYSET,@5,boop)} 64 b-d#14,RANGEDEL 65 c-e:{(#0,RANGEKEYSET,@5,beep)} 66 e#13,1 (foo) 67 68 # Snapshots work with scan internal. 69 70 scan-internal snapshot=foo 71 ---- 72 a-c:{(#0,RANGEKEYSET,@5,boop)} 73 c-e:{(#0,RANGEKEYSET,@5,beep)} 74 75 wait-for-file-only-snapshot efos1 76 ---- 77 ok 78 79 scan-internal file-only-snapshot=efos1 80 ---- 81 a-c:{(#0,RANGEKEYSET,@5,boop)} 82 b#12,1 (d) 83 c-e:{(#0,RANGEKEYSET,@5,beep)} 84 e#13,1 (foo) 85 86 # Force keys newer than the snapshot into a lower level, then try skip-shared 87 # iteration through it. This should return an error as it would expose keys 88 # newer than the snapshot in the shared sstable. 89 90 compact a-z 91 ---- 92 6: 93 000008:[a#10,RANGEKEYSET-e#13,SET] 94 95 lsm 96 ---- 97 6: 98 000008:[a#10,RANGEKEYSET-e#13,SET] 99 100 scan-internal lower=a upper=z skip-shared snapshot=foo 101 ---- 102 file 000008 contains keys newer than snapshot: pebble: cannot use skip-shared iteration due to non-shareable files in lower levels 103 104 # Range keys and range dels are truncated to [lower,upper). 105 106 scan-internal lower=bb upper=dd 107 ---- 108 bb-c:{(#0,RANGEKEYSET,@5,boop)} 109 bb-d#14,RANGEDEL 110 c-dd:{(#0,RANGEKEYSET,@5,beep)} 111 112 scan-internal lower=b upper=cc 113 ---- 114 b-c:{(#0,RANGEKEYSET,@5,boop)} 115 b-cc#14,RANGEDEL 116 c-cc:{(#0,RANGEKEYSET,@5,beep)} 117 118 reset 119 ---- 120 121 # Range key unsets and dels are allowed to delete keys they observe, however 122 # the unset/del must also be returned to the user. 123 124 batch commit 125 range-key-set a c @8 126 range-key-set b e @6 127 ---- 128 committed 2 keys 129 130 flush 131 ---- 132 133 compact a-z 134 ---- 135 6: 136 000005:[a#10,RANGEKEYSET-e#inf,RANGEKEYSET] 137 138 batch commit 139 range-key-unset b d @6 140 ---- 141 committed 1 keys 142 143 flush 144 ---- 145 146 batch commit 147 range-key-del a b 148 ---- 149 committed 1 keys 150 151 scan-internal 152 ---- 153 a-b:{(#0,RANGEKEYDEL)} 154 b-c:{(#0,RANGEKEYSET,@8) (#0,RANGEKEYUNSET,@6)} 155 c-d:{(#0,RANGEKEYUNSET,@6)} 156 d-e:{(#0,RANGEKEYSET,@6)} 157 158 flush 159 ---- 160 161 lsm 162 ---- 163 0.0: 164 000009:[a#13,RANGEKEYDEL-b#inf,RANGEKEYDEL] 165 000007:[b#12,RANGEKEYUNSET-d#inf,RANGEKEYUNSET] 166 6: 167 000005:[a#10,RANGEKEYSET-e#inf,RANGEKEYSET] 168 169 scan-internal 170 ---- 171 a-b:{(#0,RANGEKEYDEL)} 172 b-c:{(#0,RANGEKEYSET,@8) (#0,RANGEKEYUNSET,@6)} 173 c-d:{(#0,RANGEKEYUNSET,@6)} 174 d-e:{(#0,RANGEKEYSET,@6)} 175 176 batch ingest 177 range-key-set e f @3 178 range-key-unset f g @3 179 ---- 180 wrote 2 keys to batch "" 181 182 scan-internal 183 ---- 184 a-b:{(#0,RANGEKEYDEL)} 185 b-c:{(#0,RANGEKEYSET,@8) (#0,RANGEKEYUNSET,@6)} 186 c-d:{(#0,RANGEKEYUNSET,@6)} 187 d-e:{(#0,RANGEKEYSET,@6)} 188 e-f:{(#0,RANGEKEYSET,@3)} 189 f-g:{(#0,RANGEKEYUNSET,@3)} 190 191 batch ingest 192 range-key-unset e f @3 193 range-key-set f g @3 194 ---- 195 wrote 2 keys to batch "" 196 197 scan-internal 198 ---- 199 a-b:{(#0,RANGEKEYDEL)} 200 b-c:{(#0,RANGEKEYSET,@8) (#0,RANGEKEYUNSET,@6)} 201 c-d:{(#0,RANGEKEYUNSET,@6)} 202 d-e:{(#0,RANGEKEYSET,@6)} 203 e-f:{(#0,RANGEKEYUNSET,@3)} 204 f-g:{(#0,RANGEKEYSET,@3)} 205 206 # Range key masking is not exercised, with range keys that could mask point 207 # keys being returned alongside point keys. 208 209 reset 210 ---- 211 212 batch commit 213 set b@3 bar 214 ---- 215 committed 1 keys 216 217 batch commit 218 range-key-set a c @5 boop 219 range-key-set c e @5 beep 220 ---- 221 committed 2 keys 222 223 scan-internal 224 ---- 225 a-c:{(#0,RANGEKEYSET,@5,boop)} 226 b@3#10,1 (bar) 227 c-e:{(#0,RANGEKEYSET,@5,beep)} 228 229 # Point keys are collapsed in a way similar to a compaction. 230 231 reset 232 ---- 233 234 batch commit 235 set b@3 bar 236 set c foo 237 ---- 238 committed 2 keys 239 240 scan-internal 241 ---- 242 b@3#10,1 (bar) 243 c#11,1 (foo) 244 245 batch commit 246 set b@3 barfoo 247 ---- 248 committed 1 keys 249 250 scan-internal 251 ---- 252 b@3#12,1 (barfoo) 253 c#11,1 (foo) 254 255 batch commit 256 set b@3 baz 257 del c 258 set d@4 bar 259 ---- 260 committed 3 keys 261 262 scan-internal 263 ---- 264 b@3#13,1 (baz) 265 c#14,0 () 266 d@4#15,1 (bar) 267 268 batch commit 269 set f barbaz 270 ---- 271 committed 1 keys 272 273 scan-internal 274 ---- 275 b@3#13,1 (baz) 276 c#14,0 () 277 d@4#15,1 (bar) 278 f#16,1 (barbaz) 279 280 # Skip-shared iteration mode. Test truncation of range key at scan bounds. 281 282 reset 283 ---- 284 285 batch commit 286 set b@3 bar 287 ---- 288 committed 1 keys 289 290 batch commit 291 range-key-set a c @5 boop 292 del-range c e 293 ---- 294 committed 2 keys 295 296 flush 297 ---- 298 299 compact a-z 300 ---- 301 6: 302 000005:[a#11,RANGEKEYSET-e#inf,RANGEDEL] 303 304 batch commit 305 set f@8 baz 306 ---- 307 committed 1 keys 308 309 lsm 310 ---- 311 6: 312 000005:[a#11,RANGEKEYSET-e#inf,RANGEDEL] 313 314 scan-internal 315 ---- 316 a-c:{(#0,RANGEKEYSET,@5,boop)} 317 b@3#10,1 (bar) 318 c-e#12,RANGEDEL 319 f@8#13,1 (baz) 320 321 scan-internal skip-shared lower=a upper=z 322 ---- 323 shared file: 000005 [a#11,21-e#72057594037927935,15] [point=b@3#10,1-e#72057594037927935,15] [range=a#11,21-c#72057594037927935,21] 324 f@8#13,1 (baz) 325 326 scan-internal skip-shared lower=a upper=e 327 ---- 328 shared file: 000005 [a#11,21-e#72057594037927935,15] [point=b@3#10,1-e#72057594037927935,15] [range=a#11,21-c#72057594037927935,21] 329 330 scan-internal skip-shared lower=a upper=d 331 ---- 332 shared file: 000005 [a#11,21-d#72057594037927935,15] [point=b@3#10,1-d#72057594037927935,15] [range=a#11,21-c#72057594037927935,21] 333 334 scan-internal skip-shared lower=a upper=c 335 ---- 336 shared file: 000005 [a#11,21-c#72057594037927935,21] [point=b@3#10,1-b@3#10,1] [range=a#11,21-c#72057594037927935,21] 337 338 scan-internal skip-shared lower=a upper=b 339 ---- 340 shared file: 000005 [a#11,21-b#72057594037927935,21] [point=#0,0-#0,0] [range=a#11,21-b#72057594037927935,21] 341 342 scan-internal skip-shared lower=b upper=z 343 ---- 344 shared file: 000005 [b#11,21-e#72057594037927935,15] [point=b@3#10,1-e#72057594037927935,15] [range=b#11,21-c#72057594037927935,21] 345 f@8#13,1 (baz) 346 347 scan-internal skip-shared lower=b upper=bb 348 ---- 349 shared file: 000005 [b#11,21-bb#72057594037927935,21] [point=b@3#10,1-b@3#10,1] [range=b#11,21-bb#72057594037927935,21] 350 351 scan-internal skip-shared lower=e upper=ff 352 ---- 353 f@8#13,1 (baz) 354 355 # Shared files that don't have any keys in [lower, upper) are ignored. 356 357 reset 358 ---- 359 360 batch commit 361 set a foo 362 set f bar 363 del-range b c 364 range-key-set e ee @5 boop 365 ---- 366 committed 4 keys 367 368 flush 369 ---- 370 371 compact a-z 372 ---- 373 6: 374 000005:[a#10,SET-f#11,SET] 375 376 lsm 377 ---- 378 6: 379 000005:[a#10,SET-f#11,SET] 380 381 scan-internal skip-shared lower=c upper=d 382 ---- 383 384 scan-internal skip-shared lower=a upper=d 385 ---- 386 shared file: 000005 [a#10,1-c#72057594037927935,15] [point=a#10,1-c#72057594037927935,15] [range=#0,0-#0,0] 387 388 scan-internal skip-shared lower=bb upper=d 389 ---- 390 shared file: 000005 [bb#12,15-c#72057594037927935,15] [point=bb#12,15-c#72057594037927935,15] [range=#0,0-#0,0] 391 392 scan-internal skip-shared lower=c upper=ea 393 ---- 394 shared file: 000005 [e#13,21-ea#72057594037927935,21] [point=#0,0-#0,0] [range=e#13,21-ea#72057594037927935,21] 395 396 scan-internal skip-shared lower=c upper=z 397 ---- 398 shared file: 000005 [e#13,21-f#11,1] [point=f#11,1-f#11,1] [range=e#13,21-ee#72057594037927935,21] 399 400 # An upper bound equalling a file's Largest user key should be reason enough to 401 # truncate that file's bounds. 402 403 scan-internal skip-shared lower=c upper=f 404 ---- 405 shared file: 000005 [e#13,21-ee#72057594037927935,21] [point=#0,0-#0,0] [range=e#13,21-ee#72057594037927935,21] 406 407 # Construct a file with an exclusive sentinel as the largest key. Verify that 408 # scan-internal with skip-shared and an upper bound at that exclusive sentinel 409 # does not truncate that file. 410 411 reset 412 ---- 413 414 batch commit 415 set a foo 416 del-range b c 417 range-key-set e ee @5 boop 418 ---- 419 committed 3 keys 420 421 flush 422 ---- 423 424 compact a-z 425 ---- 426 6: 427 000005:[a#10,SET-ee#inf,RANGEKEYSET] 428 429 scan-internal skip-shared lower=a upper=ee 430 ---- 431 shared file: 000005 [a#10,1-ee#72057594037927935,21] [point=a#10,1-c#72057594037927935,15] [range=e#12,21-ee#72057594037927935,21] 432 433 scan-internal skip-shared lower=b upper=ee 434 ---- 435 shared file: 000005 [b#11,15-ee#72057594037927935,21] [point=b#11,15-c#72057594037927935,15] [range=e#12,21-ee#72057594037927935,21] 436 437 # Ensure we don't leave any range key bounds unintentionally set. 438 439 reset 440 ---- 441 442 batch commit 443 range-key-set a aa @5 boop 444 set b foo 445 set c bar 446 set d baz 447 ---- 448 committed 4 keys 449 450 flush 451 ---- 452 453 compact a-z 454 ---- 455 6: 456 000005:[a#10,RANGEKEYSET-d#13,SET] 457 458 scan-internal skip-shared lower=b upper=e 459 ---- 460 shared file: 000005 [b#11,1-d#13,1] [point=b#11,1-d#13,1] [range=#0,0-#0,0] 461 462 scan-internal skip-shared lower=a upper=aaa 463 ---- 464 shared file: 000005 [a#10,21-aa#72057594037927935,21] [point=#0,0-#0,0] [range=a#10,21-aa#72057594037927935,21]