]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
unbound-dhcp-bridge: Only update cache when lease was added/removed
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 15 Oct 2016 17:17:44 +0000 (19:17 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 15 Oct 2016 17:17:44 +0000 (19:17 +0200)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
config/unbound/unbound-dhcp-leases-bridge

index a41354349d3deb7bbefb3acef2d69593cb00b4d1..4804dba2a1b0332ef50459f114832e5b92eeb40c 100644 (file)
@@ -486,23 +486,37 @@ class UnboundConfigWriter(object):
                if not new_leases and not removed_leases:
                        return
 
-               # Update cache
-               self._cached_leases = leases
-
                # Write out all leases
                self.write_dhcp_leases(leases)
 
                # Update unbound about changes
                for l in removed_leases:
-                       for name, ttl, type, content in l.rrset:
-                               log.debug("Removing records for %s" % name)
-                               self._control("local_data_remove", name)
+                       try:
+                               for name, ttl, type, content in l.rrset:
+                                       log.debug("Removing records for %s" % name)
+                                       self._control("local_data_remove", name)
+
+                       # If the lease cannot be removed we will try the next one
+                       except:
+                               continue
+
+                       # If the removal was successful, we will remove it from the cache
+                       else:
+                               self._cached_leases.remove(l)
 
                for l in new_leases:
-                       for rr in l.rrset:
-                               log.debug("Adding new record %s" % " ".join(rr))
-                               self._control("local_data", *rr)
+                       try:
+                               for rr in l.rrset:
+                                       log.debug("Adding new record %s" % " ".join(rr))
+                                       self._control("local_data", *rr)
 
+                       # If the lease cannot be added we will try the next one
+                       except:
+                               continue
+
+                       # Add lease to cache when successfully added
+                       else:
+                               self._cached_leases.append(l)
 
        def write_dhcp_leases(self, leases):
                with open(self.path, "w") as f:
@@ -515,13 +529,15 @@ class UnboundConfigWriter(object):
                command.extend(args)
 
                try:
-                       return subprocess.check_output(command)
+                       subprocess.check_output(command)
 
                # Log any errors
                except subprocess.CalledProcessError as e:
                        log.critical("Could not run %s, error code: %s: %s" % (
                                " ".join(command), e.returncode, e.output))
 
+                       raise
+
 
 if __name__ == "__main__":
        parser = argparse.ArgumentParser(description="Bridge for DHCP Leases and Unbound DNS")