зеркало из https://github.com/mozilla/fxa.git
Merge pull request #18042 from mozilla/random-spread-strapi-memcache-bust
feat(auth): fixes for Strapi
This commit is contained in:
Коммит
0b7c299e0f
|
@ -50,7 +50,7 @@ export class StrapiClient {
|
|||
event: 'response',
|
||||
listener: (response: EventResponse) => void
|
||||
) => EventEmitter;
|
||||
private graphqlMemCache: Record<string, unknown> = {};
|
||||
private graphqlMemCache: Record<string, Promise<unknown> | undefined> = {};
|
||||
|
||||
constructor(
|
||||
private strapiClientConfig: StrapiClientConfig,
|
||||
|
@ -103,21 +103,35 @@ export class StrapiClient {
|
|||
};
|
||||
|
||||
if (this.graphqlMemCache[cacheKey]) {
|
||||
let response: Result | undefined;
|
||||
try {
|
||||
response = (await this.graphqlMemCache[cacheKey]) as Result;
|
||||
} catch (e) {
|
||||
// Do nothing, fall through to do the actual query since the cached instance failed
|
||||
}
|
||||
|
||||
if (response) {
|
||||
this.emitter.emit('response', {
|
||||
...emitterResponse,
|
||||
requestEndTime: emitterResponse.requestStartTime,
|
||||
elapsed: 0,
|
||||
cache: true,
|
||||
});
|
||||
return this.graphqlMemCache[cacheKey] as Result;
|
||||
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await this.client.request<Result, any>({
|
||||
const response = this.client.request<Result, any>({
|
||||
document: query,
|
||||
variables,
|
||||
});
|
||||
|
||||
this.graphqlMemCache[cacheKey] = response;
|
||||
|
||||
await response;
|
||||
|
||||
const requestEndTime = Date.now();
|
||||
this.emitter.emit('response', {
|
||||
...emitterResponse,
|
||||
|
@ -125,8 +139,6 @@ export class StrapiClient {
|
|||
requestEndTime,
|
||||
});
|
||||
|
||||
this.graphqlMemCache[cacheKey] = response;
|
||||
|
||||
return response;
|
||||
} catch (e) {
|
||||
const requestEndTime = Date.now();
|
||||
|
@ -151,8 +163,10 @@ export class StrapiClient {
|
|||
const cacheTTL =
|
||||
(this.strapiClientConfig.memCacheTTL || DEFAULT_MEM_CACHE_TTL) * 1000;
|
||||
|
||||
const randomSpread = Math.floor(Math.random() * 100);
|
||||
|
||||
setInterval(() => {
|
||||
this.graphqlMemCache = {};
|
||||
}, cacheTTL);
|
||||
}, cacheTTL + randomSpread);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -138,7 +138,13 @@ async function run(config) {
|
|||
);
|
||||
Container.set(PromotionCodeManager, promotionCodeManager);
|
||||
|
||||
if (config.cms.enabled) {
|
||||
if (
|
||||
config.cms.enabled ||
|
||||
(config.cms.strapiClient &&
|
||||
config.cms.strapiClient.graphqlApiUri &&
|
||||
config.cms.strapiClient.apiKey &&
|
||||
config.cms.strapiClient.firestoreCacheCollectionName)
|
||||
) {
|
||||
const strapiClientConfig = config.cms.strapiClient;
|
||||
const { graphqlApiUri, apiKey, firestoreCacheCollectionName } =
|
||||
strapiClientConfig;
|
||||
|
|
Загрузка…
Ссылка в новой задаче