function silentRpcErrors(error) { if (!process.connected && error.code === 'ERR_IPC_CHANNEL_CLOSED') return; throw error; }
function prepareProcess(name, disposeCallback) { process.title = 'ndb/' + name; function silentRpcErrors(error) { if (!process.connected && error.code === 'ERR_IPC_CHANNEL_CLOSED') return; throw error; } process.on('uncaughtException', silentRpcErrors); process.on('unhandledRejection', silentRpcErrors); // dispose when child process is disconnected process.on('disconnect', () => disposeCallback()); }
async function onError(err) { if (flowInstance.listenerCount('error') && !errorTrapped) { errorTrapped = true; flowInstance.emit('error', err); return; } console.error(err); if (process.connected) { process.send({ method: 'stop', error: passableError(err) }); process.exit(1); } else if (flowInstance) { await flowInstance.stopChild(1); } }
function stop() { shouldStop = true; if (!started) { return; } if (stopping) { return; } stopping = true; console.log('stopping'); if (process.argv[2] === 'listen') { server.close(doStop); } else { doStop(); } function doStop() { if (!process.connected) { process.exit(0); } if (cluster.worker) { cluster.worker.disconnect(); } else { process.disconnect(); } } }
/** * Sends a message to the master process from a worker using Node.js process.send(). * Hooks up node.id and node.flow.id to the message property of the given obj parameter. * @param {Object} obj The object to send. * @param {String} obj.method The method of this message to call in the master process. * @param {Object} obj.message The message to send. * @private */ sendProcessMessage(obj) { if (!process.connected) { return; } if (!this.flowInstance) { return; } if (obj.message) { obj.message.nodeId = this._id; obj.message.flowId = this.flow._id; obj.message.flowInstanceId = this.flowInstance._id; } process.send(obj); }
cpuStartTime = process.hrtime(); if (process.connected) { process.send({ method: 'usage',