diff --git a/services/clsi/app/js/CompileController.js b/services/clsi/app/js/CompileController.js index 53925c1291..1359ff38d0 100644 --- a/services/clsi/app/js/CompileController.js +++ b/services/clsi/app/js/CompileController.js @@ -157,6 +157,9 @@ function compile(req, res, next) { timings, buildId, clsiCacheShard, + instanceType: Settings.apis.clsi.instanceType, + zone: Settings.apis.clsi.zone, + isSpotInstance: Settings.apis.clsi.isSpotInstance, outputUrlPrefix: Settings.apis.clsi.outputUrlPrefix, outputFiles: outputFiles.map(file => ({ url: diff --git a/services/clsi/config/settings.defaults.cjs b/services/clsi/config/settings.defaults.cjs index 33d3330853..0235d72960 100644 --- a/services/clsi/config/settings.defaults.cjs +++ b/services/clsi/config/settings.defaults.cjs @@ -2,7 +2,7 @@ const Path = require('node:path') const os = require('node:os') const fs = require('node:fs') -const isPreEmptible = process.env.PREEMPTIBLE === 'TRUE' +const isSpotInstance = process.env.PREEMPTIBLE === 'TRUE' const CLSI_SERVER_ID = os.hostname().replace('-ctr', '') module.exports = { @@ -59,6 +59,9 @@ module.exports = { // External url prefix for output files, e.g. for requests via load-balancers. outputUrlPrefix: `${process.env.ZONE ? `/zone/${process.env.ZONE}` : ''}`, clsiServerId: process.env.CLSI_SERVER_ID || CLSI_SERVER_ID, + instanceType: process.env.INSTANCE_TYPE, + zone: process.env.ZONE, + isSpotInstance, downloadHost: process.env.DOWNLOAD_HOST || 'http://localhost:8080', }, @@ -104,7 +107,7 @@ module.exports = { parseInt(process.env.PDF_CACHING_WORKER_POOL_SIZE, 10) || 4, pdfCachingWorkerPoolBackLogLimit: parseInt(process.env.PDF_CACHING_WORKER_POOL_BACK_LOG_LIMIT, 10) || 40, - compileConcurrencyLimit: isPreEmptible ? 32 : 64, + compileConcurrencyLimit: isSpotInstance ? 32 : 64, performanceLogSamplingPercentage: parseFloat(process.env.CLSI_PERFORMANCE_LOG_SAMPLING, 10) || 0, } diff --git a/services/clsi/test/unit/js/CompileController.test.js b/services/clsi/test/unit/js/CompileController.test.js index 895f040eec..7d77563a6f 100644 --- a/services/clsi/test/unit/js/CompileController.test.js +++ b/services/clsi/test/unit/js/CompileController.test.js @@ -25,6 +25,9 @@ describe('CompileController', () => { clsi: { url: 'http://clsi.example.com', outputUrlPrefix: '/zone/b', + instanceType: 'c4d', + zone: 'b', + isSpotInstance: true, downloadHost: 'http://localhost:3013', }, clsiCache: { @@ -149,6 +152,9 @@ describe('CompileController', () => { })), clsiCacheShard: undefined, baseHistoryVersion: undefined, + instanceType: 'c4d', + zone: 'b', + isSpotInstance: true, }, }) .should.equal(true) @@ -178,6 +184,9 @@ describe('CompileController', () => { })), clsiCacheShard: undefined, baseHistoryVersion: undefined, + instanceType: 'c4d', + zone: 'b', + isSpotInstance: true, }, }) .should.equal(true) @@ -227,6 +236,9 @@ describe('CompileController', () => { })), clsiCacheShard: undefined, baseHistoryVersion: undefined, + instanceType: 'c4d', + zone: 'b', + isSpotInstance: true, }, }) }) @@ -276,6 +288,9 @@ describe('CompileController', () => { })), clsiCacheShard: undefined, baseHistoryVersion: undefined, + instanceType: 'c4d', + zone: 'b', + isSpotInstance: true, }, }) }) @@ -309,6 +324,9 @@ describe('CompileController', () => { timings: ctx.timings, clsiCacheShard: undefined, baseHistoryVersion: undefined, + instanceType: 'c4d', + zone: 'b', + isSpotInstance: true, }, }) .should.equal(true) @@ -345,6 +363,9 @@ describe('CompileController', () => { buildId: undefined, clsiCacheShard: undefined, baseHistoryVersion: undefined, + instanceType: 'c4d', + zone: 'b', + isSpotInstance: true, }, }) .should.equal(true) @@ -380,6 +401,9 @@ describe('CompileController', () => { buildId: undefined, clsiCacheShard: undefined, baseHistoryVersion: undefined, + instanceType: 'c4d', + zone: 'b', + isSpotInstance: true, }, }) .should.equal(true) @@ -413,6 +437,9 @@ describe('CompileController', () => { buildId: undefined, clsiCacheShard: undefined, baseHistoryVersion: undefined, + instanceType: 'c4d', + zone: 'b', + isSpotInstance: true, }, }) .should.equal(true) diff --git a/services/web/app/src/Features/Compile/ClsiManager.mjs b/services/web/app/src/Features/Compile/ClsiManager.mjs index f527b4be86..0807aace9f 100644 --- a/services/web/app/src/Features/Compile/ClsiManager.mjs +++ b/services/web/app/src/Features/Compile/ClsiManager.mjs @@ -334,6 +334,7 @@ async function _sendBuiltRequest(projectId, userId, req, options) { outputUrlPrefix: compile.outputUrlPrefix, clsiCacheShard: compile.clsiCacheShard, baseHistoryVersion: compile.baseHistoryVersion, + instanceType: compile.instanceType, } } @@ -1287,6 +1288,7 @@ export default { 'outputUrlPrefix', 'buildId', 'clsiCacheShard', + 'instanceType', ]), sendExternalRequest: callbackifyMultiResult(sendExternalRequest, [ 'status', diff --git a/services/web/app/src/Features/Compile/CompileController.mjs b/services/web/app/src/Features/Compile/CompileController.mjs index 95bcfcbefd..106a4fb2f7 100644 --- a/services/web/app/src/Features/Compile/CompileController.mjs +++ b/services/web/app/src/Features/Compile/CompileController.mjs @@ -228,6 +228,7 @@ const _CompileController = { outputUrlPrefix, buildId, clsiCacheShard, + instanceType, } = await CompileManager.promises .compile(projectId, userId, options) .catch(error => { @@ -261,8 +262,15 @@ const _CompileController = { status, compileTime: timings?.compileE2E, timeout: limits.timeout, - server: clsiServerId?.includes('-c4d-') ? 'faster' : 'normal', + server: instanceType + ? instanceType === 'c4d' + ? 'faster' + : 'normal' + : clsiServerId?.includes('-c4d-') + ? 'faster' + : 'normal', clsiServerId, + instanceType, isAutoCompile, isInitialCompile: stats?.isInitialCompile === 1, restoredClsiCache: stats?.restoredClsiCache === 1, diff --git a/services/web/app/src/Features/Compile/CompileManager.mjs b/services/web/app/src/Features/Compile/CompileManager.mjs index e68712d6c4..3104c98698 100644 --- a/services/web/app/src/Features/Compile/CompileManager.mjs +++ b/services/web/app/src/Features/Compile/CompileManager.mjs @@ -98,6 +98,7 @@ async function compile(projectId, userId, options = {}) { buildId, clsiCacheShard, baseHistoryVersion, + instanceType, } = await ClsiManager.promises.sendRequest(projectId, compileAsUser, options) return { @@ -112,6 +113,7 @@ async function compile(projectId, userId, options = {}) { buildId, clsiCacheShard, baseHistoryVersion, + instanceType, } } @@ -243,6 +245,7 @@ export default CompileManager = { 'outputUrlPrefix', 'buildId', 'clsiCacheShard', + 'instanceType', ]), stopCompile: callbackify(stopCompile),