in common.js [269:308]
function retryablePut(dynamoDB, putRequest, callback) {
var tryNumber = 0;
var writeRetryLimit = 100;
var done = false;
async.whilst(function (test_cb) {
// retry until the try count is hit
test_cb(null, tryNumber < writeRetryLimit && done === false);
}, function (asyncCallback) {
tryNumber++;
dynamoDB.putItem(putRequest, function (err, data) {
if (err) {
if (err.code === 'ResourceInUseException' || err.code === 'ResourceNotFoundException' || err.code === 'ProvisionedThroughputExceededException') {
// retry in 1 second if the table is still in the process of
// being created
logger.warn("Performing retry on DynamoDB PUT due to updating Table state");
setTimeout(asyncCallback, 1000);
} else {
logger.error(JSON.stringify(putRequest));
logger.error(err);
done = true;
asyncCallback(err);
}
} else {
// all OK - exit OK
if (data) {
done = true;
asyncCallback(undefined, data);
} else {
var msg = "Wrote to DynamoDB but didn't receive a verification data element";
logger.error(msg);
done = true;
asyncCallback(msg);
}
}
});
}, function (err) {
callback(err);
});
};