diff options
author | Rob Austein <sra@hactrn.net> | 2016-02-19 19:27:48 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2016-02-19 19:27:48 +0000 |
commit | f8187b414e0b6777b97d99ecf94a101eeb960e70 (patch) | |
tree | 11b4688c0dc4bfb40fdfc021727355a1ec6b95fd | |
parent | f25d3cc4f67fba3b7130357dbd03c4b617dc705f (diff) |
Task system tweaks, see if this fixes hangs on postponed tasks.
svn path=/branches/tk705/; revision=6273
-rw-r--r-- | rpki/rpkid.py | 2 | ||||
-rw-r--r-- | rpki/rpkid_tasks.py | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/rpki/rpkid.py b/rpki/rpkid.py index fbbb1cfc..a82195b3 100644 --- a/rpki/rpkid.py +++ b/rpki/rpkid.py @@ -291,7 +291,7 @@ class main(object): def cronjob_handler(self, handler): """ External trigger to schedule periodic tasks. Obsolete for - produciton use, but portions of the test framework still use this. + production use, but portions of the test framework still use this. """ if self.use_internal_cron: diff --git a/rpki/rpkid_tasks.py b/rpki/rpkid_tasks.py index 9fe193ae..afe518fa 100644 --- a/rpki/rpkid_tasks.py +++ b/rpki/rpkid_tasks.py @@ -22,6 +22,7 @@ because interactions with rpkid scheduler were getting too complicated. """ import logging +import random import tornado.gen import tornado.web @@ -126,6 +127,12 @@ class AbstractTask(object): logger.debug("%r: Postponing", self) self.due_date = None self.runnable.clear() + tasks = tuple(task for task in self.rpkid.task_queue if task is not None) + if any(task.runnable.is_set() for task in tasks): + logger.debug("%r: Runable tasks exist, leaving well enough alone", self) + else: + logger.debug("%r: All tasks were postponed, reenabling one picked at random", self) + random.choice(tasks).runnable.set() try: self.serialize.release() yield self.runnable.wait() |