From: Michael Tremer Date: Sat, 15 Oct 2016 17:17:44 +0000 (+0200) Subject: unbound-dhcp-bridge: Only update cache when lease was added/removed X-Git-Tag: v2.19-core108~31 X-Git-Url: http://git.ipfire.org/?p=people%2Fpmueller%2Fipfire-2.x.git;a=commitdiff_plain;h=3ec5ba501ebe5a9579cbf4c78a6f4ee157f839ed unbound-dhcp-bridge: Only update cache when lease was added/removed Signed-off-by: Michael Tremer --- diff --git a/config/unbound/unbound-dhcp-leases-bridge b/config/unbound/unbound-dhcp-leases-bridge index a41354349d..4804dba2a1 100644 --- a/config/unbound/unbound-dhcp-leases-bridge +++ b/config/unbound/unbound-dhcp-leases-bridge @@ -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")