Skip to content

Commit 5cf097e

Browse files
committed
PYTHON-4807 - Specify how to handle unacknowledged+(ordered|verbose|multi-batch) bulk writes
1 parent 5c1c241 commit 5cf097e

File tree

4 files changed

+75
-2
lines changed

4 files changed

+75
-2
lines changed

pymongo/asynchronous/mongo_client.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2354,6 +2354,13 @@ async def bulk_write(
23542354
if not write_concern:
23552355
write_concern = self.write_concern
23562356

2357+
if not write_concern.acknowledged and verbose_results:
2358+
raise InvalidOperation(
2359+
"Cannot request unacknowledged write concern and verbose results"
2360+
)
2361+
elif not write_concern.acknowledged and ordered:
2362+
raise InvalidOperation("Cannot request unacknowledged write concern and ordered writes")
2363+
23572364
common.validate_list("models", models)
23582365

23592366
blk = _AsyncClientBulk(

pymongo/synchronous/mongo_client.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2342,6 +2342,13 @@ def bulk_write(
23422342
if not write_concern:
23432343
write_concern = self.write_concern
23442344

2345+
if not write_concern.acknowledged and verbose_results:
2346+
raise InvalidOperation(
2347+
"Cannot request unacknowledged write concern and verbose results"
2348+
)
2349+
elif not write_concern.acknowledged and ordered:
2350+
raise InvalidOperation("Cannot request unacknowledged write concern and ordered writes")
2351+
23452352
common.validate_list("models", models)
23462353

23472354
blk = _ClientBulk(

test/command_monitoring/unacknowledged-client-bulkWrite.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@
9191
}
9292
}
9393
}
94-
]
94+
],
95+
"ordered": false
9596
},
9697
"expectResult": {
9798
"insertedCount": {
@@ -158,7 +159,7 @@
158159
"command": {
159160
"bulkWrite": 1,
160161
"errorsOnly": true,
161-
"ordered": true,
162+
"ordered": false,
162163
"ops": [
163164
{
164165
"insert": 0,

test/crud/unified/client-bulkWrite-errors.json

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,64 @@
450450
}
451451
}
452452
]
453+
},
454+
{
455+
"description": "Requesting unacknowledged write with verboseResults is a client-side error",
456+
"operations": [
457+
{
458+
"name": "clientBulkWrite",
459+
"object": "client0",
460+
"arguments": {
461+
"models": [
462+
{
463+
"insertOne": {
464+
"namespace": "crud-tests.coll0",
465+
"document": {
466+
"_id": 10
467+
}
468+
}
469+
}
470+
],
471+
"verboseResults": true,
472+
"ordered": false,
473+
"writeConcern": {
474+
"w": 0
475+
}
476+
},
477+
"expectError": {
478+
"isClientError": true,
479+
"errorContains": "Cannot request unacknowledged write concern and verbose results"
480+
}
481+
}
482+
]
483+
},
484+
{
485+
"description": "Requesting unacknowledged write with ordered is a client-side error",
486+
"operations": [
487+
{
488+
"name": "clientBulkWrite",
489+
"object": "client0",
490+
"arguments": {
491+
"models": [
492+
{
493+
"insertOne": {
494+
"namespace": "crud-tests.coll0",
495+
"document": {
496+
"_id": 10
497+
}
498+
}
499+
}
500+
],
501+
"writeConcern": {
502+
"w": 0
503+
}
504+
},
505+
"expectError": {
506+
"isClientError": true,
507+
"errorContains": "Cannot request unacknowledged write concern and ordered writes"
508+
}
509+
}
510+
]
453511
}
454512
]
455513
}

0 commit comments

Comments
 (0)