From e060ea019f649cb6822e57479be0080fbb5b75f6 Mon Sep 17 00:00:00 2001
From: Lubos Slovak <lubos.slovak@nic.cz>
Date: Tue, 8 Oct 2013 13:20:50 +0200
Subject: [PATCH] Fixed check for changeset emptiness.

It may happen that changeset has beginning SOA set, but no other
RRs - in that case it should probably be considered empty.
---
 src/knot/server/zones.c          | 3 ++-
 src/libknot/updates/changesets.c | 4 ++--
 src/libknot/updates/changesets.h | 3 +++
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/knot/server/zones.c b/src/knot/server/zones.c
index 208cafba8..86b09dc3a 100644
--- a/src/knot/server/zones.c
+++ b/src/knot/server/zones.c
@@ -3353,7 +3353,8 @@ int zones_store_and_apply_chgsets(knot_changesets_t *chs,
 	ret = zones_store_changesets_begin_and_store(zone, chs, &transaction);
 	if (ret != KNOT_EOK) {
 		log_zone_error("%s Failed to serialize and store "
-		               "changesets.\n", msgpref);
+		               "changesets: %s.\n", msgpref,
+		               knot_strerror(ret));
 		/* Free changesets, but not the data. */
 		knot_changesets_free(&chs);
 		return ret;
diff --git a/src/libknot/updates/changesets.c b/src/libknot/updates/changesets.c
index b2cf4b7eb..afd0e9c54 100644
--- a/src/libknot/updates/changesets.c
+++ b/src/libknot/updates/changesets.c
@@ -285,8 +285,8 @@ bool knot_changeset_is_empty(const knot_changeset_t *changeset)
 		return true;
 	}
 
-	return (changeset->soa_from == NULL && changeset->soa_to == NULL) &&
-	       (EMPTY_LIST(changeset->add) && EMPTY_LIST(changeset->remove));
+	return (changeset->soa_to == NULL &&
+	        EMPTY_LIST(changeset->add) && EMPTY_LIST(changeset->remove));
 }
 
 size_t knot_changeset_size(const knot_changeset_t *changeset)
diff --git a/src/libknot/updates/changesets.h b/src/libknot/updates/changesets.h
index 4c4ea314f..a730d265b 100644
--- a/src/libknot/updates/changesets.h
+++ b/src/libknot/updates/changesets.h
@@ -221,6 +221,9 @@ void knot_changeset_add_soa(knot_changeset_t *changeset, knot_rrset_t *soa,
  *
  * \param changeset Changeset to be checked.
  *
+ * Changeset is considered empty if it has no RRs in REMOVE and ADD sections and
+ * final SOA (soa_to) is not set.
+ *
  * \retval true if changeset is empty.
  * \retval false if changeset is not empty.
  */
-- 
GitLab