From b36fcff1f6beeb1f7bf0ebaa2862d170ab8676e3 Mon Sep 17 00:00:00 2001
From: Jan Vcelak <jan.vcelak@nic.cz>
Date: Fri, 23 Sep 2016 16:33:46 +0200
Subject: [PATCH] zone: zone expiration is now stateful, no flag needed

---
 src/knot/ctl/commands.c            | 2 +-
 src/knot/events/handlers/dnssec.c  | 1 -
 src/knot/events/handlers/expire.c  | 1 -
 src/knot/events/handlers/load.c    | 1 -
 src/knot/events/handlers/refresh.c | 1 -
 src/knot/zone/zone.h               | 3 ---
 src/knot/zone/zonedb-load.c        | 5 ++---
 7 files changed, 3 insertions(+), 11 deletions(-)

diff --git a/src/knot/ctl/commands.c b/src/knot/ctl/commands.c
index bb10fc1c90..c457105700 100644
--- a/src/knot/ctl/commands.c
+++ b/src/knot/ctl/commands.c
@@ -240,7 +240,7 @@ static int zone_reload(zone_t *zone, ctl_args_t *args)
 {
 	UNUSED(args);
 
-	if (zone->flags & ZONE_EXPIRED) {
+	if (zone_expired(zone)) {
 		return KNOT_ENOTSUP;
 	}
 
diff --git a/src/knot/events/handlers/dnssec.c b/src/knot/events/handlers/dnssec.c
index d44ad0d011..10f2c00112 100644
--- a/src/knot/events/handlers/dnssec.c
+++ b/src/knot/events/handlers/dnssec.c
@@ -104,7 +104,6 @@ int event_dnssec(conf_t *conf, zone_t *zone)
 
 		/* Switch zone contents. */
 		zone_contents_t *old_contents = zone_switch_contents(zone, new_contents);
-		zone->flags &= ~ZONE_EXPIRED;
 		synchronize_rcu();
 		update_free_zone(&old_contents);
 
diff --git a/src/knot/events/handlers/expire.c b/src/knot/events/handlers/expire.c
index 6e58431c79..f3abcfb75e 100644
--- a/src/knot/events/handlers/expire.c
+++ b/src/knot/events/handlers/expire.c
@@ -29,7 +29,6 @@ int event_expire(conf_t *conf, zone_t *zone)
 	assert(zone);
 
 	zone_contents_t *expired = zone_switch_contents(zone, NULL);
-	zone->flags |= ZONE_EXPIRED;
 	log_zone_info(zone->name, "zone expired");
 
 	synchronize_rcu();
diff --git a/src/knot/events/handlers/load.c b/src/knot/events/handlers/load.c
index 55063267b5..5bbe7390fd 100644
--- a/src/knot/events/handlers/load.c
+++ b/src/knot/events/handlers/load.c
@@ -75,7 +75,6 @@ int event_load(conf_t *conf, zone_t *zone)
 	}
 
 	/* Everything went alright, switch the contents. */
-	zone->flags &= ~ZONE_EXPIRED;
 	zone->zonefile.exists = true;
 	zone_contents_t *old = zone_switch_contents(zone, contents);
 	bool old_contents = (old != NULL);
diff --git a/src/knot/events/handlers/refresh.c b/src/knot/events/handlers/refresh.c
index 0655676e7c..25c238b895 100644
--- a/src/knot/events/handlers/refresh.c
+++ b/src/knot/events/handlers/refresh.c
@@ -667,7 +667,6 @@ static int publish_zone(conf_t *conf, zone_t *zone, const struct sockaddr *remot
 	// Publish new zone
 
 	zone_contents_t *old_zone = zone_switch_contents(zone, new_zone);
-	zone->flags &= ~ZONE_EXPIRED;
 
 	if (old_zone) {
 		REFRESH_LOG(LOG_INFO, zone->name, remote,
diff --git a/src/knot/zone/zone.h b/src/knot/zone/zone.h
index 00359781fa..eab1b52d59 100644
--- a/src/knot/zone/zone.h
+++ b/src/knot/zone/zone.h
@@ -46,11 +46,8 @@ typedef enum zone_flag_t {
 	ZONE_FORCE_AXFR   = 1 << 0, /* Force AXFR as next transfer. */
 	ZONE_FORCE_RESIGN = 1 << 1, /* Force zone resign. */
 	ZONE_FORCE_FLUSH  = 1 << 2, /* Force zone flush. */
-	ZONE_EXPIRED      = 1 << 3, /* Zone is expired. */
 } zone_flag_t;
 
-/// XXX: ^ remove expired?
-
 /*!
  * \brief Structure for holding DNS zone.
  */
diff --git a/src/knot/zone/zonedb-load.c b/src/knot/zone/zonedb-load.c
index 99acaf17f2..c1aa959cad 100644
--- a/src/knot/zone/zonedb-load.c
+++ b/src/knot/zone/zonedb-load.c
@@ -170,8 +170,7 @@ static zone_t *create_zone_reload(conf_t *conf, const knot_dname_t *name,
 	timers_sanitize(conf, zone);
 
 	zone_status_t zstatus;
-	if (zone_is_slave(conf, zone) && old_zone->flags & ZONE_EXPIRED) {
-		zone->flags |= ZONE_EXPIRED;
+	if (zone_expired(zone)) {
 		zstatus = ZONE_STATUS_FOUND_CURRENT;
 	} else {
 		zstatus = zone_file_status(conf, old_zone, name);
@@ -220,7 +219,7 @@ static zone_t *create_zone_new(conf_t *conf, const knot_dname_t *name,
 	timers_sanitize(conf, zone);
 
 	zone_status_t zstatus = zone_file_status(conf, NULL, name);
-	if (zone->flags & ZONE_EXPIRED) {
+	if (zone_expired(zone)) {
 		assert(zone_is_slave(conf, zone));
 		zstatus = ZONE_STATUS_BOOSTRAP;
 	}
-- 
GitLab