Skip to content

Commit 373b0d9

Browse files
committed
refactor(core): Manifest/LSP fetching should use httpResourceFetcher
1 parent 74eabe9 commit 373b0d9

File tree

3 files changed

+12
-56
lines changed

3 files changed

+12
-56
lines changed

packages/core/src/shared/lsp/lspResolver.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ import AdmZip from 'adm-zip'
1212
import { TargetContent, logger, LspResult, LspVersion, Manifest } from './types'
1313
import { getApplicationSupportFolder } from '../vscode/env'
1414
import { createHash } from '../crypto'
15-
import request from '../request'
15+
import { HttpResourceFetcher } from '../resourcefetcher/httpResourceFetcher'
16+
17+
const lspFetchRetries = 3
1618

1719
export class LanguageServerResolver {
1820
constructor(
@@ -165,9 +167,8 @@ export class LanguageServerResolver {
165167
}
166168

167169
const downloadTasks = contents.map(async (content) => {
168-
// TODO This should be using the retryable http library but it doesn't seem to support zips right now
169-
const res = await request.fetch('GET', content.url).response
170-
if (!res.ok || !res.body) {
170+
const res = await new HttpResourceFetcher(content.url, { showUrl: true, retries: lspFetchRetries }).get()
171+
if (!res || !res.ok || !res.body) {
171172
return false
172173
}
173174

packages/core/src/shared/lsp/manifestResolver.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55

66
import { getLogger } from '../logger/logger'
77
import { ToolkitError } from '../errors'
8-
import { RetryableResourceFetcher } from '../resourcefetcher/httpResourceFetcher'
98
import { Timeout } from '../utilities/timeoutUtils'
109
import globals from '../extensionGlobals'
1110
import { Manifest } from './types'
11+
import { HttpResourceFetcher } from '../resourcefetcher/httpResourceFetcher'
1212

1313
const logger = getLogger('lsp')
1414

@@ -21,6 +21,7 @@ type ManifestStorage = Record<string, StorageManifest>
2121

2222
const manifestStorageKey = 'aws.toolkit.lsp.manifest'
2323
const manifestTimeoutMs = 15000
24+
const manifestFetchRetries = 3
2425

2526
export class ManifestResolver {
2627
constructor(
@@ -40,14 +41,12 @@ export class ManifestResolver {
4041
}
4142

4243
private async fetchRemoteManifest(): Promise<Manifest> {
43-
const resourceFetcher = new RetryableResourceFetcher({
44-
resource: this.manifestURL,
45-
params: {
46-
timeout: new Timeout(manifestTimeoutMs),
47-
},
48-
})
44+
const resp = await new HttpResourceFetcher(this.manifestURL, {
45+
showUrl: true,
46+
timeout: new Timeout(manifestTimeoutMs),
47+
retries: manifestFetchRetries,
48+
}).getNewETagContent(this.getEtag())
4949

50-
const resp = await resourceFetcher.getNewETagContent(this.getEtag())
5150
if (!resp.content) {
5251
throw new ToolkitError('New content was not downloaded; fallback to the locally stored manifest')
5352
}

packages/core/src/shared/resourcefetcher/httpResourceFetcher.ts

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -134,50 +134,6 @@ export class HttpResourceFetcher implements ResourceFetcher<Response> {
134134
}
135135
}
136136

137-
export class RetryableResourceFetcher extends HttpResourceFetcher {
138-
private readonly retryNumber: number
139-
private readonly retryIntervalMs: number
140-
private readonly resource: string
141-
142-
constructor({
143-
resource,
144-
params: { retryNumber = 5, retryIntervalMs = 3000, showUrl = true, timeout = new Timeout(5000) },
145-
}: {
146-
resource: string
147-
params: {
148-
retryNumber?: number
149-
retryIntervalMs?: number
150-
showUrl?: boolean
151-
timeout?: Timeout
152-
}
153-
}) {
154-
super(resource, {
155-
showUrl,
156-
timeout,
157-
})
158-
this.retryNumber = retryNumber
159-
this.retryIntervalMs = retryIntervalMs
160-
this.resource = resource
161-
}
162-
163-
fetch(versionTag?: string) {
164-
return withRetries(
165-
async () => {
166-
try {
167-
return await this.getNewETagContent(versionTag)
168-
} catch (err) {
169-
getLogger('lsp').error('Failed to fetch at endpoint: %s, err: %s', this.resource, err)
170-
throw err
171-
}
172-
},
173-
{
174-
maxRetries: this.retryNumber,
175-
delay: this.retryIntervalMs,
176-
}
177-
)
178-
}
179-
}
180-
181137
/**
182138
* Retrieves JSON property value from a remote resource
183139
* @param property property to retrieve

0 commit comments

Comments
 (0)