]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
1379. [func] 'rndc stats' now reports tcp and recursion quota
authorMark Andrews <marka@isc.org>
Tue, 10 Sep 2002 02:23:46 +0000 (02:23 +0000)
committerMark Andrews <marka@isc.org>
Tue, 10 Sep 2002 02:23:46 +0000 (02:23 +0000)
                        states.

1378.   [func]          Improved positive feedback for 'rndc {reload|refresh}.

1377.   [func]          dns_zone_load{new}() now reports if the zone was
                        loaded, queued for loading to up to date.

1376.   [func]          New function dns_zone_logc() to log to specified
                        category.

CHANGES
bin/named/control.c
bin/named/include/named/server.h
bin/named/server.c
lib/dns/include/dns/zone.h
lib/dns/zone.c
lib/dns/zt.c

diff --git a/CHANGES b/CHANGES
index 5b532fccb6c1fb380a71c7391215fcfc61a51776..a30a3ef9d7296316141bb824830c0a78d6a1ebf0 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,14 @@
+1379.  [func]          'rndc stats' now reports tcp and recursion quota
+                       states.
+
+1378.  [func]          Improved positive feedback for 'rndc {reload|refresh}.
+
+1377.  [func]          dns_zone_load{new}() now reports if the zone was
+                       loaded, queued for loading to up to date.
+
+1376.  [func]          New function dns_zone_logc() to log to specified
+                       category.
+
 1375.  [func]          'rndc dumpdb' now dumps the adb cache along with the
                        data cache.
 
index 8c859ab578bb5c40fcb12310101a67fa149cf88c..f864305daf50d19cd597d26b69de56bf2b47c086 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: control.c,v 1.14 2002/09/08 18:34:03 explorer Exp $ */
+/* $Id: control.c,v 1.15 2002/09/10 02:23:43 marka Exp $ */
 
 #include <config.h>
 
@@ -81,11 +81,11 @@ ns_control_docommand(isccc_sexpr_t *message, isc_buffer_t *text) {
         * Compare the 'command' parameter against all known control commands.
         */
        if (command_compare(command, NS_COMMAND_RELOAD)) {
-               result = ns_server_reloadcommand(ns_g_server, command);
+               result = ns_server_reloadcommand(ns_g_server, command, text);
        } else if (command_compare(command, NS_COMMAND_RECONFIG)) {
                result = ns_server_reconfigcommand(ns_g_server, command);
        } else if (command_compare(command, NS_COMMAND_REFRESH)) {
-               result = ns_server_refreshcommand(ns_g_server, command);
+               result = ns_server_refreshcommand(ns_g_server, command, text);
        } else if (command_compare(command, NS_COMMAND_RETRANSFER)) {
                result = ns_server_retransfercommand(ns_g_server, command);
        } else if (command_compare(command, NS_COMMAND_HALT)) {
index ac3d1a21a890ce34c6e8993e306f07ab617ccb60..aa8d2a1326801e882fba19255b21b8b0d321d1a4 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: server.h,v 1.68 2002/09/09 21:20:16 explorer Exp $ */
+/* $Id: server.h,v 1.69 2002/09/10 02:23:44 marka Exp $ */
 
 #ifndef NAMED_SERVER_H
 #define NAMED_SERVER_H 1
@@ -120,7 +120,7 @@ ns_server_flushonshutdown(ns_server_t *server, isc_boolean_t flush);
  */
 
 isc_result_t
-ns_server_reloadcommand(ns_server_t *server, char *args);
+ns_server_reloadcommand(ns_server_t *server, char *args, isc_buffer_t *text);
 /*
  * Act on a "reload" command from the command channel.
  */
@@ -132,7 +132,7 @@ ns_server_reconfigcommand(ns_server_t *server, char *args);
  */
 
 isc_result_t
-ns_server_refreshcommand(ns_server_t *server, char *args);
+ns_server_refreshcommand(ns_server_t *server, char *args, isc_buffer_t *text);
 /*
  * Act on a "refresh" command from the command channel.
  */
index 574dd25eece5569c878909040e5e1c2cf74ecfdc..62908eac9dcba6560fcdb85557d2c6b081786511 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: server.c,v 1.386 2002/09/09 21:20:15 explorer Exp $ */
+/* $Id: server.c,v 1.387 2002/09/10 02:23:44 marka Exp $ */
 
 #include <config.h>
 
@@ -2538,7 +2538,7 @@ loadconfig(ns_server_t *server) {
        return (result);
 }
 
-static void
+static isc_result_t
 reload(ns_server_t *server) {
        isc_result_t result;
        CHECK(loadconfig(server));
@@ -2550,7 +2550,8 @@ reload(ns_server_t *server) {
                              "reloading zones failed: %s",
                              isc_result_totext(result));
        }
- cleanup: ;
+ cleanup:
+       return (result);
 }
 
 static void
@@ -2578,7 +2579,7 @@ ns_server_reload(isc_task_t *task, isc_event_t *event) {
        INSIST(task = server->task);
        UNUSED(task);
 
-       reload(server);
+       (void)reload(server);
 
        LOCK(&server->reload_event_lock);
        INSIST(server->reload_event == NULL);
@@ -2707,24 +2708,48 @@ ns_server_retransfercommand(ns_server_t *server, char *args) {
  * Act on a "reload" command from the command channel.
  */
 isc_result_t
-ns_server_reloadcommand(ns_server_t *server, char *args) {
+ns_server_reloadcommand(ns_server_t *server, char *args, isc_buffer_t *text) {
        isc_result_t result;
        dns_zone_t *zone = NULL;
        dns_zonetype_t type;
+       const char *msg = NULL;
        
        result = zone_from_args(server, args, &zone);
        if (result != ISC_R_SUCCESS)
                return (result);
        if (zone == NULL) {
-               reload(server);
+               result = reload(server);
+               if (result == ISC_R_SUCCESS)
+                       msg = "server reload successful";
        } else {
                type = dns_zone_gettype(zone);
-               if (type == dns_zone_slave || type == dns_zone_stub)
+               if (type == dns_zone_slave || type == dns_zone_stub) {
                        dns_zone_refresh(zone);
-               else
+                       msg = "zone refresh queued";
+               } else {
                        result = dns_zone_load(zone);
-               dns_zone_detach(&zone);
+                       dns_zone_detach(&zone);
+                       switch (result) {       
+                       case ISC_R_SUCCESS:
+                                msg = "zone reload successful";
+                                break;
+                       case DNS_R_CONTINUE:
+                               msg = "zone reload queued";
+                               result = ISC_R_SUCCESS;
+                               break;
+                       case DNS_R_UPTODATE:
+                               msg = "zone reload up-to-date";
+                               result = ISC_R_SUCCESS;
+                               break;
+                       default:
+                               /* failure message will be generated by rndc */
+                               break;
+                       }
+               }
        }
+       if (msg != NULL && strlen(msg) < isc_buffer_availablelength(text))
+               isc_buffer_putmem(text, (const unsigned char *)msg,
+                                 strlen(msg) + 1);
        return (result);
 }      
 
@@ -2743,9 +2768,10 @@ ns_server_reconfigcommand(ns_server_t *server, char *args) {
  * Act on a "refresh" command from the command channel.
  */
 isc_result_t
-ns_server_refreshcommand(ns_server_t *server, char *args) {
+ns_server_refreshcommand(ns_server_t *server, char *args, isc_buffer_t *text) {
        isc_result_t result;
        dns_zone_t *zone = NULL;
+       const unsigned char msg[] = "zone refresh queued";
 
        result = zone_from_args(server, args, &zone);
        if (result != ISC_R_SUCCESS)
@@ -2755,6 +2781,8 @@ ns_server_refreshcommand(ns_server_t *server, char *args) {
        
        dns_zone_refresh(zone);
        dns_zone_detach(&zone);
+       if (sizeof(msg) <= isc_buffer_availablelength(text))
+               isc_buffer_putmem(text, msg, sizeof(msg));
 
        return (ISC_R_SUCCESS);
 }      
@@ -3132,9 +3160,13 @@ ns_server_status(ns_server_t *server, isc_buffer_t *text) {
                     "xfers deferred: %d\n"
                     "soa queries in progress: %d\n"
                     "query logging is %s\n"
+                    "recursive clients: %d/%d\n"
+                    "tcp clients: %d/%d\n"
                     "server is up and running",
                     zonecount, ns_g_debuglevel, xferrunning, xferdeferred,
-                    soaqueries, server->log_queries ? "ON" : "OFF");
+                    soaqueries, server->log_queries ? "ON" : "OFF",
+                    server->recursionquota.used, server->recursionquota.max,
+                    server->tcpquota.used, server->tcpquota.max);
        if (n >= isc_buffer_availablelength(text))
                return (ISC_R_NOSPACE);
        isc_buffer_add(text, n);
@@ -3179,8 +3211,12 @@ ns_server_freeze(ns_server_t *server, isc_boolean_t freeze, char *args) {
                                (void)isc_file_remove(journal);
                }
        } else {
-               if (frozen)
+               if (frozen) {
                        result = dns_zone_load(zone);
+                       if (result == DNS_R_CONTINUE ||
+                           result == DNS_R_UPTODATE)
+                               result = ISC_R_SUCCESS;
+               }
        }
        if (result == ISC_R_SUCCESS)
                dns_zone_setupdatedisabled(zone, freeze);
index caa486296143bf971aab262014d1d8fd247d0fa5..bc56233e378edee17ce58b68bb351d55cf9f44f8 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: zone.h,v 1.117 2002/07/29 06:58:46 marka Exp $ */
+/* $Id: zone.h,v 1.118 2002/09/10 02:23:46 marka Exp $ */
 
 #ifndef DNS_ZONE_H
 #define DNS_ZONE_H 1
@@ -232,6 +232,9 @@ dns_zone_loadnew(dns_zone_t *zone);
  * Returns:
  *     ISC_R_UNEXPECTED
  *     ISC_R_SUCCESS
+ *     DNS_R_CONTINUE    Incremental load has been queued.
+ *     DNS_R_UPTODATE    The zone has already been loaded based on
+ *                       file system timestamps.
  *     DNS_R_BADZONE
  *     Any result value from dns_db_load().
  */
@@ -1360,6 +1363,14 @@ dns_zone_log(dns_zone_t *zone, int level, const char *msg, ...)
  * the message as applying to 'zone'.
  */
 
+void
+dns_zone_logc(dns_zone_t *zone, isc_logcategory_t *category, int level,
+             const char *msg, ...) ISC_FORMAT_PRINTF(4, 5);
+/*
+ * Log the message 'msg...' at 'level', including text that identifies
+ * the message as applying to 'zone'.
+ */
+
 void
 dns_zone_name(dns_zone_t *zone, char *buf, size_t len);
 /*
index 7e6e3e0187e97a9534af4aaa2da1d9f3034d4131..ae62cc4513db262c5129a9c9f283e18be29013fe 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: zone.c,v 1.376 2002/09/08 18:37:47 explorer Exp $ */
+/* $Id: zone.c,v 1.377 2002/09/10 02:23:44 marka Exp $ */
 
 #include <config.h>
 
@@ -989,7 +989,7 @@ zone_load(dns_zone_t *zone, unsigned int flags) {
                                dns_zone_log(zone, ISC_LOG_DEBUG(1),
                                             "skipping load: master file older "
                                             "than last load");
-                               result = ISC_R_SUCCESS;
+                               result = DNS_R_UPTODATE;
                                goto cleanup;
                        }
                }
@@ -1038,7 +1038,6 @@ zone_load(dns_zone_t *zone, unsigned int flags) {
 
        if (result == DNS_R_CONTINUE) {
                DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_LOADING);
-               result = ISC_R_SUCCESS;
                goto cleanup;
        }
 
@@ -4749,6 +4748,25 @@ notify_log(dns_zone_t *zone, int level, const char *fmt, ...) {
                      level, "zone %s: %s", namebuf, message);
 }
 
+void
+dns_zone_logc(dns_zone_t *zone, isc_logcategory_t *category,
+             int level, const char *fmt, ...) {
+       va_list ap;
+       char message[4096];
+       char namebuf[1024+32];
+
+       if (isc_log_wouldlog(dns_lctx, level) == ISC_FALSE)
+               return;
+
+       zone_tostr(zone, namebuf, sizeof(namebuf));
+
+       va_start(ap, fmt);
+       vsnprintf(message, sizeof(message), fmt, ap);
+       va_end(ap);
+       isc_log_write(dns_lctx, category, DNS_LOGMODULE_ZONE,
+                     level, "zone %s: %s", namebuf, message);
+}
+
 void
 dns_zone_log(dns_zone_t *zone, int level, const char *fmt, ...) {
        va_list ap;
@@ -5310,12 +5328,12 @@ queue_xfrin(dns_zone_t *zone) {
        RWUNLOCK(&zmgr->rwlock, isc_rwlocktype_write);
 
        if (result == ISC_R_QUOTA) {
-               dns_zone_log(zone, ISC_LOG_DEBUG(1),
-                            "zone transfer deferred due to quota");
+               dns_zone_logc(zone, DNS_LOGCATEGORY_XFER_IN, ISC_LOG_INFO,
+                             "zone transfer deferred due to quota");
        } else if (result != ISC_R_SUCCESS) {
-               dns_zone_log(zone, ISC_LOG_ERROR,
-                            "starting zone transfer: %s",
-                            isc_result_totext(result));
+               dns_zone_logc(zone, DNS_LOGCATEGORY_XFER_IN, ISC_LOG_ERROR,
+                             "starting zone transfer: %s",
+                             isc_result_totext(result));
        }
 }
 
index ec86d5e9bad71f0c27e6d12daf7b637a9912048d..00b66136b8e66fc5c1d7ba4802f744a7a14467f2 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: zt.c,v 1.34 2001/11/12 19:05:39 gson Exp $ */
+/* $Id: zt.c,v 1.35 2002/09/10 02:23:45 marka Exp $ */
 
 #include <config.h>
 
@@ -234,8 +234,12 @@ dns_zt_load(dns_zt_t *zt, isc_boolean_t stop) {
 
 static isc_result_t
 load(dns_zone_t *zone, void *uap) {
+       isc_result_t result;
        UNUSED(uap);
-       return (dns_zone_load(zone));
+       result = dns_zone_load(zone);
+       if (result == DNS_R_CONTINUE || result == DNS_R_UPTODATE)
+               result = ISC_R_SUCCESS;
+       return (result);
 }
 
 isc_result_t
@@ -252,8 +256,12 @@ dns_zt_loadnew(dns_zt_t *zt, isc_boolean_t stop) {
 
 static isc_result_t
 loadnew(dns_zone_t *zone, void *uap) {
+       isc_result_t result;
        UNUSED(uap);
-       return (dns_zone_loadnew(zone));
+       result = dns_zone_loadnew(zone);
+       if (result == DNS_R_CONTINUE || result == DNS_R_UPTODATE)
+               result = ISC_R_SUCCESS;
+       return (result);
 }
 
 isc_result_t