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