github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/storage/testdata/mvcc_histories/target_bytes (about) 1 ## Test opts.TargetBytes. 2 3 # First, put some old data that we'll shadow. 4 run ok 5 with ts=1,0 6 put k=a v=nevergoingtobeseen 7 put k=e v=sameasabove 8 put k=aa v=willbetombstoned 9 del k=aa ts=250,1 10 ---- 11 >> at end: 12 data: "a"/0.000000001,0 -> /BYTES/nevergoingtobeseen 13 data: "aa"/0.000000250,1 -> /<empty> 14 data: "aa"/0.000000001,0 -> /BYTES/willbetombstoned 15 data: "e"/0.000000001,0 -> /BYTES/sameasabove 16 17 run ok 18 with ts=123,45 19 put k=a v=abcdef 20 put k=c v=ghijkllkjihg 21 put k=e v=mnopqr 22 ---- 23 >> at end: 24 data: "a"/0.000000123,45 -> /BYTES/abcdef 25 data: "a"/0.000000001,0 -> /BYTES/nevergoingtobeseen 26 data: "aa"/0.000000250,1 -> /<empty> 27 data: "aa"/0.000000001,0 -> /BYTES/willbetombstoned 28 data: "c"/0.000000123,45 -> /BYTES/ghijkllkjihg 29 data: "e"/0.000000123,45 -> /BYTES/mnopqr 30 data: "e"/0.000000001,0 -> /BYTES/sameasabove 31 32 # Scans without or with a large target size return all results. 33 34 run ok 35 with ts=300,0 k=a end=z 36 scan 37 scan reverse=true 38 ---- 39 scan: "a" -> /BYTES/abcdef @0.000000123,45 40 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 41 scan: "e" -> /BYTES/mnopqr @0.000000123,45 42 scan: "e" -> /BYTES/mnopqr @0.000000123,45 43 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 44 scan: "a" -> /BYTES/abcdef @0.000000123,45 45 46 run ok 47 with ts=300,0 k=a end=z targetbytes=0 48 scan 49 scan reverse=true 50 ---- 51 scan: "a" -> /BYTES/abcdef @0.000000123,45 52 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 53 scan: "e" -> /BYTES/mnopqr @0.000000123,45 54 scan: "e" -> /BYTES/mnopqr @0.000000123,45 55 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 56 scan: "a" -> /BYTES/abcdef @0.000000123,45 57 58 run ok 59 with ts=300,0 k=a end=z targetbytes=10000000 60 scan 61 scan reverse=true 62 ---- 63 scan: "a" -> /BYTES/abcdef @0.000000123,45 64 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 65 scan: "e" -> /BYTES/mnopqr @0.000000123,45 66 scan: 108 bytes (target 10000000) 67 scan: "e" -> /BYTES/mnopqr @0.000000123,45 68 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 69 scan: "a" -> /BYTES/abcdef @0.000000123,45 70 scan: 108 bytes (target 10000000) 71 72 # Scans with target size -1 return no results. 73 run ok 74 with ts=300,0 k=a end=z targetbytes=-1 75 scan 76 scan reverse=true 77 ---- 78 scan: resume span ["a","z") 79 scan: "a"-"z" -> <no data> 80 scan: resume span ["a","z") 81 scan: "a"-"z" -> <no data> 82 83 run ok 84 # Target size one byte returns one result (overshooting instead of returning nothing). 85 # Upping the target size accordingly results in more rows. 86 # In all cases, we're seeing resume spans iff the byte target had an effect. 87 # 88 # a@123,45 -> abcdef clocks in at 34 bytes as follows: 89 # 90 # 8 bytes size buf 91 # + 14 key timestamp component 92 # + 6 key bytes component 93 # + 6 value bytes 94 # 95 # c@123,45 similarly accounts for 40 bytes. 96 97 scan k=a end=z ts=300,0 targetbytes=1 98 ---- 99 scan: "a" -> /BYTES/abcdef @0.000000123,45 100 scan: resume span ["aa","z") 101 scan: 34 bytes (target 1) 102 103 run ok 104 scan k=a end=z ts=300,0 targetbytes=34 105 ---- 106 scan: "a" -> /BYTES/abcdef @0.000000123,45 107 scan: resume span ["aa","z") 108 scan: 34 bytes (target 34) 109 110 run ok 111 scan k=a end=z ts=300,0 targetbytes=35 112 ---- 113 scan: "a" -> /BYTES/abcdef @0.000000123,45 114 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 115 scan: resume span ["e","z") 116 scan: 74 bytes (target 35) 117 118 run ok 119 scan k=a end=z ts=300,0 targetbytes=74 120 ---- 121 scan: "a" -> /BYTES/abcdef @0.000000123,45 122 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 123 scan: resume span ["e","z") 124 scan: 74 bytes (target 74) 125 126 run ok 127 scan k=a end=z ts=300,0 targetbytes=75 128 ---- 129 scan: "a" -> /BYTES/abcdef @0.000000123,45 130 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 131 scan: "e" -> /BYTES/mnopqr @0.000000123,45 132 scan: 108 bytes (target 75) 133 134 # Works just the same when not starting on an existing key. 135 run ok 136 scan k=b end=z ts=300 targetbytes=1 137 ---- 138 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 139 scan: resume span ["e","z") 140 scan: 40 bytes (target 1) 141 142 # Reverse scans. 143 144 run ok 145 scan k=a end=z ts=300,0 targetbytes=1 reverse=true 146 ---- 147 scan: "e" -> /BYTES/mnopqr @0.000000123,45 148 scan: resume span ["a","c\x00") 149 scan: 34 bytes (target 1) 150 151 run ok 152 scan k=a end=z ts=300,0 targetbytes=34 reverse=true 153 ---- 154 scan: "e" -> /BYTES/mnopqr @0.000000123,45 155 scan: resume span ["a","c\x00") 156 scan: 34 bytes (target 34) 157 158 run ok 159 scan k=a end=z ts=300,0 targetbytes=35 reverse=true 160 ---- 161 scan: "e" -> /BYTES/mnopqr @0.000000123,45 162 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 163 scan: resume span ["a","aa\x00") 164 scan: 74 bytes (target 35) 165 166 run ok 167 scan k=a end=z ts=300,0 targetbytes=74 reverse=true 168 ---- 169 scan: "e" -> /BYTES/mnopqr @0.000000123,45 170 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 171 scan: resume span ["a","aa\x00") 172 scan: 74 bytes (target 74) 173 174 run ok 175 scan k=a end=z ts=300,0 targetbytes=75 reverse=true 176 ---- 177 scan: "e" -> /BYTES/mnopqr @0.000000123,45 178 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 179 scan: "a" -> /BYTES/abcdef @0.000000123,45 180 scan: 108 bytes (target 75) 181 182 # Scans that return the tombstone (at aa@250,1). The kv pair at a has 34 bytes, 183 # aa has 24 (just a key). 184 185 run ok 186 scan k=a end=z ts=300,0 targetbytes=34 tombstones=true 187 ---- 188 scan: "a" -> /BYTES/abcdef @0.000000123,45 189 scan: resume span ["aa","z") 190 scan: 34 bytes (target 34) 191 192 run ok 193 scan k=a end=z ts=300,0 targetbytes=35 tombstones=true 194 ---- 195 scan: "a" -> /BYTES/abcdef @0.000000123,45 196 scan: "aa" -> /<empty> @0.000000250,1 197 scan: resume span ["c","z") 198 scan: 58 bytes (target 35) 199 200 run ok 201 scan k=a end=z ts=300,0 targetbytes=58 tombstones=true 202 ---- 203 scan: "a" -> /BYTES/abcdef @0.000000123,45 204 scan: "aa" -> /<empty> @0.000000250,1 205 scan: resume span ["c","z") 206 scan: 58 bytes (target 58) 207 208 run ok 209 scan k=a end=z ts=300,0 targetbytes=59 tombstones=true 210 ---- 211 scan: "a" -> /BYTES/abcdef @0.000000123,45 212 scan: "aa" -> /<empty> @0.000000250,1 213 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 214 scan: resume span ["e","z") 215 scan: 98 bytes (target 59) 216 217 # ... and similarly in reverse. 218 219 run ok 220 scan k=a end=d ts=300,0 targetbytes=40 reverse=true tombstones=true 221 ---- 222 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 223 scan: resume span ["a","aa\x00") 224 scan: 40 bytes (target 40) 225 226 run ok 227 scan k=a end=d ts=300,0 targetbytes=41 reverse=true tombstones=true 228 ---- 229 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 230 scan: "aa" -> /<empty> @0.000000250,1 231 scan: resume span ["a","a\x00") 232 scan: 64 bytes (target 41) 233 234 run ok 235 scan k=a end=d ts=300,0 targetbytes=64 reverse=true tombstones=true 236 ---- 237 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 238 scan: "aa" -> /<empty> @0.000000250,1 239 scan: resume span ["a","a\x00") 240 scan: 64 bytes (target 64) 241 242 run ok 243 scan k=a end=d ts=300,0 targetbytes=65 reverse=true tombstones=true 244 ---- 245 scan: "c" -> /BYTES/ghijkllkjihg @0.000000123,45 246 scan: "aa" -> /<empty> @0.000000250,1 247 scan: "a" -> /BYTES/abcdef @0.000000123,45 248 scan: 98 bytes (target 65) 249 250 # Regression test for a bug simiar to #46652: Test appropriate termination when 251 # the TargetBytes-th kv pair is in the intent history. 252 253 run ok 254 with t=A ts=11,0 targetbytes=32 255 txn_begin 256 txn_step seq=10 257 put k=k v=a 258 put k=l v=a 259 put k=m v=a 260 put k=n v=a 261 txn_step seq=20 262 put k=k v=b 263 put k=l v=b 264 put k=m v=b 265 put k=n v=b 266 txn_step seq=30 267 put k=k v=c 268 put k=l v=c 269 put k=m v=c 270 put k=n v=c 271 txn_step seq=20 272 scan k=k end=o 273 scan k=k end=o reverse=true 274 ---- 275 scan: "k" -> /BYTES/b @0,0 276 scan: "l" -> /BYTES/b @0,0 277 scan: resume span ["m","o") 278 scan: 32 bytes (target 32) 279 scan: "n" -> /BYTES/b @0,0 280 scan: "m" -> /BYTES/b @0,0 281 scan: resume span ["k","l\x00") 282 scan: 32 bytes (target 32) 283 >> at end: 284 txn: "A" meta={id=00000000 key=/Min pri=0.00000000 epo=0 ts=0.000000011,0 min=0,0 seq=20} lock=true stat=PENDING rts=0.000000011,0 wto=false max=0,0 285 data: "a"/0.000000123,45 -> /BYTES/abcdef 286 data: "a"/0.000000001,0 -> /BYTES/nevergoingtobeseen 287 data: "aa"/0.000000250,1 -> /<empty> 288 data: "aa"/0.000000001,0 -> /BYTES/willbetombstoned 289 data: "c"/0.000000123,45 -> /BYTES/ghijkllkjihg 290 data: "e"/0.000000123,45 -> /BYTES/mnopqr 291 data: "e"/0.000000001,0 -> /BYTES/sameasabove 292 meta: "k"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=0.000000011,0 min=0,0 seq=30} ts=0.000000011,0 del=false klen=12 vlen=6 ih={{10 /BYTES/a}{20 /BYTES/b}} 293 data: "k"/0.000000011,0 -> /BYTES/c 294 meta: "l"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=0.000000011,0 min=0,0 seq=30} ts=0.000000011,0 del=false klen=12 vlen=6 ih={{10 /BYTES/a}{20 /BYTES/b}} 295 data: "l"/0.000000011,0 -> /BYTES/c 296 meta: "m"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=0.000000011,0 min=0,0 seq=30} ts=0.000000011,0 del=false klen=12 vlen=6 ih={{10 /BYTES/a}{20 /BYTES/b}} 297 data: "m"/0.000000011,0 -> /BYTES/c 298 meta: "n"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=0.000000011,0 min=0,0 seq=30} ts=0.000000011,0 del=false klen=12 vlen=6 ih={{10 /BYTES/a}{20 /BYTES/b}} 299 data: "n"/0.000000011,0 -> /BYTES/c