diff --git a/src/database-backends/postgresql/index.js b/src/database-backends/postgresql/index.js index 78a9b40..edcbe1d 100644 --- a/src/database-backends/postgresql/index.js +++ b/src/database-backends/postgresql/index.js @@ -23,7 +23,8 @@ module.exports = function(state) { return { defaultSettings: { taskBatchSize: 1000, - taskBatchDelay: 30 * 1000 + taskBatchDelay: 5 * 60 * 1000, // FIXME: Rename to reflect changed behaviour? + delayRandomization: 0.2 }, create: function createPostgreSQLBackend(options) { let knex = knexLibrary({ diff --git a/src/database-backends/postgresql/queries/get-task-stream.js b/src/database-backends/postgresql/queries/get-task-stream.js index 50db093..a4f756b 100644 --- a/src/database-backends/postgresql/queries/get-task-stream.js +++ b/src/database-backends/postgresql/queries/get-task-stream.js @@ -143,7 +143,8 @@ module.exports = function ({ metrics, backendSettings, knex }) { }).then((newItems) => { if (newItems === 0) { // TODO: Consider using LISTEN/NOTIFY instead? Worth the added complexity? - return Promise.resolve([]).delay(backendSettings.taskBatchDelay); + let randomization = Math.random() * backendSettings.delayRandomization * backendSettings.taskBatchDelay; // To prevent stampeding by low-throughput tasks + return Promise.resolve([]).delay(backendSettings.taskBatchDelay + randomization); } else { // Have another go right away return [];