summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcjihrig <cjihrig@gmail.com>2018-01-26 14:16:20 -0500
committercjihrig <cjihrig@gmail.com>2018-01-29 10:24:45 -0500
commite0864e50ecf917cbfa98d443e6f122425d6447cf (patch)
tree37b38c48a4c91d5f9eed9675c705125e3d5dff77
parent0778f79cb37526c3f4f8bff525fc4d4ca9b86e78 (diff)
downloadandroid-node-v8-e0864e50ecf917cbfa98d443e6f122425d6447cf.tar.gz
android-node-v8-e0864e50ecf917cbfa98d443e6f122425d6447cf.tar.bz2
android-node-v8-e0864e50ecf917cbfa98d443e6f122425d6447cf.zip
cluster: add cwd to cluster.settings
This commit allows cluster workers to be created with configurable working directories. Fixes: https://github.com/nodejs/node/issues/16388 PR-URL: https://github.com/nodejs/node/pull/18399 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
-rw-r--r--doc/api/cluster.md2
-rw-r--r--lib/internal/cluster/master.js1
-rw-r--r--test/parallel/test-cluster-cwd.js22
3 files changed, 25 insertions, 0 deletions
diff --git a/doc/api/cluster.md b/doc/api/cluster.md
index 6ef451cb9a..1817ac8202 100644
--- a/doc/api/cluster.md
+++ b/doc/api/cluster.md
@@ -711,6 +711,8 @@ changes:
* `exec` {string} File path to worker file. **Default:** `process.argv[1]`
* `args` {Array} String arguments passed to worker.
**Default:** `process.argv.slice(2)`
+ * `cwd` {string} Current working directory of the worker process. **Default:**
+ `undefined` (inherits from parent process)
* `silent` {boolean} Whether or not to send output to parent's stdio.
**Default:** `false`
* `stdio` {Array} Configures the stdio of forked processes. Because the
diff --git a/lib/internal/cluster/master.js b/lib/internal/cluster/master.js
index 280955549a..570cf7bc6f 100644
--- a/lib/internal/cluster/master.js
+++ b/lib/internal/cluster/master.js
@@ -126,6 +126,7 @@ function createWorkerProcess(id, env) {
}
return fork(cluster.settings.exec, cluster.settings.args, {
+ cwd: cluster.settings.cwd,
env: workerEnv,
silent: cluster.settings.silent,
windowsHide: cluster.settings.windowsHide,
diff --git a/test/parallel/test-cluster-cwd.js b/test/parallel/test-cluster-cwd.js
new file mode 100644
index 0000000000..ce3fdca51e
--- /dev/null
+++ b/test/parallel/test-cluster-cwd.js
@@ -0,0 +1,22 @@
+'use strict';
+const common = require('../common');
+const assert = require('assert');
+const cluster = require('cluster');
+
+if (cluster.isMaster) {
+ common.refreshTmpDir();
+
+ assert.strictEqual(cluster.settings.cwd, undefined);
+ cluster.fork().on('message', common.mustCall((msg) => {
+ assert.strictEqual(msg, process.cwd());
+ }));
+
+ cluster.setupMaster({ cwd: common.tmpDir });
+ assert.strictEqual(cluster.settings.cwd, common.tmpDir);
+ cluster.fork().on('message', common.mustCall((msg) => {
+ assert.strictEqual(msg, common.tmpDir);
+ }));
+} else {
+ process.send(process.cwd());
+ process.disconnect();
+}