function getConfigWithRetry()

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);
        }
    });
}