diff --git a/changelogs/fragments/8863.yml b/changelogs/fragments/8863.yml
new file mode 100644
index 000000000000..51dc8d37cc2f
--- /dev/null
+++ b/changelogs/fragments/8863.yml
@@ -0,0 +1,2 @@
+fix:
+- Keep previous query result if current query result in error ([#8863](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/8863))
\ No newline at end of file
diff --git a/src/plugins/discover/public/application/view_components/canvas/index.tsx b/src/plugins/discover/public/application/view_components/canvas/index.tsx
index 71d47446c75c..5fe1bac50891 100644
--- a/src/plugins/discover/public/application/view_components/canvas/index.tsx
+++ b/src/plugins/discover/public/application/view_components/canvas/index.tsx
@@ -84,8 +84,13 @@ export default function DiscoverCanvas({ setHeaderActionMenu, history, optionalR
if (next.bucketInterval && next.bucketInterval !== fetchState.bucketInterval)
shouldUpdateState = true;
if (next.chartData && next.chartData !== fetchState.chartData) shouldUpdateState = true;
- // we still want to show rows from the previous query while current query is loading
- if (next.status !== ResultStatus.LOADING && next.rows && next.rows !== fetchState.rows) {
+ // we still want to show rows from the previous query while current query is loading or the current query results in error
+ if (
+ next.status !== ResultStatus.LOADING &&
+ next.status !== ResultStatus.ERROR &&
+ next.rows &&
+ next.rows !== fetchState.rows
+ ) {
shouldUpdateState = true;
setRows(next.rows);
}
@@ -152,20 +157,16 @@ export default function DiscoverCanvas({ setHeaderActionMenu, history, optionalR
timeFieldName={timeField}
/>
)}
- {fetchState.status === ResultStatus.ERROR && (
-
- )}
{fetchState.status === ResultStatus.UNINITIALIZED && (
refetch$.next()} />
)}
{fetchState.status === ResultStatus.LOADING && !rows?.length && }
+ {fetchState.status === ResultStatus.ERROR && !rows?.length && (
+ refetch$.next()} />
+ )}
{(fetchState.status === ResultStatus.READY ||
- (fetchState.status === ResultStatus.LOADING && !!rows?.length)) &&
+ (fetchState.status === ResultStatus.LOADING && !!rows?.length) ||
+ (fetchState.status === ResultStatus.ERROR && !!rows?.length)) &&
(isEnhancementsEnabled ? (
<>