diff --git a/services/web/app/src/Features/Compile/ClsiCookieManager.js b/services/web/app/src/Features/Compile/ClsiCookieManager.js index f84526eaea..f7909ad1e5 100644 --- a/services/web/app/src/Features/Compile/ClsiCookieManager.js +++ b/services/web/app/src/Features/Compile/ClsiCookieManager.js @@ -39,7 +39,13 @@ module.exports = function (backendGroup) { } }, - _getServerId(project_id, user_id, compileGroup, callback) { + _getServerId( + project_id, + user_id, + compileGroup, + compileBackendClass, + callback + ) { if (callback == null) { callback = function () {} } @@ -54,6 +60,7 @@ module.exports = function (backendGroup) { project_id, user_id, compileGroup, + compileBackendClass, callback ) } else { @@ -63,14 +70,23 @@ module.exports = function (backendGroup) { ) }, - _populateServerIdViaRequest(project_id, user_id, compileGroup, callback) { + _populateServerIdViaRequest( + project_id, + user_id, + compileGroup, + compileBackendClass, + callback + ) { if (callback == null) { callback = function () {} } const u = new URL( `${Settings.apis.clsi.url}/project/${project_id}/status` ) - u.search = new URLSearchParams({ compileGroup }).toString() + u.search = new URLSearchParams({ + compileGroup, + compileBackendClass, + }).toString() request.post(u.href, (err, res, body) => { if (err != null) { OError.tag(err, 'error getting initial server id for project', { @@ -82,6 +98,7 @@ module.exports = function (backendGroup) { project_id, user_id, compileGroup, + compileBackendClass, res, null, function (err, serverId) { @@ -106,11 +123,11 @@ module.exports = function (backendGroup) { return cookies != null ? cookies[Settings.clsiCookie.key] : undefined }, - checkIsLoadSheddingEvent(clsiserverid, compileGroup) { + checkIsLoadSheddingEvent(clsiserverid, compileGroup, compileBackendClass) { request.get( { url: `${Settings.apis.clsi.url}/instance-state`, - qs: { clsiserverid, compileGroup }, + qs: { clsiserverid, compileGroup, compileBackendClass }, }, (err, res, body) => { if (err) { @@ -139,6 +156,7 @@ module.exports = function (backendGroup) { project_id, user_id, compileGroup, + compileBackendClass, response, previous, callback @@ -162,7 +180,11 @@ module.exports = function (backendGroup) { // Initial assignment of a user+project or after clearing cache. Metrics.inc('clsi-lb-assign-initial-backend') } else { - this.checkIsLoadSheddingEvent(previous, compileGroup) + this.checkIsLoadSheddingEvent( + previous, + compileGroup, + compileBackendClass + ) } if (rclient_secondary != null) { this._setServerIdInRedis( @@ -200,7 +222,13 @@ module.exports = function (backendGroup) { return rclient.del(this.buildKey(project_id, user_id), callback) }, - getCookieJar(project_id, user_id, compileGroup, callback) { + getCookieJar( + project_id, + user_id, + compileGroup, + compileBackendClass, + callback + ) { if (callback == null) { callback = function () {} } @@ -211,6 +239,7 @@ module.exports = function (backendGroup) { project_id, user_id, compileGroup, + compileBackendClass, (err, serverId) => { if (err != null) { OError.tag(err, 'error getting server id', { diff --git a/services/web/app/src/Features/Compile/ClsiManager.js b/services/web/app/src/Features/Compile/ClsiManager.js index 549e809ae4..bf3824cf93 100644 --- a/services/web/app/src/Features/Compile/ClsiManager.js +++ b/services/web/app/src/Features/Compile/ClsiManager.js @@ -134,7 +134,14 @@ const ClsiManager = { url: compilerUrl, method: 'POST', } - ClsiManager._makeRequest(projectId, userId, compileGroup, opts, callback) + ClsiManager._makeRequest( + projectId, + userId, + compileGroup, + compileBackendClass, + opts, + callback + ) }, deleteAuxFiles(projectId, userId, options, clsiserverid, callback) { @@ -156,6 +163,7 @@ const ClsiManager = { projectId, userId, compileGroup, + compileBackendClass, opts, clsiserverid, clsiErr => { @@ -283,13 +291,17 @@ const ClsiManager = { projectId, userId, compileGroup, + compileBackendClass, opts, clsiserverid, callback ) { if (clsiserverid) { // ignore cookies and newBackend, go straight to the clsi node - opts.qs = Object.assign({ compileGroup, clsiserverid }, opts.qs) + opts.qs = Object.assign( + { compileGroup, compileBackendClass, clsiserverid }, + opts.qs + ) request(opts, (err, response, body) => { if (err) { return callback( @@ -299,11 +311,25 @@ const ClsiManager = { callback(null, response, body) }) } else { - ClsiManager._makeRequest(projectId, userId, compileGroup, opts, callback) + ClsiManager._makeRequest( + projectId, + userId, + compileGroup, + compileBackendClass, + opts, + callback + ) } }, - _makeRequest(projectId, userId, compileGroup, opts, callback) { + _makeRequest( + projectId, + userId, + compileGroup, + compileBackendClass, + opts, + callback + ) { async.series( { currentBackend(cb) { @@ -312,6 +338,7 @@ const ClsiManager = { projectId, userId, compileGroup, + compileBackendClass, (err, jar, clsiServerId) => { if (err != null) { return callback( @@ -338,6 +365,7 @@ const ClsiManager = { projectId, userId, compileGroup, + compileBackendClass, response, clsiServerId, (err, newClsiServerId) => { @@ -373,6 +401,7 @@ const ClsiManager = { projectId, userId, compileGroup, + compileBackendClass, opts, (err, response, body) => { if (err != null) { @@ -419,7 +448,14 @@ const ClsiManager = { ) }, - _makeNewBackendRequest(projectId, userId, compileGroup, baseOpts, callback) { + _makeNewBackendRequest( + projectId, + userId, + compileGroup, + compileBackendClass, + baseOpts, + callback + ) { if (Settings.apis.clsi_new == null || Settings.apis.clsi_new.url == null) { return callback() } @@ -434,6 +470,7 @@ const ClsiManager = { projectId, userId, compileGroup, + compileBackendClass, (err, jar, clsiServerId) => { if (err != null) { return callback( @@ -458,6 +495,7 @@ const ClsiManager = { projectId, userId, compileGroup, + compileBackendClass, response, clsiServerId, err => { @@ -521,6 +559,7 @@ const ClsiManager = { projectId, userId, compileGroup, + compileBackendClass, opts, (err, response, body, clsiServerId) => { if (err != null) { @@ -938,6 +977,7 @@ const ClsiManager = { projectId, userId, compileGroup, + compileBackendClass, opts, clsiserverid, (err, response, body) => { diff --git a/services/web/app/src/Features/Compile/CompileController.js b/services/web/app/src/Features/Compile/CompileController.js index 82518097ac..5503a94741 100644 --- a/services/web/app/src/Features/Compile/CompileController.js +++ b/services/web/app/src/Features/Compile/CompileController.js @@ -644,6 +644,7 @@ function _getPersistenceOptions( projectId, userId, compileGroup, + compileBackendClass, (err, jar) => { callback(err, { jar, qs: { compileGroup, compileBackendClass } }) } diff --git a/services/web/test/unit/src/Compile/ClsiCookieManagerTests.js b/services/web/test/unit/src/Compile/ClsiCookieManagerTests.js index 56705e3252..76f5fcf486 100644 --- a/services/web/test/unit/src/Compile/ClsiCookieManagerTests.js +++ b/services/web/test/unit/src/Compile/ClsiCookieManagerTests.js @@ -69,6 +69,7 @@ describe('ClsiCookieManager', function () { this.project_id, this.user_id, '', + 'e2', (err, serverId) => { this.redis.get .calledWith(`clsiserver:${this.project_id}:${this.user_id}`) @@ -106,6 +107,7 @@ describe('ClsiCookieManager', function () { this.project_id, this.user_id, '', + 'e2', (err, serverId) => { this.ClsiCookieManager._populateServerIdViaRequest .calledWith(this.project_id, this.user_id) @@ -130,12 +132,14 @@ describe('ClsiCookieManager', function () { this.project_id, this.user_id, 'standard', + 'e2', (err, serverId) => { const args = this.ClsiCookieManager.setServerId.args[0] args[0].should.equal(this.project_id) args[1].should.equal(this.user_id) args[2].should.equal('standard') - args[3].should.deep.equal(this.response) + args[3].should.equal('e2') + args[4].should.deep.equal(this.response) return done() } ) @@ -146,6 +150,7 @@ describe('ClsiCookieManager', function () { this.project_id, this.user_id, '', + 'e2', (err, serverId) => { serverId.should.equal('clsi-9') return done() @@ -167,6 +172,7 @@ describe('ClsiCookieManager', function () { this.project_id, this.user_id, 'standard', + 'e2', this.response, null, err => { @@ -190,6 +196,7 @@ describe('ClsiCookieManager', function () { this.project_id, this.user_id, 'standard', + 'e2', this.response, null, err => { @@ -208,6 +215,7 @@ describe('ClsiCookieManager', function () { this.project_id, this.user_id, 'standard', + 'e2', this.response, null, (err, serverId) => { @@ -229,6 +237,7 @@ describe('ClsiCookieManager', function () { this.project_id, this.user_id, 'standard', + 'e2', this.response, null, (err, serverId) => { @@ -246,6 +255,7 @@ describe('ClsiCookieManager', function () { this.project_id, this.user_id, 'standard', + 'e2', this.response, null, (err, serverId) => { @@ -276,6 +286,7 @@ describe('ClsiCookieManager', function () { this.project_id, this.user_id, 'standard', + 'e2', this.response, null, (err, serverId) => { @@ -304,6 +315,7 @@ describe('ClsiCookieManager', function () { this.project_id, this.user_id, '', + 'e2', (err, jar) => { jar._jar.store.idx['clsi.example.com']['/'][ this.settings.clsiCookie.key @@ -328,6 +340,7 @@ describe('ClsiCookieManager', function () { this.project_id, this.user_id, '', + 'e2', (err, jar) => { assert.deepEqual(jar, realRequst.jar()) return done() diff --git a/services/web/test/unit/src/Compile/ClsiManagerTests.js b/services/web/test/unit/src/Compile/ClsiManagerTests.js index 078a049959..2042de8b13 100644 --- a/services/web/test/unit/src/Compile/ClsiManagerTests.js +++ b/services/web/test/unit/src/Compile/ClsiManagerTests.js @@ -514,6 +514,7 @@ describe('ClsiManager', function () { this.project_id, this.user_id, 'standard', + 'e2', { method: 'DELETE', url: `${this.settings.apis.clsi.url}/project/${this.project_id}/user/${this.user_id}?compileBackendClass=e2&compileGroup=standard`, @@ -965,7 +966,7 @@ describe('ClsiManager', function () { it('should send the request to the CLSI', function () { const url = `${this.settings.apis.clsi.url}/project/${this.project_id}/user/${this.user_id}/compile?compileBackendClass=e2&compileGroup=standard` this.ClsiManager._makeRequest - .calledWith(this.project_id, this.user_id, 'standard', { + .calledWith(this.project_id, this.user_id, 'standard', 'e2', { method: 'POST', url, json: this.req, @@ -1030,6 +1031,7 @@ describe('ClsiManager', function () { this.project_id, this.user_id, 'standard', + 'e2', { method: 'GET', url: `http://clsi.example.com/project/${this.project_id}/user/${this.user_id}/wordcount?compileBackendClass=e2&compileGroup=standard`, @@ -1067,6 +1069,7 @@ describe('ClsiManager', function () { this.project_id, this.user_id, 'standard', + 'e2', { method: 'GET', url: `http://clsi.example.com/project/${this.project_id}/user/${this.user_id}/wordcount?compileBackendClass=e2&compileGroup=standard`, @@ -1099,6 +1102,7 @@ describe('ClsiManager', function () { this.project_id, this.user_id, 'standard', + 'e2', { method: 'GET', url: `http://clsi.example.com/project/${this.project_id}/user/${this.user_id}/wordcount?compileBackendClass=e2&compileGroup=standard`, @@ -1127,6 +1131,7 @@ describe('ClsiManager', function () { this.project_id, this.user_id, 'standard', + 'e2', this.opts, () => { const args = this.request.args[0] @@ -1143,6 +1148,7 @@ describe('ClsiManager', function () { this.project_id, this.user_id, 'standard', + 'e2', this.opts, () => { this.ClsiCookieManager.setServerId @@ -1150,6 +1156,7 @@ describe('ClsiManager', function () { this.project_id, this.user_id, 'standard', + 'e2', this.response ) .should.equal(true) @@ -1175,6 +1182,7 @@ describe('ClsiManager', function () { this.project_id, this.user_id, 'standard', + 'e2', this.opts, undefined, err => { @@ -1194,6 +1202,7 @@ describe('ClsiManager', function () { this.project_id, this.user_id, 'standard', + 'e2', this.opts, undefined, err => { @@ -1203,6 +1212,7 @@ describe('ClsiManager', function () { this.project_id, this.user_id, 'standard', + 'e2', this.response ) .should.equal(true) @@ -1218,6 +1228,7 @@ describe('ClsiManager', function () { this.project_id, this.user_id, 'standard', + 'e2', this.opts, 'node-1', err => { @@ -1229,6 +1240,7 @@ describe('ClsiManager', function () { expect(requestOpts.qs).to.deep.equal({ clsiserverid: 'node-1', compileGroup: 'standard', + compileBackendClass: 'e2', }) done() } @@ -1240,6 +1252,7 @@ describe('ClsiManager', function () { this.project_id, this.user_id, 'standard', + 'e2', this.opts, 'node-1', err => { @@ -1271,6 +1284,7 @@ describe('ClsiManager', function () { this.project_id, this.user_id, 'standard', + 'e2', this.opts, () => { const args = this.request.args[0] @@ -1288,6 +1302,7 @@ describe('ClsiManager', function () { this.project_id, this.user_id, 'standard', + 'e2', this.opts, err => { expect(err).to.equal(undefined)