Skip to content

Commit 27c5812

Browse files
committed
Add error labels to MongoWriteConcernException (#834)
The error labels are at the top level of the response document, and the code was assuming that they were embedded in the writeConcernError document. This fix ensures that error labels at the top level are properly added to MongoWriteConcernException JAVA-4419
1 parent 3afb588 commit 27c5812

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import com.mongodb.internal.connection.Connection;
2424
import com.mongodb.internal.operation.CommandOperationHelper.CommandWriteTransformer;
2525
import com.mongodb.internal.operation.CommandOperationHelper.CommandWriteTransformerAsync;
26+
import org.bson.BsonArray;
2627
import org.bson.BsonBoolean;
2728
import org.bson.BsonDocument;
2829
import org.bson.BsonInt32;
@@ -54,9 +55,12 @@ public T apply(final BsonDocument result, final AsyncConnection connection) {
5455

5556
private static <T> T transformDocument(final BsonDocument result, final ServerAddress serverAddress) {
5657
if (hasWriteConcernError(result)) {
57-
throw new MongoWriteConcernException(
58+
MongoWriteConcernException writeConcernException = new MongoWriteConcernException(
5859
createWriteConcernError(result.getDocument("writeConcernError")),
5960
createWriteConcernResult(result.getDocument("lastErrorObject", new BsonDocument())), serverAddress);
61+
result.getArray("errorLabels", new BsonArray()).stream().map(i -> i.asString().getValue())
62+
.forEach(writeConcernException::addLabel);
63+
throw writeConcernException;
6064
}
6165

6266
if (!result.isDocument("value")) {

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,12 @@ public static boolean hasWriteConcernError(final BsonDocument result) {
6161
}
6262

6363
public static MongoWriteConcernException createWriteConcernException(final BsonDocument result, final ServerAddress serverAddress) {
64-
return new MongoWriteConcernException(
64+
MongoWriteConcernException writeConcernException = new MongoWriteConcernException(
6565
createWriteConcernError(result.getDocument("writeConcernError")),
6666
WriteConcernResult.acknowledged(0, false, null), serverAddress);
67+
result.getArray("errorLabels", new BsonArray()).stream().map(i -> i.asString().getValue())
68+
.forEach(writeConcernException::addLabel);
69+
return writeConcernException;
6770
}
6871

6972
public static WriteConcernError createWriteConcernError(final BsonDocument writeConcernErrorDocument) {

0 commit comments

Comments
 (0)