diff --git a/lib/storage.js b/lib/storage.js index 17ff66ea8..87a639ed6 100644 --- a/lib/storage.js +++ b/lib/storage.js @@ -5,6 +5,7 @@ var async = require('async') , Proxy = require('./up-storage') , mystreams = require('./streams') , utils = require('./utils') + , transaction = require('./transaction') // // Implements Storage interface @@ -45,57 +46,89 @@ function Storage(config) { Storage.prototype.add_package = function(name, metadata, callback) { var self = this - var uplinks = [] - for (var i in self.uplinks) { - if (self.config.proxy_access(name, i)) { - uplinks.push(self.uplinks[i]) - } - } + // NOTE: + // - when we checking package for existance, we ask ALL uplinks + // - when we publishing package, we only publish it to some of them + // so all requests are necessary - async.map(uplinks, function(up, cb) { - up.get_package(name, null, function(err, res) { - cb(null, [err, res]) + check_package(function(err) { + if (err) return callback(err) + + publish_package(function(err) { + if (err) return callback(err) + callback() }) - }, function(err, results) { - for (var i=0; i