From: "Peter Müller" <peter.mueller@ipfire.org>
To: development@lists.ipfire.org
Subject: Re: [PATCH] unbound-dhcp-leases-bridge: Reload unbound to import leases
Date: Thu, 13 Jul 2023 14:23:00 +0000 [thread overview]
Message-ID: <0619527e-fc25-b3f6-b56f-d376992cab44@ipfire.org> (raw)
In-Reply-To: <20230711132932.786202-1-michael.tremer@ipfire.org>
[-- Attachment #1: Type: text/plain, Size: 3431 bytes --]
Acked-by: Peter Müller <peter.mueller(a)ipfire.org>
> This changes the old "diff" algorithm that we needed to have before
> Unbound was able to reload its own configuration.
>
> Now, it can do this even without dropping the cache. This should
> hopefully perform much better and be more reliable than the old way.
>
> Signed-off-by: Michael Tremer <michael.tremer(a)ipfire.org>
> ---
> config/unbound/unbound-dhcp-leases-bridge | 52 ++++-------------------
> 1 file changed, 8 insertions(+), 44 deletions(-)
>
> diff --git a/config/unbound/unbound-dhcp-leases-bridge b/config/unbound/unbound-dhcp-leases-bridge
> index e89e0446b..e9f022aff 100644
> --- a/config/unbound/unbound-dhcp-leases-bridge
> +++ b/config/unbound/unbound-dhcp-leases-bridge
> @@ -514,56 +514,19 @@ class UnboundConfigWriter(object):
> def __init__(self, path):
> self.path = path
>
> - self._cached_leases = []
> -
> def update_dhcp_leases(self, leases):
> - # Find any leases that have expired or do not exist any more
> - # but are still in the unbound local data
> - removed_leases = [l for l in self._cached_leases if not l in leases]
> -
> - # Find any leases that have been added
> - new_leases = [l for l in leases if l not in self._cached_leases]
> -
> - # End here if nothing has changed
> - if not new_leases and not removed_leases:
> - return
> -
> # Write out all leases
> self.write_dhcp_leases(leases)
>
> - # Update unbound about changes
> - for l in removed_leases:
> - 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:
> - 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
> + log.debug("Reloading Unbound...")
>
> - # Add lease to cache when successfully added
> - else:
> - self._cached_leases.append(l)
> + # Reload the configuration without dropping the cache
> + self._control("reload_keep_cache")
>
> def write_dhcp_leases(self, leases):
> - with tempfile.NamedTemporaryFile(mode="w", delete=False) as f:
> - filename = f.name
> + log.debug("Writing DHCP leases...")
>
> + with tempfile.NamedTemporaryFile(mode="w", delete=False) as f:
> for l in leases:
> for rr in l.rrset:
> f.write("local-data: \"%s\"\n" % " ".join(rr))
> @@ -571,7 +534,8 @@ class UnboundConfigWriter(object):
> # Make file readable for everyone
> os.fchmod(f.fileno(), stat.S_IRUSR|stat.S_IWUSR|stat.S_IRGRP|stat.S_IROTH)
>
> - os.rename(filename, self.path)
> + # Move the file to its destination
> + os.rename(f.name, self.path)
>
> def _control(self, *args):
> command = ["unbound-control"]
> @@ -585,7 +549,7 @@ class UnboundConfigWriter(object):
> log.critical("Could not run %s, error code: %s: %s" % (
> " ".join(command), e.returncode, e.output))
>
> - raise
> + raise e
>
>
> if __name__ == "__main__":
next prev parent reply other threads:[~2023-07-13 14:23 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-11 13:29 Michael Tremer
2023-07-13 14:23 ` Peter Müller [this message]
2023-10-26 21:54 ` jon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0619527e-fc25-b3f6-b56f-d376992cab44@ipfire.org \
--to=peter.mueller@ipfire.org \
--cc=development@lists.ipfire.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox