After upgrading Node to v4.6.0, Change-Prop's master process starts failing after initialising its workers:
[2016-10-11T12:20:30.739Z] INFO: changeprop/2 on scb1001: master(2) initializing 24 workers (levelPath=info/service-runner) [2016-10-11T12:20:35.148Z] INFO: changeprop/136 on scb1001: Kafka Queue module initialised (levelPath=info/change-prop/init) [2016-10-11T12:20:35.150Z] WARN: changeprop/136 on scb1001: listening on *:7272 (levelPath=warn/startup) ... [2016-10-11T12:21:35.927Z] INFO: changeprop/4532 on scb1001: Kafka Queue module initialised (levelPath=info/change-prop/init) [2016-10-11T12:21:35.930Z] WARN: changeprop/4532 on scb1001: listening on *:7272 (levelPath=warn/startup) [2016-10-11T12:21:37.521Z] FATAL: changeprop/2 on scb1001: false == true (err.actual=false, err.expected=true, err.operator===, err.generatedMessage=true, err.levelPath=fatal/service-runner/unhandled) AssertionError: false == true at SharedHandle.options.process.on.process.on.SharedHandle.add (cluster.js:84:3) at queryServer (cluster.js:488:12) at Worker.onmessage (cluster.js:436:7) at ChildProcess.<anonymous> (cluster.js:749:8) at emitTwo (events.js:92:20) at ChildProcess.emit (events.js:172:7) at internal/child_process.js:696:12 at nextTickCallbackWith0Args (node.js:420:9) at process._tickCallback (node.js:349:13)
The release notes reveal that there were some changes introduced in v4.5.0 concerning the clustermodule, which might have caused a regression:
- https://github.com/nodejs/node/pull/6981
- https://github.com/nodejs/node/pull/7132
- https://github.com/nodejs/node/pull/6902
- https://github.com/nodejs/node/pull/6909
An initial investigation proved it impossible to reproduce the error: it would appear only on scb1001 when the service is started via SystemD; starting it manually does not cause the error, nor does starting it on scb2001. The previous iteration of this error was connected to UDP sockets and this seems to be the case again. Yet, it is unclear at this point why the error manifests itself only when the service is run via SystemD.