From 81cc1a7a03670f9809f4d59a7db7df6bd0bb2095 Mon Sep 17 00:00:00 2001 From: Jeff Yemin Date: Tue, 27 Jul 2021 12:49:13 -0400 Subject: [PATCH] Add top-level error labels to write concern error (#766) This will allow the driver to properly retry writes that the server has labeled as a RetryableWriteError. JAVA-4244 --- .../com/mongodb/internal/connection/ProtocolHelper.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/driver-core/src/main/com/mongodb/internal/connection/ProtocolHelper.java b/driver-core/src/main/com/mongodb/internal/connection/ProtocolHelper.java index 5fd0124d8b0..fe1f0dcb6fa 100644 --- a/driver-core/src/main/com/mongodb/internal/connection/ProtocolHelper.java +++ b/driver-core/src/main/com/mongodb/internal/connection/ProtocolHelper.java @@ -243,7 +243,14 @@ public static MongoException createSpecialException(final BsonDocument response, } else if (errorMessage.contains("not master") || NOT_MASTER_CODES.contains(errorCode)) { return new MongoNotPrimaryException(response, serverAddress); } else if (response.containsKey("writeConcernError")) { - return createSpecialException(response.getDocument("writeConcernError"), serverAddress, "errmsg"); + MongoException writeConcernException = createSpecialException(response.getDocument("writeConcernError"), serverAddress, + "errmsg"); + if (writeConcernException != null && response.isArray("errorLabels")) { + for (BsonValue errorLabel : response.getArray("errorLabels")) { + writeConcernException.addLabel(errorLabel.asString().getValue()); + } + } + return writeConcernException; } else { return null; }