From: Bert Hubert Date: Thu, 1 Sep 2005 18:35:10 +0000 (+0000) Subject: make recursor quiet by default X-Git-Tag: pdns-2.9.19~67 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=efa1eb450fdcb7c82bd89dbead0e25882f7f45b3;p=thirdparty%2Fpdns.git make recursor quiet by default update to 2.9.19-svn version work on dnsreplay git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@464 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/configure.in b/configure.in index a2589fd27e..d13f7e2d6b 100644 --- a/configure.in +++ b/configure.in @@ -1,6 +1,6 @@ dnl intro AC_INIT(pdns/receiver.cc) -AM_INIT_AUTOMAKE(pdns, 2.9.18) +AM_INIT_AUTOMAKE(pdns, 2.9.19-svn) AC_CANONICAL_HOST AM_CONFIG_HEADER(config.h) AC_C_BIGENDIAN diff --git a/pdns/dnsreplay-mindex.cc b/pdns/dnsreplay-mindex.cc index bb523fe8f1..426a7c85b1 100644 --- a/pdns/dnsreplay-mindex.cc +++ b/pdns/dnsreplay-mindex.cc @@ -30,6 +30,7 @@ What to do with timeouts. We keep around at most 65536 outstanding answers. #include #include #include +#include #include #include #include @@ -100,14 +101,12 @@ typedef multi_index_container< > > qids_t; - -//typedef map > qids_t; qids_t qids; -//typedef map id2qi_t; -//id2qi_t id2qi; -unsigned int s_questions, s_answers, s_wetimedout, s_perfect, s_mostly, s_origtimedout; +bool g_throttled; + +unsigned int s_questions, s_origanswers, s_weanswers, s_wetimedout, s_perfect, s_mostly, s_origtimedout; unsigned int s_wenever, s_orignever; unsigned int s_webetter, s_origbetter, s_norecursionavailable; unsigned int s_weunmatched, s_origunmatched; @@ -127,23 +126,34 @@ double DiffTime(const struct timeval& first, const struct timeval& second) } -pair WeOrigSlowQueriesDelta() +void WeOrigSlowQueriesDelta(int& weOutstanding, int& origOutstanding, int& weSlow, int& origSlow) { struct timeval now; gettimeofday(&now, 0); - pair ret=make_pair(0,0); + weOutstanding=origOutstanding=weSlow=origSlow=0; + for(qids_t::iterator i=qids.begin(); i!=qids.end(); ++i) { double dt=DiffTime(i->d_resentTime, now); - if(dt > 2.0) { + if(dt < 2.0) { + if(i->d_newRcode == -1) + weOutstanding++; + if(i->d_origRcode == -1) + origOutstanding++; + } + else { if(i->d_newRcode == -1) { + weSlow++; if(!i->d_newlate) { - // i->d_newlate=true; // error + QuestionData qd=*i; + qd.d_newlate=true; + qids.replace(i, qd); + s_wetimedout++; } - ret.first++; } if(i->d_origRcode == -1) { + origSlow++; if(!i->d_origlate) { QuestionData qd=*i; qd.d_origlate=true; @@ -151,11 +161,9 @@ pair WeOrigSlowQueriesDelta() s_origtimedout++; } - ret.second++; } } } - return ret; } void compactAnswerSet(MOADNSParser::answers_t orig, set& compacted) @@ -242,6 +250,7 @@ try while(s_socket->recvFromAsync(packet, remote)) { try { + s_weanswers++; MOADNSParser mdp(packet.c_str(), packet.length()); if(!mdp.d_header.qr) { cout<<"Received a question from our reference nameserver!"< slows=WeOrigSlowQueriesDelta(); + static timeval last; + + struct timeval now; + gettimeofday(&now, 0); + + if(DiffTime(last, now) < 0.3) + return; + + int weWaitingFor, origWaitingFor, weSlow, origSlow; + WeOrigSlowQueriesDelta(weWaitingFor, origWaitingFor, weSlow, origSlow); - int waitingFor=qids.size() - slows.first - slows.second; - if(waitingFor > 1000) { - cerr<<"Too many questions outstanding, waiting 0.25 seconds"< 1000) { + cerr<<"Too many questions ("<sendTo(string(pr.d_payload, pr.d_payload + pr.d_len), remote); } else { - s_answers++; + s_origanswers++; if(qids.count(qi)) { qids_t::const_iterator i=qids.find(qi); @@ -458,13 +503,18 @@ try unsigned int once=0; for(;;) { - if(!((once++)%4000)) + if(!((once++)%100)) houseKeeping(); - if(!pr.getUDPPacket()) - break; + if(!g_throttled) { + if(!pr.getUDPPacket()) + break; + + sendPacketFromPR(pr, remote); + } + else + usleep(1000); // move to 'swift poll' - sendPacketFromPR(pr, remote); receiveFromReference(); } } diff --git a/pdns/pdns_recursor.cc b/pdns/pdns_recursor.cc index 0935623d83..f7a744bae2 100644 --- a/pdns/pdns_recursor.cc +++ b/pdns/pdns_recursor.cc @@ -503,7 +503,7 @@ int main(int argc, char **argv) arg().set("chroot","switch to chroot jail")=""; arg().set("setgid","If set, change group id to this gid for more security")=""; arg().set("setuid","If set, change user id to this uid for more security")=""; - arg().set("quiet","Suppress logging of questions and answers")="off"; + arg().set("quiet","Suppress logging of questions and answers")="true"; arg().set("config-dir","Location of configuration directory (recursor.conf)")=SYSCONFDIR; arg().set("socket-dir","Where the controlsocket will live")=LOCALSTATEDIR; arg().set("delegation-only","Which domains we only accept delegations from")="";