diff --git a/frontend/app/player/web/MessageLoader.ts b/frontend/app/player/web/MessageLoader.ts index 3131029d8..55ce90349 100644 --- a/frontend/app/player/web/MessageLoader.ts +++ b/frontend/app/player/web/MessageLoader.ts @@ -199,7 +199,9 @@ export default class MessageLoader { * if EFS fails, then session doesn't exist * */ async loadFiles() { - this.messageManager.startLoading(); + if (!this.preloaded) { + this.messageManager.startLoading(); + } try { await this.loadMobs(); diff --git a/tracker/tracker/CHANGELOG.md b/tracker/tracker/CHANGELOG.md index de821b7ab..9edadaedc 100644 --- a/tracker/tracker/CHANGELOG.md +++ b/tracker/tracker/CHANGELOG.md @@ -1,3 +1,7 @@ +# 12.0.11 + +- better restart on unauth (new token assign for long sessions) + # 12.0.10 - improved logs for node binding errors, full nodelist clear before start, getSessionInfo method diff --git a/tracker/tracker/package.json b/tracker/tracker/package.json index b3d7a0de2..5b3055e4a 100644 --- a/tracker/tracker/package.json +++ b/tracker/tracker/package.json @@ -1,7 +1,7 @@ { "name": "@openreplay/tracker", "description": "The OpenReplay tracker main package", - "version": "12.0.10-beta.0", + "version": "12.0.10-beta.1", "keywords": [ "logging", "replay" diff --git a/tracker/tracker/src/common/interaction.ts b/tracker/tracker/src/common/interaction.ts index a36c46b43..80e6908d2 100644 --- a/tracker/tracker/src/common/interaction.ts +++ b/tracker/tracker/src/common/interaction.ts @@ -41,7 +41,8 @@ type QEmpty = { } export type FromWorkerData = - | 'restart' + | 'a_stop' + | 'a_start' | Failure | 'not_init' | { type: 'compress'; batch: Uint8Array } diff --git a/tracker/tracker/src/main/app/index.ts b/tracker/tracker/src/main/app/index.ts index fbbfd444d..6549f9acc 100644 --- a/tracker/tracker/src/main/app/index.ts +++ b/tracker/tracker/src/main/app/index.ts @@ -262,8 +262,10 @@ export default class App { this._debug('webworker_error', e) } this.worker.onmessage = ({ data }: MessageEvent) => { - if (data === 'restart') { + // handling 401 auth restart (new token assignment) + if (data === 'a_stop') { this.stop(false) + } else if (data === 'a_start') { void this.start({}, true) } else if (data === 'not_init') { this.debug.warn('OR WebWorker: writer not initialised. Restarting tracker') diff --git a/tracker/tracker/src/webworker/index.ts b/tracker/tracker/src/webworker/index.ts index f3fdc4827..2dcdb512e 100644 --- a/tracker/tracker/src/webworker/index.ts +++ b/tracker/tracker/src/webworker/index.ts @@ -49,28 +49,34 @@ function resetSender(): void { } } -function reset(): void { - workerStatus = WorkerStatus.Stopping - if (sendIntervalID !== null) { - clearInterval(sendIntervalID) - sendIntervalID = null - } - resetWriter() - resetSender() - setTimeout(() => { - workerStatus = WorkerStatus.NotActive - }, 100) +function reset(): Promise { + return new Promise((res) => { + workerStatus = WorkerStatus.Stopping + if (sendIntervalID !== null) { + clearInterval(sendIntervalID) + sendIntervalID = null + } + resetWriter() + resetSender() + setTimeout(() => { + workerStatus = WorkerStatus.NotActive + res(null) + }, 100) + }) } function initiateRestart(): void { if (workerStatus === WorkerStatus.Stopped) return - postMessage('restart') - reset() + postMessage('a_stop') + // eslint-disable-next-line + reset().then(() => { + postMessage('a_start') + }) } function initiateFailure(reason: string): void { postMessage({ type: 'failure', reason }) - reset() + void reset() } let sendIntervalID: ReturnType | null = null @@ -84,8 +90,11 @@ self.onmessage = ({ data }: { data: ToWorkerData }): any => { } if (data === 'stop') { finalize() - reset() - return (workerStatus = WorkerStatus.Stopped) + // eslint-disable-next-line + reset().then(() => { + workerStatus = WorkerStatus.Stopped + }) + return } if (data === 'forceFlushBatch') { finalize()