]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Expose the 'first refresh' zone flag in rndc status
authorAram Sargsyan <aram@isc.org>
Fri, 10 Nov 2023 11:10:32 +0000 (11:10 +0000)
committerAram Sargsyan <aram@isc.org>
Mon, 5 Feb 2024 17:41:14 +0000 (17:41 +0000)
Expose the newly added 'first refresh' flag in the information
provided by the 'rndc staus' command, by showing the number of
zones, which are not yet fully ready, and their first refresh
is pending or is in-progress.

bin/named/server.c
lib/dns/include/dns/zone.h
lib/dns/zone.c

index d2da295f06e65c361941f5cef2006144ea72dfcd..6f9463f3446205ef15383a7b75415484e89f6150 100644 (file)
@@ -12063,8 +12063,8 @@ named_server_flushnode(named_server_t *server, isc_lex_t *lex, bool tree) {
 isc_result_t
 named_server_status(named_server_t *server, isc_buffer_t **text) {
        isc_result_t result;
-       unsigned int zonecount, xferrunning, xferdeferred, soaqueries;
-       unsigned int automatic;
+       unsigned int zonecount, xferrunning, xferdeferred, xferfirstrefresh;
+       unsigned int soaqueries, automatic;
        const char *ob = "", *cb = "", *alt = "";
        char boottime[ISC_FORMATHTTPTIMESTAMP_SIZE];
        char configtime[ISC_FORMATHTTPTIMESTAMP_SIZE];
@@ -12087,6 +12087,8 @@ named_server_status(named_server_t *server, isc_buffer_t **text) {
                                           DNS_ZONESTATE_XFERRUNNING);
        xferdeferred = dns_zonemgr_getcount(server->zonemgr,
                                            DNS_ZONESTATE_XFERDEFERRED);
+       xferfirstrefresh = dns_zonemgr_getcount(server->zonemgr,
+                                               DNS_ZONESTATE_XFERFIRSTREFRESH);
        soaqueries = dns_zonemgr_getcount(server->zonemgr,
                                          DNS_ZONESTATE_SOAQUERY);
        automatic = dns_zonemgr_getcount(server->zonemgr,
@@ -12143,6 +12145,10 @@ named_server_status(named_server_t *server, isc_buffer_t **text) {
        snprintf(line, sizeof(line), "xfers deferred: %u\n", xferdeferred);
        CHECK(putstr(text, line));
 
+       snprintf(line, sizeof(line), "xfers first refresh: %u\n",
+                xferfirstrefresh);
+       CHECK(putstr(text, line));
+
        snprintf(line, sizeof(line), "soa queries in progress: %u\n",
                 soaqueries);
        CHECK(putstr(text, line));
index 35017c78c290468da6c3d340d791bf8e74556432..909795717d6ca706b0423ac72cd26e92ecd1cca2 100644 (file)
@@ -116,6 +116,18 @@ typedef enum {
        DNS_ZONEKEY___MAX = UINT64_MAX, /* trick to make the ENUM 64-bit wide */
 } dns_zonekey_t;
 
+/*
+ * Zone states
+ */
+typedef enum {
+       DNS_ZONESTATE_XFERRUNNING = 1,
+       DNS_ZONESTATE_XFERDEFERRED,
+       DNS_ZONESTATE_XFERFIRSTREFRESH,
+       DNS_ZONESTATE_SOAQUERY,
+       DNS_ZONESTATE_ANY,
+       DNS_ZONESTATE_AUTOMATIC,
+} dns_zonestate_t;
+
 #ifndef DNS_ZONE_MINREFRESH
 #define DNS_ZONE_MINREFRESH 300 /*%< 5 minutes */
 #endif                         /* ifndef DNS_ZONE_MINREFRESH */
@@ -137,12 +149,6 @@ typedef enum {
            * exponential backoff */
 #endif    /* ifndef DNS_ZONE_DEFAULTRETRY */
 
-#define DNS_ZONESTATE_XFERRUNNING  1
-#define DNS_ZONESTATE_XFERDEFERRED 2
-#define DNS_ZONESTATE_SOAQUERY    3
-#define DNS_ZONESTATE_ANY         4
-#define DNS_ZONESTATE_AUTOMATIC           5
-
 ISC_LANG_BEGINDECLS
 
 /***
@@ -1870,13 +1876,13 @@ dns_zonemgr_getserialqueryrate(dns_zonemgr_t *zmgr);
  */
 
 unsigned int
-dns_zonemgr_getcount(dns_zonemgr_t *zmgr, int state);
+dns_zonemgr_getcount(dns_zonemgr_t *zmgr, dns_zonestate_t state);
 /*%<
  *     Returns the number of zones in the specified state.
  *
  * Requires:
  *\li  'zmgr' to be a valid zone manager.
- *\li  'state' to be a valid DNS_ZONESTATE_ constant.
+ *\li  'state' to be a valid DNS_ZONESTATE_ enum.
  */
 
 isc_result_t
index bf45a4d1f8219071e6143c2549b7f88484b2b3a6..9a9411dc6d38fc9ae1f6aa7ca7a8ba3f382386fd 100644 (file)
@@ -19671,7 +19671,7 @@ dns_zone_getkeystores(dns_zone_t *zone) {
 }
 
 unsigned int
-dns_zonemgr_getcount(dns_zonemgr_t *zmgr, int state) {
+dns_zonemgr_getcount(dns_zonemgr_t *zmgr, dns_zonestate_t state) {
        dns_zone_t *zone;
        unsigned int count = 0;
 
@@ -19693,6 +19693,15 @@ dns_zonemgr_getcount(dns_zonemgr_t *zmgr, int state) {
                        count++;
                }
                break;
+       case DNS_ZONESTATE_XFERFIRSTREFRESH:
+               for (zone = ISC_LIST_HEAD(zmgr->zones); zone != NULL;
+                    zone = ISC_LIST_NEXT(zone, link))
+               {
+                       if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_FIRSTREFRESH)) {
+                               count++;
+                       }
+               }
+               break;
        case DNS_ZONESTATE_SOAQUERY:
                for (zone = ISC_LIST_HEAD(zmgr->zones); zone != NULL;
                     zone = ISC_LIST_NEXT(zone, link))