diff options
-rw-r--r-- | rpkid/rpki/left_right.py | 13 | ||||
-rw-r--r-- | rpkid/rpki/rpki_engine.py | 18 |
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.""" |