Merge pull request #1416 from chaotixkilla/fix-settings-cache
Fix settings caching
This commit is contained in:
commit
b2a07a873d
1 changed files with 38 additions and 14 deletions
|
|
@ -55,30 +55,54 @@ const populateSettings = function (req, res, next) {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const operatorSettings = settingsCache.get(operatorId)
|
// Priority of configs to retrieve
|
||||||
if (!versionId && (!operatorSettings || !!needsSettingsReload[operatorId])) {
|
// 1. Machine is in the middle of a transaction and has the config-version header set, fetch that config from cache or database, depending on whether it exists in cache
|
||||||
return newSettingsLoader.loadLatest()
|
// 2. The operator settings changed, so we must update the cache
|
||||||
|
// 3. There's a cached config, send the cached value
|
||||||
|
// 4. There's no cached config, cache and send the latest config
|
||||||
|
|
||||||
|
if (versionId) {
|
||||||
|
const cachedVersionedSettings = settingsCache.get(`${operatorId}-v${versionId}`)
|
||||||
|
|
||||||
|
if (!cachedVersionedSettings) {
|
||||||
|
logger.debug('Fetching a specific config version cached value')
|
||||||
|
return newSettingsLoader.load(versionId)
|
||||||
.then(settings => {
|
.then(settings => {
|
||||||
settingsCache.set(operatorId, settings)
|
settingsCache.set(`${operatorId}-v${versionId}`, settings)
|
||||||
delete needsSettingsReload[operatorId]
|
|
||||||
req.settings = settings
|
req.settings = settings
|
||||||
})
|
})
|
||||||
.then(() => next())
|
.then(() => next())
|
||||||
.catch(next)
|
.catch(next)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!versionId && operatorSettings) {
|
logger.debug('Fetching and caching a specific config version')
|
||||||
req.settings = operatorSettings
|
req.settings = cachedVersionedSettings
|
||||||
return next()
|
return next()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const operatorSettings = settingsCache.get(`${operatorId}-latest`)
|
||||||
|
|
||||||
|
if (!!needsSettingsReload[operatorId] || !operatorSettings) {
|
||||||
|
!!needsSettingsReload[operatorId]
|
||||||
|
? logger.debug('Fetching and caching a new latest config value, as a reload was requested')
|
||||||
|
: logger.debug('Fetching the latest config version because there\'s no cached value')
|
||||||
|
|
||||||
|
return newSettingsLoader.loadLatest()
|
||||||
|
.then(settings => {
|
||||||
|
settingsCache.set(`${operatorId}-latest`, settings)
|
||||||
|
if (!!needsSettingsReload[operatorId]) delete needsSettingsReload[operatorId]
|
||||||
|
req.settings = settings
|
||||||
|
})
|
||||||
|
.then(() => next())
|
||||||
|
.catch(next)
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.debug('Fetching the latest config value from cache')
|
||||||
|
req.settings = operatorSettings
|
||||||
|
return next()
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.error(e)
|
logger.error(e)
|
||||||
}
|
}
|
||||||
|
|
||||||
newSettingsLoader.load(versionId)
|
|
||||||
.then(settings => { req.settings = settings })
|
|
||||||
.then(() => next())
|
|
||||||
.catch(next)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = populateSettings
|
module.exports = populateSettings
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue