in index.js [73:127]
function getConfigWithRetry(prefix, callback) {
var proceed = false;
var lookupConfigTries = 10;
var tryNumber = 0;
var configData = null;
var dynamoLookup = {
Key: {
s3Prefix: {
S: prefix
}
},
TableName: configTable,
ConsistentRead: true
};
logger.debug(JSON.stringify(dynamoLookup));
async.whilst(function (test_cb) {
// return OK if the proceed flag has been set, or if
// we've hit the retry count
test_cb(null, !proceed && tryNumber < lookupConfigTries);
}, function (callback) {
tryNumber++;
logger.debug("Fetching S3 Configuration: Try " + tryNumber);
// lookup the configuration item, and run foundConfig on completion
dynamoDB.getItem(dynamoLookup, function (err, data) {
if (err) {
if (err.code === provisionedThroughputExceeded) {
// sleep for bounded jitter time up to 1
// second and then retry
var timeout = common.randomInt(0, 1000);
logger.info(provisionedThroughputExceeded + " while accessing " + configTable + ". Retrying in " + timeout + " ms");
setTimeout(callback, timeout);
} else {
// some other error - call the error callback
callback(err);
}
} else {
configData = data;
proceed = true;
callback(null);
}
});
}, function (err) {
if (err) {
logger.error(err);
callback(err);
} else {
callback(null, configData);
}
});
}