-
Type: Spec Change
-
Resolution: Unresolved
-
Priority: Major - P3
-
None
-
Component/s: Retryability
-
Needed
-
Summary
Drivers should sync the tests updated in this commit.
In our retryable writes spec tests, when a RetryableWriteError label is returned on a writeConcernError, we use fail points to include the label in the writeConcernError object, rather than as a top-level field on the error itself. Here's an example.
The server always returns error labels as top-level fields, so we should modify our spec tests to do so as well so that drivers do not need to check both the writeConcernError object and the error object for the presence of an error label.
Motivation
User reported running while testing Atlas by looping an update one operation during a failover with the default connection string.
"Test Failover" is often used to mimic Atlas Planned Maintenance by users who are on the Atlas Platform and consists of a very simple election/stepdown process that all clusters/user applications should be able to handle without any downtime.
If the problem does occur, what are the consequences and how severe are they?
The write may or may not have been propagated to the servers.
See also SERVER-51329, SERVER-53624, SERVER-55648, HELP-23256, HELP-30952. In particular, implementations of this ticket should note the more recent observations in JAVA-4244.
- is related to
-
JAVA-4244 Top level error labels aren't added to WriteConcernErrors
- Closed
-
PYTHON-2452 PyMongo does not retry command responses with server-supplied RetryableWriteError error label
- Closed
- related to
-
DRIVERS-2799 Test-level runOnRequirements in retryable writes tests should not be more permissive than top-level runOnRequirements
- Implementing
-
DRIVERS-2802 Require 4.3.1+ server version when using failCommand errorLabels option
- Implementing
- split to
-
PYTHON-2984 Client does not retry retryable writeConcernError in bulk write on 4.4+
- Closed
-
PHPLIB-755 Update retryable writes and transaction tests with error labels
- Closed
-
JAVA-4382 Make retryable write test error labels behave consistently with server
- Closed
-
CSHARP-3944 Make retryable write test error labels behave consistently with server
- Backlog
-
CXX-2406 Make retryable write test error labels behave consistently with server
- Backlog
-
GODRIVER-2212 Make retryable write test error labels behave consistently with server
- Backlog
-
CDRIVER-4210 Make retryable write test error labels behave consistently with server
- Closed
-
MOTOR-849 Make retryable write test error labels behave consistently with server
- Closed
-
NODE-3733 Make retryable write test error labels behave consistently with server
- Closed
-
RUBY-2836 Make retryable write test error labels behave consistently with server
- Closed
-
RUST-1088 Make retryable write test error labels behave consistently with server
- Closed