1runOn: 2 - 3 minServerVersion: "4.0" 4 topology: ["replicaset"] 5 - 6 minServerVersion: "4.1.8" 7 topology: ["sharded"] 8 9database_name: &database_name "withTransaction-tests" 10collection_name: &collection_name "test" 11 12data: [] 13 14# These tests use error codes where the TransientTransactionError label will be 15# applied to the error response for commitTransaction. This will cause the 16# entire transaction to be retried instead of commitTransaction. 17# 18# See: https://github.com/mongodb/mongo/blob/r4.1.6/src/mongo/db/handle_request_response.cpp 19tests: 20 - 21 description: transaction is retried after commitTransaction TransientTransactionError (LockTimeout) 22 failPoint: 23 configureFailPoint: failCommand 24 mode: { times: 2 } 25 data: 26 failCommands: ["commitTransaction"] 27 errorCode: 24 # LockTimeout 28 closeConnection: false 29 operations: &operations 30 - 31 name: withTransaction 32 object: session0 33 arguments: 34 callback: 35 operations: 36 - 37 name: insertOne 38 object: collection 39 arguments: 40 session: session0 41 document: { _id: 1 } 42 result: 43 insertedId: 1 44 expectations: &expectations 45 - 46 command_started_event: 47 command: 48 insert: *collection_name 49 documents: 50 - { _id: 1 } 51 ordered: true 52 lsid: session0 53 txnNumber: { $numberLong: "1" } 54 startTransaction: true 55 autocommit: false 56 # omitted fields 57 readConcern: ~ 58 writeConcern: ~ 59 command_name: insert 60 database_name: *database_name 61 - 62 command_started_event: 63 command: 64 commitTransaction: 1 65 lsid: session0 66 txnNumber: { $numberLong: "1" } 67 autocommit: false 68 # omitted fields 69 readConcern: ~ 70 startTransaction: ~ 71 writeConcern: ~ 72 command_name: commitTransaction 73 database_name: admin 74 - 75 command_started_event: 76 command: 77 insert: *collection_name 78 documents: 79 - { _id: 1 } 80 ordered: true 81 lsid: session0 82 # second transaction will be causally consistent with the first 83 readConcern: { afterClusterTime: 42 } 84 # txnNumber is incremented when retrying the transaction 85 txnNumber: { $numberLong: "2" } 86 startTransaction: true 87 autocommit: false 88 # omitted fields 89 writeConcern: ~ 90 command_name: insert 91 database_name: *database_name 92 - 93 command_started_event: 94 command: 95 commitTransaction: 1 96 lsid: session0 97 txnNumber: { $numberLong: "2" } 98 autocommit: false 99 # omitted fields 100 readConcern: ~ 101 startTransaction: ~ 102 writeConcern: ~ 103 command_name: commitTransaction 104 database_name: admin 105 - 106 command_started_event: 107 command: 108 insert: *collection_name 109 documents: 110 - { _id: 1 } 111 ordered: true 112 lsid: session0 113 # third transaction will be causally consistent with the second 114 readConcern: { afterClusterTime: 42 } 115 # txnNumber is incremented when retrying the transaction 116 txnNumber: { $numberLong: "3" } 117 startTransaction: true 118 autocommit: false 119 # omitted fields 120 writeConcern: ~ 121 command_name: insert 122 database_name: *database_name 123 - 124 command_started_event: 125 command: 126 commitTransaction: 1 127 lsid: session0 128 txnNumber: { $numberLong: "3" } 129 autocommit: false 130 # omitted fields 131 readConcern: ~ 132 startTransaction: ~ 133 writeConcern: ~ 134 command_name: commitTransaction 135 database_name: admin 136 outcome: &outcome 137 collection: 138 data: 139 - { _id: 1 } 140 - 141 description: transaction is retried after commitTransaction TransientTransactionError (WriteConflict) 142 failPoint: 143 configureFailPoint: failCommand 144 mode: { times: 2 } 145 data: 146 failCommands: ["commitTransaction"] 147 errorCode: 112 # WriteConflict 148 closeConnection: false 149 operations: *operations 150 expectations: *expectations 151 outcome: *outcome 152 - 153 description: transaction is retried after commitTransaction TransientTransactionError (SnapshotUnavailable) 154 failPoint: 155 configureFailPoint: failCommand 156 mode: { times: 2 } 157 data: 158 failCommands: ["commitTransaction"] 159 errorCode: 246 # SnapshotUnavailable 160 closeConnection: false 161 operations: *operations 162 expectations: *expectations 163 outcome: *outcome 164 - 165 description: transaction is retried after commitTransaction TransientTransactionError (NoSuchTransaction) 166 failPoint: 167 configureFailPoint: failCommand 168 mode: { times: 2 } 169 data: 170 failCommands: ["commitTransaction"] 171 errorCode: 251 # NoSuchTransaction 172 closeConnection: false 173 operations: *operations 174 expectations: *expectations 175 outcome: *outcome 176