diff options
Diffstat (limited to 'rpkid/rpki')
-rw-r--r-- | rpkid/rpki/async.py | 6 | ||||
-rw-r--r-- | rpkid/rpki/rpki_engine.py | 40 |
2 files changed, 24 insertions, 22 deletions
diff --git a/rpkid/rpki/async.py b/rpkid/rpki/async.py index 4dc56d41..251dc253 100644 --- a/rpkid/rpki/async.py +++ b/rpkid/rpki/async.py @@ -25,10 +25,14 @@ class iterator(object): self.handler_cb = handler_cb self.done_cb = done_cb self.iterator = iter(iterable) + self.next() def __call__(self, *ignored): + self.next() + + def next(self): try: - self.handler_cb(self.iterator.next()) + self.handler_cb(self, self.iterator.next()) except StopIteration: if self.done_cb is not None: self.done_cb() diff --git a/rpkid/rpki/rpki_engine.py b/rpkid/rpki/rpki_engine.py index 1a9a5026..5f89c338 100644 --- a/rpkid/rpki/rpki_engine.py +++ b/rpkid/rpki/rpki_engine.py @@ -115,33 +115,31 @@ class rpkid_context(object): rpki.log.trace() self.sql.ping() - def cronjob_done(): - self.sql.sweep() - cb(200, "OK") + def cronjob_do_one(iterator, s): - self.cronjob_iterator = rpki.async.iterator(rpki.left_right.self_elt.sql_fetch_all(self), - self.cronjob_do_one, cronjob_done) - self.cronjob_iterator() + def client_poll(): + rpki.log.debug("Self %s polling parents" % s.self_id) + s.client_poll(update_children) - def cronjob_do_one(self, s): - """Handle periodic tasks for one <self_elt/>.""" + def update_children(): + rpki.log.debug("Self %s updating children" % s.self_id) + s.update_children(update_roas_crls_and_manifests) - def client_poll(): - rpki.log.debug("Self %s polling parents" % s.self_id) - s.client_poll(update_children) + def update_roas_crls_and_manifests(): + rpki.log.debug("Self %s updating ROAs" % s.self_id) + s.update_roas() + rpki.log.debug("Self %s regenerating CRLs and manifests" % s.self_id) + s.regenerate_crls_and_manifests() + iterator() - def update_children(): - rpki.log.debug("Self %s updating children" % s.self_id) - s.update_children(update_roas_crls_and_manifests) + client_poll() - def update_roas_crls_and_manifests(): - rpki.log.debug("Self %s updating ROAs" % s.self_id) - s.update_roas() - rpki.log.debug("Self %s regenerating CRLs and manifests" % s.self_id) - s.regenerate_crls_and_manifests() - self.cronjob_iterator() + def cronjob_done(): + self.sql.sweep() + cb(200, "OK") - client_poll() + rpki.async.iterator(rpki.left_right.self_elt.sql_fetch_all(self), + cronjob_do_one, cronjob_done) ## @var https_ta_cache # HTTPS trust anchor cache, to avoid regenerating it for every TLS connection. |