aboutsummaryrefslogtreecommitdiff
path: root/rpki
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2016-02-25 21:46:15 +0000
committerRob Austein <sra@hactrn.net>2016-02-25 21:46:15 +0000
commitb9c31ccf6c7e51272dd84113f056640ca8afd368 (patch)
treeb875126a75ac04e13deb1d3910125763db246e18 /rpki
parent520cab80a8594a7291becca6c21df2a986190a18 (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.py15
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):