github.com/treeverse/lakefs@v1.24.1-0.20240520134607-95648127bfb0/clients/spark/src/test/resources/pebble-testdata/reader/iter (about) 1 build 2 a.SET.1:A 3 b.SET.2:B 4 c.SET.3:C 5 d.SET.4:D 6 ---- 7 8 iter 9 first 10 next 11 next 12 next 13 next 14 ---- 15 <a:1> 16 <b:2> 17 <c:3> 18 <d:4> 19 . 20 21 iter 22 seek-ge a 23 next 24 next 25 next 26 next 27 ---- 28 <a:1> 29 <b:2> 30 <c:3> 31 <d:4> 32 . 33 34 iter 35 seek-ge b 36 next 37 next 38 next 39 ---- 40 <b:2> 41 <c:3> 42 <d:4> 43 . 44 45 iter 46 seek-ge c 47 next 48 next 49 ---- 50 <c:3> 51 <d:4> 52 . 53 54 iter 55 seek-ge d 56 next 57 ---- 58 <d:4> 59 . 60 61 iter 62 seek-ge e 63 ---- 64 . 65 66 iter 67 seek-ge d 68 seek-ge z 69 ---- 70 <d:4> 71 . 72 73 iter 74 seek-ge b 75 seek-ge c 76 seek-ge d 77 seek-ge e 78 ---- 79 <b:2> 80 <c:3> 81 <d:4> 82 . 83 84 iter 85 last 86 prev 87 prev 88 prev 89 prev 90 ---- 91 <d:4> 92 <c:3> 93 <b:2> 94 <a:1> 95 . 96 97 iter 98 seek-lt e 99 prev 100 prev 101 prev 102 prev 103 ---- 104 <d:4> 105 <c:3> 106 <b:2> 107 <a:1> 108 . 109 110 iter 111 seek-lt d 112 prev 113 prev 114 prev 115 ---- 116 <c:3> 117 <b:2> 118 <a:1> 119 . 120 121 iter 122 seek-lt c 123 prev 124 prev 125 ---- 126 <b:2> 127 <a:1> 128 . 129 130 iter 131 seek-lt b 132 prev 133 ---- 134 <a:1> 135 . 136 137 iter 138 seek-lt a 139 ---- 140 . 141 142 iter 143 seek-lt d 144 seek-lt c 145 seek-lt b 146 seek-lt a 147 ---- 148 <c:3> 149 <b:2> 150 <a:1> 151 . 152 153 iter globalSeqNum=1 154 first 155 next 156 next 157 next 158 next 159 ---- 160 <a:1> 161 <b:1> 162 <c:1> 163 <d:1> 164 . 165 166 iter globalSeqNum=10 167 first 168 next 169 next 170 next 171 next 172 ---- 173 <a:10> 174 <b:10> 175 <c:10> 176 <d:10> 177 . 178 179 iter globalSeqNum=0 180 seek-lt x 181 ---- 182 <d:4> 183 184 get 185 b 186 a 187 f 188 d 189 c 190 ---- 191 B 192 A 193 <err: pebble: not found> 194 D 195 C 196 197 # Verify that clearing the bounds on an iterator also clears 198 # previously set block{Lower,Upper}. 199 200 iter 201 seek-ge c 202 seek-lt b 203 set-bounds lower=b upper=c 204 seek-ge c 205 seek-lt b 206 set-bounds lower= upper= 207 seek-ge c 208 seek-lt b 209 ---- 210 <c:3> 211 <a:1> 212 . 213 . 214 . 215 . 216 <c:3> 217 <a:1> 218 219 # Verify that seeking past the end of the sstable leaves the iterator 220 # in a state where prev returns the last key in the table. 221 222 iter 223 seek-lt d 224 seek-ge f 225 prev 226 ---- 227 <c:3> 228 . 229 <d:4> 230 231 # Verify that seeking before the beginning of the sstable leaves the 232 # iterator in a state where next returns the first key in the table. 233 234 iter 235 seek-ge b 236 seek-lt a 237 next 238 ---- 239 <b:2> 240 . 241 <a:1> 242 243 # Verify that iteration from before the beginning or after the end of 244 # the sstable does not "wrap around". A bug previously allowed this to 245 # happen by letting the data block iterator and index iterator get out 246 # of sync. 247 248 build 249 a.SET.1:a 250 ---- 251 252 iter 253 first 254 prev 255 next 256 next 257 next 258 ---- 259 <a:1> 260 . 261 <a:1> 262 . 263 . 264 265 iter 266 last 267 next 268 prev 269 prev 270 prev 271 ---- 272 <a:1> 273 . 274 <a:1> 275 . 276 . 277 278 # Build a sufficiently large SST to enable two-level indexes. 279 280 build 281 a.SET.1:A 282 aae.SET.1:E 283 aaf.SET.1:F 284 aag.SET.1:G 285 aah.SET.1:H 286 aai.SET.1:I 287 aaj.SET.1:J 288 aak.SET.1:K 289 aal.SET.1:L 290 aam.SET.1:M 291 aan.SET.1:N 292 aao.SET.1:O 293 aap.SET.1:P 294 aaq.SET.1:Q 295 aar.SET.1:R 296 aas.SET.1:S 297 aat.SET.1:T 298 aau.SET.1:U 299 aav.SET.1:V 300 aaw.SET.1:W 301 aax.SET.1:X 302 aay.SET.1:Y 303 aaz.SET.1:Z 304 b.SET.2:B 305 bbe.SET.2:E 306 bbf.SET.2:F 307 bbg.SET.2:G 308 bbh.SET.2:H 309 bbi.SET.2:I 310 bbj.SET.2:J 311 bbk.SET.2:K 312 bbl.SET.2:L 313 bbm.SET.2:M 314 bbn.SET.2:N 315 bbo.SET.2:O 316 bbp.SET.2:P 317 bbq.SET.2:Q 318 bbr.SET.2:R 319 bbs.SET.2:S 320 bbt.SET.2:T 321 bbu.SET.2:U 322 bbv.SET.2:V 323 bbw.SET.2:W 324 bbx.SET.2:X 325 bby.SET.2:Y 326 bbz.SET.2:Z 327 c.SET.3:C 328 cc.RANGEDEL.3:ccc 329 cce.SET.3:E 330 ccf.SET.3:F 331 ccg.SET.3:G 332 cch.SET.3:H 333 cci.SET.3:I 334 ccj.SET.3:J 335 cck.SET.3:K 336 ccl.SET.3:L 337 ccm.SET.3:M 338 ccn.SET.3:N 339 cco.SET.3:O 340 ccp.SET.3:P 341 ccq.SET.3:Q 342 ccr.SET.3:R 343 ccs.SET.3:S 344 cct.SET.3:T 345 ccu.SET.3:U 346 ccv.SET.3:V 347 ccw.SET.3:W 348 ccx.SET.3:X 349 ccy.SET.3:Y 350 ccz.SET.3:Z 351 d.SET.4:D 352 dd.RANGEDEL.4:ddd 353 dde.SET.4:E 354 ddf.SET.4:F 355 ddg.SET.4:G 356 ddh.SET.4:H 357 ddi.SET.4:I 358 ddj.SET.4:J 359 ddk.SET.4:K 360 ddl.SET.4:L 361 ddm.SET.4:M 362 ddn.SET.4:N 363 ddo.SET.4:O 364 ddp.SET.4:P 365 ddq.SET.4:Q 366 ddr.SET.4:R 367 dds.SET.4:S 368 ddt.SET.4:T 369 ddu.SET.4:U 370 ddv.SET.4:V 371 ddw.SET.4:W 372 ddx.SET.4:X 373 ddy.SET.4:Y 374 ddz.SET.4:Z 375 ---- 376 377 iter 378 first 379 prev 380 next 381 next 382 next 383 next 384 next 385 ---- 386 <a:1> 387 . 388 <a:1> 389 <aae:1> 390 <aaf:1> 391 <aag:1> 392 <aah:1> 393 394 iter 395 last 396 next 397 prev 398 prev 399 prev 400 ---- 401 <ddz:4> 402 . 403 <ddz:4> 404 <ddy:4> 405 <ddx:4> 406 407 iter 408 first 409 prev 410 next 411 next 412 seek-ge x 413 prev 414 prev 415 ---- 416 <a:1> 417 . 418 <a:1> 419 <aae:1> 420 . 421 <ddz:4> 422 <ddy:4> 423 424 iter 425 first 426 prev 427 next 428 next 429 seek-prefix-ge x 430 prev 431 prev 432 ---- 433 <a:1> 434 . 435 <a:1> 436 <aae:1> 437 . 438 . 439 . 440 441 iter 442 last 443 next 444 prev 445 prev 446 seek-lt a 447 next 448 next 449 ---- 450 <ddz:4> 451 . 452 <ddz:4> 453 <ddy:4> 454 . 455 <a:1> 456 <aae:1> 457 458 # Test that SeekPrefixGE does not position the iterator far outside the iterator bounds. 459 # Doing so would break the subsequent SeekGE that is utilizing the next instead of seek 460 # optimization. 461 iter 462 set-bounds lower=a upper=aae 463 seek-ge a 464 seek-prefix-ge aad 465 set-bounds lower=aae upper=b 466 seek-ge aae 467 next 468 ---- 469 . 470 <a:1> 471 . 472 . 473 <aae:1> 474 <aaf:1> 475 476 # Test that using Next does not mislead a twoLevelIterator into believing that the 477 # iterator has been positioned based on the latest iterator bounds. The Next call 478 # immediately after SetBounds has a non-deterministic result, hence we use 479 # next-ignore-result. 480 iter 481 set-bounds lower=bbq upper=d 482 seek-ge bbq 483 set-bounds lower=b upper=bbf 484 next-ignore-result 485 set-bounds lower=bbf upper=c 486 seek-ge bbf 487 next 488 ---- 489 . 490 <bbq:2> 491 . 492 . 493 . 494 <bbf:2> 495 <bbg:2>