UNPKG

vdocks

Version:

Combination of arpanet and mdock for a viking docker cluster

51 lines (43 loc) 952 B
module.exports = function(etcd, opts){ opts = opts || {} var baseKey = opts.etcdpath + '/ports' // we run one allocation at a time var buffer = [] function runNext(){ if(buffer.length<=0){ return } var next = buffer.shift() next() } function runAllocation(state, name, done){ // first see if it has already been allocated state.getInternalPort(name, function(err, port){ if(port){ setTimeout(function(){ runNext() }, 1) return done(null, port) } // no - so global increment state.getGlobalPort(function(err, port){ port++ var returnPort = port state.setGlobalPort(returnPort, function(){ state.setInternalPort(name, returnPort, function(){ setTimeout(function(){ runNext() }, 1) done(null, returnPort) }) }) }) }) } return function(state, name, done){ buffer.push(function(){ runAllocation(state, name, done) }) runNext() } }