From 958672475cb12026b3d6e818c002232a4e33e728 Mon Sep 17 00:00:00 2001 From: Jan Kadlec <jan.kadlec@nic.cz> Date: Fri, 28 Mar 2014 20:17:21 +0100 Subject: [PATCH] new_node: Do not apply empty changeset after update. --- src/knot/nameserver/update.c | 22 ++++++++++++---------- src/knot/updates/xfr-in.c | 2 +- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/knot/nameserver/update.c b/src/knot/nameserver/update.c index cfc82752f..f29a34501 100644 --- a/src/knot/nameserver/update.c +++ b/src/knot/nameserver/update.c @@ -198,13 +198,14 @@ static int knot_ns_process_update(const knot_pkt_t *query, knot_changesets_get_last(chgs), rcode, new_serial); if (ret != KNOT_EOK) { - dbg_ns("Failed to apply UPDATE to the zone copy or no update" - " made: %s\n", (ret < 0) ? knot_strerror(ret) - : "No change made."); return ret; } - return xfrin_apply_changesets(old_zone, chgs, new_contents); + const bool change_made = + knot_changeset_is_empty(knot_changesets_get_last(chgs)); + return change_made ? + xfrin_apply_changesets(old_zone, chgs, new_contents) : + KNOT_EOK; } static int replan_zone_sign_after_ddns(zone_t *zone, uint32_t refresh_at) @@ -280,14 +281,15 @@ static int zones_process_update_auth(struct query_data *qdata) ret = knot_ns_process_update(qdata->query, zone, &new_contents, chgsets, &qdata->rcode, new_serial); if (ret != KNOT_EOK) { - if (ret > 0) { - log_zone_notice("%s: No change to zone made.\n", msg); - qdata->rcode = KNOT_RCODE_NOERROR; - } - + return ret; + } + + if (knot_changeset_is_empty(knot_changesets_get_last(chgsets))) { + log_zone_notice("%s: No change to zone made.\n", msg); + qdata->rcode = KNOT_RCODE_NOERROR; knot_changesets_free(&chgsets); free(msg); - return (ret < 0) ? ret : KNOT_EOK; + return KNOT_EOK; } knot_changesets_t *sec_chs = NULL; diff --git a/src/knot/updates/xfr-in.c b/src/knot/updates/xfr-in.c index c050d9732..f1f86a665 100644 --- a/src/knot/updates/xfr-in.c +++ b/src/knot/updates/xfr-in.c @@ -1520,7 +1520,7 @@ int xfrin_apply_changesets(zone_t *zone, || new_contents == NULL) { return KNOT_EINVAL; } - + knot_zone_contents_t *old_contents = zone->contents; if (!old_contents) { dbg_xfrin("Cannot apply changesets to empty zone.\n"); -- GitLab