From fdb735de44f86a5e42f2f92fc9c3bce9d715c84b Mon Sep 17 00:00:00 2001 From: Ralph Bean Date: Sat, 29 Oct 2016 15:55:06 -0400 Subject: [PATCH 1/2] Allow handlers to return extra work to the scheduler. --- module_build_service/scheduler/main.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/module_build_service/scheduler/main.py b/module_build_service/scheduler/main.py index cc42516c..a8a82d0f 100644 --- a/module_build_service/scheduler/main.py +++ b/module_build_service/scheduler/main.py @@ -157,8 +157,11 @@ class MessageWorker(threading.Thread): log.debug("Handler is NO_OP: %s" % idx) else: log.info("Calling %s" % idx) - handler(conf, session, msg) + further_work = handler(conf, session, msg) or [] log.info("Done with %s" % idx) + for event in further_work: + log.info(" Scheduling faked event %r" % event) + self.incoming_work_queue.put(event) class Poller(threading.Thread): From c2101df92b7aed9c12f25d401decdb49fa73057e Mon Sep 17 00:00:00 2001 From: Ralph Bean Date: Mon, 31 Oct 2016 09:06:43 -0400 Subject: [PATCH 2/2] Add comment explaining what's going on here. --- module_build_service/scheduler/main.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/module_build_service/scheduler/main.py b/module_build_service/scheduler/main.py index a8a82d0f..cec78dc9 100644 --- a/module_build_service/scheduler/main.py +++ b/module_build_service/scheduler/main.py @@ -159,6 +159,13 @@ class MessageWorker(threading.Thread): log.info("Calling %s" % idx) further_work = handler(conf, session, msg) or [] log.info("Done with %s" % idx) + + # Handlers can *optionally* return a list of fake messages that + # should be re-inserted back into the main work queue. We can use + # this (for instance) when we submit a new component build but (for + # some reason) it has already been built, then it can fake its own + # completion back to the scheduler so that work resumes as if it + # was submitted for real and koji announced its completion. for event in further_work: log.info(" Scheduling faked event %r" % event) self.incoming_work_queue.put(event)