]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
adjusting: don't measure size redundantly (takes time)
authorLibor Peltan <libor.peltan@nic.cz>
Thu, 24 Jan 2019 16:32:59 +0000 (17:32 +0100)
committerLibor Peltan <libor.peltan@nic.cz>
Thu, 24 Jan 2019 22:07:35 +0000 (23:07 +0100)
src/knot/dnssec/zone-events.c
src/knot/updates/zone-update.c
src/knot/zone/adjust.c
src/knot/zone/adjust.h
src/knot/zone/zonefile.c

index f9e079ebfa0121c632d682cedd640e61d4f3dcf0..5adadb1fc3ae713758839c880baf639ca89fe445 100644 (file)
@@ -179,7 +179,7 @@ int knot_dnssec_zone_sign(zone_update_t *update,
                goto done;
        }
 
-       result = zone_adjust_contents(update->new_cont, adjust_cb_flags, NULL);
+       result = zone_adjust_contents(update->new_cont, adjust_cb_flags, NULL, false);
        if (result != KNOT_EOK) {
                return result;
        };
index 062e343eb4b759bdd8d2db4cf0543e617f2934d3..aae248974839ca0b27279db22c03774a97aa61cf 100644 (file)
@@ -613,12 +613,12 @@ static int commit_incremental(conf_t *conf, zone_update_t *update)
                }
        }
 
-       ret = zone_adjust_contents(new_contents, adjust_cb_flags, adjust_cb_nsec3_flags);
+       ret = zone_adjust_contents(new_contents, adjust_cb_flags, adjust_cb_nsec3_flags, true);
        if (ret == KNOT_EOK) {
                ret = zone_adjust_update(update, adjust_cb_point_to_nsec3, NULL);
        }
        if (ret == KNOT_EOK) {
-               ret = zone_adjust_contents(new_contents, adjust_cb_nsec3wc_and_additionals, NULL);
+               ret = zone_adjust_contents(new_contents, adjust_cb_nsec3wc_and_additionals, NULL, false);
        }
        if (ret != KNOT_EOK) {
                zone_update_clear(update);
index 81ca4bd4d367fe608559424c4ff75dfdb0467550..c4871518746de84f37c6abb23aae60c1f6eab8e5 100644 (file)
@@ -258,6 +258,7 @@ typedef struct {
        uint32_t zone_max_ttl;
        adjust_cb_t adjust_cb;
        bool adjust_prevs;
+       bool measure_size;
 } zone_adjust_arg_t;
 
 static int adjust_single(zone_node_t **tnode, void *data)
@@ -283,14 +284,16 @@ static int adjust_single(zone_node_t **tnode, void *data)
                args->previous_node = node;
        }
 
-       node_size(node, &args->zone_size);
+       if (args->measure_size) {
+               node_size(node, &args->zone_size);
+       }
        node_max_ttl(node, &args->zone_max_ttl);
 
        return args->adjust_cb(node, args->zone);
 }
 
 static int zone_adjust_tree(zone_tree_t *tree, const zone_contents_t *zone, adjust_cb_t adjust_cb,
-                            size_t *tree_size, uint32_t *tree_max_ttl, bool adjust_prevs)
+                            size_t *tree_size, uint32_t *tree_max_ttl, bool adjust_prevs, bool measure_size)
 {
        if (zone_tree_is_empty(tree)) {
                return KNOT_EOK;
@@ -299,7 +302,8 @@ static int zone_adjust_tree(zone_tree_t *tree, const zone_contents_t *zone, adju
        zone_adjust_arg_t arg = {
                .zone = zone,
                .adjust_cb = adjust_cb,
-               .adjust_prevs = adjust_prevs
+               .adjust_prevs = adjust_prevs,
+               .measure_size = measure_size,
        };
 
        int ret = zone_tree_apply(tree, adjust_single, &arg);
@@ -352,7 +356,7 @@ static int load_nsec3param(zone_contents_t *contents)
        return KNOT_EOK;
 }
 
-int zone_adjust_contents(zone_contents_t *zone, adjust_cb_t nodes_cb, adjust_cb_t nsec3_cb)
+int zone_adjust_contents(zone_contents_t *zone, adjust_cb_t nodes_cb, adjust_cb_t nsec3_cb, bool measure_size)
 {
        int ret = load_nsec3param(zone);
        if (ret != KNOT_EOK) {
@@ -367,10 +371,10 @@ int zone_adjust_contents(zone_contents_t *zone, adjust_cb_t nodes_cb, adjust_cb_
        uint32_t nodes_max_ttl = 0, nsec3_max_ttl = 0;
 
        if (nsec3_cb != NULL) {
-               ret = zone_adjust_tree(zone->nsec3_nodes, zone, nsec3_cb, &nsec3_size, &nsec3_max_ttl, true);
+               ret = zone_adjust_tree(zone->nsec3_nodes, zone, nsec3_cb, &nsec3_size, &nsec3_max_ttl, true, measure_size && (nodes_cb != NULL));
        }
        if (ret == KNOT_EOK && nodes_cb != NULL) {
-               ret = zone_adjust_tree(zone->nodes, zone, nodes_cb, &nodes_size, &nodes_max_ttl, true);
+               ret = zone_adjust_tree(zone->nodes, zone, nodes_cb, &nodes_size, &nodes_max_ttl, true, measure_size);
        }
        if (ret == KNOT_EOK && nodes_cb != NULL && nsec3_cb != NULL) {
                zone->size = nodes_size + nsec3_size;
@@ -383,19 +387,19 @@ int zone_adjust_update(zone_update_t *update, adjust_cb_t nodes_cb, adjust_cb_t
 {
        int ret = KNOT_EOK;
        if (nsec3_cb != NULL) {
-               ret = zone_adjust_tree(update->a_ctx->nsec3_ptrs, update->new_cont, nsec3_cb, NULL, NULL, false);
+               ret = zone_adjust_tree(update->a_ctx->nsec3_ptrs, update->new_cont, nsec3_cb, NULL, NULL, false, false);
        }
        if (ret == KNOT_EOK && nodes_cb != NULL) {
-               ret = zone_adjust_tree(update->a_ctx->node_ptrs, update->new_cont, nodes_cb, NULL, NULL, false);
+               ret = zone_adjust_tree(update->a_ctx->node_ptrs, update->new_cont, nodes_cb, NULL, NULL, false, false);
        }
        return ret;
 }
 
 int zone_adjust_full(zone_contents_t *zone)
 {
-       int ret = zone_adjust_contents(zone, adjust_cb_flags, adjust_cb_nsec3_flags);
+       int ret = zone_adjust_contents(zone, adjust_cb_flags, adjust_cb_nsec3_flags, true);
        if (ret == KNOT_EOK) {
-               ret = zone_adjust_contents(zone, adjust_cb_nsec3_and_additionals, NULL);
+               ret = zone_adjust_contents(zone, adjust_cb_nsec3_and_additionals, NULL, false);
        }
        return ret;
 }
index 796ac0dba472460035c5b504b26a4e4d7aeef693..56ecc87d0843e1ead069b663b3c99cfc8682fedf 100644 (file)
@@ -69,7 +69,7 @@ int adjust_cb_void(zone_node_t *node, const zone_contents_t *zone);
  *
  * \return KNOT_E*
  */
-int zone_adjust_contents(zone_contents_t *zone, adjust_cb_t nodes_cb, adjust_cb_t nsec3_cb);
+int zone_adjust_contents(zone_contents_t *zone, adjust_cb_t nodes_cb, adjust_cb_t nsec3_cb, bool measure_size);
 
 /*!
  * \brief Apply callback to nodes affected by the zone update.
index 8caa0ab36c9daab54c512a0c5702f3e341658abe..9811abc593135ac7cf1f185591b60caea074224b 100644 (file)
@@ -226,7 +226,7 @@ zone_contents_t *zonefile_load(zloader_t *loader)
                goto fail;
        }
 
-       ret = zone_adjust_contents(zc->z, adjust_cb_flags_and_nsec3, adjust_cb_nsec3_flags);
+       ret = zone_adjust_contents(zc->z, adjust_cb_flags_and_nsec3, adjust_cb_nsec3_flags, true);
        if (ret != KNOT_EOK) {
                ERROR(zname, "failed to finalize zone contents (%s)",
                      knot_strerror(ret));