@azure/cosmos
Version:
Microsoft Azure Cosmos DB Service Node.js SDK for NOSQL API
91 lines (90 loc) • 3.27 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var defaultRetryPolicy_exports = {};
__export(defaultRetryPolicy_exports, {
DefaultRetryPolicy: () => DefaultRetryPolicy
});
module.exports = __toCommonJS(defaultRetryPolicy_exports);
var import_common = require("../common/index.js");
var import_TimeoutError = require("../request/TimeoutError.js");
const WindowsInterruptedFunctionCall = 10004;
const WindowsFileHandleNotValid = 10009;
const WindowsPermissionDenied = 10013;
const WindowsBadAddress = 10014;
const WindowsInvalidArgumnet = 10022;
const WindowsResourceTemporarilyUnavailable = 10035;
const WindowsOperationNowInProgress = 10036;
const WindowsAddressAlreadyInUse = 10048;
const WindowsConnectionResetByPeer = 10054;
const WindowsCannotSendAfterSocketShutdown = 10058;
const WindowsConnectionTimedOut = 10060;
const WindowsConnectionRefused = 10061;
const WindowsNameTooLong = 10063;
const WindowsHostIsDown = 10064;
const WindowsNoRouteTohost = 10065;
const LinuxConnectionReset = "ECONNRESET";
const BrokenPipe = "EPIPE";
const CONNECTION_ERROR_CODES = [
WindowsInterruptedFunctionCall,
WindowsFileHandleNotValid,
WindowsPermissionDenied,
WindowsBadAddress,
WindowsInvalidArgumnet,
WindowsResourceTemporarilyUnavailable,
WindowsOperationNowInProgress,
WindowsAddressAlreadyInUse,
WindowsConnectionResetByPeer,
WindowsCannotSendAfterSocketShutdown,
WindowsConnectionTimedOut,
WindowsConnectionRefused,
WindowsNameTooLong,
WindowsHostIsDown,
WindowsNoRouteTohost,
LinuxConnectionReset,
import_TimeoutError.TimeoutErrorCode,
BrokenPipe
];
function needsRetry(operationType, code) {
return (operationType === import_common.OperationType.Read || operationType === import_common.OperationType.Query) && CONNECTION_ERROR_CODES.includes(code);
}
class DefaultRetryPolicy {
constructor(operationType) {
this.operationType = operationType;
}
maxTries = 10;
currentRetryAttemptCount = 0;
retryAfterInMs = 1e3;
/**
* Determines whether the request should be retried or not.
* @param err - Error returned by the request.
*/
async shouldRetry(err, diagnosticNode) {
if (err) {
if (this.currentRetryAttemptCount < this.maxTries && needsRetry(this.operationType, err.code)) {
diagnosticNode.addData({ successfulRetryPolicy: "default" });
this.currentRetryAttemptCount++;
return true;
}
}
return false;
}
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
DefaultRetryPolicy
});