From 0bccb34b94d9c88a7c9f7c29bc63d6e94ad38353 Mon Sep 17 00:00:00 2001
From: Daniel Salzman <daniel.salzman@nic.cz>
Date: Thu, 19 Jan 2017 10:50:26 +0100
Subject: [PATCH] knotd: improve timers writing at shutdown

---
 src/knot/zone/timers.c |  6 +++---
 src/knot/zone/timers.h |  4 ++--
 src/utils/knotd/main.c | 20 ++++++++++++--------
 3 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/src/knot/zone/timers.c b/src/knot/zone/timers.c
index 69244b5076..0be92878f7 100644
--- a/src/knot/zone/timers.c
+++ b/src/knot/zone/timers.c
@@ -1,4 +1,4 @@
-/*  Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
+/*  Copyright (C) 2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -201,9 +201,9 @@ int zone_timers_write_begin(knot_db_t *db, knot_db_txn_t *txn)
 	return knot_db_lmdb_api()->txn_begin(db, txn, KNOT_DB_SORTED);
 }
 
-void zone_timers_write_end(knot_db_txn_t *txn)
+int zone_timers_write_end(knot_db_txn_t *txn)
 {
-	knot_db_lmdb_api()->txn_commit(txn);
+	return knot_db_lmdb_api()->txn_commit(txn);
 }
 
 int zone_timers_write(knot_db_t *db, const knot_dname_t *zone,
diff --git a/src/knot/zone/timers.h b/src/knot/zone/timers.h
index 9d301dbb97..df3d491304 100644
--- a/src/knot/zone/timers.h
+++ b/src/knot/zone/timers.h
@@ -1,4 +1,4 @@
-/*  Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
+/*  Copyright (C) 2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -81,7 +81,7 @@ int zone_timers_write_begin(knot_db_t *db, knot_db_txn_t *txn);
  *
  * \return KNOT_E*
  */
-void zone_timers_write_end(knot_db_txn_t *txn);
+int zone_timers_write_end(knot_db_txn_t *txn);
 
 /*!
  * \brief Write timers for one zone.
diff --git a/src/utils/knotd/main.c b/src/utils/knotd/main.c
index 3a75f1ec2e..da90ef83b8 100644
--- a/src/utils/knotd/main.c
+++ b/src/utils/knotd/main.c
@@ -1,4 +1,4 @@
-/*  Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
+/*  Copyright (C) 2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -386,13 +386,17 @@ static void write_timers(const zone_t *zone, knot_db_txn_t *txn, int *ret)
 static void update_timerdb(server_t *server)
 {
 	log_info("updating zone timers database");
-	knot_db_txn_t timers_txn;
-	int timers_ret = zone_timers_write_begin(server->timers_db, &timers_txn);
-	knot_zonedb_foreach(server->zone_db, write_timers, &timers_txn, &timers_ret);
-	if (timers_ret == KNOT_EOK) {
-		zone_timers_write_end(&timers_txn);
-	} else {
-		log_warning("updating zone timers database failed (%s)", knot_strerror(timers_ret));
+
+	knot_db_txn_t txn;
+	int ret = zone_timers_write_begin(server->timers_db, &txn);
+	if (ret == KNOT_EOK) {
+		knot_zonedb_foreach(server->zone_db, write_timers, &txn, &ret);
+	}
+	if (ret == KNOT_EOK) {
+		ret = zone_timers_write_end(&txn);
+	}
+	if (ret != KNOT_EOK) {
+		log_warning("failed to update zone timers database (%s)", knot_strerror(ret));
 	}
 }
 
-- 
GitLab