From: Daniel Salzman Date: Thu, 18 Dec 2025 08:33:28 +0000 (+0100) Subject: server: add statistics counter 'zone-update-error' X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5d164cefa9b8dcf7e73e46b2fb65198222c5bdaa;p=thirdparty%2Fknot-dns.git server: add statistics counter 'zone-update-error' --- diff --git a/src/knot/common/stats.c b/src/knot/common/stats.c index 1bdfaef58b..66c9009bda 100644 --- a/src/knot/common/stats.c +++ b/src/knot/common/stats.c @@ -127,6 +127,7 @@ int stats_server(stats_dump_ctr_f fcn, stats_dump_ctx_t *ctx) } DUMP_VAL(params, "zone-count", knot_zonedb_size(ctx->server->zone_db)); + DUMP_VAL(params, "zone-update-error", ATOMIC_GET(ctx->server->stats.zone_update_error)); DUMP_VAL(params, "tcp-io-timeout", ATOMIC_GET(ctx->server->stats.tcp_io_timeout)); DUMP_VAL(params, "tcp-idle-timeout", ATOMIC_GET(ctx->server->stats.tcp_idle_timeout)); diff --git a/src/knot/server/server.c b/src/knot/server/server.c index 2b54e996c6..f7086a1c78 100644 --- a/src/knot/server/server.c +++ b/src/knot/server/server.c @@ -1537,6 +1537,7 @@ int server_reload(server_t *server, reload_t mode) ATOMIC_SET(server->stats.tcp_io_timeout, 0); ATOMIC_SET(server->stats.tcp_idle_timeout, 0); + ATOMIC_SET(server->stats.zone_update_error, 0); } conf_update_flag_t upd_flags = CONF_UPD_FNOFREE; diff --git a/src/knot/server/server.h b/src/knot/server/server.h index ee88184186..a663272130 100644 --- a/src/knot/server/server.h +++ b/src/knot/server/server.h @@ -90,7 +90,7 @@ typedef struct server { struct { knot_atomic_uint64_t tcp_io_timeout; knot_atomic_uint64_t tcp_idle_timeout; - + knot_atomic_uint64_t zone_update_error; } stats; knot_zonedb_t *zone_db; diff --git a/src/knot/updates/zone-update.c b/src/knot/updates/zone-update.c index 900a6973ae..a3176b14e2 100644 --- a/src/knot/updates/zone-update.c +++ b/src/knot/updates/zone-update.c @@ -1144,7 +1144,7 @@ int zone_update_commit(conf_t *conf, zone_update_t *update) ret = commit_full(conf, update); } if (ret != KNOT_EOK) { - return ret; + goto error; } conf_val_t thr = conf_zone_get(conf, C_ADJUST_THR, update->zone->name); @@ -1155,7 +1155,7 @@ int zone_update_commit(conf_t *conf, zone_update_t *update) } if (ret != KNOT_EOK) { discard_adds_tree(update); - return ret; + goto error; } /* Check the zone size. */ @@ -1164,7 +1164,8 @@ int zone_update_commit(conf_t *conf, zone_update_t *update) if (update->new_cont->size > size_limit) { discard_adds_tree(update); - return KNOT_EZONESIZE; + ret = KNOT_EZONESIZE; + goto error; } val = conf_zone_get(conf, C_DNSSEC_VALIDATION, update->zone->name); @@ -1177,7 +1178,7 @@ int zone_update_commit(conf_t *conf, zone_update_t *update) ret = knot_dnssec_validate_zone(update, &val_conf); if (ret != KNOT_EOK) { discard_adds_tree(update); - return ret; + goto error; } } @@ -1186,7 +1187,7 @@ int zone_update_commit(conf_t *conf, zone_update_t *update) ret = zone_update_external(conf, update, &val); if (ret != KNOT_EOK) { discard_adds_tree(update); - return ret; + goto error; } } @@ -1194,21 +1195,21 @@ int zone_update_commit(conf_t *conf, zone_update_t *update) if (ret != KNOT_EOK) { log_zone_error(update->zone->name, "failed to process catalog zone (%s)", knot_strerror(ret)); discard_adds_tree(update); - return ret; + goto error; } ret = commit_redis(conf, update); if (ret != KNOT_EOK) { log_zone_error(update->zone->name, "zone database update failed (%s)", knot_strerror(ret)); discard_adds_tree(update); - return ret; + goto error; } ret = commit_journal(conf, update); if (ret != KNOT_EOK) { log_zone_error(update->zone->name, "journal update failed (%s)", knot_strerror(ret)); discard_adds_tree(update); - return ret; + goto error; } if (dnssec) { @@ -1261,6 +1262,9 @@ int zone_update_commit(conf_t *conf, zone_update_t *update) memset(update, 0, sizeof(*update)); return KNOT_EOK; +error: + ATOMIC_ADD(update->zone->server->stats.zone_update_error, 1); + return ret; } bool zone_update_no_change(zone_update_t *update)