2022-05-16 14:25:37 +00:00
|
|
|
const Logger = require('@overleaf/logger')
|
2020-07-02 13:19:45 +00:00
|
|
|
const { SettingsError } = require('./Errors')
|
|
|
|
const GcsPersistor = require('./GcsPersistor')
|
|
|
|
const S3Persistor = require('./S3Persistor')
|
|
|
|
const FSPersistor = require('./FSPersistor')
|
|
|
|
const MigrationPersistor = require('./MigrationPersistor')
|
|
|
|
|
|
|
|
function getPersistor(backend, settings) {
|
|
|
|
switch (backend) {
|
|
|
|
case 'aws-sdk':
|
|
|
|
case 's3':
|
|
|
|
return new S3Persistor(
|
|
|
|
Object.assign({}, settings.s3, { Metrics: settings.Metrics })
|
|
|
|
)
|
|
|
|
case 'fs':
|
|
|
|
return new FSPersistor({
|
|
|
|
paths: settings.paths,
|
2021-12-16 09:04:32 +00:00
|
|
|
Metrics: settings.Metrics,
|
2020-07-02 13:19:45 +00:00
|
|
|
})
|
|
|
|
case 'gcs':
|
|
|
|
return new GcsPersistor(
|
|
|
|
Object.assign({}, settings.gcs, { Metrics: settings.Metrics })
|
|
|
|
)
|
|
|
|
default:
|
2020-07-07 09:40:37 +00:00
|
|
|
throw new SettingsError('unknown backend', { backend })
|
2020-07-02 13:19:45 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = function create(settings) {
|
|
|
|
Logger.info(
|
|
|
|
{
|
|
|
|
backend: settings.backend,
|
2021-12-16 09:04:32 +00:00
|
|
|
fallback: settings.fallback && settings.fallback.backend,
|
2020-07-02 13:19:45 +00:00
|
|
|
},
|
|
|
|
'Loading backend'
|
|
|
|
)
|
|
|
|
if (!settings.backend) {
|
2020-07-07 09:40:37 +00:00
|
|
|
throw new SettingsError('no backend specified - config incomplete')
|
2020-07-02 13:19:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
let persistor = getPersistor(settings.backend, settings)
|
|
|
|
|
|
|
|
if (settings.fallback && settings.fallback.backend) {
|
|
|
|
const primary = persistor
|
|
|
|
const fallback = getPersistor(settings.fallback.backend, settings)
|
|
|
|
persistor = new MigrationPersistor(
|
|
|
|
primary,
|
|
|
|
fallback,
|
|
|
|
Object.assign({}, settings.fallback, { Metrics: settings.Metrics })
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
return persistor
|
|
|
|
}
|