]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
conf: rework notify-delay to be more practical and consistent with Bind
authorDaniel Salzman <daniel.salzman@nic.cz>
Thu, 26 Jun 2025 16:18:37 +0000 (18:18 +0200)
committerDaniel Salzman <daniel.salzman@nic.cz>
Mon, 14 Jul 2025 05:53:48 +0000 (07:53 +0200)
doc/reference.rst
src/knot/ctl/commands.c
src/knot/events/handlers/dnssec.c
src/knot/events/handlers/load.c
src/knot/events/handlers/refresh.c
src/knot/events/handlers/update.c
src/knot/zone/zone.c
src/knot/zone/zone.h
tests-extra/tools/dnstest/server.py

index 19f0d47091d32a7eb194978207c2c60e8b05022a..14b3a057d9b7267dce40c8770c1706ba886484ce 100644 (file)
@@ -2739,9 +2739,8 @@ Empty value is allowed for template value overriding.
 notify-delay
 ------------
 
-The time delay in seconds before an outgoing NOTIFY message is sent upon loading
-a new zone (e.g. to ensure that secondaries have enough time to adjust their catalogues).
-Set to -1 to prevent sending NOTIFY messages in this context.
+A time delay in seconds before an outgoing NOTIFY message is sent. This delay
+also defines the time granularity at which NOTIFY messages are sent per zone.
 
 *Default:* ``0``
 
index 8b9d42c60267af90f90a4e93f3b696c9cce30101..abb55e095f86c26a8860880276281615ec1bbe04 100644 (file)
@@ -988,7 +988,7 @@ static int zone_txn_commit_l(zone_t *zone, _unused_ ctl_args_t *args)
        free(zone->control_update);
        zone->control_update = NULL;
 
-       zone_schedule_notify(zone, 0);
+       zone_schedule_notify(conf(), zone, 0);
 
        return KNOT_EOK;
 }
index d669d1e2372327b4db02d7412218ecf2720077b2..f8108b417be391e35f7da2f8a0b65e1468af67a3 100644 (file)
@@ -50,7 +50,7 @@ void event_dnssec_reschedule(conf_t *conf, zone_t *zone,
                ZONE_EVENT_DNSKEY_SYNC, refresh->plan_dnskey_sync ? now + jitter : ignore
        );
        if (zone_changed) {
-               zone_schedule_notify(zone, 0);
+               zone_schedule_notify(conf, zone, 0);
        }
 }
 
index 941380fe1205faf7ec03ead34ecfaf885e067ec5..54b29ba1639df32d0dc291fba601eec50cade9ae 100644 (file)
@@ -416,11 +416,7 @@ load_end:
        replan_from_timers(conf, zone);
 
        if (!zone_timers_serial_notified(&zone->timers, new_serial)) {
-               val = conf_zone_get(conf, C_NOTIFY_DELAY, zone->name);
-               int64_t delay = conf_int(&val);
-               if (delay >= 0) {
-                       zone_schedule_notify(zone, delay);
-               }
+               zone_schedule_notify(conf, zone, 0);
        }
        zone_skip_free(&skip);
 
index 5fc6f04b99ae337a8bf578c66168edd622612a63..e633cffd476e88389eb94d0b6b9754c01f798f6b 100644 (file)
@@ -1492,7 +1492,7 @@ int event_refresh(conf_t *conf, zone_t *zone)
        /* Reschedule events. */
        replan_from_timers(conf, zone);
        if (trctx.send_notify) {
-               zone_schedule_notify(zone, 1);
+               zone_schedule_notify(conf, zone, 1);
        }
        if (trctx.more_xfr && ret == KNOT_EOK) {
                zone_events_schedule_now(zone, ZONE_EVENT_REFRESH);
index 287369d93f156d8f224cf662f7fd9990ee74a2fb..9e08984ebf3127db3c96e202b810c74208066c14 100644 (file)
@@ -256,7 +256,7 @@ static void process_requests(conf_t *conf, zone_t *zone, list_t *requests)
                      "%.02f seconds", old_serial, new_serial,
                      time_diff_ms(&t_start, &t_end) / 1000.0);
 
-       zone_schedule_notify(zone, 1);
+       zone_schedule_notify(conf, zone, 1);
 }
 
 static int remote_forward(conf_t *conf, knot_request_t *request, conf_remote_t *remote,
index 2b3d8f036053e05d6c4d13057cd2135aaaef1ebf..5819c4d5c8f50a3609fc36c692cfffbc0d6a421d 100644 (file)
@@ -465,10 +465,12 @@ void zone_notifailed_clear(zone_t *zone)
        pthread_mutex_unlock(&zone->preferred_lock);
 }
 
-void zone_schedule_notify(zone_t *zone, time_t delay)
+void zone_schedule_notify(conf_t *conf, zone_t *zone, time_t delay)
 {
+       conf_val_t val = conf_zone_get(conf, C_NOTIFY_DELAY, zone->name);
+       int64_t conf_delay = conf_int(&val);
        zone_notifailed_clear(zone);
-       zone_events_schedule_at(zone, ZONE_EVENT_NOTIFY, time(NULL) + delay);
+       zone_events_schedule_at(zone, ZONE_EVENT_NOTIFY, time(NULL) + conf_delay + delay);
 }
 
 zone_contents_t *zone_switch_contents(zone_t *zone, zone_contents_t *new_contents)
index c366d4aeab81ea5d604df41885a30020da8e665a..b5792cfdb61cc0880748ade1e46025c7ac79adef 100644 (file)
@@ -215,7 +215,7 @@ bool zone_journal_has_zij(zone_t *zone);
  * \brief Clear failed_notify list before planning new NOTIFY.
  */
 void zone_notifailed_clear(zone_t *zone);
-void zone_schedule_notify(zone_t *zone, time_t delay);
+void zone_schedule_notify(conf_t *conf, zone_t *zone, time_t delay);
 
 /*!
  * \brief Atomically switch the content of the zone.
index 9fb5aedde1a86978688c4c0b031fd672351e9053..7f778e0acbc4db94b3368c9fbb35867125b849a3 100644 (file)
@@ -1869,7 +1869,7 @@ class Knot(Server):
         s.item_str("storage", self.dir)
         s.item_str("zonefile-sync", self.zonefile_sync)
         if self.notify_delay is None:
-            self.notify_delay = random.randint(0, 2)
+            self.notify_delay = random.randint(0, 1)
         s.item_str("notify-delay", self.notify_delay)
         if self.zonemd_verify:
             s.item_str("zonemd-verify", "on")