diff --git a/services/clsi/app/js/CLSICacheHandler.js b/services/clsi/app/js/CLSICacheHandler.js index b9415ae3ec..73137d23c3 100644 --- a/services/clsi/app/js/CLSICacheHandler.js +++ b/services/clsi/app/js/CLSICacheHandler.js @@ -41,6 +41,7 @@ function getShard(projectId) { * @param {string} editorId * @param {[{path: string}]} outputFiles * @param {string} compileGroup + * @param {boolean} clsiCacheSharded * @param {Record} options * @return {string | undefined} */ @@ -51,11 +52,17 @@ function notifyCLSICacheAboutBuild({ editorId, outputFiles, compileGroup, + clsiCacheSharded, options, }) { if (!Settings.apis.clsiCache.enabled) return undefined if (!OBJECT_ID_REGEX.test(projectId)) return undefined - const { url, shard } = getShard(projectId) + let { url, shard } = getShard(projectId) + if (!clsiCacheSharded) { + // Client is not aware of sharding yet. + url = Settings.apis.clsiCache.url + shard = 'cache' + } /** * @param {[{path: string}]} files diff --git a/services/clsi/app/js/CompileController.js b/services/clsi/app/js/CompileController.js index c698ee2b75..138801890a 100644 --- a/services/clsi/app/js/CompileController.js +++ b/services/clsi/app/js/CompileController.js @@ -125,6 +125,7 @@ function compile(req, res, next) { editorId: request.editorId, outputFiles, compileGroup: request.compileGroup, + clsiCacheSharded: request.clsiCacheSharded, options: { compiler: request.compiler, draft: request.draft, diff --git a/services/clsi/app/js/RequestParser.js b/services/clsi/app/js/RequestParser.js index 4e9d722921..f65d6940c8 100644 --- a/services/clsi/app/js/RequestParser.js +++ b/services/clsi/app/js/RequestParser.js @@ -90,6 +90,14 @@ function parse(body, callback) { type: 'boolean', } ) + response.clsiCacheSharded = _parseAttribute( + 'clsiCacheSharded', + compile.options.clsiCacheSharded, + { + default: false, + type: 'boolean', + } + ) response.check = _parseAttribute('check', compile.options.check, { type: 'string', }) diff --git a/services/clsi/config/settings.defaults.js b/services/clsi/config/settings.defaults.js index 17042498db..614644ac7b 100644 --- a/services/clsi/config/settings.defaults.js +++ b/services/clsi/config/settings.defaults.js @@ -61,6 +61,7 @@ module.exports = { }, clsiCache: { enabled: !!(process.env.CLSI_CACHE_SHARDS || process.env.CLSI_CACHE_HOST), + url: `http://${process.env.CLSI_CACHE_HOST}:3044`, shards: process.env.CLSI_CACHE_SHARDS ? JSON.parse(process.env.CLSI_CACHE_SHARDS) : [ diff --git a/services/web/app/src/Features/Compile/ClsiManager.js b/services/web/app/src/Features/Compile/ClsiManager.js index 6f11297248..011ba60759 100644 --- a/services/web/app/src/Features/Compile/ClsiManager.js +++ b/services/web/app/src/Features/Compile/ClsiManager.js @@ -781,6 +781,7 @@ function _finaliseRequest(projectId, options, project, docs, files) { imageName: project.imageName, draft: Boolean(options.draft), stopOnFirstError: Boolean(options.stopOnFirstError), + clsiCacheSharded: Boolean(options.clsiCacheSharded), check: options.check, syncType: options.syncType, syncState: options.syncState, diff --git a/services/web/app/src/Features/Compile/CompileController.js b/services/web/app/src/Features/Compile/CompileController.js index 9fb9d502a4..f1d37e7638 100644 --- a/services/web/app/src/Features/Compile/CompileController.js +++ b/services/web/app/src/Features/Compile/CompileController.js @@ -132,12 +132,14 @@ module.exports = CompileController = { const isAutoCompile = !!req.query.auto_compile const fileLineErrors = !!req.query.file_line_errors const stopOnFirstError = !!req.body.stopOnFirstError + const clsiCacheSharded = !!req.body.clsiCacheSharded const userId = SessionManager.getLoggedInUserId(req.session) const options = { isAutoCompile, fileLineErrors, stopOnFirstError, editorId: req.body.editorId, + clsiCacheSharded, } if (req.body.rootDoc_id) { diff --git a/services/web/frontend/js/features/pdf-preview/util/compiler.js b/services/web/frontend/js/features/pdf-preview/util/compiler.js index d938cb3893..cd052cb5a9 100644 --- a/services/web/frontend/js/features/pdf-preview/util/compiler.js +++ b/services/web/frontend/js/features/pdf-preview/util/compiler.js @@ -110,6 +110,7 @@ export default class DocumentCompiler { incrementalCompilesEnabled: !this.error, stopOnFirstError: options.stopOnFirstError, editorId: EDITOR_SESSION_ID, + clsiCacheSharded: true, } const data = await postJSON( diff --git a/services/web/test/unit/src/Compile/CompileControllerTests.js b/services/web/test/unit/src/Compile/CompileControllerTests.js index aefa197a17..07e433b5af 100644 --- a/services/web/test/unit/src/Compile/CompileControllerTests.js +++ b/services/web/test/unit/src/Compile/CompileControllerTests.js @@ -250,6 +250,7 @@ describe('CompileController', function () { fileLineErrors: false, stopOnFirstError: false, editorId: undefined, + clsiCacheSharded: false, } ) }) @@ -293,6 +294,7 @@ describe('CompileController', function () { fileLineErrors: false, stopOnFirstError: false, editorId: undefined, + clsiCacheSharded: false, } ) }) @@ -318,6 +320,7 @@ describe('CompileController', function () { fileLineErrors: false, stopOnFirstError: false, editorId: undefined, + clsiCacheSharded: false, } ) }) @@ -342,6 +345,7 @@ describe('CompileController', function () { fileLineErrors: false, stopOnFirstError: false, editorId: 'the-editor-id', + clsiCacheSharded: false, } ) })