diff --git a/lib/bcoin/worker.js b/lib/bcoin/worker.js index fd22b766..81f42334 100644 --- a/lib/bcoin/worker.js +++ b/lib/bcoin/worker.js @@ -15,10 +15,14 @@ if (typeof importScripts !== 'undefined') { penv = JSON.parse(event.data); env = self.bcoin.env(penv.BCOIN_WORKER_NETWORK); - env.workers.listen(+penv.BCOIN_WORKER_ID); + env.workers.listen(+penv.BCOIN_WORKER_ID, { + debug: +penv.BCOIN_WORKER_DEBUG === 1 + }); }; } else { penv = process.env; env = require('./env')(penv.BCOIN_WORKER_NETWORK); - env.workers.listen(+penv.BCOIN_WORKER_ID); + env.workers.listen(+penv.BCOIN_WORKER_ID, { + debug: +penv.BCOIN_WORKER_DEBUG === 1 + }); } diff --git a/lib/bcoin/workers.js b/lib/bcoin/workers.js index 245a3d7c..2bae6978 100644 --- a/lib/bcoin/workers.js +++ b/lib/bcoin/workers.js @@ -215,7 +215,7 @@ Workers.prototype.mine = function mine(attempt, callback) { function Worker(id) { var self = this; - var cp; + var penv, cp; if (!(this instanceof Worker)) return new Worker(id); @@ -227,6 +227,12 @@ function Worker(id) { this.parser = new Parser(); this.setMaxListeners(utils.MAX_SAFE_INTEGER); + penv = { + BCOIN_WORKER_ID: id + '', + BCOIN_WORKER_NETWORK: network.type, + BCOIN_WORKER_DEBUG: (bcoin.debugLogs || bcoin.debugFile) ? '1' : '0' + }; + if (bcoin.isBrowser) { this.child = new global.Worker('/bcoin-worker.js'); @@ -246,19 +252,13 @@ function Worker(id) { self.emit('data', data); }; - this.child.postMessage(JSON.stringify({ - BCOIN_WORKER_ID: id + '', - BCOIN_WORKER_NETWORK: network.type - })); + this.child.postMessage(JSON.stringify(penv)); } else { cp = require('child_' + 'process'); this.child = cp.spawn(process.argv[0], [__dirname + '/worker.js'], { stdio: 'pipe', - env: utils.merge({}, process.env, { - BCOIN_WORKER_ID: id + '', - BCOIN_WORKER_NETWORK: network.type - }) + env: utils.merge({}, process.env, penv) }); this.child.on('error', function(err) { @@ -279,7 +279,7 @@ function Worker(id) { this.child.stderr.setEncoding('utf8'); this.child.stderr.on('data', function(data) { - bcoin.debug(data); + bcoin.debug(data.trim()); }); } @@ -403,10 +403,11 @@ utils.inherits(Worker, EventEmitter); * @exports Master * @constructor * @param {Number} id - Worker ID. + * @param {Object?} options * @property {Number} id */ -function Master(id) { +function Master(id, options) { var self = this; if (!(this instanceof Master)) @@ -417,6 +418,7 @@ function Master(id) { this.id = id; this.framer = new Framer(); this.parser = new Parser(); + this.options = options || {}; if (bcoin.isBrowser) { global.onerror = function onerror(err) { @@ -503,10 +505,25 @@ Master.prototype.sendEvent = function sendEvent() { */ Master.prototype.log = function log() { - if (bcoin.isBrowser) - return console.error.apply(console.error, arguments); - process.stderr.write('Worker ' + this.id + ': '); - return console.error.apply(console.error, arguments); + var args, msg; + + if (!this.options.debug) + return; + + args = Array.prototype.slice.call(arguments); + + msg = typeof args[0] !== 'object' + ? utils.format(args, false) + : args[0]; + + msg = utils.format(['Worker %d: %s', this.id, msg], false); + + if (bcoin.isBrowser) { + console.error(msg); + return; + } + + process.stderr.write(msg + '\n'); }; /** @@ -522,11 +539,12 @@ Master.prototype.destroy = function destroy() { /** * Listen for messages from master process (only if worker). * @param {Number} id - Worker id. + * @param {Object?} options * @returns {Master} */ -Master.listen = function listen(id) { - var master = new Master(id); +Master.listen = function listen(id, options) { + var master = new Master(id, options); var log = master.log.bind(master); bcoin.debug = log; diff --git a/test/chain-test.js b/test/chain-test.js index 8bb13922..cd286b51 100644 --- a/test/chain-test.js +++ b/test/chain-test.js @@ -11,6 +11,8 @@ describe('Chain', function() { var chain, wallet, miner; var competingTip, oldTip, ch1, ch2, cb1, cb2; + this.timeout(5000); + chain = new bcoin.chain({ name: 'chain-test', db: 'memory' }); wallet = new bcoin.wallet(); miner = new bcoin.miner({ diff --git a/test/mempool-test.js b/test/mempool-test.js index 43232c64..bdc9529e 100644 --- a/test/mempool-test.js +++ b/test/mempool-test.js @@ -6,6 +6,8 @@ var assert = require('assert'); var opcodes = constants.opcodes; describe('Mempool', function() { + this.timeout(5000); + var chain = new bcoin.chain({ name: 'mp-chain', db: 'memory'