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