From 19a8af866b31c03e8969feaf6e417c8c63b0856d Mon Sep 17 00:00:00 2001 From: Vadim Ogievetsky Date: Fri, 8 Mar 2024 10:55:31 -0800 Subject: [PATCH] make detail archive opening more robust (#16071) --- .../utils/download-query-detail-archive.ts | 11 +++++--- .../execution-submit-dialog.tsx | 25 ++++++++++++++++--- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/web-console/src/utils/download-query-detail-archive.ts b/web-console/src/utils/download-query-detail-archive.ts index 124b322c5fb..cf84fc1acd2 100644 --- a/web-console/src/utils/download-query-detail-archive.ts +++ b/web-console/src/utils/download-query-detail-archive.ts @@ -18,6 +18,11 @@ import * as JSONBig from 'json-bigint-native'; +import type { + AsyncStatusResponse, + MsqTaskPayloadResponse, + MsqTaskReportResponse, +} from '../druid-models'; import { Api } from '../singletons'; import { downloadFile } from './download'; @@ -26,9 +31,9 @@ export interface QueryDetailArchive { id: string; detailArchiveVersion: number; status?: any; - reports?: any; - payload?: any; - statementsStatus?: any; + reports?: MsqTaskReportResponse; + payload?: MsqTaskPayloadResponse; + statementsStatus?: AsyncStatusResponse; serverStatus?: any; } diff --git a/web-console/src/views/workbench-view/execution-submit-dialog/execution-submit-dialog.tsx b/web-console/src/views/workbench-view/execution-submit-dialog/execution-submit-dialog.tsx index 3a563df1c94..020d01e8f77 100644 --- a/web-console/src/views/workbench-view/execution-submit-dialog/execution-submit-dialog.tsx +++ b/web-console/src/views/workbench-view/execution-submit-dialog/execution-submit-dialog.tsx @@ -82,9 +82,27 @@ export const ExecutionSubmitDialog = React.memo(function ExecutionSubmitDialog( if (typeof detailArchiveVersion === 'number') { try { if (detailArchiveVersion === 2) { - execution = Execution.fromTaskReport(parsed.reports) - .updateWithTaskPayload(parsed.payload) - .updateWithAsyncStatus(parsed.statementsStatus); + if (parsed.reports) { + execution = Execution.fromTaskReport(parsed.reports); + } + + if (parsed.statementsStatus) { + execution = execution + ? execution.updateWithAsyncStatus(parsed.statementsStatus) + : Execution.fromAsyncStatus(parsed.statementsStatus); + } + + if (!execution) { + AppToaster.show({ + intent: Intent.DANGER, + message: `Not enough information to decode detail archive`, + }); + return; + } + + if (parsed.payload) { + execution = execution.updateWithTaskPayload(parsed.payload); + } } else { AppToaster.show({ intent: Intent.DANGER, @@ -97,6 +115,7 @@ export const ExecutionSubmitDialog = React.memo(function ExecutionSubmitDialog( intent: Intent.DANGER, message: `Could not decode profile: ${e.message}`, }); + console.log(e); // Log out the error to the console in case we want to debug this further. This is very much a power user feature. return; } } else if (typeof (parsed as any).multiStageQuery === 'object') {