deep-package-manager
Version:
DEEP Package Manager
99 lines (81 loc) • 2.13 kB
JavaScript
/**
* Created by CCristi on 2/6/17.
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.AbstractService = undefined;
var _deepCore = require('deep-core');
var _deepCore2 = _interopRequireDefault(_deepCore);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class AbstractService extends _deepCore2.default.OOP.Interface {
/**
* @param {Instance} replicationInstance
*/
constructor(replicationInstance) {
super(['name']);
this._replication = replicationInstance;
}
/**
* @returns {Instance}
*/
get replication() {
return this._replication;
}
/**
* @returns {Object}
*/
blueConfig() {
return this.replication.blueConfig.provisioning[this.name()];
}
/**
* @returns {Object}
*/
greenConfig() {
return this.replication.greenConfig.provisioning[this.name()];
}
/**
* @param {Number} timeout
* @returns {Promise}
*/
wait(timeout) {
return new Promise(resolve => setTimeout(resolve, timeout));
}
/**
* @param {AWS.Request|Object} request
* @param {String[]} retryableCodes
* @returns {AWS.Request|Object}
*/
_retryableRequest(request, retryableCodes = []) {
retryableCodes = retryableCodes.filter(c => AbstractService._safeRetryableCodes.indexOf(c) === -1).concat(AbstractService._safeRetryableCodes);
request.on('retry', response => {
if (retryableCodes.indexOf(response.error.code) !== -1) {
console.debug(`"${this.name()}" resources locked. Retrying...`);
response.error.retryable = true;
response.error.retryDelay = AbstractService.RETRY_DELAY;
response.error.retryCount = AbstractService.RETRY_COUNT;
}
});
return request;
}
/**
* @returns {String[]}
*/
static get _safeRetryableCodes() {
return ['ResourceInUseException', 'Throttling'];
}
/**
* @returns {Number}
*/
static get RETRY_COUNT() {
return 5;
}
/**
* @returns {Number}
*/
static get RETRY_DELAY() {
return 5000;
}
}
exports.AbstractService = AbstractService;