INSIST assertion failure when shutting 9.3.2 down

Danny Thomas d.thomas at its.uq.edu.au
Wed Sep 6 22:53:00 UTC 2006


when upgrading to 9.3.2-P1, shutting 9.3.2 down produced an assertion
failure on one of our name-servers

...
Sep  7 08:07:07 <local1.warn> cuscus named[1195]:
  general: warning: zone in-addr.arpa/IN: removing zone
Sep  7 08:07:33 <local1.crit> cuscus named[1195]:
  general: critical: task.c:1238:
  INSIST((((manager->tasks).head == 0) ? isc_boolean_true : isc_boolean_false)) failed
Sep  7 08:07:33 <local1.crit> cuscus named[1195]:
  general: critical: exiting (due to assertion failure)

I could not see anything in the 9.4 CHANGES file that seemed to match,
though 1857 mentioned an INSIST if reconfigured/reloaded too fast.

some points
  the last zone removed was a copy of root's in-addr.arpa
  this assertion failure only happened for our main name-server
    in which most zones are of type master. The other 5 name-servers
    have all zones, including in-addr.arpa, of type slave
  our version includes a few logging patches, e.g. to log when zones
    are removed. 9.4 finally logs zone removal but that is done quite
    differently to our patch, e.g. it does not log zone removal during
    shutdown (which is normally a better approach)

does this seem worth sending to bind-bugs ? (our previous reports
never seem to generate much response, nor does the submitter have
any read access into RT for the job they've submitted)

Danny

here's the patch file we apply to 9.3.x

--- lib/dns/name.c.orig Wed Sep  1 15:19:59 2004
+++ lib/dns/name.c      Mon Nov  1 10:09:59 2004
@@ -325,6 +325,9 @@
        unsigned char *ndata, ch;
        unsigned int n;
        isc_boolean_t first;
+       /* [DMT 31-Oct-2004] add two new variables */
+       unsigned char *gc_msdcs_ndata;
+       unsigned int gc_msdcs_n;
 
        REQUIRE(VALID_NAME(name));
        REQUIRE(name->labels > 0);
@@ -346,6 +349,14 @@
        /*
         * RFC292/RFC1123 hostname.
         */
+       /* [DMT 31-Oct-2004] check-names is a good feature, but unfortunately */
+       /* whines about each gc A record in the _msdcs AD service sub-domains */
+       gc_msdcs_ndata = NULL;
+       gc_msdcs_n = 0;
+       if ((name->length > 9) && (0 == strncmp(ndata, "\002gc\006_msdcs", 10))) {
+               gc_msdcs_ndata = name->ndata + 5;
+               gc_msdcs_n = 5;
+       }
        while (ndata < (name->ndata + name->length)) {
                n = *ndata++;
                INSIST(n <= 63);
@@ -353,7 +364,7 @@
                while (n--) {
                        ch = *ndata++;
                        if (first || n == 0) {
-                               if (!borderchar(ch))
+                               if ((!borderchar(ch)) && ((ndata != gc_msdcs_ndata) || (n != gc_msdcs_n)))
                                        return (ISC_FALSE);
                        } else {
                                if (!middlechar(ch))
--- lib/dns/zone.c.orig Sat Aug 28 15:53:37 2004
+++ lib/dns/zone.c      Mon Nov  1 10:32:57 2004
@@ -610,6 +610,8 @@
        /*
         * Managed objects.  Order is important.
         */
+       /* [DMT 01-Nov-2004] log removal */
+       dns_zone_log(zone, ISC_LOG_WARNING, "removing zone");
        if (zone->request != NULL)
                dns_request_destroy(&zone->request); /* XXXMPA */
        INSIST(zone->readio == NULL);
@@ -1070,6 +1072,8 @@
        }
 
        result = zone_postload(zone, db, loadtime, result);
+       /* [DMT 01-Nov-2004] log addition */
+       dns_zone_log(zone, ISC_LOG_WARNING, "adding new zone");
 
  cleanup:
        UNLOCK_ZONE(zone);
--- lib/dns/resolver.c.orig     Sat Aug 28 16:25:19 2004
+++ lib/dns/resolver.c  Tue Nov  2 08:24:30 2004
@@ -3385,11 +3385,12 @@
                                             sizeof(typebuf));
                        dns_rdataclass_format(rdataset->rdclass, classbuf,
                                              sizeof(classbuf));
-                       isc_log_write(dns_lctx, DNS_LOGCATEGORY_RESOLVER,  
+       /* [DMT 02-Nov-2004] one way of shutting these up */
+/*                     isc_log_write(dns_lctx, DNS_LOGCATEGORY_RESOLVER,  
                                      DNS_LOGMODULE_RESOLVER, ISC_LOG_NOTICE,
                                      "check-names %s %s/%s/%s", 
                                      fail ? "failure" : "warning",
-                                     namebuf, typebuf, classbuf);
+                                     namebuf, typebuf, classbuf);  */
                        if (fail) {
                                if (ANSWER(rdataset))
                                        return (DNS_R_BADNAME);

-- 
   d.thomas at its.uq.edu.au    Danny Thomas,                                    
          +61-7-3365-8221    Software Infrastructure,
 http://www.its.uq.edu.au    ITS, The University of Queensland



More information about the bind-users mailing list