1277 lines
35 KiB
YAML
1277 lines
35 KiB
YAML
runOn:
|
|
-
|
|
minServerVersion: "4.0"
|
|
topology: ["replicaset"]
|
|
-
|
|
minServerVersion: "4.1.8"
|
|
topology: ["sharded"]
|
|
# serverless proxy doesn't append error labels to errors in transactions
|
|
# caused by failpoints (CLOUDP-88216)
|
|
serverless: "forbid"
|
|
|
|
database_name: &database_name "transaction-tests"
|
|
collection_name: &collection_name "test"
|
|
|
|
data: []
|
|
|
|
tests:
|
|
- description: DuplicateKey errors do not contain transient label
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
- name: insertMany
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
documents:
|
|
- _id: 1
|
|
- _id: 1
|
|
result:
|
|
errorLabelsOmit: ["TransientTransactionError", "UnknownTransactionCommitResult"]
|
|
# DuplicateKey error code included in the bulk write error message
|
|
# returned by the server
|
|
errorContains: E11000
|
|
- name: abortTransaction
|
|
object: session0
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
abortTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: abortTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data: []
|
|
|
|
- description: NotWritablePrimary errors contain transient label
|
|
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: ["insert"]
|
|
errorCode: 10107 # NotWritablePrimary
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
- name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document:
|
|
_id: 1
|
|
result:
|
|
# Note, the server will return the errorLabel in this case.
|
|
errorLabelsContain: ["TransientTransactionError"]
|
|
errorLabelsOmit: ["RetryableWriteError", "UnknownTransactionCommitResult"]
|
|
- name: abortTransaction
|
|
object: session0
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
abortTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: abortTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data: []
|
|
|
|
- description: WriteConflict errors contain transient label
|
|
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: ["insert"]
|
|
errorCode: 112 # WriteConflict
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
- name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document:
|
|
_id: 1
|
|
result:
|
|
# Note, the server will return the errorLabel in this case.
|
|
errorLabelsContain: ["TransientTransactionError"]
|
|
errorLabelsOmit: ["RetryableWriteError", "UnknownTransactionCommitResult"]
|
|
- name: abortTransaction
|
|
object: session0
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
abortTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: abortTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data: []
|
|
|
|
- description: NoSuchTransaction errors contain transient label
|
|
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: ["insert"]
|
|
errorCode: 251 # NoSuchTransaction
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
- name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document:
|
|
_id: 1
|
|
result:
|
|
# Note, the server will return the errorLabel in this case.
|
|
errorLabelsContain: ["TransientTransactionError"]
|
|
errorLabelsOmit: ["RetryableWriteError", "UnknownTransactionCommitResult"]
|
|
- name: abortTransaction
|
|
object: session0
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
abortTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: abortTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data: []
|
|
|
|
- description: NoSuchTransaction errors on commit contain transient label
|
|
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: ["commitTransaction"]
|
|
errorCode: 251 # NoSuchTransaction
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
- name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document:
|
|
_id: 1
|
|
result:
|
|
insertedId: 1
|
|
- name: commitTransaction
|
|
object: session0
|
|
result:
|
|
# Note, the server will return the errorLabel in this case.
|
|
errorLabelsContain: ["TransientTransactionError"]
|
|
errorLabelsOmit: ["RetryableWriteError", "UnknownTransactionCommitResult"]
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data: []
|
|
|
|
- description: add TransientTransactionError label to connection errors, but do not add RetryableWriteError label
|
|
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 4 }
|
|
data:
|
|
failCommands: ["insert", "find", "aggregate", "distinct"]
|
|
closeConnection: true
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
- name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document:
|
|
_id: 1
|
|
result: &transient_label_only
|
|
errorLabelsContain: ["TransientTransactionError"]
|
|
# While a connection error would normally be retryable, these are not because
|
|
# they occur within a transaction; ensure the driver does not add the
|
|
# RetryableWriteError label to these errors.
|
|
errorLabelsOmit: ["RetryableWriteError", "UnknownTransactionCommitResult"]
|
|
- name: find
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
result: *transient_label_only
|
|
- name: aggregate
|
|
object: collection
|
|
arguments:
|
|
pipeline:
|
|
- $project:
|
|
_id: 1
|
|
session: session0
|
|
result: *transient_label_only
|
|
- name: distinct
|
|
object: collection
|
|
arguments:
|
|
fieldName: _id
|
|
session: session0
|
|
result: *transient_label_only
|
|
- name: abortTransaction
|
|
object: session0
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
find: *collection_name
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
command_name: find
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
aggregate: *collection_name
|
|
pipeline:
|
|
- $project:
|
|
_id: 1
|
|
cursor: {}
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
command_name: aggregate
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
distinct: *collection_name
|
|
key: _id
|
|
lsid: session0
|
|
readConcern:
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
command_name: distinct
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
abortTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: abortTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data: []
|
|
|
|
- description: add RetryableWriteError and UnknownTransactionCommitResult labels to connection errors
|
|
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 2 }
|
|
data:
|
|
failCommands: ["commitTransaction"]
|
|
closeConnection: true
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
- name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document:
|
|
_id: 1
|
|
result:
|
|
insertedId: 1
|
|
- name: commitTransaction
|
|
object: session0
|
|
result:
|
|
errorLabelsContain: ["RetryableWriteError", "UnknownTransactionCommitResult"]
|
|
errorLabelsOmit: ["TransientTransactionError"]
|
|
- name: commitTransaction
|
|
object: session0
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
# commitTransaction applies w:majority on retries
|
|
writeConcern: { w: majority, wtimeout: 10000 }
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern: { w: majority, wtimeout: 10000 }
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data:
|
|
- _id: 1
|
|
|
|
- description: add RetryableWriteError and UnknownTransactionCommitResult labels to retryable commit errors
|
|
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 2 }
|
|
data:
|
|
failCommands: ["commitTransaction"]
|
|
errorCode: 11602 # InterruptedDueToReplStateChange
|
|
errorLabels: ["RetryableWriteError"]
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
- name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document:
|
|
_id: 1
|
|
result:
|
|
insertedId: 1
|
|
- name: commitTransaction
|
|
object: session0
|
|
result:
|
|
errorLabelsContain: ["RetryableWriteError", "UnknownTransactionCommitResult"]
|
|
errorLabelsOmit: ["TransientTransactionError"]
|
|
- name: commitTransaction
|
|
object: session0
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
# commitTransaction applies w:majority on retries
|
|
writeConcern: { w: majority, wtimeout: 10000 }
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern: { w: majority, wtimeout: 10000 }
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data:
|
|
- _id: 1
|
|
|
|
- description: add RetryableWriteError and UnknownTransactionCommitResult labels to writeConcernError ShutdownInProgress
|
|
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 2 }
|
|
data:
|
|
failCommands: ["commitTransaction"]
|
|
writeConcernError:
|
|
code: 91
|
|
errmsg: Replication is being shut down
|
|
errorLabels: ["RetryableWriteError"]
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
arguments:
|
|
options:
|
|
writeConcern:
|
|
w: majority
|
|
- name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document:
|
|
_id: 1
|
|
result:
|
|
insertedId: 1
|
|
- name: commitTransaction
|
|
object: session0
|
|
result:
|
|
errorLabelsContain: ["RetryableWriteError", "UnknownTransactionCommitResult"]
|
|
errorLabelsOmit: ["TransientTransactionError"]
|
|
- name: commitTransaction
|
|
object: session0
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern:
|
|
w: majority
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
# commitTransaction applies w:majority on retries
|
|
writeConcern: { w: majority, wtimeout: 10000 }
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
# commitTransaction applies w:majority on retries
|
|
writeConcern: { w: majority, wtimeout: 10000 }
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data:
|
|
- _id: 1
|
|
|
|
- description: do not add RetryableWriteError label to writeConcernError ShutdownInProgress that occurs within transaction
|
|
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: ["insert"]
|
|
writeConcernError:
|
|
code: 91
|
|
errmsg: Replication is being shut down
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
arguments:
|
|
options:
|
|
writeConcern:
|
|
w: majority
|
|
- name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document:
|
|
_id: 1
|
|
result:
|
|
errorLabelsContain: []
|
|
errorLabelsOmit: ["RetryableWriteError", "TransientTransactionError", "UnknownTransactionCommitResult"]
|
|
- name: abortTransaction
|
|
object: session0
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
abortTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
command_name: abortTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data: []
|
|
|
|
- description: add UnknownTransactionCommitResult label to writeConcernError WriteConcernFailed
|
|
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: ["commitTransaction"]
|
|
writeConcernError:
|
|
code: 64 # WriteConcernFailed without wtimeout
|
|
errmsg: multiple errors reported
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
arguments:
|
|
options:
|
|
writeConcern:
|
|
w: majority
|
|
- name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document:
|
|
_id: 1
|
|
result:
|
|
insertedId: 1
|
|
- name: commitTransaction
|
|
object: session0
|
|
result:
|
|
errorLabelsContain: ["UnknownTransactionCommitResult"]
|
|
errorLabelsOmit: ["RetryableWriteError", "TransientTransactionError"]
|
|
- name: commitTransaction
|
|
object: session0
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern:
|
|
w: majority
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
# commitTransaction applies w:majority on retries
|
|
writeConcern: { w: majority, wtimeout: 10000 }
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data:
|
|
- _id: 1
|
|
|
|
- description: add UnknownTransactionCommitResult label to writeConcernError WriteConcernFailed with wtimeout
|
|
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: ["commitTransaction"]
|
|
writeConcernError:
|
|
code: 64
|
|
codeName: WriteConcernFailed
|
|
errmsg: waiting for replication timed out
|
|
errInfo: {wtimeout: True}
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
arguments:
|
|
options:
|
|
writeConcern:
|
|
w: majority
|
|
- name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document:
|
|
_id: 1
|
|
result:
|
|
insertedId: 1
|
|
- name: commitTransaction
|
|
object: session0
|
|
result:
|
|
errorLabelsContain: ["UnknownTransactionCommitResult"]
|
|
errorLabelsOmit: ["RetryableWriteError", "TransientTransactionError"]
|
|
- name: commitTransaction
|
|
object: session0
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern:
|
|
w: majority
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
# commitTransaction applies w:majority on retries
|
|
writeConcern: { w: majority, wtimeout: 10000 }
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data:
|
|
- _id: 1
|
|
|
|
- description: omit UnknownTransactionCommitResult label from writeConcernError UnsatisfiableWriteConcern
|
|
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: ["commitTransaction"]
|
|
writeConcernError:
|
|
code: 100 # UnsatisfiableWriteConcern
|
|
errmsg: Not enough data-bearing nodes
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
arguments:
|
|
options:
|
|
writeConcern:
|
|
w: majority
|
|
- name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document:
|
|
_id: 1
|
|
result:
|
|
insertedId: 1
|
|
- name: commitTransaction
|
|
object: session0
|
|
result:
|
|
errorLabelsOmit: ["RetryableWriteError", "TransientTransactionError", "UnknownTransactionCommitResult"]
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern:
|
|
w: majority
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data:
|
|
- _id: 1
|
|
|
|
- description: omit UnknownTransactionCommitResult label from writeConcernError UnknownReplWriteConcern
|
|
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: ["commitTransaction"]
|
|
writeConcernError:
|
|
code: 79 # UnknownReplWriteConcern
|
|
errmsg: No write concern mode named 'blah' found in replica set configuration
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
arguments:
|
|
options:
|
|
writeConcern:
|
|
w: majority
|
|
- name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document:
|
|
_id: 1
|
|
result:
|
|
insertedId: 1
|
|
- name: commitTransaction
|
|
object: session0
|
|
result:
|
|
errorLabelsOmit: ["RetryableWriteConcern", "TransientTransactionError", "UnknownTransactionCommitResult"]
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern:
|
|
w: majority
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data:
|
|
- _id: 1
|
|
|
|
- description: do not add UnknownTransactionCommitResult label to MaxTimeMSExpired inside transactions
|
|
skipReason: "GODRIVER-2348: maxTimeMS is deprecated"
|
|
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: ["aggregate"]
|
|
errorCode: 50 # MaxTimeMSExpired
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
- name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document:
|
|
_id: 1
|
|
result:
|
|
insertedId: 1
|
|
- name: aggregate
|
|
object: collection
|
|
arguments:
|
|
pipeline:
|
|
- $project:
|
|
_id: 1
|
|
maxTimeMS: 60000
|
|
session: session0
|
|
result:
|
|
errorLabelsOmit: ["RetryableWriteError", "UnknownTransactionCommitResult", "TransientTransactionError"]
|
|
- name: abortTransaction
|
|
object: session0
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
aggregate: *collection_name
|
|
pipeline:
|
|
- $project:
|
|
_id: 1
|
|
cursor: {}
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
autocommit: false
|
|
maxTimeMS: 60000
|
|
command_name: aggregate
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
abortTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: abortTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data: []
|
|
|
|
- description: add UnknownTransactionCommitResult label to MaxTimeMSExpired
|
|
skipReason: "GODRIVER-2348: maxCommitTimeMS is deprecated"
|
|
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: ["commitTransaction"]
|
|
errorCode: 50 # MaxTimeMSExpired
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
arguments:
|
|
options:
|
|
writeConcern:
|
|
w: majority
|
|
maxCommitTimeMS: 60000
|
|
- name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document:
|
|
_id: 1
|
|
result:
|
|
insertedId: 1
|
|
- name: commitTransaction
|
|
object: session0
|
|
result:
|
|
errorLabelsContain: ["UnknownTransactionCommitResult"]
|
|
errorLabelsOmit: ["RetryableWriteError", "TransientTransactionError"]
|
|
- name: commitTransaction
|
|
object: session0
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern:
|
|
w: majority
|
|
maxTimeMS: 60000
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
# commitTransaction applies w:majority on retries
|
|
writeConcern: { w: majority, wtimeout: 10000 }
|
|
maxTimeMS: 60000
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data:
|
|
- _id: 1
|
|
|
|
- description: add UnknownTransactionCommitResult label to writeConcernError MaxTimeMSExpired
|
|
skipReason: "GODRIVER-2348: maxCommitTimeMS is deprecated"
|
|
|
|
failPoint:
|
|
configureFailPoint: failCommand
|
|
mode: { times: 1 }
|
|
data:
|
|
failCommands: ["commitTransaction"]
|
|
writeConcernError:
|
|
code: 50 # MaxTimeMSExpired
|
|
errmsg: operation exceeded time limit
|
|
|
|
operations:
|
|
- name: startTransaction
|
|
object: session0
|
|
arguments:
|
|
options:
|
|
writeConcern:
|
|
w: majority
|
|
maxCommitTimeMS: 60000
|
|
- name: insertOne
|
|
object: collection
|
|
arguments:
|
|
session: session0
|
|
document:
|
|
_id: 1
|
|
result:
|
|
insertedId: 1
|
|
- name: commitTransaction
|
|
object: session0
|
|
result:
|
|
errorLabelsContain: ["UnknownTransactionCommitResult"]
|
|
errorLabelsOmit: ["RetryableWriteError", "TransientTransactionError"]
|
|
- name: commitTransaction
|
|
object: session0
|
|
|
|
expectations:
|
|
- command_started_event:
|
|
command:
|
|
insert: *collection_name
|
|
documents:
|
|
- _id: 1
|
|
ordered: true
|
|
readConcern:
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction: true
|
|
autocommit: false
|
|
writeConcern:
|
|
command_name: insert
|
|
database_name: *database_name
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
writeConcern:
|
|
w: majority
|
|
maxTimeMS: 60000
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
- command_started_event:
|
|
command:
|
|
commitTransaction: 1
|
|
lsid: session0
|
|
txnNumber:
|
|
$numberLong: "1"
|
|
startTransaction:
|
|
autocommit: false
|
|
# commitTransaction applies w:majority on retries
|
|
writeConcern: { w: majority, wtimeout: 10000 }
|
|
maxTimeMS: 60000
|
|
command_name: commitTransaction
|
|
database_name: admin
|
|
|
|
outcome:
|
|
collection:
|
|
data:
|
|
- _id: 1
|