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