summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2006-12-28 21:29:37 +0000
committerNick Mathewson <nickm@torproject.org>2006-12-28 21:29:37 +0000
commit0bbbf98be4eff74218a010a24f5cafe4da7045b6 (patch)
treebb00d6004cdaae2c0e640cbd562ef12df84217bb
parent3996fd1d9dd3e4815a898aa0b9154ea0fab4ec3d (diff)
downloadtor-0bbbf98be4eff74218a010a24f5cafe4da7045b6.tar.gz
tor-0bbbf98be4eff74218a010a24f5cafe4da7045b6.zip
r11727@Kushana: nickm | 2006-12-28 16:27:17 -0500
If we only have a single nameserver, raise the threshold to decide that the nameserver is dead. (Another fumbling attempt to do something about bug 326.) svn:r9203
-rw-r--r--ChangeLog4
-rw-r--r--doc/TODO11
-rw-r--r--src/or/dns.c14
3 files changed, 19 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index ef96db2dbd..28eaeec44f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -122,7 +122,9 @@ Changes in version 0.1.2.5-xxxx - 200?-??-??
- Removed the supposedly misleading error message mentioned in Bug #294.
Patch from Matt Edman.
- Stop warning when a single nameserver fails: only warn when _all_ of
- our nameservers have failed. (Part of a solution to bug #326.)
+ our nameservers have failed. (Bug #326.)
+ - When we only have one nameserver, raise the threshold for deciding that
+ the nameserver is dead. (Also bug #326)
o Controller features:
- Have GETINFO dir/status/* work on hosts with DirPort disabled.
diff --git a/doc/TODO b/doc/TODO
index aa08028af5..8ea356ee31 100644
--- a/doc/TODO
+++ b/doc/TODO
@@ -113,18 +113,17 @@ N - DNS improvements
o Bug 363: Warn and die if we can't find a nameserver and we're running a
server; don't fall back to 127.0.0.1.
o Re-check dns when we change IP addresses, rather than every 12 hours
- . Bug 326: Give fewer error messages from nameservers.
+ o Bug 326: Give fewer error messages from nameservers.
o Only warn when _all_ nameservers are down; otherwise info.
- - Increase timeout; what's industry standard?
- - Alternatively, raise timeout when nameserver dies but comes back
+ D Increase timeout; what's industry standard?
+ D Alternatively, raise timeout when nameserver dies but comes back
quickly?
- - Don't believe that our sole nameserver is dead? or, not until more
+ o Don't believe that our sole nameserver is dead? or, not until more
failures than it would take to think one of several nameservers was
dead?
- - easy: adjust global_max_nameserver_timeout / global_timeout.
X Possibly, don't warn until second retry of a nameserver gets no
answer?
- - warn if all of your nameservers go down and stay down for like
+ X warn if all of your nameservers go down and stay down for like
5 minutes.
R o Take out the '5 second' timeout from the socks detach schedule.
diff --git a/src/or/dns.c b/src/or/dns.c
index ca1d60c5bd..212068d4bc 100644
--- a/src/or/dns.c
+++ b/src/or/dns.c
@@ -216,7 +216,7 @@ dns_reset(void)
resolv_conf_mtime = 0;
} else {
if (configure_nameservers(0) < 0)
- /* XXXX */
+ /* XXXX012 */
return;
}
#else
@@ -651,7 +651,7 @@ dns_resolve(edge_connection_t *exitconn, or_circuit_t *oncirc)
log_debug(LD_EXIT,"Connection (fd %d) found cached error for %s",
exitconn->_base.s,
escaped_safe_str(exitconn->_base.address));
- /* XXXX send back indication of failure for connect case? -NM*/
+ /* XXXX012 send back indication of failure for connect case? -NM*/
if (is_resolve)
send_resolved_cell(exitconn, oncirc, RESOLVED_TYPE_ERROR);
circ = circuit_get_by_edge_conn(exitconn);
@@ -853,7 +853,7 @@ add_answer_to_cache(const char *address, int is_reverse, uint32_t addr,
if (outcome == DNS_RESOLVE_FAILED_TRANSIENT)
return;
- /* XXX This is dumb, but it seems to workaround a bug I can't find. We
+ /* XXXX012 This is dumb, but it seems to workaround a bug I can't find. We
* should nail this so we can cache reverse DNS answers. -NM */
if (is_reverse)
return;
@@ -1525,6 +1525,14 @@ configure_nameservers(int force)
}
#endif
+ if (evdns_count_nameservers() == 1) {
+ evdns_set_option("max-timeouts:", "16", DNS_OPTIONS_ALL);
+ evdns_set_option("timeout:", "10", DNS_OPTIONS_ALL);
+ } else {
+ evdns_set_option("max-timeouts:", "3", DNS_OPTIONS_ALL);
+ evdns_set_option("timeout:", "5", DNS_OPTIONS_ALL);
+ }
+
dns_servers_relaunch_checks();
nameservers_configured = 1;