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.
(cherry picked from commit
7502e73333943fb45ce0a679aac5ccfce75012aa)
*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));
* \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);
/*%<
}
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,