Skip to content

Commit 47659bb

Browse files
committed
fix: tracing issues
1 parent e2f7a25 commit 47659bb

File tree

3 files changed

+16
-21
lines changed

3 files changed

+16
-21
lines changed

src/containers/Tenant/Query/ExecuteResult/TraceButton.tsx

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,10 @@ import {Button} from '@gravity-ui/uikit';
55

66
import {useClusterBaseInfo} from '../../../../store/reducers/cluster/cluster';
77
import {traceApi} from '../../../../store/reducers/trace';
8-
import {SECOND_IN_MS} from '../../../../utils/constants';
9-
import {useDelayed} from '../../../../utils/hooks/useDelayed';
108
import {replaceParams} from '../utils/replaceParams';
119

1210
import i18n from './i18n';
1311

14-
const TIME_BEFORE_CHECK = 15 * SECOND_IN_MS;
15-
1612
interface TraceUrlButtonProps {
1713
traceId: string;
1814
}
@@ -23,27 +19,25 @@ export function TraceButton({traceId}: TraceUrlButtonProps) {
2319
const checkTraceUrl = traceCheck?.url ? replaceParams(traceCheck.url, {traceId}) : '';
2420
const traceUrl = traceView?.url ? replaceParams(traceView.url, {traceId}) : '';
2521

26-
// We won't get any trace data at first 15 seconds for sure
27-
const [readyToFetch, resetDelay] = useDelayed(TIME_BEFORE_CHECK);
22+
const [checkTrace, {isLoading, isUninitialized}] = traceApi.useCheckTraceMutation();
2823

2924
React.useEffect(() => {
30-
resetDelay();
31-
}, [traceId, resetDelay]);
25+
let checkTraceMutation: {abort: () => void} | null;
26+
if (checkTraceUrl) {
27+
checkTraceMutation = checkTrace({url: checkTraceUrl});
28+
}
3229

33-
const {isFetching} = traceApi.useCheckTraceQuery(
34-
{url: checkTraceUrl},
35-
{skip: !checkTraceUrl || !readyToFetch},
36-
);
30+
return () => checkTraceMutation?.abort();
31+
}, [checkTrace, checkTraceUrl]);
3732

38-
if (!traceUrl) {
33+
if (!traceUrl || isUninitialized) {
3934
return null;
4035
}
4136

42-
const loading = !readyToFetch || isFetching;
4337
return (
4438
<Button
45-
view={loading ? 'flat-secondary' : 'flat-info'}
46-
loading={loading}
39+
view={isLoading ? 'flat-secondary' : 'flat-info'}
40+
loading={isLoading}
4741
href={traceUrl}
4842
target="_blank"
4943
>

src/services/api.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,9 @@ import {parseMetaCluster} from './parsers/parseMetaCluster';
6666
import {parseMetaTenants} from './parsers/parseMetaTenants';
6767
import {settingsManager} from './settings';
6868

69-
const TRACE_CHECK_TIMEOUT = 2 * SECOND_IN_MS;
70-
const TRACE_API_ERROR_TIMEOUT = 10 * SECOND_IN_MS;
69+
const TRACE_RETRY_DELAY = 4 * SECOND_IN_MS;
70+
const TRACE_CHECK_TIMEOUT = 10 * SECOND_IN_MS;
71+
const TRACE_API_ERROR_RETRY_DELAY = 10 * SECOND_IN_MS;
7172
const MAX_TRACE_CHECK_RETRIES = 30;
7273

7374
export type AxiosOptions = {
@@ -604,10 +605,10 @@ export class YdbEmbeddedAPI extends AxiosWrapper {
604605
(error?.response?.status === 404 || error.code === 'ERR_NETWORK');
605606

606607
if (isTracingError) {
607-
return TRACE_CHECK_TIMEOUT;
608+
return TRACE_RETRY_DELAY;
608609
}
609610

610-
return TRACE_API_ERROR_TIMEOUT;
611+
return TRACE_API_ERROR_RETRY_DELAY;
611612
},
612613
shouldResetTimeout: true,
613614
retryCondition: () => true,

src/store/reducers/trace.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ interface CheckTraceParams {
66

77
export const traceApi = api.injectEndpoints({
88
endpoints: (build) => ({
9-
checkTrace: build.query({
9+
checkTrace: build.mutation({
1010
queryFn: async ({url}: CheckTraceParams, {signal}) => {
1111
try {
1212
const response = await window.api.checkTrace({url}, {signal});

0 commit comments

Comments
 (0)