diff --git a/services/document-updater/app/coffee/RedisBackend.coffee b/services/document-updater/app/coffee/RedisBackend.coffee index 92a4b89627..b414b0c4cf 100644 --- a/services/document-updater/app/coffee/RedisBackend.coffee +++ b/services/document-updater/app/coffee/RedisBackend.coffee @@ -58,6 +58,8 @@ class MultiClient constructor: (@clients) -> exec: (callback) -> + primaryError = null + primaryResult = null jobs = @clients.map (client) -> (cb) -> timer = new Metrics.Timer("redis.#{client.driver}.exec") @@ -80,15 +82,15 @@ class MultiClient result = filtered_result if client.primary - # Return this result as the actual result - callback(error, result) - # Send the rest through for comparison + primaryError = error + primaryResult = result cb(error, result) async.parallel jobs, (error, results) -> if error? logger.error {err: error}, "error in redis backend" else compareResults(results) + callback(primaryError, primaryResult) COMMANDS = { "get": 0, @@ -108,6 +110,8 @@ COMMANDS = { for command, key_pos of COMMANDS do (command, key_pos) -> Client.prototype[command] = (args..., callback) -> + primaryError = null + primaryResult = null jobs = @clients.map (client) -> (cb) -> key_builder = args[key_pos] @@ -118,15 +122,15 @@ for command, key_pos of COMMANDS client.rclient[command] args_with_key..., (error, result...) -> timer.done() if client.primary - # Return this result as the actual result - callback(error, result...) - # Send the rest through for comparison + primaryError = error + primaryResult = result cb(error, result...) async.parallel jobs, (error, results) -> if error? logger.error {err: error}, "error in redis backend" else compareResults(results) + callback(primaryError, primaryResult...) MultiClient.prototype[command] = (args...) -> for client in @clients @@ -141,6 +145,7 @@ compareResults = (results) -> first = results[0] for result in results.slice(1) if not _.isEqual(first, result) + logger.error results: results, "redis backend conflict" Metrics.inc "backend-conflict" else Metrics.inc "backend-match"