in common.js [228:266]
function retryableUpdate(dynamoDB, updateRequest, 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.updateItem(updateRequest, 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 UPDATE due to updating Table state");
setTimeout(asyncCallback, 1000);
} else {
logger.error(JSON.stringify(updateRequest));
logger.error(err);
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);
asyncCallback(msg);
}
}
});
}, function (err, data) {
callback(err, data);
});
};