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