github.com/cockroachdb/pebble@v0.0.0-20231214172447-ab4952c5f87b/testdata/iter_histories/internal_next (about) 1 reset 2 ---- 3 4 # For all prefixes a-z, write 3 keys at timestamps @1, @10, @100. 5 # This populates a total of 26 * 3 = 78 keys. 6 7 populate keylen=1 timestamps=(1, 10, 100) 8 ---- 9 wrote 78 keys 10 11 combined-iter 12 first 13 next-prefix 14 internal-next 15 internal-next 16 next 17 next-prefix 18 internal-next 19 internal-next 20 next 21 internal-next 22 next 23 internal-next 24 ---- 25 a@100: (a@100, .) 26 b@100: (b@100, .) 27 . 28 . 29 b@10: (b@10, .) 30 c@100: (c@100, .) 31 . 32 . 33 c@10: (c@10, .) 34 . 35 c@1: (c@1, .) 36 . 37 38 combined-iter 39 first 40 next-prefix 41 can-deterministically-single-delete 42 can-deterministically-single-delete 43 next 44 next-prefix 45 can-deterministically-single-delete 46 next 47 can-deterministically-single-delete 48 next 49 can-deterministically-single-delete 50 ---- 51 a@100: (a@100, .) 52 b@100: (b@100, .) 53 true 54 err: pebble: CanDeterministicallySingleDelete called twice 55 b@10: (b@10, .) 56 c@100: (c@100, .) 57 true 58 c@10: (c@10, .) 59 true 60 c@1: (c@1, .) 61 true 62 63 # The start boundaries of range keys are interleaved and can cause the internal 64 # iterator to be advanced ahead to look for a point at the same user key. This 65 # is one of the few situations in which InternalNext may find the iterator is 66 # already positioned at iterPosNext. Test this scenario. 67 68 batch commit 69 range-key-set a b @1 foo 70 range-key-set bb c @2 bar 71 ---- 72 committed 2 keys 73 74 combined-iter 75 first 76 internal-next 77 next 78 internal-next 79 seek-ge b@10 80 internal-next 81 next 82 internal-next 83 internal-next 84 next 85 ---- 86 a: (., [a-b) @1=foo UPDATED) 87 . 88 a@100: (a@100, [a-b) @1=foo) 89 . 90 b@10: (b@10, . UPDATED) 91 . 92 b@1: (b@1, .) 93 . 94 . 95 bb: (., [bb-c) @2=bar UPDATED) 96 97 combined-iter 98 first 99 can-deterministically-single-delete 100 next 101 can-deterministically-single-delete 102 seek-ge b@10 103 can-deterministically-single-delete 104 next 105 can-deterministically-single-delete 106 next 107 ---- 108 a: (., [a-b) @1=foo UPDATED) 109 true 110 a@100: (a@100, [a-b) @1=foo) 111 true 112 b@10: (b@10, . UPDATED) 113 true 114 b@1: (b@1, .) 115 true 116 bb: (., [bb-c) @2=bar UPDATED) 117 118 119 reset 120 ---- 121 122 batch commit 123 set a a 124 set b b 125 range-key-set b c @1 foo 126 set d d 127 ---- 128 committed 4 keys 129 130 combined-iter 131 first 132 internal-next 133 next 134 internal-next 135 next 136 prev 137 internal-next 138 ---- 139 a: (a, .) 140 . 141 b: (b, [b-c) @1=foo UPDATED) 142 . 143 d: (d, . UPDATED) 144 b: (b, [b-c) @1=foo UPDATED) 145 err: switching from reverse to forward via internalNext is prohibited 146 147 combined-iter 148 first 149 can-deterministically-single-delete 150 next 151 can-deterministically-single-delete 152 next 153 prev 154 can-deterministically-single-delete 155 ---- 156 a: (a, .) 157 true 158 b: (b, [b-c) @1=foo UPDATED) 159 true 160 d: (d, . UPDATED) 161 b: (b, [b-c) @1=foo UPDATED) 162 err: switching from reverse to forward via internalNext is prohibited 163 164 # Perform a test where we produce two internal versions (both SETs) for each 165 # user key. Note that this test disables automatic compactions, so the presence 166 # of the internal keys will be deterministic. 167 168 reset 169 ---- 170 171 populate keylen=1 timestamps=(1, 10, 100) 172 ---- 173 wrote 78 keys 174 175 flush 176 ---- 177 178 populate keylen=1 timestamps=(1, 10, 100) 179 ---- 180 wrote 78 keys 181 182 combined-iter 183 first 184 next-prefix 185 internal-next 186 internal-next 187 next 188 next-prefix 189 internal-next 190 internal-next 191 next 192 internal-next 193 next 194 internal-next 195 ---- 196 a@100: (a@100, .) 197 b@100: (b@100, .) 198 SET 199 . 200 b@10: (b@10, .) 201 c@100: (c@100, .) 202 SET 203 . 204 c@10: (c@10, .) 205 SET 206 c@1: (c@1, .) 207 SET 208 209 combined-iter 210 seek-ge z 211 internal-next 212 next 213 next 214 internal-next 215 internal-next 216 next 217 internal-next 218 ---- 219 z@100: (z@100, .) 220 SET 221 z@10: (z@10, .) 222 z@1: (z@1, .) 223 SET 224 . 225 . 226 . 227 228 combined-iter 229 first 230 next-prefix 231 can-deterministically-single-delete 232 next 233 next-prefix 234 can-deterministically-single-delete 235 next 236 can-deterministically-single-delete 237 next 238 can-deterministically-single-delete 239 ---- 240 a@100: (a@100, .) 241 b@100: (b@100, .) 242 false 243 b@10: (b@10, .) 244 c@100: (c@100, .) 245 false 246 c@10: (c@10, .) 247 false 248 c@1: (c@1, .) 249 false 250 251 # Test that a CanDeterministicallySingleDelete is true if the old SETs are all 252 # deleted by a range delete. 253 254 batch commit 255 del-range a zzz 256 ---- 257 committed 1 keys 258 259 populate keylen=1 timestamps=(1, 10, 100) 260 ---- 261 wrote 78 keys 262 263 combined-iter 264 first 265 next-prefix 266 can-deterministically-single-delete 267 next 268 next-prefix 269 can-deterministically-single-delete 270 next 271 can-deterministically-single-delete 272 next 273 can-deterministically-single-delete 274 ---- 275 a@100: (a@100, .) 276 b@100: (b@100, .) 277 true 278 b@10: (b@10, .) 279 c@100: (c@100, .) 280 true 281 c@10: (c@10, .) 282 true 283 c@1: (c@1, .) 284 true 285 286 # Set fmv=FormatDeleteSizedAndObsolete. 287 288 reset format-major-version=15 289 ---- 290 291 # Test that a SET > SINGLEDEL > SET sequence yields 292 # CanDeterministicallySingleDelete() = true. This is okay because if the SET 293 # consumes the SINGLEDEL, it becomes a SETWITHDEL. If a SINGLEDEL consumes a 294 # SETWITHDEL, it becomes a DEL. 295 296 batch commit 297 set a a 298 singledel a 299 set a a 300 ---- 301 committed 3 keys 302 303 combined-iter 304 first 305 internal-next 306 internal-next 307 first 308 can-deterministically-single-delete 309 ---- 310 a: (a, .) 311 SINGLEDEL 312 SET 313 a: (a, .) 314 true 315 316 # Deleting with a DEL[SIZED] should then allow deterministic single delete 317 # again. 318 319 batch commit 320 del a 321 set a a 322 ---- 323 committed 2 keys 324 325 combined-iter 326 first 327 internal-next 328 internal-next 329 internal-next 330 internal-next 331 internal-next 332 first 333 can-deterministically-single-delete 334 ---- 335 a: (a, .) 336 DEL 337 SET 338 SINGLEDEL 339 SET 340 . 341 a: (a, .) 342 true 343 344 # The above case tested DEL. Explicitly test DELSIZED by setting the key again, 345 # then writing a DELSIZED, then another key. 346 347 batch commit 348 del-sized a 1 349 set a a 350 ---- 351 committed 2 keys 352 353 combined-iter 354 first 355 internal-next 356 internal-next 357 internal-next 358 internal-next 359 internal-next 360 internal-next 361 internal-next 362 first 363 can-deterministically-single-delete 364 ---- 365 a: (a, .) 366 DELSIZED 367 SET 368 DEL 369 SET 370 SINGLEDEL 371 SET 372 . 373 a: (a, .) 374 true