]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Remove name boundary optimization 12141/head
authorAlessio Podda <alessio@isc.org>
Fri, 22 May 2026 15:58:10 +0000 (17:58 +0200)
committerOndřej Surý <ondrej@isc.org>
Fri, 29 May 2026 07:50:11 +0000 (09:50 +0200)
In MR !9740, we introduced an optimization that reduces memory usage
by processing rdatas in batches during AXFR.

The maximum batch size is 128, but the batch size was allowed to grow
beyond that limit if all rdatas in a batch were for the same name, as
that allows a more efficient optimization.

This optimization could theoretically allow the batch size arbitrarily
for a sufficient large zone transfer. Since synthetic tests don't show
any performance improvement from the optimization, this MR removes it.

lib/dns/diff.c
lib/dns/include/dns/diff.h
lib/dns/xfrin.c

index 9ab3ff7cc4e52d718ec5a16abd10c5d4ce5763ce..e8dcae9fbccc7115d3ee7e1d441f8c83d957aeae 100644 (file)
@@ -139,19 +139,6 @@ dns_diff_append(dns_diff_t *diff, dns_difftuple_t **tuplep) {
        *tuplep = NULL;
 }
 
-bool
-dns_diff_is_boundary(const dns_diff_t *diff, dns_name_t *new_name) {
-       REQUIRE(DNS_DIFF_VALID(diff));
-       REQUIRE(DNS_NAME_VALID(new_name));
-
-       if (ISC_LIST_EMPTY(diff->tuples)) {
-               return false;
-       }
-
-       dns_difftuple_t *tail = ISC_LIST_TAIL(diff->tuples);
-       return !dns_name_caseequal(&tail->name, new_name);
-}
-
 size_t
 dns_diff_size(const dns_diff_t *diff) {
        REQUIRE(DNS_DIFF_VALID(diff));
index 32e81890de43ce4e123c12cdd2371c42049e8927..eb9ad1e8c1dda2641f7ac6957a648c139400f5b8 100644 (file)
@@ -187,16 +187,6 @@ dns_diff_append(dns_diff_t *diff, dns_difftuple_t **tuple);
  * \li The tuple has been freed, or will be freed when the diff is cleared.
  */
 
-bool
-dns_diff_is_boundary(const dns_diff_t *diff, dns_name_t *name);
-/*%<
- * Checks if 'name' is equal, up to case, to the last name of the diff.
- *
- * Requires:
- * \li 'diff' is a valid diff.
- * \li 'name' is a valid dns name.
- */
-
 size_t
 dns_diff_size(const dns_diff_t *diff);
 /*%<
index 8f974c87465e2b80b45ae286db82e9202e61d9d5..4cd74212bceb6e5aa4ac02afe27eac0d9bbc845f 100644 (file)
@@ -324,9 +324,7 @@ axfr_putdata(dns_xfrin_t *xfr, dns_diffop_t op, dns_name_t *name, dns_ttl_t ttl,
        }
 
        CHECK(dns_zone_checknames(xfr->zone, name, rdata));
-       if (dns_diff_size(&xfr->diff) > 128 &&
-           dns_diff_is_boundary(&xfr->diff, name))
-       {
+       if (dns_diff_size(&xfr->diff) > 128) {
                xfrin_work_t work = (xfrin_work_t){
                        .magic = XFRIN_WORK_MAGIC,
                        .result = ISC_R_UNSET,