aboutsummaryrefslogtreecommitdiff
path: root/rpkid
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2009-05-10 21:48:10 +0000
committerRob Austein <sra@hactrn.net>2009-05-10 21:48:10 +0000
commit8d7e1692a4206408e88189709de9a66bc4723f35 (patch)
treef2ca39de6115aff2928a41d56b7bdc88b9543deb /rpkid
parent3031f6ecc8ee5a3e137f835ea5e7f6d40ce99f34 (diff)
Unroll ca.delete()
svn path=/rpkid/rpki/left_right.py; revision=2420
Diffstat (limited to 'rpkid')
-rw-r--r--rpkid/rpki/left_right.py13
-rw-r--r--rpkid/rpki/rpki_engine.py18
2 files changed, 23 insertions, 8 deletions
diff --git a/rpkid/rpki/left_right.py b/rpkid/rpki/left_right.py
index 784c8b7b..d355d2c1 100644
--- a/rpkid/rpki/left_right.py
+++ b/rpkid/rpki/left_right.py
@@ -178,10 +178,15 @@ class self_elt(data_elt):
rpki.rpki_engine.ca_obj.create(parent, rc, class_iterator, class_create_failed)
def class_done():
- for ca in ca_map.values():
- ca.delete(parent) # CA not listed by parent
- self.gctx.sql.sweep()
- parent_iterator()
+
+ def ca_loop(iterator, ca):
+ ca.delete(parent, iterator)
+
+ def ca_done():
+ self.gctx.sql.sweep()
+ parent_iterator()
+
+ rpki.async.iterator(ca_map.values(), ca_loop, ca_done)
rpki.async.iterator(r_msg.payload.classes, class_loop, class_done)
diff --git a/rpkid/rpki/rpki_engine.py b/rpkid/rpki/rpki_engine.py
index 97fae857..e983fa90 100644
--- a/rpkid/rpki/rpki_engine.py
+++ b/rpkid/rpki/rpki_engine.py
@@ -307,7 +307,7 @@ class ca_obj(rpki.sql.sql_persistant):
rpki.up_down.issue_pdu.query(parent, self, ca_detail, done, eb)
- def delete(self, parent):
+ def delete(self, parent, callback):
"""The list of current resource classes received from parent does
not include the class corresponding to this CA, so we need to
delete it (and its little dog too...).
@@ -318,10 +318,20 @@ class ca_obj(rpki.sql.sql_persistant):
CA, then finally delete this CA itself.
"""
+ def fail(e):
+ rpki.log.warn("Could not delete CA %r, skipping: %s" % (self, e))
+ callback()
+
+ def done():
+ self.sql_delete()
+ callback()
+
repository = parent.repository()
- for ca_detail in self.ca_details():
- ca_detail.delete(self, repository)
- self.sql_delete()
+
+ def loop(iterator, ca_detail):
+ ca_detail.delete(self, repository, iterator, fail)
+
+ rpki.async.iterator(self.ca_details(), loop, done)
def next_serial_number(self):
"""Allocate a certificate serial number."""