From 7502e73333943fb45ce0a679aac5ccfce75012aa Mon Sep 17 00:00:00 2001 From: Alessio Podda Date: Fri, 22 May 2026 17:58:10 +0200 Subject: [PATCH] Remove name boundary optimization 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 | 13 ------------- lib/dns/include/dns/diff.h | 10 ---------- lib/dns/xfrin.c | 4 +--- 3 files changed, 1 insertion(+), 26 deletions(-) diff --git a/lib/dns/diff.c b/lib/dns/diff.c index 9ab3ff7cc4..e8dcae9fbc 100644 --- a/lib/dns/diff.c +++ b/lib/dns/diff.c @@ -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)); diff --git a/lib/dns/include/dns/diff.h b/lib/dns/include/dns/diff.h index 32e81890de..eb9ad1e8c1 100644 --- a/lib/dns/include/dns/diff.h +++ b/lib/dns/include/dns/diff.h @@ -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); /*%< diff --git a/lib/dns/xfrin.c b/lib/dns/xfrin.c index 8f974c8746..4cd74212bc 100644 --- a/lib/dns/xfrin.c +++ b/lib/dns/xfrin.c @@ -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,