From c06cba81f4f029659596f6bdce01b56544e61b61 Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Mon, 27 Apr 2015 16:22:37 +0200 Subject: [PATCH] SurrogateKeysCache now accepts several cache backends - uses queue-async to parallelize the call to invalidate --- lib/cartodb/cache/surrogate_keys_cache.js | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/cartodb/cache/surrogate_keys_cache.js b/lib/cartodb/cache/surrogate_keys_cache.js index 53b9f45a..77147917 100644 --- a/lib/cartodb/cache/surrogate_keys_cache.js +++ b/lib/cartodb/cache/surrogate_keys_cache.js @@ -1,9 +1,11 @@ +var queue = require('queue-async'); + /** - * @param cacheBackend should respond to `invalidate(cacheObject, callback)` method + * @param {Array|Object} cacheBackends each backend backend should respond to `invalidate(cacheObject, callback)` method * @constructor */ -function SurrogateKeysCache(cacheBackend) { - this.cacheBackend = cacheBackend; +function SurrogateKeysCache(cacheBackends) { + this.cacheBackends = Array.isArray(cacheBackends) ? cacheBackends : [cacheBackends]; } module.exports = SurrogateKeysCache; @@ -22,5 +24,18 @@ SurrogateKeysCache.prototype.tag = function(response, cacheObject) { * @param {Function} callback */ SurrogateKeysCache.prototype.invalidate = function(cacheObject, callback) { - this.cacheBackend.invalidate(cacheObject, callback); + var invalidationQueue = queue(this.cacheBackends.length); + + this.cacheBackends.forEach(function(cacheBackend) { + invalidationQueue.defer(function(cacheBackend, done) { + cacheBackend.invalidate(cacheObject, done); + }, cacheBackend); + }); + + invalidationQueue.awaitAll(function(err, result) { + if (err) { + return callback(err); + } + callback(null, result); + }); };