Skip to content
Snippets Groups Projects
Unverified Commit 77ba1602 authored by Diego Sampaio's avatar Diego Sampaio Committed by GitHub
Browse files

chore: add a retry on get supported versions from cloud (#35153)

parent baa79d3e
No related branches found
No related tags found
No related merge requests found
...@@ -59,13 +59,13 @@ export const handleResponse = async <T>(promise: Promise<Response>) => { ...@@ -59,13 +59,13 @@ export const handleResponse = async <T>(promise: Promise<Response>) => {
const cacheValueInSettings = <T extends SettingValue>( const cacheValueInSettings = <T extends SettingValue>(
key: string, key: string,
fn: () => Promise<T>, fn: (retry?: number) => Promise<T>,
): (() => Promise<T>) & { ): (() => Promise<T>) & {
reset: () => Promise<T>; reset: (retry?: number) => Promise<T>;
} => { } => {
const reset = async () => { const reset = async (retry?: number) => {
SystemLogger.debug(`Resetting cached value ${key} in settings`); SystemLogger.debug(`Resetting cached value ${key} in settings`);
const value = await fn(); const value = await fn(retry);
if ( if (
( (
...@@ -129,27 +129,26 @@ const getSupportedVersionsFromCloud = async () => { ...@@ -129,27 +129,26 @@ const getSupportedVersionsFromCloud = async () => {
return response; return response;
}; };
const getSupportedVersionsToken = async () => { const getSupportedVersionsToken = async (retry = 0) => {
/** /**
* Gets the supported versions from the license * Gets the supported versions from the license
* Gets the supported versions from the cloud * Gets the supported versions from the cloud
* Gets the latest version * Gets the latest version
* return the token * return the token
*/ */
const [versionsFromLicense, cloudResponse] = await Promise.all([License.getLicense(), getSupportedVersionsFromCloud()]);
const [versionsFromLicense, response] = await Promise.all([License.getLicense(), getSupportedVersionsFromCloud()]);
const supportedVersions = await supportedVersionsChooseLatest( const supportedVersions = await supportedVersionsChooseLatest(
supportedVersionsFromBuild, supportedVersionsFromBuild,
versionsFromLicense?.supportedVersions, versionsFromLicense?.supportedVersions,
(response.success && response.result) || undefined, (cloudResponse.success && cloudResponse.result) || undefined,
); );
SystemLogger.debug({ SystemLogger.debug({
msg: 'Supported versions', msg: 'Supported versions',
supportedVersionsFromBuild: supportedVersionsFromBuild.timestamp, supportedVersionsFromBuild: supportedVersionsFromBuild.timestamp,
versionsFromLicense: versionsFromLicense?.supportedVersions?.timestamp, versionsFromLicense: versionsFromLicense?.supportedVersions?.timestamp,
response: response.success && response.result?.timestamp, response: cloudResponse.success && cloudResponse.result?.timestamp,
}); });
switch (supportedVersions) { switch (supportedVersions) {
...@@ -163,14 +162,28 @@ const getSupportedVersionsToken = async () => { ...@@ -163,14 +162,28 @@ const getSupportedVersionsToken = async () => {
msg: 'Using supported versions from license', msg: 'Using supported versions from license',
}); });
break; break;
case response.success && response.result: case cloudResponse.success && cloudResponse.result:
SystemLogger.info({ SystemLogger.info({
msg: 'Using supported versions from cloud', msg: 'Using supported versions from cloud',
}); });
break; break;
} }
await buildVersionUpdateMessage(supportedVersions?.versions); // to avoid a possibly wrong message, we only send the message if the cloud response was successful
if (cloudResponse.success) {
await buildVersionUpdateMessage(supportedVersions?.versions);
} else if (retry < 5) {
// in case of failure we'll try again later
setTimeout(
async () => {
await getCachedSupportedVersionsToken.reset(retry + 1);
},
5000 * Math.pow(2, retry),
);
} else {
SystemLogger.error(`Failed to get supported versions from cloud after ${retry} retries.`);
await buildVersionUpdateMessage(supportedVersions?.versions);
}
return supportedVersions?.signed; return supportedVersions?.signed;
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment