From c82e7b1eb3d277e9e7478859f028f2090eff2d9f Mon Sep 17 00:00:00 2001 From: Rob Austein Date: Wed, 17 Jul 2013 17:44:11 +0000 Subject: Add ability for auto_update DER objects to coast through transient failures like missing files. Closes #580. svn path=/trunk/; revision=5435 --- rpkid/rpki/x509.py | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) (limited to 'rpkid/rpki/x509.py') diff --git a/rpkid/rpki/x509.py b/rpkid/rpki/x509.py index 7e0e37ea..8883f3ce 100644 --- a/rpkid/rpki/x509.py +++ b/rpkid/rpki/x509.py @@ -233,6 +233,7 @@ class DER_object(object): setattr(self, a, None) self.filename = None self.timestamp = None + self.failures = 0 def __init__(self, **kw): """ @@ -287,19 +288,26 @@ class DER_object(object): """ if self.filename is None: return - filename = self.filename - timestamp = os.stat(self.filename).st_mtime - if self.timestamp is None or self.timestamp < timestamp: - rpki.log.debug("Updating %s, timestamp %s" % (filename, rpki.sundial.datetime.fromtimestamp(timestamp))) - f = open(filename, "rb") - value = f.read() - f.close() - if self.pem_converter.looks_like_PEM(value): - value = self.pem_converter.to_DER(value) - self.clear() - self.DER = value - self.filename = filename - self.timestamp = timestamp + try: + filename = self.filename + timestamp = os.stat(self.filename).st_mtime + if self.timestamp is None or self.timestamp < timestamp: + rpki.log.debug("Updating %s, timestamp %s" % (filename, rpki.sundial.datetime.fromtimestamp(timestamp))) + f = open(filename, "rb") + value = f.read() + f.close() + if self.pem_converter.looks_like_PEM(value): + value = self.pem_converter.to_DER(value) + self.clear() + self.DER = value + self.filename = filename + self.timestamp = timestamp + except (IOError, OSError), e: + self.failures += 1 + if self.failures % 100 == 1: + rpki.log.warn("Could not auto_update %r (failures %d): %s" % (self, self.failures, e)) + else: + self.failures = 0 def check(self): """ -- cgit v1.2.3