UNPKG

@cumulus/aws-client

Version:
29 lines 1.3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.applyS3Jitter = void 0; const logger_1 = __importDefault(require("@cumulus/logger")); const log = new logger_1.default({ sender: 's3-jitter' }); /** * Introduces random jitter delay to stagger concurrent S3 operations. * This helps prevent AWS S3 SlowDown errors when many operations occur simultaneously. * * @param maxJitterMs - Maximum jitter time in milliseconds (0-59000). * If 0, no delay is applied. * @param operation - Optional operation name for logging context * @returns A Promise that resolves after the random delay */ const applyS3Jitter = async (maxJitterMs, operation) => { if (maxJitterMs <= 0) { return; } const jitterMs = Math.ceil(Math.random() * maxJitterMs); const logContext = operation ? ` for ${operation}` : ''; log.info(`Applying S3 jitter: ${jitterMs}ms${logContext} (max: ${maxJitterMs}ms)`); await new Promise((resolve) => setTimeout(resolve, jitterMs)); log.debug(`S3 jitter delay completed: ${jitterMs}ms${logContext}`); }; exports.applyS3Jitter = applyS3Jitter; //# sourceMappingURL=s3-jitter.js.map