@cumulus/aws-client
Version:
Utilities for working with AWS
29 lines • 1.3 kB
JavaScript
;
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