packager: GlobalTransformCache: throat() the file fetching function
Reviewed By: cpojer Differential Revision: D4914187 fbshipit-source-id: ae3b8aa4ed4dbd1896ca35cf498b7c02fd109f58
This commit is contained in:
parent
aef286791a
commit
f519f16180
|
@ -18,6 +18,7 @@ const crypto = require('crypto');
|
||||||
const fetch = require('node-fetch');
|
const fetch = require('node-fetch');
|
||||||
const jsonStableStringify = require('json-stable-stringify');
|
const jsonStableStringify = require('json-stable-stringify');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
const throat = require('throat');
|
||||||
|
|
||||||
import type {
|
import type {
|
||||||
Options as TransformWorkerOptions,
|
Options as TransformWorkerOptions,
|
||||||
|
@ -260,7 +261,7 @@ class URIBasedGlobalTransformCache {
|
||||||
* a second time if we expect them to be transient. We might even consider
|
* a second time if we expect them to be transient. We might even consider
|
||||||
* waiting a little time before retring if experience shows it's useful.
|
* waiting a little time before retring if experience shows it's useful.
|
||||||
*/
|
*/
|
||||||
static fetchResultFromURI(uri: string): Promise<CachedResult> {
|
static _fetchResultFromURIWithRetry(uri: string): Promise<CachedResult> {
|
||||||
return URIBasedGlobalTransformCache._fetchResultFromURI(uri).catch(error => {
|
return URIBasedGlobalTransformCache._fetchResultFromURI(uri).catch(error => {
|
||||||
if (!URIBasedGlobalTransformCache.shouldRetryAfterThatError(error)) {
|
if (!URIBasedGlobalTransformCache.shouldRetryAfterThatError(error)) {
|
||||||
throw error;
|
throw error;
|
||||||
|
@ -269,6 +270,12 @@ class URIBasedGlobalTransformCache {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The exposed version uses throat() to limit concurrency, as making too many parallel requests
|
||||||
|
* is more likely to trigger server-side throttling and cause timeouts.
|
||||||
|
*/
|
||||||
|
static fetchResultFromURI: (uri: string) => Promise<CachedResult>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We want to retry timeouts as they're likely temporary. We retry 503
|
* We want to retry timeouts as they're likely temporary. We retry 503
|
||||||
* (Service Unavailable) and 502 (Bad Gateway) because they may be caused by a
|
* (Service Unavailable) and 502 (Bad Gateway) because they may be caused by a
|
||||||
|
@ -311,6 +318,9 @@ class URIBasedGlobalTransformCache {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
URIBasedGlobalTransformCache.fetchResultFromURI =
|
||||||
|
throat(500, URIBasedGlobalTransformCache._fetchResultFromURIWithRetry);
|
||||||
|
|
||||||
class OptionsHasher {
|
class OptionsHasher {
|
||||||
_rootPath: string;
|
_rootPath: string;
|
||||||
_cache: WeakMap<TransformWorkerOptions, string>;
|
_cache: WeakMap<TransformWorkerOptions, string>;
|
||||||
|
|
Loading…
Reference in New Issue