From 4118741536accb0d81cd625f2641c99dbd13015e Mon Sep 17 00:00:00 2001 From: Jan Vcelak <jan.vcelak@nic.cz> Date: Thu, 16 Oct 2014 15:39:54 +0200 Subject: [PATCH] events: write persistent events from events API --- src/knot/zone/events/events.c | 19 ++++++++++++++++++- src/knot/zone/events/events.h | 12 +++++++++++- tests/zone_events.c | 2 +- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/knot/zone/events/events.c b/src/knot/zone/events/events.c index 0a1968033e..c335464066 100644 --- a/src/knot/zone/events/events.c +++ b/src/knot/zone/events/events.c @@ -18,12 +18,14 @@ #include <time.h> #include "common-knot/evsched.h" +#include "common/namedb/namedb.h" #include "knot/server/server.h" #include "knot/worker/pool.h" #include "knot/zone/zone.h" #include "knot/zone/events/events.h" #include "knot/zone/events/handlers.h" #include "knot/zone/events/replan.h" +#include "knot/zone/timers.h" /* ------------------------- internal timers -------------------------------- */ @@ -232,7 +234,8 @@ int zone_events_init(zone_t *zone) return KNOT_EOK; } -int zone_events_setup(zone_t *zone, worker_pool_t *workers, evsched_t *scheduler) +int zone_events_setup(struct zone_t *zone, worker_pool_t *workers, + evsched_t *scheduler, knot_namedb_t *timers_db) { if (!zone || !workers || !scheduler) { return KNOT_EINVAL; @@ -246,6 +249,7 @@ int zone_events_setup(zone_t *zone, worker_pool_t *workers, evsched_t *scheduler zone->events.event = event; zone->events.pool = workers; + zone->events.timers_db = timers_db; return KNOT_EOK; } @@ -409,3 +413,16 @@ void zone_events_replan_ddns(struct zone_t *zone, const struct zone_t *old_zone) replan_update(zone, (zone_t *)old_zone); } } + +int zone_events_write_persistent(zone_t *zone) +{ + if (!zone) { + return KNOT_EINVAL; + } + + if (zone->events.timers_db == NULL) { + return KNOT_EOK; + } + + return write_zone_timers(zone->events.timers_db, zone); +} diff --git a/src/knot/zone/events/events.h b/src/knot/zone/events/events.h index 5bb27fe9ac..4d930daa45 100644 --- a/src/knot/zone/events/events.h +++ b/src/knot/zone/events/events.h @@ -20,6 +20,7 @@ #include <stdbool.h> #include "common-knot/evsched.h" +#include "common/namedb/namedb.h" #include "knot/worker/pool.h" /* Timer special values. */ @@ -51,6 +52,7 @@ typedef struct zone_events { event_t *event; //!< Scheduler event. worker_pool_t *pool; //!< Server worker pool. + knot_namedb_t *timers_db; //!< Persistent zone timers database. task_t task; //!< Event execution context. time_t time[ZONE_EVENT_COUNT]; //!< Event execution times. @@ -74,11 +76,12 @@ int zone_events_init(struct zone_t *zone); * \param zone Zone to setup. * \param workers Worker thread pool. * \param scheduler Event scheduler. + * \param timers_db Persistent timers database. Can be NULL. * * \return KNOT_E* */ int zone_events_setup(struct zone_t *zone, worker_pool_t *workers, - evsched_t *scheduler); + evsched_t *scheduler, knot_namedb_t *timers_db); /*! * \brief Deinitialize zone events. @@ -185,3 +188,10 @@ void zone_events_update(struct zone_t *zone, struct zone_t *old_zone); * \param old_zone Zone with old config. */ void zone_events_replan_ddns(struct zone_t *zone, const struct zone_t *old_zone); + +/*! + * \brief Write persistent timers to timers database. + * + * \return KNOT_E* + */ +int zone_events_write_persistent(struct zone_t *zone); diff --git a/tests/zone_events.c b/tests/zone_events.c index 804cf08f5c..2542d05db6 100644 --- a/tests/zone_events.c +++ b/tests/zone_events.c @@ -86,7 +86,7 @@ int main(void) r = zone_events_init(&zone); ok(r == KNOT_EOK, "zone events init"); - r = zone_events_setup(&zone, pool, &sched); + r = zone_events_setup(&zone, pool, &sched, NULL); ok(r == KNOT_EOK, "zone events setup"); test_scheduling(&zone); -- GitLab