diff --git a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_capabilities.tsx b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_capabilities.tsx index 74b316f78259fc..ccb8a602941ae9 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_capabilities.tsx +++ b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_capabilities.tsx @@ -6,7 +6,7 @@ import createContainer from 'constate'; import { useMemo, useState, useEffect } from 'react'; -import { useTrackedPromise } from '../../../utils/use_tracked_promise'; +import { ignoreCanceledPromise, useTrackedPromise } from '../../../utils/use_tracked_promise'; import { getMlCapabilitiesResponsePayloadRT, GetMlCapabilitiesResponsePayload, @@ -31,6 +31,7 @@ export const useLogAnalysisCapabilities = () => { onResolve: (response) => { setMlCapabilities(response); }, + onReject: ignoreCanceledPromise, }, [] ); diff --git a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_setup_state.ts b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_setup_state.ts index 750a7104a3a98f..53a2f4a226268b 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_setup_state.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_setup_state.ts @@ -19,7 +19,7 @@ import { ValidationUIError, } from '../../../components/logging/log_analysis_setup/initial_configuration_step'; import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; -import { useTrackedPromise } from '../../../utils/use_tracked_promise'; +import { ignoreCanceledPromise, useTrackedPromise } from '../../../utils/use_tracked_promise'; import { ModuleDescriptor, ModuleSourceConfiguration } from './log_analysis_module_types'; type SetupHandler = ( @@ -193,6 +193,7 @@ export const useAnalysisSetupState = ({ onResolve: ({ data: { datasets } }) => { updateIndicesWithAvailableDatasets(datasets); }, + onReject: ignoreCanceledPromise, }, [validIndexNames, sourceConfiguration.timestampField, startTime, endTime] ); diff --git a/x-pack/plugins/infra/public/containers/logs/log_flyout.tsx b/x-pack/plugins/infra/public/containers/logs/log_flyout.tsx index 9ed2f5ad175c75..7344c1515095be 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_flyout.tsx +++ b/x-pack/plugins/infra/public/containers/logs/log_flyout.tsx @@ -11,7 +11,7 @@ import React, { useContext, useEffect, useMemo, useState } from 'react'; import { LogEntriesItem } from '../../../common/http_api'; import { useKibanaContextForPlugin } from '../../hooks/use_kibana'; import { UrlStateContainer } from '../../utils/url_state'; -import { useTrackedPromise } from '../../utils/use_tracked_promise'; +import { ignoreCanceledPromise, useTrackedPromise } from '../../utils/use_tracked_promise'; import { fetchLogEntriesItem } from './log_entries/api/fetch_log_entries_item'; import { useLogSourceContext } from './log_source'; @@ -49,6 +49,7 @@ export const useLogFlyout = () => { setFlyoutItem(data || null); } }, + onReject: ignoreCanceledPromise, }, [sourceId, flyoutId] ); diff --git a/x-pack/plugins/infra/public/containers/logs/log_highlights/log_entry_highlights.tsx b/x-pack/plugins/infra/public/containers/logs/log_highlights/log_entry_highlights.tsx index b4edebe8f8207c..166837091b1dcd 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_highlights/log_entry_highlights.tsx +++ b/x-pack/plugins/infra/public/containers/logs/log_highlights/log_entry_highlights.tsx @@ -7,7 +7,7 @@ import { useEffect, useMemo, useState } from 'react'; import { TimeKey } from '../../../../common/time'; -import { useTrackedPromise } from '../../../utils/use_tracked_promise'; +import { ignoreCanceledPromise, useTrackedPromise } from '../../../utils/use_tracked_promise'; import { fetchLogEntriesHighlights } from './api/fetch_log_entries_highlights'; import { LogEntry, LogEntriesHighlightsResponse } from '../../../../common/http_api'; import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; @@ -50,6 +50,7 @@ export const useLogEntryHighlights = ( onResolve: (response) => { setLogEntryHighlights(response.data); }, + onReject: ignoreCanceledPromise, }, [sourceId, startTimestamp, endTimestamp, centerPoint, size, filterQuery, highlightTerms] ); diff --git a/x-pack/plugins/infra/public/containers/logs/log_highlights/log_summary_highlights.ts b/x-pack/plugins/infra/public/containers/logs/log_highlights/log_summary_highlights.ts index 14366891dbf593..efc04c839876a0 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_highlights/log_summary_highlights.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_highlights/log_summary_highlights.ts @@ -7,7 +7,7 @@ import { useEffect, useMemo, useState } from 'react'; import { debounce } from 'lodash'; -import { useTrackedPromise } from '../../../utils/use_tracked_promise'; +import { ignoreCanceledPromise, useTrackedPromise } from '../../../utils/use_tracked_promise'; import { fetchLogSummaryHighlights } from './api/fetch_log_summary_highlights'; import { LogEntriesSummaryHighlightsResponse } from '../../../../common/http_api'; import { useBucketSize } from '../log_summary/bucket_size'; @@ -51,6 +51,7 @@ export const useLogSummaryHighlights = ( onResolve: (response) => { setLogSummaryHighlights(response.data); }, + onReject: ignoreCanceledPromise, }, [sourceId, startTimestamp, endTimestamp, bucketSize, filterQuery, highlightTerms] ); diff --git a/x-pack/plugins/infra/public/containers/logs/log_source/log_source.ts b/x-pack/plugins/infra/public/containers/logs/log_source/log_source.ts index e2dd4c523c03f7..2a6bf830b6c900 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_source/log_source.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_source/log_source.ts @@ -14,7 +14,7 @@ import { LogSourceConfigurationPropertiesPatch, LogSourceStatus, } from '../../../../common/http_api/log_sources'; -import { useTrackedPromise } from '../../../utils/use_tracked_promise'; +import { ignoreCanceledPromise, useTrackedPromise } from '../../../utils/use_tracked_promise'; import { callFetchLogSourceConfigurationAPI } from './api/fetch_log_source_configuration'; import { callFetchLogSourceStatusAPI } from './api/fetch_log_source_status'; import { callPatchLogSourceConfigurationAPI } from './api/patch_log_source_configuration'; @@ -47,6 +47,7 @@ export const useLogSource = ({ sourceId, fetch }: { sourceId: string; fetch: Htt setSourceConfiguration(data); }, + onReject: ignoreCanceledPromise, }, [sourceId, fetch] ); @@ -65,6 +66,7 @@ export const useLogSource = ({ sourceId, fetch }: { sourceId: string; fetch: Htt setSourceConfiguration(data); loadSourceStatus(); }, + onReject: ignoreCanceledPromise, }, [sourceId, fetch] ); @@ -82,6 +84,7 @@ export const useLogSource = ({ sourceId, fetch }: { sourceId: string; fetch: Htt setSourceStatus(data); }, + onReject: ignoreCanceledPromise, }, [sourceId, fetch] ); @@ -139,7 +142,9 @@ export const useLogSource = ({ sourceId, fetch }: { sourceId: string; fetch: Htt ); const loadSource = useCallback(() => { - return Promise.all([loadSourceConfiguration(), loadSourceStatus()]); + return Promise.all([loadSourceConfiguration(), loadSourceStatus()]).catch( + ignoreCanceledPromise + ); }, [loadSourceConfiguration, loadSourceStatus]); const initialize = useCallback(async () => { diff --git a/x-pack/plugins/infra/public/containers/logs/log_stream/index.ts b/x-pack/plugins/infra/public/containers/logs/log_stream/index.ts index 4a6da6063e9603..7f1a941eaca92b 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_stream/index.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_stream/index.ts @@ -7,7 +7,7 @@ import { useState, useMemo } from 'react'; import { esKuery } from '../../../../../../../src/plugins/data/public'; import { fetchLogEntries } from '../log_entries/api/fetch_log_entries'; -import { useTrackedPromise } from '../../../utils/use_tracked_promise'; +import { ignoreCanceledPromise, useTrackedPromise } from '../../../utils/use_tracked_promise'; import { LogEntry, LogEntriesCursor } from '../../../../common/http_api'; import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; @@ -63,6 +63,7 @@ export function useLogStream({ onResolve: ({ data }) => { setEntries(data.entries); }, + onReject: ignoreCanceledPromise, }, [sourceId, startTimestamp, endTimestamp, query] ); diff --git a/x-pack/plugins/infra/public/containers/source/source.tsx b/x-pack/plugins/infra/public/containers/source/source.tsx index 96bbd858c3a4bf..afcc82d0cad313 100644 --- a/x-pack/plugins/infra/public/containers/source/source.tsx +++ b/x-pack/plugins/infra/public/containers/source/source.tsx @@ -14,7 +14,7 @@ import { UpdateSourceMutation, } from '../../graphql/types'; import { DependencyError, useApolloClient } from '../../utils/apollo_context'; -import { useTrackedPromise } from '../../utils/use_tracked_promise'; +import { ignoreCanceledPromise, useTrackedPromise } from '../../utils/use_tracked_promise'; import { createSourceMutation } from './create_source.gql_query'; import { sourceQuery } from './query_source.gql_query'; import { updateSourceMutation } from './update_source.gql_query'; @@ -57,6 +57,7 @@ export const useSource = ({ sourceId }: { sourceId: string }) => { onResolve: (response) => { setSource(response.data.source); }, + onReject: ignoreCanceledPromise, }, [apolloClient, sourceId] ); @@ -87,6 +88,7 @@ export const useSource = ({ sourceId }: { sourceId: string }) => { setSource(response.data.createSource.source); } }, + onReject: ignoreCanceledPromise, }, [apolloClient, sourceId] ); @@ -117,6 +119,7 @@ export const useSource = ({ sourceId }: { sourceId: string }) => { setSource(response.data.updateSource.source); } }, + onReject: ignoreCanceledPromise, }, [apolloClient, sourceId] ); diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_categories/use_log_entry_category_examples.tsx b/x-pack/plugins/infra/public/pages/logs/log_entry_categories/use_log_entry_category_examples.tsx index 84b9f045288cc3..dbe0bc31c04f98 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_categories/use_log_entry_category_examples.tsx +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_categories/use_log_entry_category_examples.tsx @@ -8,7 +8,7 @@ import { useMemo, useState } from 'react'; import { LogEntryCategoryExample } from '../../../../common/http_api'; import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; -import { useTrackedPromise } from '../../../utils/use_tracked_promise'; +import { ignoreCanceledPromise, useTrackedPromise } from '../../../utils/use_tracked_promise'; import { callGetLogEntryCategoryExamplesAPI } from './service_calls/get_log_entry_category_examples'; export const useLogEntryCategoryExamples = ({ @@ -48,6 +48,7 @@ export const useLogEntryCategoryExamples = ({ onResolve: ({ data: { examples } }) => { setLogEntryCategoryExamples(examples); }, + onReject: ignoreCanceledPromise, }, [categoryId, endTime, exampleCount, sourceId, startTime] ); diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/page_content.tsx b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/page_content.tsx index d8edcd87eb2a07..344cd0bd315ef3 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/page_content.tsx +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/page_content.tsx @@ -27,6 +27,7 @@ import { useLogSourceContext } from '../../../containers/logs/log_source'; import { LogEntryRateResultsContent } from './page_results_content'; import { LogEntryRateSetupContent } from './page_setup_content'; import { useInterval } from '../../../hooks/use_interval'; +import { ignoreCanceledPromise } from '../../../utils/use_tracked_promise'; const JOB_STATUS_POLLING_INTERVAL = 30000; @@ -61,7 +62,10 @@ export const LogEntryRatePageContent = memo(() => { const { showModuleList } = useLogAnalysisSetupFlyoutStateContext(); const fetchAllJobStatuses = useCallback( - () => Promise.all([fetchLogEntryCategoriesJobStatus(), fetchLogEntryRateJobStatus()]), + () => + Promise.all([fetchLogEntryCategoriesJobStatus(), fetchLogEntryRateJobStatus()]).catch( + ignoreCanceledPromise + ), [fetchLogEntryCategoriesJobStatus, fetchLogEntryRateJobStatus] ); diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_anomalies_results.ts b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_anomalies_results.ts index 37c99272f0872f..a6fdd634dcc00f 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_anomalies_results.ts +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_anomalies_results.ts @@ -6,7 +6,11 @@ import { useMemo, useState, useCallback, useEffect, useReducer } from 'react'; import { useMount } from 'react-use'; -import { useTrackedPromise, CanceledPromiseError } from '../../../utils/use_tracked_promise'; +import { + useTrackedPromise, + CanceledPromiseError, + ignoreCanceledPromise, +} from '../../../utils/use_tracked_promise'; import { callGetLogEntryAnomaliesAPI } from './service_calls/get_log_entry_anomalies'; import { callGetLogEntryAnomaliesDatasetsAPI } from './service_calls/get_log_entry_anomalies_datasets'; import { @@ -212,6 +216,7 @@ export const useLogEntryAnomaliesResults = ({ } setLogEntryAnomalies(anomalies); }, + onReject: ignoreCanceledPromise, }, [ sourceId, diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_examples.ts b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_examples.ts index e809ab9cd5a6f2..36ca0cecbf3b08 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_examples.ts +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_examples.ts @@ -8,7 +8,7 @@ import { useMemo, useState } from 'react'; import { LogEntryExample } from '../../../../common/http_api'; import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; -import { useTrackedPromise } from '../../../utils/use_tracked_promise'; +import { ignoreCanceledPromise, useTrackedPromise } from '../../../utils/use_tracked_promise'; import { callGetLogEntryExamplesAPI } from './service_calls/get_log_entry_examples'; export const useLogEntryExamples = ({ @@ -48,6 +48,7 @@ export const useLogEntryExamples = ({ onResolve: ({ data: { examples } }) => { setLogEntryExamples(examples); }, + onReject: ignoreCanceledPromise, }, [dataset, endTime, exampleCount, sourceId, startTime] ); diff --git a/x-pack/plugins/infra/public/utils/use_tracked_promise.ts b/x-pack/plugins/infra/public/utils/use_tracked_promise.ts index 9951b62fa64a30..a08b6f4f387bcd 100644 --- a/x-pack/plugins/infra/public/utils/use_tracked_promise.ts +++ b/x-pack/plugins/infra/public/utils/use_tracked_promise.ts @@ -259,4 +259,15 @@ export class CanceledPromiseError extends Error { export class SilentCanceledPromiseError extends CanceledPromiseError {} +// Ideally we want `error: Error`, but a promise might be rejected with anything. +export function ignoreCanceledPromise(error: unknown) { + if (error instanceof CanceledPromiseError) { + return; + } + if (error instanceof Error) { + throw error; + } + return error; +} + const noOp = () => undefined;