Retry for load of config.json (#6397)

Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
Andrey Sobolev 2024-08-27 14:31:08 +07:00 committed by GitHub
parent 0f56185730
commit 7324f2ef54
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 37 additions and 7 deletions

View File

@ -107,7 +107,7 @@ import github, { githubId } from '@hcengineering/github'
import '@hcengineering/github-assets' import '@hcengineering/github-assets'
import { coreId } from '@hcengineering/core' import { coreId } from '@hcengineering/core'
import presentation, { parsePreviewConfig, presentationId } from '@hcengineering/presentation' import presentation, { loadServerConfig, parsePreviewConfig, presentationId } from '@hcengineering/presentation'
import { setMetadata } from '@hcengineering/platform' import { setMetadata } from '@hcengineering/platform'
import { setDefaultLanguage } from '@hcengineering/theme' import { setDefaultLanguage } from '@hcengineering/theme'
@ -239,13 +239,12 @@ export async function configurePlatform() {
}) })
configureI18n() configureI18n()
const config: Config = await (await fetch( const config: Config = await loadServerConfig(
devConfigHuly devConfigHuly
? '/config-huly.json' : ( ? '/config-huly.json' : (
devConfigBold ? '/config-bold.json' : ( devConfigBold ? '/config-bold.json' : (
devConfig ? '/config-dev.json' : '/config.json')) devConfig ? '/config-dev.json' : '/config.json'))
) )
).json()
const branding: BrandingMap = config.BRANDING_URL !== undefined ? await (await fetch(config.BRANDING_URL)).json() : {} const branding: BrandingMap = config.BRANDING_URL !== undefined ? await (await fetch(config.BRANDING_URL)).json() : {}
const myBranding = branding[window.location.host] ?? {} const myBranding = branding[window.location.host] ?? {}

View File

@ -693,3 +693,28 @@ export function setDownloadProgress (percent: number): void {
upgradeDownloadProgress.set(Math.round(percent)) upgradeDownloadProgress.set(Math.round(percent))
} }
export async function loadServerConfig (url: string): Promise<any> {
let retries = 5
let res: Response | undefined
do {
try {
res = await fetch(url)
break
} catch (e: any) {
retries--
if (retries === 0) {
throw new Error(`Failed to load server config: ${e}`)
}
await new Promise((resolve) => setTimeout(resolve, 1000 * (5 - retries)))
}
} while (retries > 0)
if (res === undefined) {
// In theory should never get here
throw new Error('Failed to load server config')
}
return await res.json()
}

View File

@ -11,10 +11,15 @@ import core, {
} from '@hcengineering/core' } from '@hcengineering/core'
import login, { loginId } from '@hcengineering/login' import login, { loginId } from '@hcengineering/login'
import { getMetadata, getResource, setMetadata } from '@hcengineering/platform' import { getMetadata, getResource, setMetadata } from '@hcengineering/platform'
import presentation, { closeClient, refreshClient, setClient, setPresentationCookie } from '@hcengineering/presentation' import presentation, {
closeClient,
loadServerConfig,
refreshClient,
setClient,
setPresentationCookie
} from '@hcengineering/presentation'
import { fetchMetadataLocalStorage, getCurrentLocation, navigate, setMetadataLocalStorage } from '@hcengineering/ui' import { fetchMetadataLocalStorage, getCurrentLocation, navigate, setMetadataLocalStorage } from '@hcengineering/ui'
import { writable } from 'svelte/store' import { writable } from 'svelte/store'
export const versionError = writable<string | undefined>(undefined) export const versionError = writable<string | undefined>(undefined)
const versionStorageKey = 'last_server_version' const versionStorageKey = 'last_server_version'
@ -113,7 +118,7 @@ export async function connect (title: string): Promise<Client | undefined> {
const frontUrl = getMetadata(presentation.metadata.FrontUrl) ?? '' const frontUrl = getMetadata(presentation.metadata.FrontUrl) ?? ''
const currentFrontVersion = getMetadata(presentation.metadata.FrontVersion) const currentFrontVersion = getMetadata(presentation.metadata.FrontVersion)
if (currentFrontVersion !== undefined) { if (currentFrontVersion !== undefined) {
const frontConfig = await (await fetch(concatLink(frontUrl, '/config.json'))).json() const frontConfig = await loadServerConfig(concatLink(frontUrl, '/config.json'))
if (frontConfig?.version !== undefined && frontConfig.version !== currentFrontVersion) { if (frontConfig?.version !== undefined && frontConfig.version !== currentFrontVersion) {
location.reload() location.reload()
} }

View File

@ -17,6 +17,7 @@ import login, { loginId } from '@hcengineering/login'
import { broadcastEvent, getMetadata, getResource, setMetadata } from '@hcengineering/platform' import { broadcastEvent, getMetadata, getResource, setMetadata } from '@hcengineering/platform'
import presentation, { import presentation, {
closeClient, closeClient,
loadServerConfig,
purgeClient, purgeClient,
refreshClient, refreshClient,
setClient, setClient,
@ -221,7 +222,7 @@ export async function connect (title: string): Promise<Client | undefined> {
const frontUrl = getMetadata(presentation.metadata.FrontUrl) ?? '' const frontUrl = getMetadata(presentation.metadata.FrontUrl) ?? ''
const currentFrontVersion = getMetadata(presentation.metadata.FrontVersion) const currentFrontVersion = getMetadata(presentation.metadata.FrontVersion)
if (currentFrontVersion !== undefined) { if (currentFrontVersion !== undefined) {
const frontConfig = await (await fetch(concatLink(frontUrl, '/config.json'))).json() const frontConfig = await loadServerConfig(concatLink(frontUrl, '/config.json'))
if (frontConfig?.version !== undefined && frontConfig.version !== currentFrontVersion) { if (frontConfig?.version !== undefined && frontConfig.version !== currentFrontVersion) {
location.reload() location.reload()
} }