github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/storage/testdata/mvcc_histories/max_keys (about) 1 # Test opts.MaxKeys. 2 3 # Put some test data. 4 run ok 5 with ts=1,0 6 put k=a v=val-a 7 put k=aa v=val-aa 8 put k=c v=val-c 9 put k=e v=val-e 10 del k=aa ts=2,0 11 ---- 12 >> at end: 13 data: "a"/0.000000001,0 -> /BYTES/val-a 14 data: "aa"/0.000000002,0 -> /<empty> 15 data: "aa"/0.000000001,0 -> /BYTES/val-aa 16 data: "c"/0.000000001,0 -> /BYTES/val-c 17 data: "e"/0.000000001,0 -> /BYTES/val-e 18 19 # Limit 1 works. 20 run ok 21 with ts=300,0 k=a end=z max=1 22 scan 23 scan reverse=true 24 ---- 25 scan: "a" -> /BYTES/val-a @0.000000001,0 26 scan: resume span ["aa","z") 27 scan: "e" -> /BYTES/val-e @0.000000001,0 28 scan: resume span ["a","c\x00") 29 30 # Limit -1 works: nothing is returned, go straight to resume span. We use this 31 # when executing the remaining scans in a batch after already exhausting the 32 # batch-wide allowable number of rows returned. 33 run ok 34 with ts=300,0 k=a end=z max=-1 35 scan 36 scan reverse=true 37 ---- 38 scan: resume span ["a","z") 39 scan: "a"-"z" -> <no data> 40 scan: resume span ["a","z") 41 scan: "a"-"z" -> <no data> 42 43 # Limit and tombstones: the tombstones count. 44 run ok 45 with ts=300,0 k=a end=z max=2 tombstones=true 46 scan 47 ---- 48 scan: "a" -> /BYTES/val-a @0.000000001,0 49 scan: "aa" -> /<empty> @0.000000002,0 50 scan: resume span ["c","z") 51 52 # Ditto in reverse. 53 run ok 54 with ts=300,0 k=a end=d max=2 tombstones=true reverse=true 55 scan 56 ---- 57 scan: "c" -> /BYTES/val-c @0.000000001,0 58 scan: "aa" -> /<empty> @0.000000002,0 59 scan: resume span ["a","a\x00") 60 61 # No limit = zero limit = infinity limit (zero is preferred). 62 run ok 63 with ts=300,0 k=a end=z 64 scan 65 scan reverse=true 66 scan max=0 67 scan reverse=true max=0 68 scan max=99999 69 scan reverse=true max=9999 70 ---- 71 scan: "a" -> /BYTES/val-a @0.000000001,0 72 scan: "c" -> /BYTES/val-c @0.000000001,0 73 scan: "e" -> /BYTES/val-e @0.000000001,0 74 scan: "e" -> /BYTES/val-e @0.000000001,0 75 scan: "c" -> /BYTES/val-c @0.000000001,0 76 scan: "a" -> /BYTES/val-a @0.000000001,0 77 scan: "a" -> /BYTES/val-a @0.000000001,0 78 scan: "c" -> /BYTES/val-c @0.000000001,0 79 scan: "e" -> /BYTES/val-e @0.000000001,0 80 scan: "e" -> /BYTES/val-e @0.000000001,0 81 scan: "c" -> /BYTES/val-c @0.000000001,0 82 scan: "a" -> /BYTES/val-a @0.000000001,0 83 scan: "a" -> /BYTES/val-a @0.000000001,0 84 scan: "c" -> /BYTES/val-c @0.000000001,0 85 scan: "e" -> /BYTES/val-e @0.000000001,0 86 scan: "e" -> /BYTES/val-e @0.000000001,0 87 scan: "c" -> /BYTES/val-c @0.000000001,0 88 scan: "a" -> /BYTES/val-a @0.000000001,0 89 90 # Regression test for #46652: Test appropriate termination when the MaxKeys-th 91 # key is in the intent history. 92 93 run ok 94 with t=A ts=11,0 max=3 95 txn_begin 96 txn_step seq=10 97 put k=k v=a 98 put k=l v=a 99 put k=m v=a 100 put k=n v=a 101 txn_step seq=20 102 put k=k v=b 103 put k=l v=b 104 put k=m v=b 105 put k=n v=b 106 txn_step seq=30 107 put k=k v=c 108 put k=l v=c 109 put k=m v=c 110 put k=n v=c 111 txn_step seq=20 112 scan k=k end=o 113 scan k=k end=o reverse=true 114 ---- 115 scan: "k" -> /BYTES/b @0,0 116 scan: "l" -> /BYTES/b @0,0 117 scan: "m" -> /BYTES/b @0,0 118 scan: resume span ["n","o") 119 scan: "n" -> /BYTES/b @0,0 120 scan: "m" -> /BYTES/b @0,0 121 scan: "l" -> /BYTES/b @0,0 122 scan: resume span ["k","k\x00") 123 >> at end: 124 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 125 data: "a"/0.000000001,0 -> /BYTES/val-a 126 data: "aa"/0.000000002,0 -> /<empty> 127 data: "aa"/0.000000001,0 -> /BYTES/val-aa 128 data: "c"/0.000000001,0 -> /BYTES/val-c 129 data: "e"/0.000000001,0 -> /BYTES/val-e 130 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}} 131 data: "k"/0.000000011,0 -> /BYTES/c 132 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}} 133 data: "l"/0.000000011,0 -> /BYTES/c 134 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}} 135 data: "m"/0.000000011,0 -> /BYTES/c 136 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}} 137 data: "n"/0.000000011,0 -> /BYTES/c 138 139 run ok 140 with t=A ts=11,0 max=3 141 txn_step seq=30 142 resolve_intent k=k status=COMMITTED 143 resolve_intent k=l status=COMMITTED 144 resolve_intent k=m status=COMMITTED 145 resolve_intent k=n status=COMMITTED 146 ---- 147 >> at end: 148 txn: "A" meta={id=00000000 key=/Min pri=0.00000000 epo=0 ts=0.000000011,0 min=0,0 seq=30} lock=true stat=PENDING rts=0.000000011,0 wto=false max=0,0 149 data: "a"/0.000000001,0 -> /BYTES/val-a 150 data: "aa"/0.000000002,0 -> /<empty> 151 data: "aa"/0.000000001,0 -> /BYTES/val-aa 152 data: "c"/0.000000001,0 -> /BYTES/val-c 153 data: "e"/0.000000001,0 -> /BYTES/val-e 154 data: "k"/0.000000011,0 -> /BYTES/c 155 data: "l"/0.000000011,0 -> /BYTES/c 156 data: "m"/0.000000011,0 -> /BYTES/c 157 data: "n"/0.000000011,0 -> /BYTES/c 158 159 # Same case as above, except with a committed value at the key after MaxKeys. 160 161 run ok 162 with t=B ts=12,0 max=3 163 txn_begin 164 txn_step seq=10 165 put k=k v=a 166 put k=l v=a 167 put k=m v=a 168 txn_step seq=20 169 put k=k v=b 170 put k=l v=b 171 put k=m v=b 172 txn_step seq=30 173 put k=k v=c 174 put k=l v=c 175 put k=m v=c 176 txn_step seq=20 177 scan k=k end=o 178 ---- 179 scan: "k" -> /BYTES/b @0,0 180 scan: "l" -> /BYTES/b @0,0 181 scan: "m" -> /BYTES/b @0,0 182 scan: resume span ["n","o") 183 >> at end: 184 txn: "B" meta={id=00000000 key=/Min pri=0.00000000 epo=0 ts=0.000000012,0 min=0,0 seq=20} lock=true stat=PENDING rts=0.000000012,0 wto=false max=0,0 185 data: "a"/0.000000001,0 -> /BYTES/val-a 186 data: "aa"/0.000000002,0 -> /<empty> 187 data: "aa"/0.000000001,0 -> /BYTES/val-aa 188 data: "c"/0.000000001,0 -> /BYTES/val-c 189 data: "e"/0.000000001,0 -> /BYTES/val-e 190 meta: "k"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=0.000000012,0 min=0,0 seq=30} ts=0.000000012,0 del=false klen=12 vlen=6 ih={{10 /BYTES/a}{20 /BYTES/b}} 191 data: "k"/0.000000012,0 -> /BYTES/c 192 data: "k"/0.000000011,0 -> /BYTES/c 193 meta: "l"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=0.000000012,0 min=0,0 seq=30} ts=0.000000012,0 del=false klen=12 vlen=6 ih={{10 /BYTES/a}{20 /BYTES/b}} 194 data: "l"/0.000000012,0 -> /BYTES/c 195 data: "l"/0.000000011,0 -> /BYTES/c 196 meta: "m"/0,0 -> txn={id=00000000 key=/Min pri=0.00000000 epo=0 ts=0.000000012,0 min=0,0 seq=30} ts=0.000000012,0 del=false klen=12 vlen=6 ih={{10 /BYTES/a}{20 /BYTES/b}} 197 data: "m"/0.000000012,0 -> /BYTES/c 198 data: "m"/0.000000011,0 -> /BYTES/c 199 data: "n"/0.000000011,0 -> /BYTES/c