package.dist.src.config.retry.storage-default-eligibility-strategy.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sdk Show documentation
Show all versions of sdk Show documentation
Client SDK for Momento services
The newest version!
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DefaultStorageEligibilityStrategy = void 0;
const constants_1 = require("@grpc/grpc-js/build/src/constants");
const retryableGrpcStatusCodes = [
// including all the status codes for reference, but
// commenting out the ones we don't want to retry on for now.
// Status.OK,
// Status.CANCELLED,
// Status.UNKNOWN,
// Status.INVALID_ARGUMENT,
constants_1.Status.DEADLINE_EXCEEDED,
// Status.NOT_FOUND,
// Status.ALREADY_EXISTS,
// Status.PERMISSION_DENIED,
// Status.RESOURCE_EXHAUSTED,
// Status.FAILED_PRECONDITION,
// Status.ABORTED,
// Status.OUT_OF_RANGE,
// Status.UNIMPLEMENTED,
constants_1.Status.INTERNAL,
constants_1.Status.UNAVAILABLE,
// Status.DATA_LOSS,
// Status.UNAUTHENTICATED
];
const retryableRequestTypes = [
'/store.Store/Put',
'/store.Store/Get',
'/store.Store/Delete',
];
class DefaultStorageEligibilityStrategy {
constructor(loggerFactory) {
this.logger = loggerFactory.getLogger(this);
}
isEligibleForRetry(props) {
if (!retryableGrpcStatusCodes.includes(props.grpcStatus.code)) {
this.logger.debug(`Response with status code ${props.grpcStatus.code} is not retryable.`);
return false;
}
// If retry disposition metadata is available and the value is "retryable",
// it is safe to retry regardless of idempotency.
const retryMetadata = this.getRetryDispositionMetadata(props.grpcStatus.metadata);
if (retryMetadata === 'retryable') {
return true;
}
// Otherwise, if there is no retry metadata or the retry disposition is
// "possibly_retryable", it is safe to retry only idempotent commands.
if (!retryableRequestTypes.includes(props.grpcRequest.path)) {
this.logger.debug(`Request with type ${props.grpcRequest.path} is not retryable.`);
return false;
}
return true;
}
getRetryDispositionMetadata(metadata) {
const retryMetadata = metadata.get('retry_disposition');
if (retryMetadata.length === 1) {
return retryMetadata[0].toString();
}
return undefined;
}
}
exports.DefaultStorageEligibilityStrategy = DefaultStorageEligibilityStrategy;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1kZWZhdWx0LWVsaWdpYmlsaXR5LXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbmZpZy9yZXRyeS9zdG9yYWdlLWRlZmF1bHQtZWxpZ2liaWxpdHktc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaUVBQXlEO0FBT3pELE1BQU0sd0JBQXdCLEdBQWtCO0lBQzlDLG9EQUFvRDtJQUNwRCw2REFBNkQ7SUFFN0QsYUFBYTtJQUNiLG9CQUFvQjtJQUNwQixrQkFBa0I7SUFDbEIsMkJBQTJCO0lBQzNCLGtCQUFNLENBQUMsaUJBQWlCO0lBQ3hCLG9CQUFvQjtJQUNwQix5QkFBeUI7SUFDekIsNEJBQTRCO0lBQzVCLDZCQUE2QjtJQUM3Qiw4QkFBOEI7SUFDOUIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2Qix3QkFBd0I7SUFDeEIsa0JBQU0sQ0FBQyxRQUFRO0lBQ2Ysa0JBQU0sQ0FBQyxXQUFXO0lBQ2xCLG9CQUFvQjtJQUNwQix5QkFBeUI7Q0FDMUIsQ0FBQztBQUVGLE1BQU0scUJBQXFCLEdBQWtCO0lBQzNDLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIscUJBQXFCO0NBQ3RCLENBQUM7QUFFRixNQUFhLGlDQUFpQztJQUc1QyxZQUFZLGFBQW1DO1FBQzdDLElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBNEI7UUFDN0MsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzdELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLDZCQUE2QixLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksb0JBQW9CLENBQ3ZFLENBQUM7WUFDRixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsMkVBQTJFO1FBQzNFLGlEQUFpRDtRQUNqRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQ3BELEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUMxQixDQUFDO1FBQ0YsSUFBSSxhQUFhLEtBQUssV0FBVyxFQUFFO1lBQ2pDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCx1RUFBdUU7UUFDdkUsc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixxQkFBcUIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLG9CQUFvQixDQUNoRSxDQUFDO1lBQ0YsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLDJCQUEyQixDQUFDLFFBQWtCO1FBQ3BELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN4RCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzlCLE9BQU8sYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3BDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBM0NELDhFQTJDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TW9tZW50b0xvZ2dlciwgTW9tZW50b0xvZ2dlckZhY3Rvcnl9IGZyb20gJy4uLy4uLyc7XG5pbXBvcnQge1N0YXR1c30gZnJvbSAnQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEVsaWdpYmlsaXR5U3RyYXRlZ3ksXG4gIEVsaWdpYmxlRm9yUmV0cnlQcm9wcyxcbn0gZnJvbSAnLi9lbGlnaWJpbGl0eS1zdHJhdGVneSc7XG5pbXBvcnQge01ldGFkYXRhfSBmcm9tICdAZ3JwYy9ncnBjLWpzJztcblxuY29uc3QgcmV0cnlhYmxlR3JwY1N0YXR1c0NvZGVzOiBBcnJheTxTdGF0dXM+ID0gW1xuICAvLyBpbmNsdWRpbmcgYWxsIHRoZSBzdGF0dXMgY29kZXMgZm9yIHJlZmVyZW5jZSwgYnV0XG4gIC8vIGNvbW1lbnRpbmcgb3V0IHRoZSBvbmVzIHdlIGRvbid0IHdhbnQgdG8gcmV0cnkgb24gZm9yIG5vdy5cblxuICAvLyBTdGF0dXMuT0ssXG4gIC8vIFN0YXR1cy5DQU5DRUxMRUQsXG4gIC8vIFN0YXR1cy5VTktOT1dOLFxuICAvLyBTdGF0dXMuSU5WQUxJRF9BUkdVTUVOVCxcbiAgU3RhdHVzLkRFQURMSU5FX0VYQ0VFREVELFxuICAvLyBTdGF0dXMuTk9UX0ZPVU5ELFxuICAvLyBTdGF0dXMuQUxSRUFEWV9FWElTVFMsXG4gIC8vIFN0YXR1cy5QRVJNSVNTSU9OX0RFTklFRCxcbiAgLy8gU3RhdHVzLlJFU09VUkNFX0VYSEFVU1RFRCxcbiAgLy8gU3RhdHVzLkZBSUxFRF9QUkVDT05ESVRJT04sXG4gIC8vIFN0YXR1cy5BQk9SVEVELFxuICAvLyBTdGF0dXMuT1VUX09GX1JBTkdFLFxuICAvLyBTdGF0dXMuVU5JTVBMRU1FTlRFRCxcbiAgU3RhdHVzLklOVEVSTkFMLFxuICBTdGF0dXMuVU5BVkFJTEFCTEUsXG4gIC8vIFN0YXR1cy5EQVRBX0xPU1MsXG4gIC8vIFN0YXR1cy5VTkFVVEhFTlRJQ0FURURcbl07XG5cbmNvbnN0IHJldHJ5YWJsZVJlcXVlc3RUeXBlczogQXJyYXk8c3RyaW5nPiA9IFtcbiAgJy9zdG9yZS5TdG9yZS9QdXQnLFxuICAnL3N0b3JlLlN0b3JlL0dldCcsXG4gICcvc3RvcmUuU3RvcmUvRGVsZXRlJyxcbl07XG5cbmV4cG9ydCBjbGFzcyBEZWZhdWx0U3RvcmFnZUVsaWdpYmlsaXR5U3RyYXRlZ3kgaW1wbGVtZW50cyBFbGlnaWJpbGl0eVN0cmF0ZWd5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IE1vbWVudG9Mb2dnZXI7XG5cbiAgY29uc3RydWN0b3IobG9nZ2VyRmFjdG9yeTogTW9tZW50b0xvZ2dlckZhY3RvcnkpIHtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKHRoaXMpO1xuICB9XG5cbiAgaXNFbGlnaWJsZUZvclJldHJ5KHByb3BzOiBFbGlnaWJsZUZvclJldHJ5UHJvcHMpOiBib29sZWFuIHtcbiAgICBpZiAoIXJldHJ5YWJsZUdycGNTdGF0dXNDb2Rlcy5pbmNsdWRlcyhwcm9wcy5ncnBjU3RhdHVzLmNvZGUpKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFJlc3BvbnNlIHdpdGggc3RhdHVzIGNvZGUgJHtwcm9wcy5ncnBjU3RhdHVzLmNvZGV9IGlzIG5vdCByZXRyeWFibGUuYFxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBJZiByZXRyeSBkaXNwb3NpdGlvbiBtZXRhZGF0YSBpcyBhdmFpbGFibGUgYW5kIHRoZSB2YWx1ZSBpcyBcInJldHJ5YWJsZVwiLFxuICAgIC8vIGl0IGlzIHNhZmUgdG8gcmV0cnkgcmVnYXJkbGVzcyBvZiBpZGVtcG90ZW5jeS5cbiAgICBjb25zdCByZXRyeU1ldGFkYXRhID0gdGhpcy5nZXRSZXRyeURpc3Bvc2l0aW9uTWV0YWRhdGEoXG4gICAgICBwcm9wcy5ncnBjU3RhdHVzLm1ldGFkYXRhXG4gICAgKTtcbiAgICBpZiAocmV0cnlNZXRhZGF0YSA9PT0gJ3JldHJ5YWJsZScpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgaWYgdGhlcmUgaXMgbm8gcmV0cnkgbWV0YWRhdGEgb3IgdGhlIHJldHJ5IGRpc3Bvc2l0aW9uIGlzXG4gICAgLy8gXCJwb3NzaWJseV9yZXRyeWFibGVcIiwgaXQgaXMgc2FmZSB0byByZXRyeSBvbmx5IGlkZW1wb3RlbnQgY29tbWFuZHMuXG4gICAgaWYgKCFyZXRyeWFibGVSZXF1ZXN0VHlwZXMuaW5jbHVkZXMocHJvcHMuZ3JwY1JlcXVlc3QucGF0aCkpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgUmVxdWVzdCB3aXRoIHR5cGUgJHtwcm9wcy5ncnBjUmVxdWVzdC5wYXRofSBpcyBub3QgcmV0cnlhYmxlLmBcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldFJldHJ5RGlzcG9zaXRpb25NZXRhZGF0YShtZXRhZGF0YTogTWV0YWRhdGEpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJldHJ5TWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQoJ3JldHJ5X2Rpc3Bvc2l0aW9uJyk7XG4gICAgaWYgKHJldHJ5TWV0YWRhdGEubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gcmV0cnlNZXRhZGF0YVswXS50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=