aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2009-09-16 23:49:31 +0000
committerRob Austein <sra@hactrn.net>2009-09-16 23:49:31 +0000
commit8306a1408cd3cb6be5f11d4c586cb7977da903ab (patch)
treef062e702fb895164a162957d498f8ea12833f2d8
parent1140d642e852136d80e88a87d402ed18feb8d545 (diff)
Implement <self run_now="yes"/>
svn path=/rpkid/rpki/left_right.py; revision=2764
-rw-r--r--rpkid/rpki/left_right.py34
-rw-r--r--rpkid/rpki/rpki_engine.py19
2 files changed, 34 insertions, 19 deletions
diff --git a/rpkid/rpki/left_right.py b/rpkid/rpki/left_right.py
index 3b8dbbce..1bd7d192 100644
--- a/rpkid/rpki/left_right.py
+++ b/rpkid/rpki/left_right.py
@@ -159,7 +159,7 @@ class self_elt(data_elt):
Extra server actions for self_elt.
"""
rpki.log.trace()
- self.unimplemented_control("reissue", "run_now")
+ self.unimplemented_control("reissue")
actions = []
if q_pdu.rekey:
actions.append(self.serve_rekey)
@@ -167,6 +167,8 @@ class self_elt(data_elt):
actions.append(self.serve_revoke)
if q_pdu.publish_world_now:
actions.append(self.serve_publish_world_now)
+ if q_pdu.run_now:
+ actions.append(self.serve_run_now)
def loop(iterator, action):
action(iterator, eb)
rpki.async.iterator(actions, loop, cb)
@@ -228,6 +230,13 @@ class self_elt(data_elt):
rpki.async.iterator(self.parents(), loop, cb)
+ def serve_run_now(self, cb, eb):
+ """
+ Handle a left-right run_now action for this self.
+ """
+ rpki.log.debug("Forced immediate run of periodic actions for self %s[%d]" % (self.self_handle, self.self_id))
+ self.cron(cb)
+
def serve_fetch_one_maybe(self):
"""
Find the self object upon which a get, set, or destroy action
@@ -250,6 +259,29 @@ class self_elt(data_elt):
"""
return self.sql_fetch_all(self.gctx)
+ def cron(self, cb):
+ """
+ Periodic tasks.
+ """
+
+ def one():
+ rpki.log.debug("Self %s[%d] polling parents" % (self.self_handle, self.self_id))
+ self.client_poll(two)
+
+ def two():
+ rpki.log.debug("Self %s[%d] updating children" % (self.self_handle, self.self_id))
+ self.update_children(three)
+
+ def three():
+ rpki.log.debug("Self %s[%d] updating ROAs" % (self.self_handle, self.self_id))
+ self.update_roas(four)
+
+ def four():
+ rpki.log.debug("Self %s[%d] regenerating CRLs and manifests" % (self.self_handle, self.self_id))
+ self.regenerate_crls_and_manifests(cb)
+
+ one()
+
def client_poll(self, callback):
"""
Run the regular client poll cycle with each of this self's parents
diff --git a/rpkid/rpki/rpki_engine.py b/rpkid/rpki/rpki_engine.py
index bd659ec5..5f17a912 100644
--- a/rpkid/rpki/rpki_engine.py
+++ b/rpkid/rpki/rpki_engine.py
@@ -200,24 +200,7 @@ class rpkid_context(object):
self.sql.ping()
def loop(iterator, s):
-
- def one():
- rpki.log.debug("Self %s[%d] polling parents" % (s.self_handle, s.self_id))
- s.client_poll(two)
-
- def two():
- rpki.log.debug("Self %s[%d] updating children" % (s.self_handle, s.self_id))
- s.update_children(three)
-
- def three():
- rpki.log.debug("Self %s[%d] updating ROAs" % (s.self_handle, s.self_id))
- s.update_roas(four)
-
- def four():
- rpki.log.debug("Self %s[%d] regenerating CRLs and manifests" % (s.self_handle, s.self_id))
- s.regenerate_crls_and_manifests(iterator)
-
- one()
+ s.cron(iterator)
def sched():
when = rpki.sundial.now() + rpki.sundial.timedelta(seconds = self.cron_period)