aboutsummaryrefslogtreecommitdiff
path: root/rpkid
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2012-08-20 18:46:43 +0000
committerRob Austein <sra@hactrn.net>2012-08-20 18:46:43 +0000
commit8b51b149ae36baef5f4c07f8367dedf7badcbfac (patch)
treea9629f9b0e420c596a62b7925e0dcb080d0d5259 /rpkid
parent3b6a0ce6c158ced4a24ebe2da300a2699f518168 (diff)
Don't write unchanged BPKI files: nothing bad happens if we do, but
apparently it confuses the users. svn path=/branches/tk274/; revision=4647
Diffstat (limited to 'rpkid')
-rw-r--r--rpkid/rpki/irdb/zookeeper.py38
1 files changed, 13 insertions, 25 deletions
diff --git a/rpkid/rpki/irdb/zookeeper.py b/rpkid/rpki/irdb/zookeeper.py
index 4682c1ef..478fab0e 100644
--- a/rpkid/rpki/irdb/zookeeper.py
+++ b/rpkid/rpki/irdb/zookeeper.py
@@ -96,24 +96,34 @@ class PEM_writer(object):
"""
Write PEM files to disk, keeping track of which ones we've already
written and setting the file mode appropriately.
+
+ Comparing the old file with what we're about to write serves no real
+ purpose except to calm users who find repeated messages about
+ writing the same file confusing.
"""
def __init__(self, logstream = None):
self.wrote = set()
self.logstream = logstream
- def __call__(self, filename, obj):
+ def __call__(self, filename, obj, compare = True):
filename = os.path.realpath(filename)
if filename in self.wrote:
return
tempname = filename
+ pem = obj.get_PEM()
if not filename.startswith("/dev/"):
+ try:
+ if compare and pem == open(filename, "r").read():
+ return
+ except:
+ pass
tempname += ".%s.tmp" % os.getpid()
mode = 0400 if filename.endswith(".key") else 0444
if self.logstream is not None:
self.logstream.write("Writing %s\n" % filename)
f = os.fdopen(os.open(tempname, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, mode), "w")
- f.write(obj.get_PEM())
+ f.write(pem)
f.close()
if tempname != filename:
os.rename(tempname, filename)
@@ -1070,31 +1080,10 @@ class Zookeeper(object):
<self run_now="yes"/> operation.
"""
- # Synchronize rpkid for all CAs
-
for ca in rpki.irdb.ResourceHolderCA.objects.all():
self.synchronize_rpkid_one_ca_core(ca, ca.handle in handles_to_poke)
-
- # Synchronize pubd
-
self.synchronize_pubd_core()
-
- # Clean up any <self/> objects rpkid might be holding that don't
- # match a ResourceCA object.
-
- rpkid_reply = self.call_rpkid(rpki.left_right.self_elt.make_pdu(action = "list"))
- self.check_error_report(rpkid_reply)
-
- self_handles = set(s.self_handle for s in rpkid_reply)
- ca_handles = set(ca.handle for ca in rpki.irdb.ResourceHolderCA.objects.all())
- assert ca_handles <= self_handles
-
- rpkid_query = [rpki.left_right.self_elt.make_pdu(action = "destroy", self_handle = handle)
- for handle in (self_handles - ca_handles)]
-
- if rpkid_query:
- rpkid_reply = self.call_rpkid(*rpkid_query)
- self.check_error_report(rpkid_reply)
+ sef.synchronize_rpkid_deleted_core()
@django.db.transaction.commit_on_success
@@ -1106,7 +1095,6 @@ class Zookeeper(object):
if ca is None:
ca = self.resource_ca
-
self.synchronize_rpkid_one_ca_core(ca, poke)