use async auto to deploy parallely

This commit is contained in:
Jonathan Rainville 2018-08-09 12:58:41 -04:00 committed by Iuri Matias
parent 19f22025ad
commit 3a621f3efd

View File

@ -1,8 +1,7 @@
let async = require('async'); let async = require('async');
const ContractDeployer = require('./contract_deployer.js'); const ContractDeployer = require('./contract_deployer.js');
const utils = require('../../utils/utils.js'); const cloneDeep = require('clone-deep');
//require("../utils/debug_util.js")(__filename, async);
class DeployManager { class DeployManager {
constructor(embark, options) { constructor(embark, options) {
@ -43,25 +42,37 @@ class DeployManager {
deployAll(done) { deployAll(done) {
let self = this; let self = this;
self.events.request('contracts:list', (err, contracts) => { self.events.request('contracts:dependencies', (err, contractDependencies) => {
if (err) { self.events.request('contracts:list', (err, contracts) => {
return done(err); if (err) {
} return done(err);
}
self.logger.info(__("deploying contracts")); self.logger.info(__("deploying contracts"));
self.events.emit("deploy:beforeAll"); self.events.emit("deploy:beforeAll");
const contractsPerDependencyCount = utils.groupBy(contracts, 'dependencyCount'); const contractDeploys = {};
async.eachSeries(contractsPerDependencyCount, contracts.forEach(contract => {
function (parallelGroups, callback) { function deploy(result, callback) {
async.each(parallelGroups, (contract, eachCb) => { if (typeof result === 'function') {
callback = result;
}
contract._gasLimit = self.gasLimit; contract._gasLimit = self.gasLimit;
self.events.request('deploy:contract', contract, (err) => { self.events.request('deploy:contract', contract, (err) => {
eachCb(err); callback(err);
}); });
}, callback); }
},
function (err, _results) { const className = contract.className;
if (!contractDependencies[className] || contractDependencies[className].length === 0) {
contractDeploys[className] = deploy;
return;
}
contractDeploys[className] = cloneDeep(contractDependencies[className]);
contractDeploys[className].push(deploy);
});
async.auto(contractDeploys, function(err, _results) {
if (err) { if (err) {
self.logger.error(__("error deploying contracts")); self.logger.error(__("error deploying contracts"));
self.logger.error(err.message); self.logger.error(err.message);
@ -73,8 +84,8 @@ class DeployManager {
} }
self.logger.info(__("finished deploying contracts")); self.logger.info(__("finished deploying contracts"));
done(err); done(err);
} });
); });
}); });
} }
@ -102,8 +113,8 @@ class DeployManager {
}, },
// TODO: shouldn't be necessary // TODO: shouldn't be necessary
function checkCompileOnly(callback){ function checkCompileOnly(callback) {
if(self.onlyCompile){ if (self.onlyCompile) {
self.events.emit('contractsDeployed'); self.events.emit('contractsDeployed');
return done(); return done();
} }