summaryrefslogtreecommitdiff
path: root/jstests/libs/retryable_writes_util.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/libs/retryable_writes_util.js')
-rw-r--r--jstests/libs/retryable_writes_util.js14
1 files changed, 11 insertions, 3 deletions
diff --git a/jstests/libs/retryable_writes_util.js b/jstests/libs/retryable_writes_util.js
index d545f4e9ed8..5105157eba1 100644
--- a/jstests/libs/retryable_writes_util.js
+++ b/jstests/libs/retryable_writes_util.js
@@ -2,14 +2,22 @@
* Utilities for testing retryable writes.
*/
var RetryableWritesUtil = (function() {
- const retryableWriteCommands =
+ /**
+ * Returns true if the error code is retryable, assuming the command is idempotent.
+ */
+ function isRetryableCode(code) {
+ return ErrorCodes.isNetworkError(code) || ErrorCodes.isNotMasterError(code) ||
+ ErrorCodes.isWriteConcernError(code) || ErrorCodes.isInterruption(code);
+ }
+
+ const kRetryableWriteCommands =
new Set(["delete", "findandmodify", "findAndModify", "insert", "update"]);
/**
* Returns true if the command name is that of a retryable write command.
*/
function isRetryableWriteCmdName(cmdName) {
- return retryableWriteCommands.has(cmdName);
+ return kRetryableWriteCommands.has(cmdName);
}
const kStorageEnginesWithoutDocumentLocking = new Set(["ephemeralForTest", "mmapv1"]);
@@ -22,5 +30,5 @@ var RetryableWritesUtil = (function() {
return !kStorageEnginesWithoutDocumentLocking.has(storageEngineName);
}
- return {isRetryableWriteCmdName, storageEngineSupportsRetryableWrites};
+ return {isRetryableCode, isRetryableWriteCmdName, storageEngineSupportsRetryableWrites};
})();