From 2bd57e270466636873e2973affa8acab6e0d6ef0 Mon Sep 17 00:00:00 2001 From: Alex Kaminskii Date: Mon, 19 Sep 2022 17:38:59 +0200 Subject: [PATCH] fix(tracker): do not send stop-message to WebWorker during worker-initiated stop() call --- tracker/tracker/src/main/app/index.ts | 4 +-- tracker/tracker/src/webworker/index.ts | 48 ++++++++++++++++---------- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/tracker/tracker/src/main/app/index.ts b/tracker/tracker/src/main/app/index.ts index d621852c9..e96f8d64d 100644 --- a/tracker/tracker/src/main/app/index.ts +++ b/tracker/tracker/src/main/app/index.ts @@ -155,10 +155,10 @@ export default class App { } this.worker.onmessage = ({ data }: MessageEvent) => { if (data === 'failed') { - this.stop() + this.stop(false) this._debug('worker_failed', {}) // add context (from worker) } else if (data === 'restart') { - this.stop() + this.stop(false) this.start({ forceNew: true }) } } diff --git a/tracker/tracker/src/webworker/index.ts b/tracker/tracker/src/webworker/index.ts index 6373d4cc9..4faaf1395 100644 --- a/tracker/tracker/src/webworker/index.ts +++ b/tracker/tracker/src/webworker/index.ts @@ -18,11 +18,25 @@ let sender: QueueSender | null = null let writer: BatchWriter | null = null let workerStatus: WorkerStatus = WorkerStatus.NotActive -function send(): void { +function finalize(): void { if (!writer) { return } - writer.finaliseBatch() + writer.finaliseBatch() // TODO: force sendAll? +} + +function resetWriter(): void { + if (writer) { + writer.clean() + writer = null + } +} + +function resetSender(): void { + if (sender) { + sender.clean() + sender = null + } } function reset(): void { @@ -31,18 +45,17 @@ function reset(): void { clearInterval(sendIntervalID) sendIntervalID = null } - if (writer) { - writer.clean() - writer = null - } + resetWriter() + resetSender() workerStatus = WorkerStatus.NotActive } -function resetCleanQueue(): void { - if (sender) { - sender.clean() - sender = null - } +function initiateRestart(): void { + self.postMessage('restart') + reset() +} +function initiateFailure(): void { + self.postMessage('failed') reset() } @@ -51,11 +64,11 @@ let restartTimeoutID: ReturnType self.onmessage = ({ data }: MessageEvent): any => { if (data == null) { - send() // TODO: sendAll? + finalize() return } if (data === 'stop') { - send() + finalize() reset() return } @@ -70,7 +83,7 @@ self.onmessage = ({ data }: MessageEvent): any => { if (message[0] === MType.SetPageVisibility) { if (message[1]) { // .hidden - restartTimeoutID = setTimeout(() => self.postMessage('restart'), 30 * 60 * 1000) + restartTimeoutID = setTimeout(() => initiateRestart(), 30 * 60 * 1000) } else { clearTimeout(restartTimeoutID) } @@ -86,12 +99,11 @@ self.onmessage = ({ data }: MessageEvent): any => { data.ingestPoint, () => { // onUnauthorised - self.postMessage('restart') + initiateRestart() }, () => { // onFailure - resetCleanQueue() - self.postMessage('failed') + initiateFailure() }, data.connAttemptCount, data.connAttemptGap, @@ -104,7 +116,7 @@ self.onmessage = ({ data }: MessageEvent): any => { (batch) => sender && sender.push(batch), ) if (sendIntervalID === null) { - sendIntervalID = setInterval(send, AUTO_SEND_INTERVAL) + sendIntervalID = setInterval(finalize, AUTO_SEND_INTERVAL) } return (workerStatus = WorkerStatus.Active) }