diff options
author | Rob Austein <sra@hactrn.net> | 2016-02-25 21:46:15 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2016-02-25 21:46:15 +0000 |
commit | b9c31ccf6c7e51272dd84113f056640ca8afd368 (patch) | |
tree | b875126a75ac04e13deb1d3910125763db246e18 /rpki | |
parent | 520cab80a8594a7291becca6c21df2a986190a18 (diff) |
Tweak postponement code so that, if everything in the task queue has
already been postponed at least once, we stay with the current task
rather than doing a forced round-robin. This may require further
tweaks, eg, to flush the publication queue at regular intervals even
if we're not postponing, but the intent is to allow tasks with complex
setup to run to completion while remaining responsive, to avoid
wasting all of our time on repeated setup overhead.
svn path=/branches/tk705/; revision=6291
Diffstat (limited to 'rpki')
-rw-r--r-- | rpki/rpkid_tasks.py | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/rpki/rpkid_tasks.py b/rpki/rpkid_tasks.py index daa160fe..5e7641da 100644 --- a/rpki/rpkid_tasks.py +++ b/rpki/rpkid_tasks.py @@ -82,32 +82,30 @@ class AbstractTask(object): self.done_next = None self.due_date = None self.started = False + self.postponed = False self.clear() def __repr__(self): return rpki.log.log_repr(self, self.description) - def reset_due_date(self): - self.due_date = rpki.sundial.now() + self.timeslice - @tornado.gen.coroutine def start(self): try: logger.debug("%r: Starting", self) - self.reset_due_date() + self.due_date = rpki.sundial.now() + self.timeslice self.clear() self.started = True - postponing = False + self.postponed = False yield self.main() except PostponeTask: - postponing = True + self.postponed = True except: logger.exception("%r: Unhandled exception", self) finally: self.due_date = None self.started = False self.clear() - if postponing: + if self.postponed: logger.debug("%r: Postponing", self) else: logger.debug("%r: Exiting", self) @@ -131,7 +129,8 @@ class AbstractTask(object): @tornado.gen.coroutine def overdue(self): yield tornado.gen.moment - raise tornado.gen.Return(len(self.rpkid.task_ready) > 0 and rpki.sundial.now() > self.due_date) + raise tornado.gen.Return(rpki.sundial.now() > self.due_date and + any(not task.postponed for task in self.rpkid.task_ready)) @tornado.gen.coroutine def main(self): |