mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-29 15:43:59 +00:00
close chidl processes when parent exits
This commit is contained in:
@@ -27,7 +27,12 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
test(req, res) {
|
test(req, res) {
|
||||||
const subprocess = fork(process.argv[1], ['connectProcess']);
|
const subprocess = fork(process.argv[1], ['connectProcess']);
|
||||||
subprocess.on('message', (resp) => res.json(resp));
|
subprocess.on('message', (resp) => {
|
||||||
|
const { msgtype } = res;
|
||||||
|
if (msgtype == 'connected' || msgtype == 'error') {
|
||||||
|
res.json(resp);
|
||||||
|
}
|
||||||
|
});
|
||||||
subprocess.send(req.body);
|
subprocess.send(req.body);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ module.exports = {
|
|||||||
resolve(response);
|
resolve(response);
|
||||||
delete this.requests[msgid];
|
delete this.requests[msgid];
|
||||||
},
|
},
|
||||||
|
handle_ping() {},
|
||||||
|
|
||||||
async ensureOpened(conid, database) {
|
async ensureOpened(conid, database) {
|
||||||
const existing = this.opened.find((x) => x.conid == conid && x.database == database);
|
const existing = this.opened.find((x) => x.conid == conid && x.database == database);
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ module.exports = {
|
|||||||
handle_error(conid, { error }) {
|
handle_error(conid, { error }) {
|
||||||
console.log(`Error in server connection ${conid}: ${error}`);
|
console.log(`Error in server connection ${conid}: ${error}`);
|
||||||
},
|
},
|
||||||
|
handle_ping() {
|
||||||
|
},
|
||||||
|
|
||||||
async ensureOpened(conid) {
|
async ensureOpened(conid) {
|
||||||
const existing = this.opened.find(x => x.conid == conid);
|
const existing = this.opened.find(x => x.conid == conid);
|
||||||
|
|||||||
@@ -58,6 +58,8 @@ module.exports = {
|
|||||||
jsldata.notifyChangedStats(stats);
|
jsldata.notifyChangedStats(stats);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
handle_ping() {},
|
||||||
|
|
||||||
create_meta: 'post',
|
create_meta: 'post',
|
||||||
async create({ conid, database }) {
|
async create({ conid, database }) {
|
||||||
const sesid = uuidv1();
|
const sesid = uuidv1();
|
||||||
|
|||||||
@@ -1,13 +1,15 @@
|
|||||||
const engines = require('@dbgate/engines');
|
const engines = require('@dbgate/engines');
|
||||||
const driverConnect = require('../utility/driverConnect');
|
const driverConnect = require('../utility/driverConnect');
|
||||||
|
const childProcessChecker = require('../utility/childProcessChecker');
|
||||||
|
|
||||||
function start() {
|
function start() {
|
||||||
process.on('message', async connection => {
|
childProcessChecker();
|
||||||
|
process.on('message', async (connection) => {
|
||||||
try {
|
try {
|
||||||
const driver = engines(connection);
|
const driver = engines(connection);
|
||||||
const conn = await driverConnect(driver, connection);
|
const conn = await driverConnect(driver, connection);
|
||||||
const res = await driver.getVersion(conn);
|
const res = await driver.getVersion(conn);
|
||||||
process.send(res);
|
process.send({ msgtype: 'connected', ...res });
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
process.send({ msgtype: 'error', error: e.message });
|
process.send({ msgtype: 'error', error: e.message });
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
const engines = require('@dbgate/engines');
|
const engines = require('@dbgate/engines');
|
||||||
const driverConnect = require('../utility/driverConnect');
|
const driverConnect = require('../utility/driverConnect');
|
||||||
|
const childProcessChecker = require('../utility/childProcessChecker');
|
||||||
|
|
||||||
let systemConnection;
|
let systemConnection;
|
||||||
let storedConnection;
|
let storedConnection;
|
||||||
@@ -67,6 +68,7 @@ async function handleMessage({ msgtype, ...other }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function start() {
|
function start() {
|
||||||
|
childProcessChecker();
|
||||||
process.on('message', async (message) => {
|
process.on('message', async (message) => {
|
||||||
try {
|
try {
|
||||||
await handleMessage(message);
|
await handleMessage(message);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
const engines = require('@dbgate/engines');
|
const engines = require('@dbgate/engines');
|
||||||
const driverConnect = require('../utility/driverConnect');
|
const driverConnect = require('../utility/driverConnect');
|
||||||
|
const childProcessChecker = require('../utility/childProcessChecker');
|
||||||
|
|
||||||
let systemConnection;
|
let systemConnection;
|
||||||
let storedConnection;
|
let storedConnection;
|
||||||
@@ -29,7 +30,8 @@ async function handleMessage({ msgtype, ...other }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function start() {
|
function start() {
|
||||||
process.on('message', async message => {
|
childProcessChecker();
|
||||||
|
process.on('message', async (message) => {
|
||||||
try {
|
try {
|
||||||
await handleMessage(message);
|
await handleMessage(message);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ const uuidv1 = require('uuid/v1');
|
|||||||
const path = require('path');
|
const path = require('path');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
|
const childProcessChecker = require('../utility/childProcessChecker');
|
||||||
|
|
||||||
const driverConnect = require('../utility/driverConnect');
|
const driverConnect = require('../utility/driverConnect');
|
||||||
const { jsldir } = require('../utility/directories');
|
const { jsldir } = require('../utility/directories');
|
||||||
@@ -132,6 +133,7 @@ async function handleMessage({ msgtype, ...other }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function start() {
|
function start() {
|
||||||
|
childProcessChecker();
|
||||||
process.on('message', async (message) => {
|
process.on('message', async (message) => {
|
||||||
try {
|
try {
|
||||||
await handleMessage(message);
|
await handleMessage(message);
|
||||||
|
|||||||
17
packages/api/src/utility/childProcessChecker.js
Normal file
17
packages/api/src/utility/childProcessChecker.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
let counter = 0;
|
||||||
|
|
||||||
|
function childProcessChecker() {
|
||||||
|
setInterval(() => {
|
||||||
|
try {
|
||||||
|
process.send({ msgtype: 'ping', counter: counter++ });
|
||||||
|
} catch (ex) {
|
||||||
|
// This will come once parent dies.
|
||||||
|
// One way can be to check for error code ERR_IPC_CHANNEL_CLOSED
|
||||||
|
// and call process.exit()
|
||||||
|
console.log('parent died', ex.toString());
|
||||||
|
process.exit();
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = childProcessChecker;
|
||||||
Reference in New Issue
Block a user