Merge branch 'not_updated' into 'master'

Extend zone-update-error stats

See merge request knot/knot-dns!1846
This commit is contained in:
Libor Peltan 2026-02-03 14:53:20 +01:00
commit f57055b434
8 changed files with 34 additions and 17 deletions

View file

@ -993,12 +993,14 @@ static int zone_txn_commit_l(zone_t *zone, _unused_ ctl_args_t *args)
}
if (ret != KNOT_EOK) {
zone_control_clear(zone);
zone_update_error(conf(), zone);
return ret;
}
ret = zone_update_commit(conf(), zone->control_update);
if (ret != KNOT_EOK) {
zone_control_clear(zone);
zone_update_error(conf(), zone);
return ret;
}

View file

@ -108,6 +108,7 @@ done:
if (ret != KNOT_EOK) {
zone_update_clear(&up);
zone_update_error(conf, zone);
}
return ret;
}

View file

@ -538,5 +538,12 @@ cleanup:
zone_skip_free(&skip);
zone->started = true;
return (dontcare_load_error(conf, zone) ? KNOT_EOK : ret);
if (dontcare_load_error(conf, zone)) {
ret = KNOT_EOK;
}
if (ret != KNOT_EOK) {
zone_update_error(conf, zone);
}
return ret;
}

View file

@ -1265,6 +1265,7 @@ static int transfer_consume(knot_layer_t *layer, knot_pkt_t *pkt)
if (data->ret == KNOT_EOK) {
data->updated = true;
} else {
zone_update_error(data->conf, data->zone);
next = KNOT_STATE_FAIL;
}
}

View file

@ -242,6 +242,7 @@ static void process_requests(conf_t *conf, zone_t *zone, list_t *requests)
if (ret != KNOT_EOK) {
log_zone_error(zone->name, "DDNS, processing failed (%s)",
knot_strerror(ret));
zone_update_error(conf, zone);
return;
}

View file

@ -1150,7 +1150,7 @@ int zone_update_commit(conf_t *conf, zone_update_t *update)
ret = commit_full(conf, update);
}
if (ret != KNOT_EOK) {
goto error;
return ret;
}
conf_val_t thr = conf_zone_get(conf, C_ADJUST_THR, update->zone->name);
@ -1161,7 +1161,7 @@ int zone_update_commit(conf_t *conf, zone_update_t *update)
}
if (ret != KNOT_EOK) {
discard_adds_tree(update);
goto error;
return ret;
}
/* Check the zone size. */
@ -1170,8 +1170,7 @@ int zone_update_commit(conf_t *conf, zone_update_t *update)
if (update->new_cont->size > size_limit) {
discard_adds_tree(update);
ret = KNOT_EZONESIZE;
goto error;
return KNOT_EZONESIZE;
}
val = conf_zone_get(conf, C_DNSSEC_VALIDATION, update->zone->name);
@ -1184,7 +1183,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);
goto error;
return ret;
}
}
@ -1193,7 +1192,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);
goto error;
return ret;
}
}
@ -1201,21 +1200,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);
goto error;
return ret;
}
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);
goto error;
return ret;
}
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);
goto error;
return ret;
}
if (dnssec) {
@ -1268,13 +1267,6 @@ 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);
if (conf->cache.srv_dbus_event & DBUS_EVENT_ZONE_UPDATED) {
dbus_emit_zone_updated(update->zone->name, false, 0);
}
return ret;
}
bool zone_update_no_change(zone_update_t *update)

View file

@ -9,6 +9,7 @@
#include <time.h>
#include <urcu.h>
#include "knot/common/dbus.h"
#include "knot/common/log.h"
#include "knot/conf/module.h"
#include "knot/dnssec/kasp/kasp_db.h"
@ -1034,3 +1035,13 @@ time_t zone_bootstrap_next(uint8_t *count)
// Add a random delay to prevent burst refresh.
return increment + dnssec_random_uint16_t() % MIN(30, (1 + *count) * 5);
}
void zone_update_error(conf_t *conf, zone_t *zone)
{
if (conf != NULL && zone != NULL) {
ATOMIC_ADD(zone->server->stats.zone_update_error, 1);
if (conf->cache.srv_dbus_event & DBUS_EVENT_ZONE_UPDATED) {
dbus_emit_zone_updated(zone->name, false, 0);
}
}
}

View file

@ -339,3 +339,5 @@ int zone_get_lastsigned_serial(zone_t *zone, uint32_t *serial);
int slave_zone_serial(zone_t *zone, conf_t *conf, uint32_t *serial);
time_t zone_bootstrap_next(uint8_t *count);
void zone_update_error(conf_t *conf, zone_t *zone);