From 2d4df88629c4cab5795579b4ac248cf98fd59a2d Mon Sep 17 00:00:00 2001 From: Ian Bicking Date: Tue, 13 Dec 2016 13:19:07 -0600 Subject: [PATCH] Fix #1978, add a $CONTROLLER_SINGLETON variable that controls if this server instance should handle database upgrades and periodic tasks --- .env.dev | 1 + server/src/config.js | 7 +++++++ server/src/jobs.js | 4 ++++ server/src/pages/metrics/server.js | 9 ++++++--- server/src/server.js | 4 ++++ 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/.env.dev b/.env.dev index 5f079ccf3d..9197ea7903 100644 --- a/.env.dev +++ b/.env.dev @@ -3,5 +3,6 @@ CLIENT_SECRET=efde5874713abf2a8ec9d8af8488fae7c7e0a933dba08208f644fa93b5622dab SHOW_STACK_TRACES=true LOG_LINT=true LOG_LEVEL=debug +CONTROLLER_SINGLETON=true # To test caching locally: #SET_CACHE=true diff --git a/server/src/config.js b/server/src/config.js index fc8ca38d3b..965b0f7d64 100644 --- a/server/src/config.js +++ b/server/src/config.js @@ -268,6 +268,13 @@ var conf = convict({ default: true, env: "SET_CACHE", arg: "set-cache" + }, + controllerSingleton: { + doc: "If true, then this ONE server should be the one that runs migrations and periodic tasks", + format: Boolean, + default: false, + env: "CONTROLLER_SINGLETON", + arg: "controller-singleton" } }); diff --git a/server/src/jobs.js b/server/src/jobs.js index 08d65b7440..d66092a6e2 100644 --- a/server/src/jobs.js +++ b/server/src/jobs.js @@ -9,6 +9,10 @@ const ua = require("universal-analytics"); let checkDeletedInterval = config.checkDeletedInterval * 1000; exports.start = function () { + if (! config.controllerSingleton) { + console.info("Note: not performing periodic tasks in this server"); + return; + } //setInterval(require("./exporter").cleanExports, keepTime / 10); diff --git a/server/src/pages/metrics/server.js b/server/src/pages/metrics/server.js index 6a46471cd1..bac01f18e3 100644 --- a/server/src/pages/metrics/server.js +++ b/server/src/pages/metrics/server.js @@ -29,7 +29,7 @@ function safeStoreQueries() { }); } -if (config.refreshMetricsTime) { +if (config.refreshMetricsTime && config.controllerSingleton) { // Randomize each worker +-30 seconds interval let interval = config.refreshMetricsTime * 1000 + Math.floor(Math.random()*60000 - 30000); if (interval < 10000) { @@ -39,5 +39,8 @@ if (config.refreshMetricsTime) { } else { console.info("Not running periodic metrics updating"); } -// Also run immediately on startup: -setTimeout(safeStoreQueries, 1000); + +if (config.controllerSingleton) { + // Also run immediately on startup: + setTimeout(safeStoreQueries, 1000); +} diff --git a/server/src/server.js b/server/src/server.js index a788e99a24..566c6f24f6 100644 --- a/server/src/server.js +++ b/server/src/server.js @@ -120,6 +120,10 @@ if (config.useS3) { function initDatabase() { + if (! config.controllerSingleton) { + console.info("Note: this server will not perform database initialization"); + return Promise.resolve(); + } dbschema.createTables().then(() => { return dbschema.createKeygrip(); }).then(() => {