bson/testdata/transactions/unified/client-bulkWrite.yml
2025-03-17 20:58:26 +01:00

264 lines
8.0 KiB
YAML

description: "client bulkWrite transactions"
schemaVersion: "1.4" # To support `serverless: forbid`
runOnRequirements:
- minServerVersion: "8.0"
topologies:
- replicaset
- sharded
- load-balanced
serverless: forbid
createEntities:
- client:
id: &client0 client0
observeEvents: [ commandStartedEvent ]
- database:
id: &database0 database0
client: *client0
databaseName: &database0Name transaction-tests
- collection:
id: &collection0 collection0
database: *database0
collectionName: &collection0Name coll0
- session:
id: &session0 session0
client: *client0
- client:
id: &client_with_wmajority client_with_wmajority
uriOptions:
w: majority
observeEvents:
- commandStartedEvent
- session:
id: &session_with_wmajority session_with_wmajority
client: *client_with_wmajority
_yamlAnchors:
namespace: &namespace "transaction-tests.coll0"
initialData:
- databaseName: *database0Name
collectionName: *collection0Name
documents:
- { _id: 1, x: 11 }
- { _id: 2, x: 22 }
- { _id: 3, x: 33 }
- { _id: 5, x: 55 }
- { _id: 6, x: 66 }
- { _id: 7, x: 77 }
tests:
- description: "client bulkWrite in a transaction"
operations:
- object: *session0
name: startTransaction
- object: *client0
name: clientBulkWrite
arguments:
session: *session0
models:
- insertOne:
namespace: *namespace
document: { _id: 8, x: 88 }
- updateOne:
namespace: *namespace
filter: { _id: 1 }
update: { $inc: { x: 1 } }
- updateMany:
namespace: *namespace
filter:
$and: [ { _id: { $gt: 1 } }, { _id: { $lte: 3 } } ]
update: { $inc: { x: 2 } }
- replaceOne:
namespace: *namespace
filter: { _id: 4 }
replacement: { x: 44 }
upsert: true
- deleteOne:
namespace: *namespace
filter: { _id: 5 }
- deleteMany:
namespace: *namespace
filter:
$and: [ { _id: { $gt: 5 } }, { _id: { $lte: 7 } } ]
verboseResults: true
expectResult:
insertedCount: 1
upsertedCount: 1
matchedCount: 3
modifiedCount: 3
deletedCount: 3
insertResults:
0:
insertedId: 8
updateResults:
1:
matchedCount: 1
modifiedCount: 1
upsertedId: { $$exists: false }
2:
matchedCount: 2
modifiedCount: 2
upsertedId: { $$exists: false }
3:
matchedCount: 1
modifiedCount: 0
upsertedId: 4
deleteResults:
4:
deletedCount: 1
5:
deletedCount: 2
- object: *session0
name: commitTransaction
expectEvents:
- client: *client0
events:
- commandStartedEvent:
commandName: bulkWrite
databaseName: admin
command:
lsid: { $$sessionLsid: *session0 }
txnNumber: 1
startTransaction: true
autocommit: false
writeConcern: { $$exists: false }
bulkWrite: 1
errorsOnly: false
ordered: true
ops:
- insert: 0
document: { _id: 8, x: 88 }
- update: 0
filter: { _id: 1 }
updateMods: { $inc: { x: 1 } }
multi: false
- update: 0
filter:
$and: [ { _id: { $gt: 1 } }, { _id: { $lte: 3 } } ]
updateMods: { $inc: { x: 2 } }
multi: true
- update: 0
filter: { _id: 4 }
updateMods: { x: 44 }
upsert: true
multi: false
- delete: 0
filter: { _id: 5 }
multi: false
- delete: 0
filter:
$and: [ { _id: { $gt: 5 } }, { _id: { $lte: 7 } } ]
multi: true
nsInfo:
- ns: *namespace
- commandStartedEvent:
commandName: commitTransaction
databaseName: admin
command:
commitTransaction: 1
lsid: { $$sessionLsid: *session0 }
txnNumber: 1
startTransaction: { $$exists: false }
autocommit: false
writeConcern: { $$exists: false }
outcome:
- collectionName: *collection0Name
databaseName: *database0Name
documents:
- { _id: 1, x: 12 }
- { _id: 2, x: 24 }
- { _id: 3, x: 35 }
- { _id: 4, x: 44 }
- { _id: 8, x: 88 }
- description: 'client writeConcern ignored for client bulkWrite in transaction'
operations:
- object: *session_with_wmajority
name: startTransaction
arguments:
writeConcern:
w: 1
- object: *client_with_wmajority
name: clientBulkWrite
arguments:
session: *session_with_wmajority
models:
- insertOne:
namespace: *namespace
document: { _id: 8, x: 88 }
expectResult:
insertedCount: 1
upsertedCount: 0
matchedCount: 0
modifiedCount: 0
deletedCount: 0
insertResults:
$$unsetOrMatches: {}
updateResults:
$$unsetOrMatches: {}
deleteResults:
$$unsetOrMatches: {}
- object: *session_with_wmajority
name: commitTransaction
expectEvents:
-
client: *client_with_wmajority
events:
- commandStartedEvent:
commandName: bulkWrite
databaseName: admin
command:
lsid: { $$sessionLsid: *session_with_wmajority }
txnNumber: 1
startTransaction: true
autocommit: false
writeConcern: { $$exists: false }
bulkWrite: 1
errorsOnly: true
ordered: true
ops:
- insert: 0
document: { _id: 8, x: 88 }
nsInfo:
- ns: *namespace
-
commandStartedEvent:
command:
commitTransaction: 1
lsid: { $$sessionLsid: *session_with_wmajority }
txnNumber: { $numberLong: '1' }
startTransaction: { $$exists: false }
autocommit: false
writeConcern:
w: 1
commandName: commitTransaction
databaseName: admin
outcome:
- collectionName: *collection0Name
databaseName: *database0Name
documents:
- { _id: 1, x: 11 }
- { _id: 2, x: 22 }
- { _id: 3, x: 33 }
- { _id: 5, x: 55 }
- { _id: 6, x: 66 }
- { _id: 7, x: 77 }
- { _id: 8, x: 88 }
- description: "client bulkWrite with writeConcern in a transaction causes a transaction error"
operations:
- object: *session0
name: startTransaction
- object: *client0
name: clientBulkWrite
arguments:
session: *session0
writeConcern:
w: 1
models:
- insertOne:
namespace: *namespace
document: { _id: 8, x: 88 }
expectError:
isClientError: true
errorContains: "Cannot set write concern after starting a transaction"