From 0a509e02715e214ead053e74f4766ba0352b805f Mon Sep 17 00:00:00 2001 From: asonix Date: Sat, 25 May 2019 17:10:32 -0500 Subject: [PATCH] Queue as many jobs as we can on ping This change isn't incredibly important, but in cases where more than one jobs server is running, and one happens to get a heavy amount of new job traffic while the others get very few, it is possible that we can end up with unprocessed jobs in the DB while not every worker is busy. This change exausts our worker queue on ping if there are jobs available --- jobs-actix/src/server.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/jobs-actix/src/server.rs b/jobs-actix/src/server.rs index 2d49460..7f12d3f 100644 --- a/jobs-actix/src/server.rs +++ b/jobs-actix/src/server.rs @@ -173,11 +173,14 @@ where trace!("Checkdb"); for (queue, workers) in self.cache.iter_mut() { - if let Some(request) = workers.pop_front() { - if let Some(job) = self.storage.request_job(queue, request.worker_id)? { - request.addr.do_send(ProcessJob::new(job)); - } else { - workers.push_back(request); + while !workers.is_empty() { + if let Some(request) = workers.pop_front() { + if let Some(job) = self.storage.request_job(queue, request.worker_id)? { + request.addr.do_send(ProcessJob::new(job)); + } else { + workers.push_back(request); + break; + } } } }