From 4dbb3a72d4bd342b4fa358b21023251da4dd5dbe Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Sun, 26 Feb 2023 11:08:20 +0100 Subject: [PATCH] fixed problem with closing queries in progress --- packages/api/src/proc/sessionProcess.js | 39 ++++++++++++++++--------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/packages/api/src/proc/sessionProcess.js b/packages/api/src/proc/sessionProcess.js index d5f60b0fe..f95b319bd 100644 --- a/packages/api/src/proc/sessionProcess.js +++ b/packages/api/src/proc/sessionProcess.js @@ -21,6 +21,7 @@ let afterConnectCallbacks = []; let lastPing = null; let lastActivity = null; let currentProfiler = null; +let executingScripts = 0; class TableWriter { constructor() { @@ -263,20 +264,25 @@ async function handleExecuteQuery({ sql }) { //process.send({ msgtype: 'error', error: e.message }); } - const resultIndexHolder = { - value: 0, - }; - for (const sqlItem of splitQuery(sql, { - ...driver.getQuerySplitterOptions('stream'), - returnRichInfo: true, - })) { - await handleStream(driver, resultIndexHolder, sqlItem); - // const handler = new StreamHandler(resultIndex); - // const stream = await driver.stream(systemConnection, sqlItem, handler); - // handler.stream = stream; - // resultIndex = handler.resultIndex; + executingScripts++; + try { + const resultIndexHolder = { + value: 0, + }; + for (const sqlItem of splitQuery(sql, { + ...driver.getQuerySplitterOptions('stream'), + returnRichInfo: true, + })) { + await handleStream(driver, resultIndexHolder, sqlItem); + // const handler = new StreamHandler(resultIndex); + // const stream = await driver.stream(systemConnection, sqlItem, handler); + // handler.stream = stream; + // resultIndex = handler.resultIndex; + } + process.send({ msgtype: 'done' }); + } finally { + executingScripts--; } - process.send({ msgtype: 'done' }); } async function handleExecuteReader({ jslid, sql, fileName }) { @@ -349,7 +355,12 @@ function start() { storedConnection && storedConnection.globalSettings ? extractIntSettingsValue(storedConnection.globalSettings, 'session.autoCloseTimeout', 15, 1, 120) : 15; - if (useSessionTimeout && time - lastActivity > sessionTimeout * 60 * 1000 && !currentProfiler) { + if ( + useSessionTimeout && + time - lastActivity > sessionTimeout * 60 * 1000 && + !currentProfiler && + executingScripts == 0 + ) { logger.info('Session not active, exiting'); process.exit(0); }