]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
dbus: emit zone_not_updated signal if zone-updated is enabled
authorDaniel Salzman <daniel.salzman@nic.cz>
Thu, 18 Dec 2025 14:34:15 +0000 (15:34 +0100)
committerDaniel Salzman <daniel.salzman@nic.cz>
Thu, 18 Dec 2025 14:34:15 +0000 (15:34 +0100)
doc/reference.rst
samples/dbus_client.pl
samples/dbus_client.py
samples/dbus_client.sh
src/knot/common/dbus.c
src/knot/common/dbus.h
src/knot/updates/zone-update.c

index ab233f6bfe3ef5c6d04afe91ac9d62f0b0ceb944..24a81efc9ef08f3501e4b9117d2c72c1c04a20c6 100644 (file)
@@ -635,8 +635,12 @@ Possible values:
   - ``started`` – Emitted when the server is started and all configured zones (including
     catalog zones and their members) are loaded or successfully bootstrapped.
   - ``stopped`` – Emitted when the server shutdown sequence is initiated.
-- ``zone-updated`` – The signal ``zone_updated`` is emitted when a zone has been updated.
-  Parameters: **zone** name and zone SOA **serial**.
+- ``zone-updated`` – Two signals may be emitted:
+
+  - ``zone_updated`` – Emitted when a zone has been successfully updated.
+    Parameters: **zone** name and zone SOA **serial**.
+  - ``zone_not_updated`` – Emitted when a zone has not been successfully updated.
+    Parameters: **zone** name.
 - ``external-verify`` – The signal ``external_verify`` is emitted when a zone is awaiting
   external validation before applying changes.
   Parameters: **zone** name and new zone SOA **serial**.
index 5548330a69d3f54d48df7e16d148c9e26bc7379c..c8169a51378be84727b7281ef1fb13a6d8d6ced3 100755 (executable)
@@ -42,6 +42,12 @@ $knotd_interface->connect_to_signal('zone_updated', sub
     print "Updated zone=$zone to serial=$serial\n";
 });
 
+$knotd_interface->connect_to_signal('zone_not_updated', sub
+{
+    my ($zone) = @_;
+    print "Not updated zone=$zone\n";
+});
+
 $knotd_interface->connect_to_signal('external_verify', sub
 {
     my ($zone, $serial) = @_;
index c30e9de34f4a847dfa2e4ae125f94093ec77b654..29b599c4cb8b1f480b728c7123b9cc3784a7dfd7 100755 (executable)
@@ -23,6 +23,10 @@ def sig_updated(sender, path, interface, signal, args):
     (zone, serial) = args
     print("Updated zone=%s to serial=%d" % (zone, serial))
 
+def sig_not_updated(sender, path, interface, signal, args):
+    (zone) = args
+    print("Not updated zone=%s" % (zone))
+
 def sig_external(sender, path, interface, signal, args):
     (zone, serial) = args
     print("Awaiting external validation for zone=%s serial=%u" % (zone, serial))
@@ -89,6 +93,7 @@ if __name__ == '__main__':
     connect_to_signal("started", sig_started)
     connect_to_signal("stopped", sig_stopped)
     connect_to_signal("zone_updated", sig_updated)
+    connect_to_signal("zone_not_updated", sig_not_updated)
     connect_to_signal("external_verify", sig_external)
     connect_to_signal("keys_updated", sig_keys_upd)
     connect_to_signal("zone_ksk_submission", sig_submission)
index 1b78afeacdb1348adcd525c93976d914562ce356..62c0bde0fc6d251656a06fd9df0863376d20d289 100755 (executable)
@@ -16,6 +16,9 @@ cb() {
        zone_updated)
                echo "Updated zone=${2} to serial=${3}"
                ;;
+       zone_not_updated)
+               echo "Not updated zone=${2}"
+               ;;
        external_verify)
                echo "Awaiting external validation for zone=${2} serial=${3}"
                ;;
index 58f856812a791b3c68efcf1a76172f2a1739e5b8..6e830cfea622ee45a698cd5e797a1dd6152697ea 100644 (file)
@@ -180,14 +180,18 @@ void dbus_emit_running(bool up)
 #endif // ENABLE_DBUS
 }
 
-void dbus_emit_zone_updated(const knot_dname_t *zone_name, uint32_t serial)
+void dbus_emit_zone_updated(const knot_dname_t *zone_name, bool success, uint32_t serial)
 {
 #if ENABLE_DBUS
        knot_dname_txt_storage_t buff;
        char *zone_str = knot_dname_to_str(buff, zone_name, sizeof(buff));
        if (zone_str != NULL) {
-               emit_event(KNOT_BUS_EVENT_ZONE_UPD, "su", VALUE_OF(zone_str),
-                          VALUE_OF(serial));
+               if (success) {
+                       emit_event(KNOT_BUS_EVENT_ZONE_UPD, "su", VALUE_OF(zone_str),
+                                  VALUE_OF(serial));
+               } else {
+                       emit_event(KNOT_BUS_EVENT_ZONE_NOT_UPD, "s", VALUE_OF(zone_str));
+               }
        }
 #endif // ENABLE_DBUS
 }
index abc2f2fa013a64699d7141411a8648b531282405..62c9e916bc6d33d03a83a82c03edcdfe4b0761b6 100644 (file)
@@ -17,6 +17,7 @@
 #define KNOT_BUS_EVENT_STARTED       "started"
 #define KNOT_BUS_EVENT_STOPPED       "stopped"
 #define KNOT_BUS_EVENT_ZONE_UPD      "zone_updated"
+#define KNOT_BUS_EVENT_ZONE_NOT_UPD  "zone_not_updated"
 #define KNOT_BUS_EVENT_EXTERNAL      "external_verify"
 #define KNOT_BUS_EVENT_ZONE_KEYS_UPD "keys_updated"
 #define KNOT_BUS_EVENT_ZONE_KSK_SUBM "zone_ksk_submission"
@@ -46,9 +47,10 @@ void dbus_emit_running(bool up);
  * \brief Emit event signal for updated zones.
  *
  * \param zone_name  Zone name.
+ * \param success    Successful update indication (if false, serial isn't used).
  * \param serial     Current zone SOA serial.
  */
-void dbus_emit_zone_updated(const knot_dname_t *zone_name, uint32_t serial);
+void dbus_emit_zone_updated(const knot_dname_t *zone_name, bool success, uint32_t serial);
 
 /*!
  * \brief Emit event signal that external verify shall take place.
index a3176b14e2956366cf38a372b1baa084d1955105..1e2b8ab2dc09d071650761da3681869cdfafa71b 100644 (file)
@@ -1255,7 +1255,7 @@ int zone_update_commit(conf_t *conf, zone_update_t *update)
        }
 
        if (conf->cache.srv_dbus_event & DBUS_EVENT_ZONE_UPDATED) {
-               dbus_emit_zone_updated(update->zone->name,
+               dbus_emit_zone_updated(update->zone->name, true,
                                       zone_contents_serial(update->zone->contents));
        }
 
@@ -1264,6 +1264,10 @@ int zone_update_commit(conf_t *conf, zone_update_t *update)
        return KNOT_EOK;
 error:
        ATOMIC_ADD(update->zone->server->stats.zone_update_error, 1);
+       if (conf->cache.srv_dbus_event & DBUS_EVENT_ZONE_UPDATED) {
+               dbus_emit_zone_updated(update->zone->name, false, 0);
+       }
+
        return ret;
 }