You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2010/11/18 16:12:31 UTC

svn commit: r1036479 - in /trafficserver/traffic/trunk: iocore/dns/ iocore/net/ libinktomi++/ proxy/

Author: zwoop
Date: Thu Nov 18 15:12:31 2010
New Revision: 1036479

URL: http://svn.apache.org/viewvc?rev=1036479&view=rev
Log:
TS-435 Fixes for SplitDNS to function again.

Author: mohan_zl
Review and mods: leif

In addition, this fixes a few more things:

   - Each DNSHandler has its own "trigger" queue
   - The DNSHandlers for SplitDNS now run on the DNS thread
   - Support for multiple DNS servers per SplitDNS rule
   - Eliminate duplicated "default" DNSHandler with SplitDNS
   - Various cleanup.

Modified:
    trafficserver/traffic/trunk/iocore/dns/DNS.cc
    trafficserver/traffic/trunk/iocore/dns/DNSConnection.cc
    trafficserver/traffic/trunk/iocore/dns/P_DNSConnection.h
    trafficserver/traffic/trunk/iocore/dns/P_DNSProcessor.h
    trafficserver/traffic/trunk/iocore/dns/SplitDNS.cc
    trafficserver/traffic/trunk/iocore/net/P_UnixNet.h
    trafficserver/traffic/trunk/iocore/net/UnixNet.cc
    trafficserver/traffic/trunk/libinktomi++/ink_res_init.cc
    trafficserver/traffic/trunk/proxy/Main.cc

Modified: trafficserver/traffic/trunk/iocore/dns/DNS.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/dns/DNS.cc?rev=1036479&r1=1036478&r2=1036479&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/dns/DNS.cc (original)
+++ trafficserver/traffic/trunk/iocore/dns/DNS.cc Thu Nov 18 15:12:31 2010
@@ -133,8 +133,12 @@ DNSProcessor::start(int)
   dnsProcessor.thread = eventProcessor.eventthread[ET_DNS][0];
 
   dns_failover_try_period = dns_timeout + 1;    // Modify the "default" accordingly
-  dns_init();
-  open();
+
+  // The SplitDNS "processor" has it's own default servers, so don't need that here ...
+  if (!SplitDNSConfig::gsplit_dns_enabled) {
+    dns_init();
+    open();
+  }
 
   return 0;
 }
@@ -244,7 +248,6 @@ void
 DNSEntry::init(const char *x, int len, int qtype_arg,
                Continuation * acont, HostEnt ** wait, DNSHandler * adnsH, int dns_lookup_timeout)
 {
-  (void) adnsH;
   qtype = qtype_arg;
   submit_time = ink_get_hrtime();
   action = acont;
@@ -252,8 +255,10 @@ DNSEntry::init(const char *x, int len, i
   submit_thread = acont->mutex->thread_holding;
 
 #ifdef SPLIT_DNS
-  dnsH = SplitDNSConfig::gsplit_dns_enabled && adnsH ? adnsH : dnsProcessor.handler;
+  dnsH = SplitDNSConfig::gsplit_dns_enabled ? adnsH : dnsProcessor.handler;
+  ink_release_assert(dnsH); // TODO: Should probably remove this at some point?
 #else
+  INK_NOWARN(adnsH);
   dnsH = dnsProcessor.handler;
 #endif // SPLIT_DNS
 
@@ -429,12 +434,7 @@ int
 DNSHandler::startEvent_sdns(int event, Event * e)
 {
   NOWARN_UNUSED(event);
-  //
-  // If this is for the default server, get it
-  //
-
-  //added by YTS Team, yamsat
-  Debug("dns", "DNSHandler::startEvent_sdns: on thread%d\n", e->ethread->id);
+  Debug("dns", "DNSHandler::startEvent_sdns: on thread %d\n", e->ethread->id);
 
   if (ip == DEFAULT_DOMAIN_NAME_SERVER) {
     // seems that res_init always sets m_res.nscount to at least 1!
@@ -640,24 +640,23 @@ good_rcode(char *buf)
 }
 
 
-//changed by YTS Team, yamsat
 void
 DNSHandler::recv_dns(int event, Event * e)
 {
   NOWARN_UNUSED(event);
-  NetHandler *nh = get_NetHandler(e->ethread);  //added by YTS Team, yamsat
-  DNSConnection *dnsc = NULL;   //added by YTS Team, yamsat
+  DNSConnection *dnsc = NULL;
 
-  while ((dnsc = (DNSConnection *) nh->dnsqueue.dequeue())) {
+  while ((dnsc = (DNSConnection *) triggered.dequeue())) {
     while (1) {
       struct sockaddr_in sa_from;
-      socklen_t sa_length = sizeof(sa_from);
+      socklen_t sa_length = sizeof(sa_from); // TODO: I'm guessing when we support IPv6,this will have to change.
+
       if (!hostent_cache)
         hostent_cache = dnsBufAllocator.alloc();
+
       HostEnt *buf = hostent_cache;
-      int res =
-        socketManager.recvfrom(dnsc->fd, buf->buf, MAX_DNS_PACKET_LEN, 0, (struct sockaddr *) &sa_from, &sa_length);
-      // verify that this response came from the correct server
+      int res = socketManager.recvfrom(dnsc->fd, buf->buf, MAX_DNS_PACKET_LEN, 0, (struct sockaddr *) &sa_from, &sa_length);
+
       if (res == -EAGAIN)
         break;
       if (res <= 0) {
@@ -668,6 +667,8 @@ DNSHandler::recv_dns(int event, Event * 
           failover();
         break;
       }
+
+      // verify that this response came from the correct server
       if (dnsc->sa.sin_addr.s_addr != sa_from.sin_addr.s_addr) {
         Warning("received DNS response from unexpected named %d.%d.%d.%d", DOT_SEPARATED(sa_from.sin_addr.s_addr));
         continue;
@@ -682,6 +683,7 @@ DNSHandler::recv_dns(int event, Event * 
           received_one(dnsc->num);
           if (ns_down[dnsc->num]) {
             struct sockaddr_in *sa = &m_res->nsaddr_list[dnsc->num].sin;
+
             Warning("connection to DNS server %d.%d.%d.%d restored", DOT_SEPARATED(sa->sin_addr.s_addr));
             ns_down[dnsc->num] = 0;
           }
@@ -697,11 +699,12 @@ DNSHandler::recv_dns(int event, Event * 
           }
         }
       }
+
       if (dns_process(this, buf, res)) {
         if (dnsc->num == name_server)
           received_one(name_server);
       }
-    }                           /* end of while(1) */
+    }
   }
 }
 
@@ -875,7 +878,7 @@ write_dns_event(DNSHandler * h, DNSEntry
 
   uint16 i = h->get_query_id();
   ((HEADER *) (buffer))->id = htons(i);
-  if(e->id[dns_retries - e->retries] >= 0) {
+  if (e->id[dns_retries - e->retries] >= 0) {
     //clear previous id in case named was switched or domain was expanded
     h->release_query_id(e->id[dns_retries - e->retries]);
   }
@@ -1591,15 +1594,14 @@ struct DNSRegressionContinuation: public
   {
     (void) event;
     if (event == DNS_EVENT_LOOKUP) {
-      if (he)
-        ++found;
-      if (he)
-      {
+      if (he) {
         struct in_addr in;
-          in.s_addr = *(unsigned int *) he->ent.h_addr_list[0];
-          rprintf(test, "host %s [%s] = %s\n", hostnames[i - 1], he->ent.h_name, inet_ntoa(in));
-      } else
-          rprintf(test, "host %s not found\n", hostnames[i - 1]);
+        ++found;
+        in.s_addr = *(unsigned int *) he->ent.h_addr_list[0];
+        rprintf(test, "host %s [%s] = %s\n", hostnames[i - 1], he->ent.h_name, inet_ntoa(in));
+      } else {
+        rprintf(test, "host %s not found\n", hostnames[i - 1]);
+      }
     }
     if (i < hosts) {
       dnsProcessor.gethostbyname(this, hostnames[i]);
@@ -1615,8 +1617,8 @@ struct DNSRegressionContinuation: public
   }
 
   DNSRegressionContinuation(int ahosts, int atofind, const char **ahostnames, RegressionTest * t, int atype, int *astatus)
-:  Continuation(new_ProxyMutex()), hosts(ahosts), hostnames(ahostnames), type(atype),
-    status(astatus), found(0), tofind(atofind), i(0), test(t) {
+   :  Continuation(new_ProxyMutex()), hosts(ahosts), hostnames(ahostnames), type(atype),
+      status(astatus), found(0), tofind(atofind), i(0), test(t) {
     SET_HANDLER((DNSRegContHandler) & DNSRegressionContinuation::mainEvent);
   }
 };

Modified: trafficserver/traffic/trunk/iocore/dns/DNSConnection.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/dns/DNSConnection.cc?rev=1036479&r1=1036478&r2=1036479&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/dns/DNSConnection.cc (original)
+++ trafficserver/traffic/trunk/iocore/dns/DNSConnection.cc Thu Nov 18 15:12:31 2010
@@ -31,6 +31,7 @@
 #include "ink_unused.h" /* MAGIC_EDITING_TAG */
 #include "P_DNS.h"
 #include "P_DNSConnection.h"
+#include "P_DNSProcessor.h"
 
 #define SET_TCP_NO_DELAY
 #define SET_NO_LINGER
@@ -47,7 +48,7 @@
 //
 
 DNSConnection::DNSConnection():
-  fd(NO_FD), num(0), generator((uint32)((uintptr_t)time(NULL) ^ (uintptr_t) this))
+  fd(NO_FD), num(0), generator((uint32)((uintptr_t)time(NULL) ^ (uintptr_t) this)), handler(NULL)
 {
   memset(&sa, 0, sizeof(struct sockaddr_in));
 }
@@ -71,6 +72,12 @@ DNSConnection::close()
   }
 }
 
+void
+DNSConnection::trigger()
+{
+  handler->triggered.enqueue(this);
+}
+
 int
 DNSConnection::connect(unsigned int ip, int port,
                        bool non_blocking_connect, bool use_tcp, bool non_blocking, bool bind_random_port)

Modified: trafficserver/traffic/trunk/iocore/dns/P_DNSConnection.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/dns/P_DNSConnection.h?rev=1036479&r1=1036478&r2=1036479&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/dns/P_DNSConnection.h (original)
+++ trafficserver/traffic/trunk/iocore/dns/P_DNSConnection.h Thu Nov 18 15:12:31 2010
@@ -55,6 +55,7 @@
 //
 // Connection
 //
+struct DNSHandler;
 
 struct DNSConnection
 {
@@ -64,12 +65,13 @@ struct DNSConnection
   LINK(DNSConnection, link);
   EventIO eio;
   InkRand generator;
+  DNSHandler* handler;
 
   int connect(unsigned int ip, int port,
               bool non_blocking_connect = NON_BLOCKING_CONNECT,
               bool use_tcp = CONNECT_WITH_TCP, bool non_blocking = NON_BLOCKING, bool bind_random_port = BIND_ANY_PORT);
-
-  int close();                  // 0 on success, -errno on failure
+  int close();
+  void trigger();
 
   virtual ~DNSConnection();
   DNSConnection();

Modified: trafficserver/traffic/trunk/iocore/dns/P_DNSProcessor.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/dns/P_DNSProcessor.h?rev=1036479&r1=1036478&r2=1036479&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/dns/P_DNSProcessor.h (original)
+++ trafficserver/traffic/trunk/iocore/dns/P_DNSProcessor.h Thu Nov 18 15:12:31 2010
@@ -219,6 +219,7 @@ struct DNSHandler: public Continuation
   DNSConnection con[MAX_NAMED];
   int options;
   Queue<DNSEntry> entries;
+  Queue<DNSConnection> triggered;
   int in_flight;
   int name_server;
   int in_write_dns;
@@ -300,12 +301,8 @@ struct DNSHandler: public Continuation
 
 
 TS_INLINE DNSHandler::DNSHandler()
- :Continuation(NULL),
-  ip(0),
-  port(0),
-  n_con(0),
-  options(0),
-  in_flight(0), name_server(0), in_write_dns(0), hostent_cache(0), last_primary_retry(0), last_primary_reopen(0),
+ : Continuation(NULL), ip(0), port(0), n_con(0), options(0), in_flight(0), name_server(0), in_write_dns(0),
+  hostent_cache(0), last_primary_retry(0), last_primary_reopen(0),
   m_res(0), txn_lookup_timeout(0), generator((uint32)((uintptr_t)time(NULL) ^ (uintptr_t)this))
 {
   for (int i = 0; i < MAX_NAMED; i++) {
@@ -314,6 +311,7 @@ TS_INLINE DNSHandler::DNSHandler()
     failover_soon_number[i] = 0;
     crossed_failover_number[i] = 0;
     ns_down[i] = 1;
+    con[i].handler = this;
   }
   memset(&qid_in_flight, 0, sizeof(qid_in_flight));  
   SET_HANDLER(&DNSHandler::startEvent);

Modified: trafficserver/traffic/trunk/iocore/dns/SplitDNS.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/dns/SplitDNS.cc?rev=1036479&r1=1036478&r2=1036479&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/dns/SplitDNS.cc (original)
+++ trafficserver/traffic/trunk/iocore/dns/SplitDNS.cc Thu Nov 18 15:12:31 2010
@@ -238,6 +238,7 @@ SplitDNS::getDNSRecord(char *hostname)
   char *pInHost = hostname;
   size_t remaining_str_size = sizeof szHostName;
 
+  Debug("splitdns", "Called SplitDNS::getDNSRecord(%s)", hostname);
   if (0 < m_def_domain_len) {
     if (0 == strchr(hostname, '.')) {
       int hlen = strlen(hostname) + m_def_domain_len;
@@ -266,9 +267,8 @@ SplitDNS::getDNSRecord(char *hostname)
     Warning("Failed to match a valid DNS server!");
     ink_assert(!"Failed to match a valid DNS server");
   } else if (DNS_SRVR_DEFAULT == res.r) {
-    Warning("Failed to match a valid DNS server! Using defaults ...");
+    Debug("splitdns", "Failed to match a valid DNS server! Using defaults ...");
     return (void *) &(res.m_rec->m_servers);
-    //ink_assert(!"Failed to match a valid DNS server");
   } else if (DNS_SRVR_SPECIFIED == res.r) {
     return (void *) &(res.m_rec->m_servers);
   }
@@ -581,8 +581,8 @@ SplitDNSRecord::Init(matcher_line * line
   ink_res_state res = new __ink_res_state;
 
   memset(res, 0, sizeof(__ink_res_state));
-  if ((-1 == ink_res_init(res, &m_servers.x_server_ip[0], &m_servers.x_dns_server_port[0],
-                          &m_servers.x_def_domain[0], &m_servers.x_domain_srch_list[0], NULL))) {
+  if ((-1 == ink_res_init(res, m_servers.x_server_ip, m_servers.x_dns_server_port,
+                          m_servers.x_def_domain, m_servers.x_domain_srch_list, NULL))) {
     snprintf(errBuf, errBufLen, "Failed to build res record for the servers %u ... on port %d",
              m_servers.x_server_ip[0], m_servers.x_dns_server_port[0]);
     return errBuf;
@@ -597,7 +597,9 @@ SplitDNSRecord::Init(matcher_line * line
   m_servers.x_dnsH = dnsH;
 
   SET_CONTINUATION_HANDLER(dnsH, &DNSHandler::startEvent_sdns);
-  eventProcessor.schedule_imm(dnsH, ET_DNS);
+  EThread *thread = eventProcessor.eventthread[ET_DNS][0];
+
+  thread->schedule_imm(dnsH, ET_DNS);
 
   /* -----------------------------------------------------
      Process any modifiers to the directive, if they exist
@@ -672,7 +674,6 @@ createDefaultServer()
   xfree(resolv_conf);
 
   newRec = NEW(new SplitDNSRecord);
-  printf(" Doing %d\n", res->nscount);
   for (int i = 0; i < res->nscount; i++) {
     // TODO: IPv6 ?
     newRec->m_servers.x_server_ip[i] = res->nsaddr_list[i].sin.sin_addr.s_addr;
@@ -688,7 +689,9 @@ createDefaultServer()
   newRec->m_servers.x_dnsH->port = DOMAIN_SERVICE_PORT;
 
   SET_CONTINUATION_HANDLER(newRec->m_servers.x_dnsH, &DNSHandler::startEvent_sdns);
-  eventProcessor.schedule_imm(newRec->m_servers.x_dnsH, ET_DNS);
+  EThread *thread = eventProcessor.eventthread[ET_DNS][0];
+
+  thread->schedule_imm(newRec->m_servers.x_dnsH, ET_DNS);
 
   newRec->m_dnsSrvr_cnt = res->nscount;
   ink_strncpy(newRec->m_servers.x_def_domain, res->defdname, MAXDNAME);

Modified: trafficserver/traffic/trunk/iocore/net/P_UnixNet.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/net/P_UnixNet.h?rev=1036479&r1=1036478&r2=1036479&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/net/P_UnixNet.h (original)
+++ trafficserver/traffic/trunk/iocore/net/P_UnixNet.h Thu Nov 18 15:12:31 2010
@@ -246,7 +246,6 @@ public:
   QueM(UnixNetVConnection, NetState, read, ready_link) read_ready_list;
   QueM(UnixNetVConnection, NetState, write, ready_link) write_ready_list;
   Que(UnixNetVConnection, link) open_list;
-  Que(DNSConnection, link) dnsqueue;
   ASLLM(UnixNetVConnection, NetState, read, enable_link) read_enable_list;
   ASLLM(UnixNetVConnection, NetState, write, enable_link) write_enable_list;
 
@@ -686,7 +685,8 @@ TS_INLINE int EventIO::refresh(int e) {
     if (n && ne && event_loop) {
       events = ne;
       int retval = port_associate(event_loop->port_fd, PORT_SOURCE_FD, fd, events, this);
-      Debug("iocore_eventio", "[EventIO::refresh] e(%d), ne(%d), events(%d), %d[%s]=port_associate(%d,%d,%d,%d,%p)", e, ne, events, retval, retval<0? strerror(errno) : "ok", event_loop->port_fd, PORT_SOURCE_FD, fd, events, this);
+      Debug("iocore_eventio", "[EventIO::refresh] e(%d), ne(%d), events(%d), %d[%s]=port_associate(%d,%d,%d,%d,%p)",
+            e, ne, events, retval, retval<0? strerror(errno) : "ok", event_loop->port_fd, PORT_SOURCE_FD, fd, events, this);
       return retval;
     }
   }

Modified: trafficserver/traffic/trunk/iocore/net/UnixNet.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/net/UnixNet.cc?rev=1036479&r1=1036478&r2=1036479&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/net/UnixNet.cc (original)
+++ trafficserver/traffic/trunk/iocore/net/UnixNet.cc Thu Nov 18 15:12:31 2010
@@ -55,9 +55,10 @@ struct InactivityCop:public Continuation
       vc_next = (UnixNetVConnection*)vc->link.next;
       if (vc->inactivity_timeout_in && vc->next_inactivity_timeout_at && vc->next_inactivity_timeout_at < now){
         vc->handleEvent(EVENT_IMMEDIATE, e);
-      } else
+      } else {
         if (vc->closed)
           close_UnixNetVConnection(vc, e->ethread);
+      }
       vc = vc_next;
     }
     return 0;
@@ -139,15 +140,15 @@ PollCont::pollEvent(int event, Event *e)
   ptimeout.tv_nsec = 1000000 * (poll_timeout % 1000);
   unsigned nget = 1;
   if((retval = port_getn(pollDescriptor->port_fd,
-			pollDescriptor->Port_Triggered_Events,
-			POLL_DESCRIPTOR_SIZE, &nget, &ptimeout)) < 0) {
+                         pollDescriptor->Port_Triggered_Events,
+                         POLL_DESCRIPTOR_SIZE, &nget, &ptimeout)) < 0) {
     pollDescriptor->result = 0;
     switch(errno) {
     case EINTR:
     case EAGAIN:
     case ETIME:
       if (nget > 0) {
-	pollDescriptor->result = (int)nget;
+        pollDescriptor->result = (int)nget;
       }
       break;
     default:
@@ -158,9 +159,9 @@ PollCont::pollEvent(int event, Event *e)
     pollDescriptor->result = (int)nget;
   }
   NetDebug("iocore_net_poll", "[PollCont::pollEvent] %d[%s]=port_getn(%d,%p,%d,%d,%d),results(%d)",
-	   retval,retval < 0 ? strerror(errno) : "ok",
-	   pollDescriptor->port_fd, pollDescriptor->Port_Triggered_Events,
-	   POLL_DESCRIPTOR_SIZE, nget, poll_timeout, pollDescriptor->result);
+           retval,retval < 0 ? strerror(errno) : "ok",
+           pollDescriptor->port_fd, pollDescriptor->Port_Triggered_Events,
+           POLL_DESCRIPTOR_SIZE, nget, poll_timeout, pollDescriptor->result);
 #else
 #error port me
 #endif
@@ -299,8 +300,7 @@ NetHandler::mainNetEvent(int event, Even
   NET_INCREMENT_DYN_STAT(net_handler_run_stat);
 
   process_enabled_list(this, e->ethread);
-  if (likely(!read_ready_list.empty() || !write_ready_list.empty() ||
-             !read_enable_list.empty() || !write_enable_list.empty()))
+  if (likely(!read_ready_list.empty() || !write_ready_list.empty() || !read_enable_list.empty() || !write_enable_list.empty()))
     poll_timeout = 0; // poll immediately returns -- we have triggered stuff to process right now
   else
     poll_timeout = net_config_poll_timeout;
@@ -321,9 +321,7 @@ NetHandler::mainNetEvent(int event, Even
   struct timespec tv;
   tv.tv_sec = poll_timeout / 1000;
   tv.tv_nsec = 1000000 * (poll_timeout % 1000);
-  pd->result = kevent(pd->kqueue_fd, NULL, 0,
-                      pd->kq_Triggered_Events, POLL_DESCRIPTOR_SIZE,
-                      &tv);
+  pd->result = kevent(pd->kqueue_fd, NULL, 0, pd->kq_Triggered_Events, POLL_DESCRIPTOR_SIZE, &tv);
   NetDebug("iocore_net_main_poll", "[NetHandler::mainNetEvent] kevent(%d,%f), result=%d", pd->kqueue_fd,poll_timeout,pd->result);
 #elif TS_USE_PORT
   int retval;
@@ -331,15 +329,14 @@ NetHandler::mainNetEvent(int event, Even
   ptimeout.tv_sec = poll_timeout / 1000;
   ptimeout.tv_nsec = 1000000 * (poll_timeout % 1000);
   unsigned nget = 1;
-  if((retval = port_getn(pd->port_fd, pd->Port_Triggered_Events,
-			POLL_DESCRIPTOR_SIZE, &nget, &ptimeout)) < 0) {
+  if((retval = port_getn(pd->port_fd, pd->Port_Triggered_Events, POLL_DESCRIPTOR_SIZE, &nget, &ptimeout)) < 0) {
     pd->result = 0;
     switch(errno) {
     case EINTR:
     case EAGAIN:
     case ETIME:
       if (nget > 0) {
-	pd->result = (int)nget;
+        pd->result = (int)nget;
       }
       break;
     default:
@@ -350,9 +347,10 @@ NetHandler::mainNetEvent(int event, Even
     pd->result = (int)nget;
   }
   NetDebug("iocore_net_main_poll", "[NetHandler::mainNetEvent] %d[%s]=port_getn(%d,%p,%d,%d,%d),results(%d)",
-	   retval,retval < 0 ? strerror(errno) : "ok",
-	   pd->port_fd, pd->Port_Triggered_Events,
-	   POLL_DESCRIPTOR_SIZE, nget, poll_timeout, pd->result);
+           retval,retval < 0 ? strerror(errno) : "ok",
+           pd->port_fd, pd->Port_Triggered_Events,
+           POLL_DESCRIPTOR_SIZE, nget, poll_timeout, pd->result);
+
 #else
 #error port me
 #endif
@@ -390,13 +388,12 @@ NetHandler::mainNetEvent(int event, Even
       }
     } else if (epd->type == EVENTIO_DNS_CONNECTION) {
       if (epd->data.dnscon != NULL) {
-        dnsqueue.enqueue(epd->data.dnscon);
+        epd->data.dnscon->trigger(); // Make sure the DNSHandler for this con knows we triggered
 #if defined(USE_EDGE_TRIGGER)
         epd->refresh(EVENTIO_READ);
 #endif
       }
-    }
-    else if (epd->type == EVENTIO_ASYNC_SIGNAL)
+    } else if (epd->type == EVENTIO_ASYNC_SIGNAL)
       net_signal_hook_callback(trigger_event->ethread);
     ev_next_event(pd,x);
   }

Modified: trafficserver/traffic/trunk/libinktomi++/ink_res_init.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_res_init.cc?rev=1036479&r1=1036478&r2=1036479&view=diff
==============================================================================
--- trafficserver/traffic/trunk/libinktomi++/ink_res_init.cc (original)
+++ trafficserver/traffic/trunk/libinktomi++/ink_res_init.cc Thu Nov 18 15:12:31 2010
@@ -728,29 +728,18 @@ ink_res_init(ink_res_state statp, const 
         continue;
       }
     }
-    if (nserv > 0)
-      statp->nscount = nserv;
 #ifdef RESOLVSORT
     statp->nsort = nsort;
 #endif
     (void) fclose(fp);
   }
 
-/*
- * Last chance to get a nameserver.  This should not normally
- * be necessary
- */
-#ifdef NO_RESOLV_CONF
-  if(nserv == 0)
-    nserv = get_nameservers(statp);
-#endif
+  if (nserv > 0)
+    statp->nscount = nserv;
 
-  if (statp->defdname[0] == 0 &&
-      gethostname(buf, sizeof(statp->defdname) - 1) == 0 &&
-      (cp = strchr(buf, '.')) != NULL)
+  if (statp->defdname[0] == 0 && gethostname(buf, sizeof(statp->defdname) - 1) == 0 && (cp = strchr(buf, '.')) != NULL)
     strcpy(statp->defdname, cp + 1);
 
-
   /* find components of local domain that might be searched */
   if (havesearch == 0) {
     pp = statp->dnsrch;

Modified: trafficserver/traffic/trunk/proxy/Main.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/Main.cc?rev=1036479&r1=1036478&r2=1036479&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/Main.cc (original)
+++ trafficserver/traffic/trunk/proxy/Main.cc Thu Nov 18 15:12:31 2010
@@ -1918,8 +1918,7 @@ main(int argc, char **argv)
     initIPAllow();
     initCacheInspectorAllow();
     ParentConfig::startup();
-#ifndef INK_NO_HOSTDB
-    // fixme
+#ifdef SPLIT_DNS
     SplitDNSConfig::startup();
 #endif
 #endif