From: Libor Peltan Date: Mon, 9 Aug 2021 09:56:15 +0000 (+0200) Subject: catalog: bugfix: count update count correctly X-Git-Tag: v3.3.dev~406^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0b4a3efdfa30a8696e18650e713b2c3dafbdccbb;p=thirdparty%2Fknot-dns.git catalog: bugfix: count update count correctly --- diff --git a/src/knot/catalog/catalog_update.c b/src/knot/catalog/catalog_update.c index 1f2f259bc8..b52d748f13 100644 --- a/src/knot/catalog/catalog_update.c +++ b/src/knot/catalog/catalog_update.c @@ -348,11 +348,13 @@ static int del_all_cb(const knot_dname_t *member, const knot_dname_t *owner, } } -int catalog_update_del_all(catalog_update_t *u, catalog_t *cat, const knot_dname_t *zone) +int catalog_update_del_all(catalog_update_t *u, catalog_t *cat, const knot_dname_t *zone, ssize_t *upd_count) { pthread_mutex_lock(&u->mutex); del_all_ctx_t ctx = { zone, u }; + *upd_count -= trie_weight(u->upd); int ret = catalog_apply(cat, NULL, del_all_cb, &ctx, false); + *upd_count += trie_weight(u->upd); pthread_mutex_unlock(&u->mutex); return ret; } diff --git a/src/knot/catalog/catalog_update.h b/src/knot/catalog/catalog_update.h index 949fbd7307..de47075a68 100644 --- a/src/knot/catalog/catalog_update.h +++ b/src/knot/catalog/catalog_update.h @@ -151,7 +151,8 @@ int catalog_update_commit(catalog_update_t *u, catalog_t *cat); * \param u Catalog update to be updated. * \param cat Catalog database to be iterated. * \param zone Name of catalog zone whose members gonna be removed. + * \param upd_count Output: number of resulting updates to catalog database. * * \return KNOT_E* */ -int catalog_update_del_all(catalog_update_t *u, catalog_t *cat, const knot_dname_t *zone); +int catalog_update_del_all(catalog_update_t *u, catalog_t *cat, const knot_dname_t *zone, ssize_t *upd_count); diff --git a/src/knot/catalog/interpret.c b/src/knot/catalog/interpret.c index d9db2ae4bd..b70bd65fc5 100644 --- a/src/knot/catalog/interpret.c +++ b/src/knot/catalog/interpret.c @@ -137,7 +137,8 @@ static int cat_update_add_node(zone_node_t *node, void *data) int catalog_update_from_zone(catalog_update_t *u, struct zone_contents *zone, const struct zone_contents *complete_contents, - bool remove, bool check_ver, catalog_t *check) + bool remove, bool check_ver, catalog_t *check, + ssize_t *upd_count) { if (check_ver && !check_zone_version(zone)) { return KNOT_EZONEINVAL; @@ -156,7 +157,9 @@ int catalog_update_from_zone(catalog_update_t *u, struct zone_contents *zone, cat_upd_ctx_t ctx = { u, complete_contents, knot_dname_labels(zone->apex->owner, NULL), remove, check }; pthread_mutex_lock(&u->mutex); + *upd_count -= trie_weight(u->upd); int ret = zone_tree_sub_apply(zone->nodes, sub, true, cat_update_add_node, &ctx); + *upd_count += trie_weight(u->upd); pthread_mutex_unlock(&u->mutex); return ret; } diff --git a/src/knot/catalog/interpret.h b/src/knot/catalog/interpret.h index b1dbfb72ec..6d640312f8 100644 --- a/src/knot/catalog/interpret.h +++ b/src/knot/catalog/interpret.h @@ -30,9 +30,11 @@ struct zone_contents; * \param check_ver Do check catalog zone version record first. * \param check Optional: existing catalog database to be checked for existence * of such record (useful for removals). + * \param upd_count Output: number of resulting updates to catalog database. * * \return KNOT_E* */ int catalog_update_from_zone(catalog_update_t *u, struct zone_contents *zone, const struct zone_contents *complete_contents, - bool remove, bool check_ver, catalog_t *check); + bool remove, bool check_ver, catalog_t *check, + ssize_t *upd_count); diff --git a/src/knot/updates/zone-update.c b/src/knot/updates/zone-update.c index d3c25fd5e7..4636b1bcd7 100644 --- a/src/knot/updates/zone-update.c +++ b/src/knot/updates/zone-update.c @@ -720,29 +720,29 @@ static int update_catalog(conf_t *conf, zone_update_t *update) zone_set_flag(update->zone, ZONE_IS_CATALOG); int ret = KNOT_EOK; + ssize_t upd_count = 0; if ((update->flags & UPDATE_INCREMENTAL)) { ret = catalog_update_from_zone(update->zone->catalog_upd, update->change.remove, update->new_cont, - true, false, update->zone->catalog); + true, false, update->zone->catalog, &upd_count); if (ret == KNOT_EOK) { ret = catalog_update_from_zone(update->zone->catalog_upd, update->change.add, update->new_cont, - false, false, NULL); + false, false, NULL, &upd_count); } } else { ret = catalog_update_del_all(update->zone->catalog_upd, update->zone->catalog, - update->zone->name); + update->zone->name, &upd_count); if (ret == KNOT_EOK) { ret = catalog_update_from_zone(update->zone->catalog_upd, update->new_cont, update->new_cont, - false, true, NULL); + false, true, NULL, &upd_count); } } if (ret == KNOT_EOK) { - log_zone_info(update->zone->name, "catalog reloaded, %zu updates", - trie_weight(update->zone->catalog_upd->upd)); + log_zone_info(update->zone->name, "catalog reloaded, %zd updates", upd_count); if (kill(getpid(), SIGUSR1) != 0) { ret = knot_map_errno(); }