From 34cdc7fb0999b175b0263ed844175bcf1facca46 Mon Sep 17 00:00:00 2001 From: Alexey Kasyanchuk Date: Wed, 8 Aug 2018 23:31:01 +0300 Subject: [PATCH] fix(db): fix external sphinx openning check in some cases #57 --- package-lock.json | 27 +++++++++++++++++---------- package.json | 1 + src/background/sphinx.js | 28 ++++++++++++++++++++-------- 3 files changed, 38 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index fe4425b..cfbf50b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "rats-search", - "version": "0.27.0", + "version": "0.28.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -10571,6 +10571,11 @@ "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", "dev": true }, + "is-running": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-running/-/is-running-2.1.0.tgz", + "integrity": "sha1-MKc/9cw4VOT8JUkICen1q/jeCeA=" + }, "is-scoped": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-1.0.0.tgz", @@ -10674,6 +10679,17 @@ "requires": { "node-fetch": "^1.0.1", "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } } }, "isstream": { @@ -12413,15 +12429,6 @@ "integrity": "sha1-VfuN62mQcHB/tn+RpGDwRIKUx30=", "dev": true }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, "node-libs-browser": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", diff --git a/package.json b/package.json index af73c9c..ae29383 100644 --- a/package.json +++ b/package.json @@ -123,6 +123,7 @@ "glob": "^7.1.2", "iconv-lite": "^0.4.19", "ipaddr.js": "^1.5.4", + "is-running": "^2.1.0", "json-socket": "^0.3.0", "lodash": "^4.17.5", "material-ui": "^0.20.0", diff --git a/src/background/sphinx.js b/src/background/sphinx.js index cf791f6..2dced30 100644 --- a/src/background/sphinx.js +++ b/src/background/sphinx.js @@ -10,6 +10,7 @@ const { spawn, exec } = require('child_process') const appConfig = require('./config') const findFiles = require('./findFiles') const _ = require('lodash') +const isRunning = require('is-running') const writeSphinxConfig = (path, dbPath) => { let config = ` @@ -156,9 +157,11 @@ module.exports = (callback, dataDirectory, onClose) => { appConfig['dbPath'] = sphinxConfigDirectory } + // check external sphinx instance for using const sphinxPid=`${sphinxConfigDirectory}/searchd.pid` - const isSphinxExternal=fs.existsSync(sphinxPid) - logT('sphinx', "Pid: "+sphinxPid + (isSphinxExternal?" exists.":" no file.")); + const isSphinxExternal=fs.existsSync(sphinxPid) && isRunning(parseInt(fs.readFileSync(sphinxPid))) + if(isSphinxExternal) + logT('sphinx', `founded running sphinx instance in ${sphinxPid}, using it`) const { isInitDb } = isSphinxExternal ? {isInitDb: false} : writeSphinxConfig(sphinxConfigDirectory, appConfig.dbPath) @@ -170,7 +173,7 @@ module.exports = (callback, dataDirectory, onClose) => { } const sphinx = !isSphinxExternal ? spawn(sphinxPath, options) : - {isExternal: true, on: (d,f) => {}, stdout: {on : (d,f)=>{} }}; + {isExternal: true, on: (d,f) => {}, stdout: {on : (d,f)=>{} }}; // running stub // remeber initizalizing of db sphinx.start = start @@ -180,8 +183,6 @@ module.exports = (callback, dataDirectory, onClose) => { const optimizeResolvers = {} - if (isSphinxExternal && callback) setTimeout(()=>{logT('sphinx', 'external sphinx signalled');callback()},500); - sphinx.stdout.on('data', (data) => { logT('sphinx', `sphinx: ${data}`) @@ -211,12 +212,16 @@ module.exports = (callback, dataDirectory, onClose) => { } }) - sphinx.on('close', (code, signal) => { - logT('sphinx', `sphinx closed with code ${code} and signal ${signal}`) + const close = () => { if(onClose && !sphinx.replaceOnClose) // sometime we don't want to call default callback onClose() if(sphinx.onClose) sphinx.onClose() + } + + sphinx.on('close', (code, signal) => { + logT('sphinx', `sphinx closed with code ${code} and signal ${signal}`) + close() }) sphinx.stop = (onFinish, replaceFinish) => { @@ -225,8 +230,14 @@ module.exports = (callback, dataDirectory, onClose) => { sphinx.onClose = onFinish if(replaceFinish) sphinx.replaceOnClose = true // sometime we don't want to call default callback + if (!sphinx.isExternal) exec(`"${sphinxPath}" --config "${config}" --stopwait`) + else + { + logT('sphinx', `ignoring sphinx closing because external sphinx instance`) + close() + } } sphinx.waitOptimized = (table) => new Promise((resolve) => { @@ -280,8 +291,9 @@ module.exports = (callback, dataDirectory, onClose) => { _.merge(sphinx, sphinx.start(callback)); } - return sphinx + if (isSphinxExternal && callback) setTimeout(()=>{logT('sphinx', 'external sphinx signalled');callback()}, 0); + return sphinx } return start(callback)