summaryrefslogtreecommitdiff
path: root/lib/cluster.js
diff options
context:
space:
mode:
authorMiroslav Bajtoš <miro.bajtos@gmail.com>2013-05-02 08:34:22 +0200
committerBen Noordhuis <info@bnoordhuis.nl>2013-05-08 16:53:52 -0700
commit43ec1b1c2e77d21c7571acd39860b9783aaf5175 (patch)
tree0a1ba5edab784e4f29f0b1f8fa1cdd3bf17b5f5d /lib/cluster.js
parent56492de5b9bcc6f34a39617b4687283c18f76693 (diff)
downloadandroid-node-v8-43ec1b1c2e77d21c7571acd39860b9783aaf5175.tar.gz
android-node-v8-43ec1b1c2e77d21c7571acd39860b9783aaf5175.tar.bz2
android-node-v8-43ec1b1c2e77d21c7571acd39860b9783aaf5175.zip
debugger, cluster: each worker has new debug port
Implement support for debugging cluster workers. Each worker process is assigned a new debug port in an increasing sequence. I.e. when master process uses port 5858, then worker 1 uses port 5859, worker 2 uses port 5860, and so on. Introduce new command-line parameter '--debug-port=' which sets debug_port but does not start debugger. This option works for all node processes, it is not specific to cluster workers. Fixes joyent/node#5318.
Diffstat (limited to 'lib/cluster.js')
-rw-r--r--lib/cluster.js28
1 files changed, 27 insertions, 1 deletions
diff --git a/lib/cluster.js b/lib/cluster.js
index 6503cb5f90..45b1224eb0 100644
--- a/lib/cluster.js
+++ b/lib/cluster.js
@@ -59,6 +59,25 @@ else
workerInit();
+function createWorkerExecArgv(masterExecArgv, worker) {
+ var args = masterExecArgv.slice();
+ var debugPort = process.debugPort + worker.id;
+ var hasDebugArg = false;
+
+ for (var i = 0; i < args.length; i++) {
+ var match = args[i].match(/^(--debug|--debug-brk)(=\d+)?$/);
+ if (!match) continue;
+ args[i] = match[1] + '=' + debugPort;
+ hasDebugArg = true;
+ }
+
+ if (!hasDebugArg)
+ args = ['--debug-port=' + debugPort].concat(args);
+
+ return args;
+}
+
+
function masterInit() {
cluster.workers = {};
@@ -93,6 +112,13 @@ function masterInit() {
settings.execArgv = settings.execArgv.concat(['--logfile=v8-%p.log']);
}
cluster.settings = settings;
+
+ process.on('internalMessage', function(message) {
+ if (message.cmd !== 'NODE_DEBUG_ENABLED') return;
+ for (key in cluster.workers)
+ process._debugProcess(cluster.workers[key].process.pid);
+ });
+
cluster.emit('setup');
};
@@ -107,7 +133,7 @@ function masterInit() {
worker.process = fork(settings.exec, settings.args, {
env: workerEnv,
silent: settings.silent,
- execArgv: settings.execArgv
+ execArgv: createWorkerExecArgv(settings.execArgv, worker)
});
worker.process.once('exit', function(exitCode, signalCode) {
worker.suicide = !!worker.suicide;