From b60c6f0455732d84932081188d99e3d65a063c99 Mon Sep 17 00:00:00 2001 From: Isabel Atkinson Date: Mon, 23 Sep 2024 14:05:25 -0600 Subject: [PATCH 1/8] DRIVERS-2975 Fix logic for determining whether to populate BulkWriteException.partialResult --- source/crud/bulk-write.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/source/crud/bulk-write.md b/source/crud/bulk-write.md index 6e279f4fa0..8a4e61f78e 100644 --- a/source/crud/bulk-write.md +++ b/source/crud/bulk-write.md @@ -683,9 +683,16 @@ The server's response to `bulkWrite` has the following format: } ``` -If any operations were successful (i.e. `nErrors` is less than the number of operations that were sent), drivers MUST -record the summary count fields in a `BulkWriteResult` to be returned to the user or embedded in a `BulkWriteException`. -Drivers MUST NOT populate the `partialResult` field in `BulkWriteException` if no operations were successful. +Drivers MUST record the summary count fields in a `BulkWriteResult` to be returned to the user or embedded in a +`BulkWriteException` if the response indicates that at least one write was successful: + +- For ordered bulk writes, at least one write was successful if `nErrors` is 0 or the `idx` value for the write error + in `cursor.firstBatch` is greater than 0. +- For unordered bulk writes, at least one write was successful if `nErrors` is less than the number of operations that + were included in the `bulkWrite` command. + +Drivers MUST NOT populate the `partialResult` field in `BulkWriteException` if it cannot be determined that at least +one write was successfully performed. Drivers MUST attempt to consume the contents of the cursor returned in the server's `bulkWrite` response before returning to the user. This is required regardless of whether the user requested verbose or summary results, as the @@ -859,6 +866,8 @@ batch-splitting to standardize implementations across drivers and simplify batch ## **Changelog** +- 2024-09-20: Update the `partialResult` population logic to account for ordered bulk writes. + - 2024-09-18: Relax numeric type requirements for indexes. - 2024-05-17: Update specification status to "Accepted". From f80507881225a66560a7a734387cc9002dd28f7f Mon Sep 17 00:00:00 2001 From: Isabel Atkinson Date: Mon, 23 Sep 2024 14:05:34 -0600 Subject: [PATCH 2/8] add tests --- .../client-bulkWrite-partialResults.json | 468 ++++++++++++++++++ .../client-bulkWrite-partialResults.yml | 239 +++++++++ 2 files changed, 707 insertions(+) create mode 100644 source/crud/tests/unified/client-bulkWrite-partialResults.json create mode 100644 source/crud/tests/unified/client-bulkWrite-partialResults.yml diff --git a/source/crud/tests/unified/client-bulkWrite-partialResults.json b/source/crud/tests/unified/client-bulkWrite-partialResults.json new file mode 100644 index 0000000000..53129ab952 --- /dev/null +++ b/source/crud/tests/unified/client-bulkWrite-partialResults.json @@ -0,0 +1,468 @@ +{ + "description": "client bulkWrite partial results", + "schemaVersion": "1.4", + "runOnRequirements": [ + { + "minServerVersion": "8.0", + "serverless": "forbid" + } + ], + "createEntities": [ + { + "client": { + "id": "client0", + "observeEvents": [ + "commandStartedEvent" + ] + } + }, + { + "database": { + "id": "database0", + "client": "client0", + "databaseName": "crud-tests" + } + }, + { + "collection": { + "id": "collection0", + "database": "database0", + "collectionName": "coll0" + } + } + ], + "initialData": [ + { + "collectionName": "coll0", + "databaseName": "crud-tests", + "documents": [ + { + "_id": 1, + "x": 11 + } + ] + } + ], + "_yamlAnchors": { + "namespace": "crud-tests.coll0", + "newDocument": { + "_id": 2, + "x": 22 + } + }, + "tests": [ + { + "description": "partialResult is unset when first operation fails during an ordered bulk write (verbose)", + "operations": [ + { + "object": "client0", + "name": "clientBulkWrite", + "arguments": { + "models": [ + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 1, + "x": 11 + } + } + }, + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 2, + "x": 22 + } + } + } + ], + "ordered": true, + "verboseResults": true + }, + "expectError": { + "expectResult": { + "$$unsetOrMatches": {} + } + } + } + ] + }, + { + "description": "partialResult is unset when first operation fails during an ordered bulk write (summary)", + "operations": [ + { + "object": "client0", + "name": "clientBulkWrite", + "arguments": { + "models": [ + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 1, + "x": 11 + } + } + }, + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 2, + "x": 22 + } + } + } + ], + "ordered": true, + "verboseResults": false + }, + "expectError": { + "expectResult": { + "$$unsetOrMatches": {} + } + } + } + ] + }, + { + "description": "partialResult is set when second operation fails during an ordered bulk write (verbose)", + "operations": [ + { + "object": "client0", + "name": "clientBulkWrite", + "arguments": { + "models": [ + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 2, + "x": 22 + } + } + }, + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 1, + "x": 11 + } + } + } + ], + "ordered": true, + "verboseResults": true + }, + "expectError": { + "expectResult": { + "insertedCount": 1, + "upsertedCount": 0, + "matchedCount": 0, + "modifiedCount": 0, + "deletedCount": 0, + "insertResults": { + "0": { + "insertedId": 2 + } + }, + "updateResults": {}, + "deleteResults": {} + } + } + } + ] + }, + { + "description": "partialResult is set when second operation fails during an ordered bulk write (summary)", + "operations": [ + { + "object": "client0", + "name": "clientBulkWrite", + "arguments": { + "models": [ + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 2, + "x": 22 + } + } + }, + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 1, + "x": 11 + } + } + } + ], + "ordered": true, + "verboseResults": false + }, + "expectError": { + "expectResult": { + "insertedCount": 1, + "upsertedCount": 0, + "matchedCount": 0, + "modifiedCount": 0, + "deletedCount": 0, + "insertResults": { + "$$unsetOrMatches": {} + }, + "updateResults": { + "$$unsetOrMatches": {} + }, + "deleteResults": { + "$$unsetOrMatches": {} + } + } + } + } + ] + }, + { + "description": "partialResult is unset when all operations fail during an unordered bulk write", + "operations": [ + { + "object": "client0", + "name": "clientBulkWrite", + "arguments": { + "models": [ + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 1, + "x": 11 + } + } + }, + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 1, + "x": 11 + } + } + } + ], + "ordered": false + }, + "expectError": { + "expectResult": { + "$$unsetOrMatches": {} + } + } + } + ] + }, + { + "description": "partialResult is set when first operation fails during an unordered bulk write (verbose)", + "operations": [ + { + "object": "client0", + "name": "clientBulkWrite", + "arguments": { + "models": [ + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 1, + "x": 11 + } + } + }, + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 2, + "x": 22 + } + } + } + ], + "ordered": false, + "verboseResults": true + }, + "expectError": { + "expectResult": { + "insertedCount": 1, + "upsertedCount": 0, + "matchedCount": 0, + "modifiedCount": 0, + "deletedCount": 0, + "insertResults": { + "1": { + "insertedId": 2 + } + }, + "updateResults": {}, + "deleteResults": {} + } + } + } + ] + }, + { + "description": "partialResult is set when first operation fails during an unordered bulk write (summary)", + "operations": [ + { + "object": "client0", + "name": "clientBulkWrite", + "arguments": { + "models": [ + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 1, + "x": 11 + } + } + }, + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 2, + "x": 22 + } + } + } + ], + "ordered": false, + "verboseResults": false + }, + "expectError": { + "expectResult": { + "insertedCount": 1, + "upsertedCount": 0, + "matchedCount": 0, + "modifiedCount": 0, + "deletedCount": 0, + "insertResults": { + "$$unsetOrMatches": {} + }, + "updateResults": { + "$$unsetOrMatches": {} + }, + "deleteResults": { + "$$unsetOrMatches": {} + } + } + } + } + ] + }, + { + "description": "partialResult is set when second operation fails during an unordered bulk write (verbose)", + "operations": [ + { + "object": "client0", + "name": "clientBulkWrite", + "arguments": { + "models": [ + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 2, + "x": 22 + } + } + }, + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 1, + "x": 11 + } + } + } + ], + "ordered": false, + "verboseResults": true + }, + "expectError": { + "expectResult": { + "insertedCount": 1, + "upsertedCount": 0, + "matchedCount": 0, + "modifiedCount": 0, + "deletedCount": 0, + "insertResults": { + "0": { + "insertedId": 2 + } + }, + "updateResults": {}, + "deleteResults": {} + } + } + } + ] + }, + { + "description": "partialResult is set when first operation fails during an unordered bulk write (summary)", + "operations": [ + { + "object": "client0", + "name": "clientBulkWrite", + "arguments": { + "models": [ + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 2, + "x": 22 + } + } + }, + { + "insertOne": { + "namespace": "crud-tests.coll0", + "document": { + "_id": 1, + "x": 11 + } + } + } + ], + "ordered": false, + "verboseResults": false + }, + "expectError": { + "expectResult": { + "insertedCount": 1, + "upsertedCount": 0, + "matchedCount": 0, + "modifiedCount": 0, + "deletedCount": 0, + "insertResults": { + "$$unsetOrMatches": {} + }, + "updateResults": { + "$$unsetOrMatches": {} + }, + "deleteResults": { + "$$unsetOrMatches": {} + } + } + } + } + ] + } + ] +} diff --git a/source/crud/tests/unified/client-bulkWrite-partialResults.yml b/source/crud/tests/unified/client-bulkWrite-partialResults.yml new file mode 100644 index 0000000000..9808e79418 --- /dev/null +++ b/source/crud/tests/unified/client-bulkWrite-partialResults.yml @@ -0,0 +1,239 @@ +description: "client bulkWrite partial results" +schemaVersion: "1.4" # To support `serverless: forbid` +runOnRequirements: + - minServerVersion: "8.0" + serverless: forbid + +createEntities: + - client: + id: &client0 client0 + observeEvents: [ commandStartedEvent ] + - database: + id: &database0 database0 + client: *client0 + databaseName: &database0Name crud-tests + - collection: + id: &collection0 collection0 + database: *database0 + collectionName: &collection0Name coll0 + +initialData: + - collectionName: *collection0Name + databaseName: *database0Name + documents: + - &existingDocument { _id: 1, x: 11 } + +_yamlAnchors: + namespace: &namespace "crud-tests.coll0" + newDocument: &newDocument { _id: 2, x: 22 } + +tests: + - description: "partialResult is unset when first operation fails during an ordered bulk write (verbose)" + operations: + - object: *client0 + name: clientBulkWrite + arguments: + models: + - insertOne: + namespace: *namespace + document: *existingDocument + - insertOne: + namespace: *namespace + document: *newDocument + ordered: true + verboseResults: true + expectError: + expectResult: + $$unsetOrMatches: {} + - description: "partialResult is unset when first operation fails during an ordered bulk write (summary)" + operations: + - object: *client0 + name: clientBulkWrite + arguments: + models: + - insertOne: + namespace: *namespace + document: *existingDocument + - insertOne: + namespace: *namespace + document: *newDocument + ordered: true + verboseResults: false + expectError: + expectResult: + $$unsetOrMatches: {} + - description: "partialResult is set when second operation fails during an ordered bulk write (verbose)" + operations: + - object: *client0 + name: clientBulkWrite + arguments: + models: + - insertOne: + namespace: *namespace + document: *newDocument + - insertOne: + namespace: *namespace + document: *existingDocument + ordered: true + verboseResults: true + expectError: + expectResult: + insertedCount: 1 + upsertedCount: 0 + matchedCount: 0 + modifiedCount: 0 + deletedCount: 0 + insertResults: + 0: + insertedId: 2 + updateResults: {} + deleteResults: {} + - description: "partialResult is set when second operation fails during an ordered bulk write (summary)" + operations: + - object: *client0 + name: clientBulkWrite + arguments: + models: + - insertOne: + namespace: *namespace + document: *newDocument + - insertOne: + namespace: *namespace + document: *existingDocument + ordered: true + verboseResults: false + expectError: + expectResult: + insertedCount: 1 + upsertedCount: 0 + matchedCount: 0 + modifiedCount: 0 + deletedCount: 0 + insertResults: + $$unsetOrMatches: {} + updateResults: + $$unsetOrMatches: {} + deleteResults: + $$unsetOrMatches: {} + - description: "partialResult is unset when all operations fail during an unordered bulk write" + operations: + - object: *client0 + name: clientBulkWrite + arguments: + models: + - insertOne: + namespace: *namespace + document: *existingDocument + - insertOne: + namespace: *namespace + document: *existingDocument + ordered: false + expectError: + expectResult: + $$unsetOrMatches: {} + - description: "partialResult is set when first operation fails during an unordered bulk write (verbose)" + operations: + - object: *client0 + name: clientBulkWrite + arguments: + models: + - insertOne: + namespace: *namespace + document: *existingDocument + - insertOne: + namespace: *namespace + document: *newDocument + ordered: false + verboseResults: true + expectError: + expectResult: + insertedCount: 1 + upsertedCount: 0 + matchedCount: 0 + modifiedCount: 0 + deletedCount: 0 + insertResults: + 1: + insertedId: 2 + updateResults: {} + deleteResults: {} + - description: "partialResult is set when first operation fails during an unordered bulk write (summary)" + operations: + - object: *client0 + name: clientBulkWrite + arguments: + models: + - insertOne: + namespace: *namespace + document: *existingDocument + - insertOne: + namespace: *namespace + document: *newDocument + ordered: false + verboseResults: false + expectError: + expectResult: + insertedCount: 1 + upsertedCount: 0 + matchedCount: 0 + modifiedCount: 0 + deletedCount: 0 + insertResults: + $$unsetOrMatches: {} + updateResults: + $$unsetOrMatches: {} + deleteResults: + $$unsetOrMatches: {} + - description: "partialResult is set when second operation fails during an unordered bulk write (verbose)" + operations: + - object: *client0 + name: clientBulkWrite + arguments: + models: + - insertOne: + namespace: *namespace + document: *newDocument + - insertOne: + namespace: *namespace + document: *existingDocument + ordered: false + verboseResults: true + expectError: + expectResult: + insertedCount: 1 + upsertedCount: 0 + matchedCount: 0 + modifiedCount: 0 + deletedCount: 0 + insertResults: + 0: + insertedId: 2 + updateResults: {} + deleteResults: {} + - description: "partialResult is set when first operation fails during an unordered bulk write (summary)" + operations: + - object: *client0 + name: clientBulkWrite + arguments: + models: + - insertOne: + namespace: *namespace + document: *newDocument + - insertOne: + namespace: *namespace + document: *existingDocument + ordered: false + verboseResults: false + expectError: + expectResult: + insertedCount: 1 + upsertedCount: 0 + matchedCount: 0 + modifiedCount: 0 + deletedCount: 0 + insertResults: + $$unsetOrMatches: {} + updateResults: + $$unsetOrMatches: {} + deleteResults: + $$unsetOrMatches: {} \ No newline at end of file From 85d7cad33a4e33e4aef738ece18670c63bc7139b Mon Sep 17 00:00:00 2001 From: Isabel Atkinson Date: Mon, 23 Sep 2024 14:06:08 -0600 Subject: [PATCH 3/8] update changelog date --- source/crud/bulk-write.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/crud/bulk-write.md b/source/crud/bulk-write.md index 8a4e61f78e..e701ed370c 100644 --- a/source/crud/bulk-write.md +++ b/source/crud/bulk-write.md @@ -866,7 +866,7 @@ batch-splitting to standardize implementations across drivers and simplify batch ## **Changelog** -- 2024-09-20: Update the `partialResult` population logic to account for ordered bulk writes. +- 2024-09-23: Update the `partialResult` population logic to account for ordered bulk writes. - 2024-09-18: Relax numeric type requirements for indexes. From d391ae106630ea1a6d4d1c99b6a195cdbb35c146 Mon Sep 17 00:00:00 2001 From: Isabel Atkinson Date: Mon, 23 Sep 2024 14:43:51 -0600 Subject: [PATCH 4/8] mdformat --- source/crud/bulk-write.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/crud/bulk-write.md b/source/crud/bulk-write.md index e701ed370c..307221d791 100644 --- a/source/crud/bulk-write.md +++ b/source/crud/bulk-write.md @@ -686,13 +686,13 @@ The server's response to `bulkWrite` has the following format: Drivers MUST record the summary count fields in a `BulkWriteResult` to be returned to the user or embedded in a `BulkWriteException` if the response indicates that at least one write was successful: -- For ordered bulk writes, at least one write was successful if `nErrors` is 0 or the `idx` value for the write error - in `cursor.firstBatch` is greater than 0. +- For ordered bulk writes, at least one write was successful if `nErrors` is 0 or the `idx` value for the write error in + `cursor.firstBatch` is greater than 0. - For unordered bulk writes, at least one write was successful if `nErrors` is less than the number of operations that were included in the `bulkWrite` command. -Drivers MUST NOT populate the `partialResult` field in `BulkWriteException` if it cannot be determined that at least -one write was successfully performed. +Drivers MUST NOT populate the `partialResult` field in `BulkWriteException` if it cannot be determined that at least one +write was successfully performed. Drivers MUST attempt to consume the contents of the cursor returned in the server's `bulkWrite` response before returning to the user. This is required regardless of whether the user requested verbose or summary results, as the From 2311cbe85f34bf55a2c527152bea5d3b363781b7 Mon Sep 17 00:00:00 2001 From: Isabel Atkinson Date: Mon, 23 Sep 2024 14:51:02 -0600 Subject: [PATCH 5/8] fix language --- source/crud/bulk-write.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/crud/bulk-write.md b/source/crud/bulk-write.md index 307221d791..78a05f7d2f 100644 --- a/source/crud/bulk-write.md +++ b/source/crud/bulk-write.md @@ -686,8 +686,8 @@ The server's response to `bulkWrite` has the following format: Drivers MUST record the summary count fields in a `BulkWriteResult` to be returned to the user or embedded in a `BulkWriteException` if the response indicates that at least one write was successful: -- For ordered bulk writes, at least one write was successful if `nErrors` is 0 or the `idx` value for the write error in - `cursor.firstBatch` is greater than 0. +- For ordered bulk writes, at least one write was successful if `nErrors` is 0 or if the `idx` value for the write error + returned in the results cursor is greater than 0. - For unordered bulk writes, at least one write was successful if `nErrors` is less than the number of operations that were included in the `bulkWrite` command. From e49dc6fc37e5aac3a37ed4a156783bfa4f9da8be Mon Sep 17 00:00:00 2001 From: Isabel Atkinson Date: Mon, 23 Sep 2024 15:34:50 -0600 Subject: [PATCH 6/8] remove command monitoring --- .../crud/tests/unified/client-bulkWrite-partialResults.json | 5 +---- .../crud/tests/unified/client-bulkWrite-partialResults.yml | 3 +-- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/source/crud/tests/unified/client-bulkWrite-partialResults.json b/source/crud/tests/unified/client-bulkWrite-partialResults.json index 53129ab952..bbc7caf6dd 100644 --- a/source/crud/tests/unified/client-bulkWrite-partialResults.json +++ b/source/crud/tests/unified/client-bulkWrite-partialResults.json @@ -10,10 +10,7 @@ "createEntities": [ { "client": { - "id": "client0", - "observeEvents": [ - "commandStartedEvent" - ] + "id": "client0" } }, { diff --git a/source/crud/tests/unified/client-bulkWrite-partialResults.yml b/source/crud/tests/unified/client-bulkWrite-partialResults.yml index 9808e79418..d94bc9af82 100644 --- a/source/crud/tests/unified/client-bulkWrite-partialResults.yml +++ b/source/crud/tests/unified/client-bulkWrite-partialResults.yml @@ -7,7 +7,6 @@ runOnRequirements: createEntities: - client: id: &client0 client0 - observeEvents: [ commandStartedEvent ] - database: id: &database0 database0 client: *client0 @@ -236,4 +235,4 @@ tests: updateResults: $$unsetOrMatches: {} deleteResults: - $$unsetOrMatches: {} \ No newline at end of file + $$unsetOrMatches: {} From 65b99d514d7b06c19cf5732844a5dde474b998c5 Mon Sep 17 00:00:00 2001 From: Isabel Atkinson Date: Wed, 25 Sep 2024 13:27:56 -0600 Subject: [PATCH 7/8] change unset assertion --- .../client-bulkWrite-partialResults.json | 54 ++++++++++++++++++- .../client-bulkWrite-partialResults.yml | 20 ++++++- 2 files changed, 70 insertions(+), 4 deletions(-) diff --git a/source/crud/tests/unified/client-bulkWrite-partialResults.json b/source/crud/tests/unified/client-bulkWrite-partialResults.json index bbc7caf6dd..9199be656f 100644 --- a/source/crud/tests/unified/client-bulkWrite-partialResults.json +++ b/source/crud/tests/unified/client-bulkWrite-partialResults.json @@ -80,7 +80,32 @@ }, "expectError": { "expectResult": { - "$$unsetOrMatches": {} + "$$unsetOrMatches": { + "insertedCount": { + "$$exists": false + }, + "upsertedCount": { + "$$exists": false + }, + "matchedCount": { + "$$exists": false + }, + "modifiedCount": { + "$$exists": false + }, + "deletedCount": { + "$$exists": false + }, + "insertResults": { + "$$exists": false + }, + "updateResults": { + "$$exists": false + }, + "deleteResults": { + "$$exists": false + } + } } } } @@ -255,7 +280,32 @@ }, "expectError": { "expectResult": { - "$$unsetOrMatches": {} + "$$unsetOrMatches": { + "insertedCount": { + "$$exists": false + }, + "upsertedCount": { + "$$exists": false + }, + "matchedCount": { + "$$exists": false + }, + "modifiedCount": { + "$$exists": false + }, + "deletedCount": { + "$$exists": false + }, + "insertResults": { + "$$exists": false + }, + "updateResults": { + "$$exists": false + }, + "deleteResults": { + "$$exists": false + } + } } } } diff --git a/source/crud/tests/unified/client-bulkWrite-partialResults.yml b/source/crud/tests/unified/client-bulkWrite-partialResults.yml index d94bc9af82..bc522f9f00 100644 --- a/source/crud/tests/unified/client-bulkWrite-partialResults.yml +++ b/source/crud/tests/unified/client-bulkWrite-partialResults.yml @@ -43,7 +43,15 @@ tests: verboseResults: true expectError: expectResult: - $$unsetOrMatches: {} + $$unsetOrMatches: + insertedCount: { $$exists: false } + upsertedCount: { $$exists: false } + matchedCount: { $$exists: false } + modifiedCount: { $$exists: false } + deletedCount: { $$exists: false } + insertResults: { $$exists: false } + updateResults: { $$exists: false } + deleteResults: { $$exists: false } - description: "partialResult is unset when first operation fails during an ordered bulk write (summary)" operations: - object: *client0 @@ -129,7 +137,15 @@ tests: ordered: false expectError: expectResult: - $$unsetOrMatches: {} + $$unsetOrMatches: + insertedCount: { $$exists: false } + upsertedCount: { $$exists: false } + matchedCount: { $$exists: false } + modifiedCount: { $$exists: false } + deletedCount: { $$exists: false } + insertResults: { $$exists: false } + updateResults: { $$exists: false } + deleteResults: { $$exists: false } - description: "partialResult is set when first operation fails during an unordered bulk write (verbose)" operations: - object: *client0 From 82c0bd42d5e33ad8d4b30e316e34e0a17a9dc73e Mon Sep 17 00:00:00 2001 From: Isabel Atkinson Date: Wed, 25 Sep 2024 14:02:04 -0600 Subject: [PATCH 8/8] fix test and changelog --- source/crud/bulk-write.md | 2 +- .../client-bulkWrite-partialResults.json | 27 ++++++++++++++++++- .../client-bulkWrite-partialResults.yml | 10 ++++++- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/source/crud/bulk-write.md b/source/crud/bulk-write.md index 78a05f7d2f..c040fdcd64 100644 --- a/source/crud/bulk-write.md +++ b/source/crud/bulk-write.md @@ -866,7 +866,7 @@ batch-splitting to standardize implementations across drivers and simplify batch ## **Changelog** -- 2024-09-23: Update the `partialResult` population logic to account for ordered bulk writes. +- 2024-09-25: Update the `partialResult` population logic to account for ordered bulk writes. - 2024-09-18: Relax numeric type requirements for indexes. diff --git a/source/crud/tests/unified/client-bulkWrite-partialResults.json b/source/crud/tests/unified/client-bulkWrite-partialResults.json index 9199be656f..b35e94a2ea 100644 --- a/source/crud/tests/unified/client-bulkWrite-partialResults.json +++ b/source/crud/tests/unified/client-bulkWrite-partialResults.json @@ -143,7 +143,32 @@ }, "expectError": { "expectResult": { - "$$unsetOrMatches": {} + "$$unsetOrMatches": { + "insertedCount": { + "$$exists": false + }, + "upsertedCount": { + "$$exists": false + }, + "matchedCount": { + "$$exists": false + }, + "modifiedCount": { + "$$exists": false + }, + "deletedCount": { + "$$exists": false + }, + "insertResults": { + "$$exists": false + }, + "updateResults": { + "$$exists": false + }, + "deleteResults": { + "$$exists": false + } + } } } } diff --git a/source/crud/tests/unified/client-bulkWrite-partialResults.yml b/source/crud/tests/unified/client-bulkWrite-partialResults.yml index bc522f9f00..1a75aa9739 100644 --- a/source/crud/tests/unified/client-bulkWrite-partialResults.yml +++ b/source/crud/tests/unified/client-bulkWrite-partialResults.yml @@ -68,7 +68,15 @@ tests: verboseResults: false expectError: expectResult: - $$unsetOrMatches: {} + $$unsetOrMatches: + insertedCount: { $$exists: false } + upsertedCount: { $$exists: false } + matchedCount: { $$exists: false } + modifiedCount: { $$exists: false } + deletedCount: { $$exists: false } + insertResults: { $$exists: false } + updateResults: { $$exists: false } + deleteResults: { $$exists: false } - description: "partialResult is set when second operation fails during an ordered bulk write (verbose)" operations: - object: *client0