@azure/cosmos
Version:
Microsoft Azure Cosmos DB Service Node.js SDK for NOSQL API
135 lines • 2.9 kB
JavaScript
import { OperationType } from "../common/index.js";
import { TimeoutErrorCode } from "../request/TimeoutError.js";
/**
* @hidden
*/
// Windows Socket Error Codes
const WindowsInterruptedFunctionCall = 10004;
/**
* @hidden
*/
const WindowsFileHandleNotValid = 10009;
/**
* @hidden
*/
const WindowsPermissionDenied = 10013;
/**
* @hidden
*/
const WindowsBadAddress = 10014;
/**
* @hidden
*/
const WindowsInvalidArgumnet = 10022;
/**
* @hidden
*/
const WindowsResourceTemporarilyUnavailable = 10035;
/**
* @hidden
*/
const WindowsOperationNowInProgress = 10036;
/**
* @hidden
*/
const WindowsAddressAlreadyInUse = 10048;
/**
* @hidden
*/
const WindowsConnectionResetByPeer = 10054;
/**
* @hidden
*/
const WindowsCannotSendAfterSocketShutdown = 10058;
/**
* @hidden
*/
const WindowsConnectionTimedOut = 10060;
/**
* @hidden
*/
const WindowsConnectionRefused = 10061;
/**
* @hidden
*/
const WindowsNameTooLong = 10063;
/**
* @hidden
*/
const WindowsHostIsDown = 10064;
/**
* @hidden
*/
const WindowsNoRouteTohost = 10065;
/**
* @hidden
*/
// Linux Error Codes
/**
* @hidden
*/
const LinuxConnectionReset = "ECONNRESET";
// Node Error Codes
/**
* @hidden
*/
const BrokenPipe = "EPIPE";
/**
* @hidden
*/
const CONNECTION_ERROR_CODES = [
WindowsInterruptedFunctionCall,
WindowsFileHandleNotValid,
WindowsPermissionDenied,
WindowsBadAddress,
WindowsInvalidArgumnet,
WindowsResourceTemporarilyUnavailable,
WindowsOperationNowInProgress,
WindowsAddressAlreadyInUse,
WindowsConnectionResetByPeer,
WindowsCannotSendAfterSocketShutdown,
WindowsConnectionTimedOut,
WindowsConnectionRefused,
WindowsNameTooLong,
WindowsHostIsDown,
WindowsNoRouteTohost,
LinuxConnectionReset,
TimeoutErrorCode,
BrokenPipe,
];
/**
* @hidden
*/
function needsRetry(operationType, code) {
return ((operationType === OperationType.Read || operationType === OperationType.Query) &&
CONNECTION_ERROR_CODES.includes(code));
}
/**
* This class implements the default connection retry policy for requests.
* @hidden
*/
export class DefaultRetryPolicy {
operationType;
maxTries = 10;
currentRetryAttemptCount = 0;
retryAfterInMs = 1000;
constructor(operationType) {
this.operationType = operationType;
}
/**
* 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;
}
}
//# sourceMappingURL=defaultRetryPolicy.js.map