Skip to content

Commit 9be34f3

Browse files
committed
add 50ms timeout concurrent
1 parent 5db3db4 commit 9be34f3

File tree

2 files changed

+27
-9
lines changed

2 files changed

+27
-9
lines changed

packages/core/src/codewhisperer/util/commonUtil.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,17 @@ export function asyncCallWithTimeout<T>(asyncPromise: Promise<T>, message: strin
3030
})
3131
}
3232

33+
export function asyncCallWithTimeoutSwallowErrors<T>(asyncPromise: Promise<T>, timeLimit: number): Promise<T> {
34+
let timeoutHandle: NodeJS.Timeout
35+
const timeoutPromise = new Promise((resolve) => {
36+
timeoutHandle = setTimeout(() => resolve(undefined), timeLimit)
37+
})
38+
return Promise.race([asyncPromise, timeoutPromise]).then((result) => {
39+
clearTimeout(timeoutHandle)
40+
return result as T
41+
})
42+
}
43+
3344
export function isInlineCompletionEnabled() {
3445
return getInlineSuggestEnabled() && !isCloud9()
3546
}

packages/core/src/codewhisperer/util/supplementalContext/crossFileContextUtil.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,19 @@ import { FeatureConfigProvider, fs } from '../../../shared'
88
import path = require('path')
99
import { BM25Document, BM25Okapi } from './rankBm25'
1010
import { ToolkitError } from '../../../shared/errors'
11-
import { crossFileContextConfig, supplementalContextTimeoutInMs, supplemetalContextFetchingTimeoutMsg } from '../../models/constants'
11+
import {
12+
crossFileContextConfig,
13+
supplementalContextTimeoutInMs,
14+
supplemetalContextFetchingTimeoutMsg,
15+
} from '../../models/constants'
1216
import { CancellationError } from '../../../shared/utilities/timeoutUtils'
1317
import { isTestFile } from './codeParsingUtil'
1418
import { getFileDistance } from '../../../shared/filesystemUtilities'
1519
import { getOpenFilesInWindow } from '../../../shared/utilities/editorUtilities'
1620
import { getLogger } from '../../../shared/logger/logger'
1721
import { CodeWhispererSupplementalContext, CodeWhispererSupplementalContextItem } from '../../models/model'
1822
import { LspController } from '../../../amazonq/lsp/lspController'
19-
import { asyncCallWithTimeout } from '../commonUtil'
23+
import { asyncCallWithTimeoutSwallowErrors } from '../commonUtil'
2024

2125
type CrossFileSupportedLanguage =
2226
| 'java'
@@ -63,13 +67,16 @@ export async function fetchSupplementalContextForSrc(
6367
if (supplementalContextConfig === 'v1') {
6468
return fetchSupplementalContextForSrcV1(editor, cancellationToken)
6569
}
66-
try {
67-
return asyncCallWithTimeout(fetchSupplementalContextForSrcV2(editor), "time out when fetching supplemental context", supplementalContextTimeoutInMs)
68-
} catch (e) {
69-
getLogger().error(`Failed to fetch supplemental context from LSP ${e}`)
70-
return fetchSupplementalContextForSrcV1(editor, cancellationToken)
71-
}
72-
70+
const promiseV1 = asyncCallWithTimeoutSwallowErrors(
71+
fetchSupplementalContextForSrcV1(editor, cancellationToken),
72+
supplementalContextTimeoutInMs
73+
)
74+
const promiseV2 = asyncCallWithTimeoutSwallowErrors(
75+
fetchSupplementalContextForSrcV2(editor),
76+
supplementalContextTimeoutInMs
77+
)
78+
const [resultV1, resultV2] = await Promise.all([promiseV1, promiseV2])
79+
return resultV2 ?? resultV1
7380
}
7481

7582
export async function fetchSupplementalContextForSrcV2(

0 commit comments

Comments
 (0)