Skip to content

Commit ef3bbeb

Browse files
committed
partial rollback
JAVA-5635
1 parent f30fd4c commit ef3bbeb

File tree

5 files changed

+14
-117
lines changed

5 files changed

+14
-117
lines changed

driver-core/src/main/com/mongodb/internal/operation/ClientBulkWriteOperation.java

+3-15
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package com.mongodb.internal.operation;
1717

1818
import com.mongodb.ClientBulkWriteException;
19-
import com.mongodb.MongoClientException;
2019
import com.mongodb.MongoClientSettings;
2120
import com.mongodb.MongoCommandException;
2221
import com.mongodb.MongoException;
@@ -120,6 +119,7 @@
120119
import static com.mongodb.internal.operation.CommandOperationHelper.initialRetryState;
121120
import static com.mongodb.internal.operation.CommandOperationHelper.shouldAttemptToRetryWriteAndAddRetryableLabel;
122121
import static com.mongodb.internal.operation.CommandOperationHelper.transformWriteException;
122+
import static com.mongodb.internal.operation.CommandOperationHelper.validateAndGetEffectiveWriteConcern;
123123
import static com.mongodb.internal.operation.OperationHelper.isRetryableWrite;
124124
import static com.mongodb.internal.operation.SyncOperationHelper.cursorDocumentToBatchCursor;
125125
import static com.mongodb.internal.operation.SyncOperationHelper.decorateWriteWithRetries;
@@ -169,7 +169,8 @@ public ClientBulkWriteOperation(
169169

170170
@Override
171171
public ClientBulkWriteResult execute(final WriteBinding binding) throws ClientBulkWriteException {
172-
WriteConcern effectiveWriteConcern = validateAndGetEffectiveWriteConcern(binding.getOperationContext().getSessionContext());
172+
WriteConcern effectiveWriteConcern = validateAndGetEffectiveWriteConcern(
173+
writeConcernSetting, binding.getOperationContext().getSessionContext());
173174
ResultAccumulator resultAccumulator = new ResultAccumulator();
174175
MongoException transformedTopLevelError = null;
175176
try {
@@ -365,19 +366,6 @@ private ClientBulkWriteCommand createBulkWriteCommand(
365366
}));
366367
}
367368

368-
private WriteConcern validateAndGetEffectiveWriteConcern(final SessionContext sessionContext) {
369-
WriteConcern effectiveWriteConcern = CommandOperationHelper.validateAndGetEffectiveWriteConcern(writeConcernSetting, sessionContext);
370-
if (!effectiveWriteConcern.isAcknowledged()) {
371-
if (options.isVerboseResults()) {
372-
throw new MongoClientException("Cannot request unacknowledged write concern and verbose results");
373-
}
374-
if (options.isOrdered()) {
375-
throw new MongoClientException("Cannot request unacknowledged write concern and ordered writes");
376-
}
377-
}
378-
return effectiveWriteConcern;
379-
}
380-
381369
private <T> void encodeUsingRegistry(final BsonWriter writer, final T value) {
382370
encodeUsingRegistry(writer, value, DEFAULT_ENCODER_CONTEXT);
383371
}

driver-core/src/test/resources/unified-test-format/command-monitoring/unacknowledged-client-bulkWrite.json

+2-3
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,7 @@
9191
}
9292
}
9393
}
94-
],
95-
"ordered": false
94+
]
9695
},
9796
"expectResult": {
9897
"insertedCount": {
@@ -159,7 +158,7 @@
159158
"command": {
160159
"bulkWrite": 1,
161160
"errorsOnly": true,
162-
"ordered": false,
161+
"ordered": true,
163162
"ops": [
164163
{
165164
"insert": 0,

driver-core/src/test/resources/unified-test-format/crud/client-bulkWrite-errors.json

-58
Original file line numberDiff line numberDiff line change
@@ -450,64 +450,6 @@
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-
]
511453
}
512454
]
513455
}

driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/CrudProseTest.java

-6
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,6 @@ protected void testBulkWriteErrorsForAutoEncryption() {
8282
assumeTrue(java.lang.Boolean.parseBoolean(toString()), "BULK-TODO implement");
8383
}
8484

85-
@DisplayName("15. MongoClient.bulkWrite with unacknowledged write concern uses w:0 for all batches")
86-
@Test
87-
protected void testWriteConcernOfAllBatchesWhenUnacknowledgedRequested() {
88-
assumeTrue(java.lang.Boolean.parseBoolean(toString()), "BULK-TODO implement");
89-
}
90-
9185
@ParameterizedTest
9286
@MethodSource("insertMustGenerateIdAtMostOnceArgs")
9387
@Override

driver-sync/src/test/functional/com/mongodb/client/CrudProseTest.java

+9-35
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import com.mongodb.MongoNamespace;
2525
import com.mongodb.MongoWriteConcernException;
2626
import com.mongodb.MongoWriteException;
27-
import com.mongodb.WriteConcern;
2827
import com.mongodb.assertions.Assertions;
2928
import com.mongodb.client.model.CreateCollectionOptions;
3029
import com.mongodb.client.model.Filters;
@@ -313,6 +312,15 @@ private void assertBulkWriteHandlesCursorRequiringGetMore(final boolean transact
313312
}
314313
}
315314

315+
private static Stream<Arguments> testBulkWriteErrorsForUnacknowledgedTooLargeInsertArgs() {
316+
return Stream.of(
317+
arguments("insert", false),
318+
arguments("insert", true),
319+
arguments("replace", false),
320+
arguments("replace", true)
321+
);
322+
}
323+
316324
@DisplayName("11. MongoClient.bulkWrite batch splits when the addition of a new namespace exceeds the maximum message size")
317325
@Test
318326
protected void testBulkWriteSplitsWhenExceedingMaxMessageSizeBytesDueToNsInfo() {
@@ -434,40 +442,6 @@ protected void testBulkWriteErrorsForAutoEncryption() {
434442
}
435443
}
436444

437-
@DisplayName("15. MongoClient.bulkWrite with unacknowledged write concern uses w:0 for all batches")
438-
@Test
439-
protected void testWriteConcernOfAllBatchesWhenUnacknowledgedRequested() {
440-
assumeTrue(serverVersionAtLeast(8, 0));
441-
assumeFalse(isServerlessTest());
442-
TestCommandListener commandListener = new TestCommandListener();
443-
try (MongoClient client = createMongoClient(getMongoClientSettingsBuilder().addCommandListener(commandListener)
444-
.writeConcern(WriteConcern.UNACKNOWLEDGED))) {
445-
MongoDatabase database = droppedDatabase(client);
446-
database.createCollection(NAMESPACE.getCollectionName());
447-
Document helloResponse = database.runCommand(new Document("hello", 1));
448-
int maxBsonObjectSize = helloResponse.getInteger("maxBsonObjectSize");
449-
int maxMessageSizeBytes = helloResponse.getInteger("maxMessageSizeBytes");
450-
ClientNamespacedWriteModel model = ClientNamespacedWriteModel.insertOne(
451-
NAMESPACE,
452-
new Document("a", join("", nCopies(maxBsonObjectSize - 500, "b"))));
453-
int numModels = maxMessageSizeBytes / maxBsonObjectSize + 1;
454-
ClientBulkWriteResult result = client.bulkWrite(nCopies(numModels, model), clientBulkWriteOptions().ordered(false));
455-
assertFalse(result.isAcknowledged());
456-
List<CommandStartedEvent> startedBulkWriteCommandEvents = commandListener.getCommandStartedEvents("bulkWrite");
457-
assertEquals(2, startedBulkWriteCommandEvents.size());
458-
CommandStartedEvent firstEvent = startedBulkWriteCommandEvents.get(0);
459-
BsonDocument firstCommand = firstEvent.getCommand();
460-
CommandStartedEvent secondEvent = startedBulkWriteCommandEvents.get(1);
461-
BsonDocument secondCommand = secondEvent.getCommand();
462-
assertEquals(numModels - 1, firstCommand.getArray("ops").size());
463-
assertEquals(1, secondCommand.getArray("ops").size());
464-
assertEquals(firstEvent.getOperationId(), secondEvent.getOperationId());
465-
assertEquals(0, firstCommand.getDocument("writeConcern").getInt32("w").intValue());
466-
assertEquals(0, secondCommand.getDocument("writeConcern").getInt32("w").intValue());
467-
assertEquals(numModels, database.getCollection(NAMESPACE.getCollectionName()).countDocuments());
468-
}
469-
}
470-
471445
/**
472446
* This test is not from the specification.
473447
*/

0 commit comments

Comments
 (0)