github.com/cockroachdb/pebble@v1.1.1-0.20240513155919-3622ade60459/testdata/iter_histories/next_prefix (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 next-prefix 15 next-prefix 16 next-prefix 17 next-prefix 18 next-prefix 19 next-prefix 20 next-prefix 21 next-prefix 22 next-prefix 23 next-prefix 24 next-prefix 25 next-prefix 26 next-prefix 27 next-prefix 28 ---- 29 a@100: (a@100, .) 30 b@100: (b@100, .) 31 c@100: (c@100, .) 32 d@100: (d@100, .) 33 e@100: (e@100, .) 34 f@100: (f@100, .) 35 g@100: (g@100, .) 36 h@100: (h@100, .) 37 i@100: (i@100, .) 38 j@100: (j@100, .) 39 k@100: (k@100, .) 40 l@100: (l@100, .) 41 m@100: (m@100, .) 42 n@100: (n@100, .) 43 o@100: (o@100, .) 44 p@100: (p@100, .) 45 46 combined-iter 47 seek-ge n@30 48 next-prefix 49 next 50 next 51 next-prefix 52 ---- 53 n@10: (n@10, .) 54 o@100: (o@100, .) 55 o@10: (o@10, .) 56 o@1: (o@1, .) 57 p@100: (p@100, .) 58 59 combined-iter 60 seek-prefix-ge p@210 61 next-prefix 62 ---- 63 p@100: (p@100, .) 64 . 65 66 combined-iter 67 seek-ge p@210 68 next-prefix 69 seek-ge p@210 70 next 71 next-prefix 72 seek-ge p@210 73 next 74 next 75 next-prefix 76 ---- 77 p@100: (p@100, .) 78 q@100: (q@100, .) 79 p@100: (p@100, .) 80 p@10: (p@10, .) 81 q@100: (q@100, .) 82 p@100: (p@100, .) 83 p@10: (p@10, .) 84 p@1: (p@1, .) 85 q@100: (q@100, .) 86 87 reset target-file-size=1 88 ---- 89 90 populate keylen=1 timestamps=(1, 10, 100) 91 ---- 92 wrote 78 keys 93 94 flush 95 ---- 96 97 combined-iter 98 first 99 next-prefix 100 next-prefix 101 next-prefix 102 next-prefix 103 next-prefix 104 next-prefix 105 next-prefix 106 next-prefix 107 next-prefix 108 next-prefix 109 next-prefix 110 next-prefix 111 next-prefix 112 next-prefix 113 next-prefix 114 ---- 115 a@100: (a@100, .) 116 b@100: (b@100, .) 117 c@100: (c@100, .) 118 d@100: (d@100, .) 119 e@100: (e@100, .) 120 f@100: (f@100, .) 121 g@100: (g@100, .) 122 h@100: (h@100, .) 123 i@100: (i@100, .) 124 j@100: (j@100, .) 125 k@100: (k@100, .) 126 l@100: (l@100, .) 127 m@100: (m@100, .) 128 n@100: (n@100, .) 129 o@100: (o@100, .) 130 p@100: (p@100, .) 131 132 combined-iter 133 seek-ge n@30 134 next-prefix 135 next 136 next 137 next-prefix 138 ---- 139 n@10: (n@10, .) 140 o@100: (o@100, .) 141 o@10: (o@10, .) 142 o@1: (o@1, .) 143 p@100: (p@100, .) 144 145 combined-iter 146 seek-prefix-ge p@210 147 next-prefix 148 ---- 149 p@100: (p@100, .) 150 . 151 152 combined-iter 153 seek-ge p@210 154 next-prefix 155 seek-ge p@210 156 next 157 next-prefix 158 seek-ge p@210 159 next 160 next 161 next-prefix 162 ---- 163 p@100: (p@100, .) 164 q@100: (q@100, .) 165 p@100: (p@100, .) 166 p@10: (p@10, .) 167 q@100: (q@100, .) 168 p@100: (p@100, .) 169 p@10: (p@10, .) 170 p@1: (p@1, .) 171 q@100: (q@100, .) 172 173 batch commit 174 range-key-set p r @1 foo 175 ---- 176 committed 1 keys 177 178 combined-iter 179 seek-ge p@210 180 next-prefix 181 ---- 182 p@210: (., [p-r) @1=foo UPDATED) 183 q@100: (q@100, [p-r) @1=foo) 184 185 combined-iter 186 seek-ge p@210 187 next-prefix 188 seek-ge p@210 189 next 190 next-prefix 191 seek-ge p@210 192 next 193 next 194 next-prefix 195 ---- 196 p@210: (., [p-r) @1=foo UPDATED) 197 q@100: (q@100, [p-r) @1=foo) 198 p@210: (., [p-r) @1=foo) 199 p@100: (p@100, [p-r) @1=foo) 200 q@100: (q@100, [p-r) @1=foo) 201 p@210: (., [p-r) @1=foo) 202 p@100: (p@100, [p-r) @1=foo) 203 p@10: (p@10, [p-r) @1=foo) 204 q@100: (q@100, [p-r) @1=foo) 205 206 # Test an iterator that is positioned on a range key start of a prefix, and the 207 # next key is a point key with that same prefix. The interleaving iterator must 208 # correctly handle this case and advance the point key iterator. 209 combined-iter 210 seek-ge p 211 next-prefix 212 ---- 213 p: (., [p-r) @1=foo UPDATED) 214 q@100: (q@100, [p-r) @1=foo) 215 216 # Test switching directions via NextPrefix. 217 combined-iter 218 seek-ge p@100 219 prev 220 next-prefix 221 ---- 222 p@100: (p@100, [p-r) @1=foo UPDATED) 223 p: (., [p-r) @1=foo) 224 q@100: (q@100, [p-r) @1=foo) 225 226 # Test switching directions via NextPrefix when the internal iterator is 227 # exhausted (in the reverse direction), but the Iterator is not. 228 # eg, i.pos = iterPosPrev and i.iterKey == nil. 229 combined-iter 230 seek-ge a@10 231 prev 232 next-prefix 233 ---- 234 a@10: (a@10, .) 235 a@100: (a@100, .) 236 b@100: (b@100, .) 237 238 reset 239 ---- 240 241 populate keylen=1 timestamps=(1, 10, 100) 242 ---- 243 wrote 78 keys 244 245 flush 246 ---- 247 248 lsm 249 ---- 250 0.0: 251 000005:[a@100#12,SET-z@1#85,SET] 252 253 # Test for https://github.com/cockroachdb/pebble/issues/2260. Triggered the 254 # bug. The second call to first would return c@100 instead of the correct key, 255 # b@1. 256 combined-iter upper=b@1 257 first 258 next-prefix 259 next-prefix 260 set-bounds lower=b@1 upper=d 261 first 262 next 263 first 264 ---- 265 a@100: (a@100, .) 266 err=NextPrefix not permitted with upper bound b@1 267 err=NextPrefix not permitted with upper bound b@1 268 . 269 b@1: (b@1, .) 270 c@100: (c@100, .) 271 b@1: (b@1, .) 272 273 # Did not trigger https://github.com/cockroachdb/pebble/issues/2260 since 274 # Iterator.NextPrefix first does a Next. So the second call to NextPrefix 275 # returned after the Next, since the upper bound was reached, which left the 276 # Iterator positioned at b@1. 277 combined-iter upper=b@10 278 first 279 next-prefix 280 next-prefix 281 set-bounds lower=b@1 upper=d 282 first 283 next 284 first 285 ---- 286 a@100: (a@100, .) 287 err=NextPrefix not permitted with upper bound b@10 288 err=NextPrefix not permitted with upper bound b@10 289 . 290 b@1: (b@1, .) 291 c@100: (c@100, .) 292 b@1: (b@1, .)