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