worker debug.

This commit is contained in:
Christopher Jeffrey 2016-05-06 23:28:14 -07:00
parent 9b2d80098a
commit 6fb0689ce4
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
4 changed files with 45 additions and 19 deletions

View File

@ -15,10 +15,14 @@ if (typeof importScripts !== 'undefined') {
penv = JSON.parse(event.data); penv = JSON.parse(event.data);
env = self.bcoin.env(penv.BCOIN_WORKER_NETWORK); 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 { } else {
penv = process.env; penv = process.env;
env = require('./env')(penv.BCOIN_WORKER_NETWORK); 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
});
} }

View File

@ -215,7 +215,7 @@ Workers.prototype.mine = function mine(attempt, callback) {
function Worker(id) { function Worker(id) {
var self = this; var self = this;
var cp; var penv, cp;
if (!(this instanceof Worker)) if (!(this instanceof Worker))
return new Worker(id); return new Worker(id);
@ -227,6 +227,12 @@ function Worker(id) {
this.parser = new Parser(); this.parser = new Parser();
this.setMaxListeners(utils.MAX_SAFE_INTEGER); 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) { if (bcoin.isBrowser) {
this.child = new global.Worker('/bcoin-worker.js'); this.child = new global.Worker('/bcoin-worker.js');
@ -246,19 +252,13 @@ function Worker(id) {
self.emit('data', data); self.emit('data', data);
}; };
this.child.postMessage(JSON.stringify({ this.child.postMessage(JSON.stringify(penv));
BCOIN_WORKER_ID: id + '',
BCOIN_WORKER_NETWORK: network.type
}));
} else { } else {
cp = require('child_' + 'process'); cp = require('child_' + 'process');
this.child = cp.spawn(process.argv[0], [__dirname + '/worker.js'], { this.child = cp.spawn(process.argv[0], [__dirname + '/worker.js'], {
stdio: 'pipe', stdio: 'pipe',
env: utils.merge({}, process.env, { env: utils.merge({}, process.env, penv)
BCOIN_WORKER_ID: id + '',
BCOIN_WORKER_NETWORK: network.type
})
}); });
this.child.on('error', function(err) { this.child.on('error', function(err) {
@ -279,7 +279,7 @@ function Worker(id) {
this.child.stderr.setEncoding('utf8'); this.child.stderr.setEncoding('utf8');
this.child.stderr.on('data', function(data) { this.child.stderr.on('data', function(data) {
bcoin.debug(data); bcoin.debug(data.trim());
}); });
} }
@ -403,10 +403,11 @@ utils.inherits(Worker, EventEmitter);
* @exports Master * @exports Master
* @constructor * @constructor
* @param {Number} id - Worker ID. * @param {Number} id - Worker ID.
* @param {Object?} options
* @property {Number} id * @property {Number} id
*/ */
function Master(id) { function Master(id, options) {
var self = this; var self = this;
if (!(this instanceof Master)) if (!(this instanceof Master))
@ -417,6 +418,7 @@ function Master(id) {
this.id = id; this.id = id;
this.framer = new Framer(); this.framer = new Framer();
this.parser = new Parser(); this.parser = new Parser();
this.options = options || {};
if (bcoin.isBrowser) { if (bcoin.isBrowser) {
global.onerror = function onerror(err) { global.onerror = function onerror(err) {
@ -503,10 +505,25 @@ Master.prototype.sendEvent = function sendEvent() {
*/ */
Master.prototype.log = function log() { Master.prototype.log = function log() {
if (bcoin.isBrowser) var args, msg;
return console.error.apply(console.error, arguments);
process.stderr.write('Worker ' + this.id + ': '); if (!this.options.debug)
return console.error.apply(console.error, arguments); 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). * Listen for messages from master process (only if worker).
* @param {Number} id - Worker id. * @param {Number} id - Worker id.
* @param {Object?} options
* @returns {Master} * @returns {Master}
*/ */
Master.listen = function listen(id) { Master.listen = function listen(id, options) {
var master = new Master(id); var master = new Master(id, options);
var log = master.log.bind(master); var log = master.log.bind(master);
bcoin.debug = log; bcoin.debug = log;

View File

@ -11,6 +11,8 @@ describe('Chain', function() {
var chain, wallet, miner; var chain, wallet, miner;
var competingTip, oldTip, ch1, ch2, cb1, cb2; var competingTip, oldTip, ch1, ch2, cb1, cb2;
this.timeout(5000);
chain = new bcoin.chain({ name: 'chain-test', db: 'memory' }); chain = new bcoin.chain({ name: 'chain-test', db: 'memory' });
wallet = new bcoin.wallet(); wallet = new bcoin.wallet();
miner = new bcoin.miner({ miner = new bcoin.miner({

View File

@ -6,6 +6,8 @@ var assert = require('assert');
var opcodes = constants.opcodes; var opcodes = constants.opcodes;
describe('Mempool', function() { describe('Mempool', function() {
this.timeout(5000);
var chain = new bcoin.chain({ var chain = new bcoin.chain({
name: 'mp-chain', name: 'mp-chain',
db: 'memory' db: 'memory'