217 lines
7.0 KiB
YAML
217 lines
7.0 KiB
YAML
runOn:
|
|
-
|
|
minServerVersion: "4.0"
|
|
topology: ["replicaset"]
|
|
-
|
|
minServerVersion: "4.1.8"
|
|
topology: ["sharded"]
|
|
|
|
database_name: &database_name "withTransaction-tests"
|
|
collection_name: &collection_name "test"
|
|
|
|
data: []
|
|
|
|
tests:
|
|
-
|
|
description: commitTransaction is retried after WriteConcernFailed timeout error
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 2 }
|
|
data:
|
|
failCommands: ["commitTransaction"]
|
|
# Do not specify closeConnection: false, since that would conflict
|
|
# with writeConcernError (see: SERVER-39292)
|
|
writeConcernError:
|
|
code: 64
|
|
codeName: WriteConcernFailed
|
|
errmsg: "waiting for replication timed out"
|
|
errInfo: { wtimeout: true }
|
|
operations:
|
|
- &operation
|
|
name: withTransaction
|
|
object: session0
|
|
arguments:
|
|
callback:
|
|
operations:
|
|
-
|
|
name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document: { _id: 1 }
|
|
result:
|
|
insertedId: 1
|
|
expectations: &expectations_with_retries
|
|
-
|
|
command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- { _id: 1 }
|
|
ordered: true
|
|
lsid: session0
|
|
txnNumber: { $numberLong: "1" }
|
|
startTransaction: true
|
|
autocommit: false
|
|
# omitted fields
|
|
readConcern: ~
|
|
writeConcern: ~
|
|
command_name: insert
|
|
database_name: *database_name
|
|
-
|
|
command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber: { $numberLong: "1" }
|
|
autocommit: false
|
|
# omitted fields
|
|
readConcern: ~
|
|
startTransaction: ~
|
|
writeConcern: ~
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
-
|
|
command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber: { $numberLong: "1" }
|
|
autocommit: false
|
|
# commitTransaction applies w:majority on retries (SPEC-1185)
|
|
writeConcern: { w: majority, wtimeout: 10000 }
|
|
# omitted fields
|
|
readConcern: ~
|
|
startTransaction: ~
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
-
|
|
command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber: { $numberLong: "1" }
|
|
autocommit: false
|
|
# commitTransaction applies w:majority on retries (SPEC-1185)
|
|
writeConcern: { w: majority, wtimeout: 10000 }
|
|
# omitted fields
|
|
readConcern: ~
|
|
startTransaction: ~
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
# The write operation is still applied despite the write concern error
|
|
outcome: &outcome
|
|
collection:
|
|
data:
|
|
- { _id: 1 }
|
|
-
|
|
# This test configures the fail point to return an error with the
|
|
# WriteConcernFailed code but without errInfo that would identify it as a
|
|
# wtimeout error. This tests that drivers do not assume that all
|
|
# WriteConcernFailed errors are due to a replication timeout.
|
|
description: commitTransaction is retried after WriteConcernFailed non-timeout error
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 2 }
|
|
data:
|
|
failCommands: ["commitTransaction"]
|
|
# Do not specify closeConnection: false, since that would conflict
|
|
# with writeConcernError (see: SERVER-39292)
|
|
writeConcernError:
|
|
code: 64
|
|
codeName: WriteConcernFailed
|
|
errmsg: "multiple errors reported"
|
|
operations:
|
|
- *operation
|
|
expectations: *expectations_with_retries
|
|
outcome: *outcome
|
|
-
|
|
description: commitTransaction is not retried after UnknownReplWriteConcern error
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: ["commitTransaction"]
|
|
writeConcernError:
|
|
code: 79
|
|
codeName: UnknownReplWriteConcern
|
|
errmsg: "No write concern mode named 'foo' found in replica set configuration"
|
|
operations:
|
|
- <<: *operation
|
|
result:
|
|
errorCodeName: UnknownReplWriteConcern
|
|
errorLabelsOmit: ["TransientTransactionError", "UnknownTransactionCommitResult"]
|
|
expectations: &expectations_without_retries
|
|
-
|
|
command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- { _id: 1 }
|
|
ordered: true
|
|
lsid: session0
|
|
txnNumber: { $numberLong: "1" }
|
|
startTransaction: true
|
|
autocommit: false
|
|
# omitted fields
|
|
readConcern: ~
|
|
writeConcern: ~
|
|
command_name: insert
|
|
database_name: *database_name
|
|
-
|
|
command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber: { $numberLong: "1" }
|
|
autocommit: false
|
|
# omitted fields
|
|
readConcern: ~
|
|
startTransaction: ~
|
|
writeConcern: ~
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
# failCommand with writeConcernError still applies the write operation(s)
|
|
outcome: *outcome
|
|
|
|
-
|
|
description: commitTransaction is not retried after UnsatisfiableWriteConcern error
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: ["commitTransaction"]
|
|
writeConcernError:
|
|
code: 100
|
|
codeName: UnsatisfiableWriteConcern
|
|
errmsg: "Not enough data-bearing nodes"
|
|
operations:
|
|
- <<: *operation
|
|
result:
|
|
errorCodeName: UnsatisfiableWriteConcern
|
|
errorLabelsOmit: ["TransientTransactionError", "UnknownTransactionCommitResult"]
|
|
expectations: *expectations_without_retries
|
|
# failCommand with writeConcernError still applies the write operation(s)
|
|
outcome: *outcome
|
|
|
|
-
|
|
description: commitTransaction is not retried after MaxTimeMSExpired error
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: ["commitTransaction"]
|
|
writeConcernError:
|
|
code: 50
|
|
codeName: MaxTimeMSExpired
|
|
errmsg: "operation exceeded time limit"
|
|
operations:
|
|
- <<: *operation
|
|
result:
|
|
errorCodeName: MaxTimeMSExpired
|
|
errorLabelsContain: ["UnknownTransactionCommitResult"]
|
|
errorLabelsOmit: ["TransientTransactionError"]
|
|
expectations: *expectations_without_retries
|
|
# failCommand with writeConcernError still applies the write operation(s)
|
|
outcome: *outcome
|