github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/storage/testdata/mvcc_histories/conditional_put (about) 1 run error 2 cput k=k v=v cond=v2 ts=123 3 ---- 4 >> at end: 5 <no data> 6 error: (*roachpb.ConditionFailedError:) unexpected value: <nil> 7 8 # Verify the difference between missing value and empty value. 9 10 run error 11 cput k=k v=v cond= ts=123,1 12 ---- 13 >> at end: 14 <no data> 15 error: (*roachpb.ConditionFailedError:) unexpected value: <nil> 16 17 # Do a conditional put with expectation that the value is completely missing; will succeed. 18 19 run ok 20 cput k=k v=v ts=123,2 21 ---- 22 >> at end: 23 data: "k"/0.000000123,2 -> /BYTES/v 24 25 # Another conditional put expecting value missing will fail, now that value1 is written. 26 27 run error 28 cput k=k v=v ts=123,3 29 ---- 30 >> at end: 31 data: "k"/0.000000123,2 -> /BYTES/v 32 error: (*roachpb.ConditionFailedError:) unexpected value: raw_bytes:"\000\000\000\000\003v" timestamp:<wall_time:123 logical:2 > 33 34 # Conditional put expecting wrong value2, will fail. 35 36 run error 37 cput k=k v=v cond=v2 ts=123,4 38 ---- 39 >> at end: 40 data: "k"/0.000000123,2 -> /BYTES/v 41 error: (*roachpb.ConditionFailedError:) unexpected value: raw_bytes:"\000\000\000\000\003v" timestamp:<wall_time:123 logical:2 > 42 43 # Move to an empty value. Will succeed. 44 45 run ok 46 cput k=k v= cond=v ts=123,5 47 ---- 48 >> at end: 49 data: "k"/0.000000123,5 -> /BYTES/ 50 data: "k"/0.000000123,2 -> /BYTES/v 51 52 # Move key2 (which does not exist) to from value1 to value2. 53 # Expect it to fail since it does not exist with value1. 54 55 run error 56 cput k=k2 v=v2 cond=v ts=123,6 57 ---- 58 >> at end: 59 data: "k"/0.000000123,5 -> /BYTES/ 60 data: "k"/0.000000123,2 -> /BYTES/v 61 error: (*roachpb.ConditionFailedError:) unexpected value: <nil> 62 63 # Move key2 (which does not yet exist) to from value1 to value2, but 64 # allowing for it not existing. 65 66 run ok 67 cput k=k2 v=v2 cond=v ts=123,7 allow_missing 68 ---- 69 >> at end: 70 data: "k"/0.000000123,5 -> /BYTES/ 71 data: "k"/0.000000123,2 -> /BYTES/v 72 data: "k2"/0.000000123,7 -> /BYTES/v2 73 74 # Try to move key2 (which has value2) from value1 to empty. Expect error. 75 76 run error 77 cput k=k2 v= cond=v allow_missing ts=123,8 78 ---- 79 >> at end: 80 data: "k"/0.000000123,5 -> /BYTES/ 81 data: "k"/0.000000123,2 -> /BYTES/v 82 data: "k2"/0.000000123,7 -> /BYTES/v2 83 error: (*roachpb.ConditionFailedError:) unexpected value: raw_bytes:"\000\000\000\000\003v2" timestamp:<wall_time:123 logical:7 > 84 85 # Try to move key2 (which has value2) from value2 to empty. Expect success. 86 87 run ok 88 cput k=k2 v= cond=v2 allow_missing ts=123,9 89 ---- 90 >> at end: 91 data: "k"/0.000000123,5 -> /BYTES/ 92 data: "k"/0.000000123,2 -> /BYTES/v 93 data: "k2"/0.000000123,9 -> /BYTES/ 94 data: "k2"/0.000000123,7 -> /BYTES/v2 95 96 # Now move to value2 from expected empty value. 97 98 run ok 99 cput k=k v=v2 cond= ts=123,10 100 ---- 101 >> at end: 102 data: "k"/0.000000123,10 -> /BYTES/v2 103 data: "k"/0.000000123,5 -> /BYTES/ 104 data: "k"/0.000000123,2 -> /BYTES/v 105 data: "k2"/0.000000123,9 -> /BYTES/ 106 data: "k2"/0.000000123,7 -> /BYTES/v2 107 108 # Verify we get value2 as expected. 109 110 run ok 111 get k=k ts=123,11 112 ---- 113 get: "k" -> /BYTES/v2 @0.000000123,10