From 2d4e895096874fafee37ba1fdea7c0fe8529d137 Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@lothar.com>
Date: Tue, 28 Oct 2008 13:36:46 -0700
Subject: [PATCH] iputil.py: avoid a DNS lookup at startup (which may timeout
 tests when run on a partially-offline host) by using 198.41.0.4 instead of
 A.ROOT-SERVERS.NET

---
 src/allmydata/util/iputil.py | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/allmydata/util/iputil.py b/src/allmydata/util/iputil.py
index dcb19c4c..43e73508 100644
--- a/src/allmydata/util/iputil.py
+++ b/src/allmydata/util/iputil.py
@@ -78,7 +78,7 @@ except ImportError:
     increase_rlimits = _increase_rlimits
 
 
-def get_local_addresses_async(target='A.ROOT-SERVERS.NET'):
+def get_local_addresses_async(target="198.41.0.4"): # A.ROOT-SERVERS.NET
     """
     Return a Deferred that fires with a list of IPv4 addresses (as dotted-quad
     strings) that are currently configured on this host, sorted in descending
@@ -120,7 +120,18 @@ def get_local_ip_for(target):
     try:
         target_ipaddr = socket.gethostbyname(target)
     except socket.gaierror:
-        # DNS isn't running
+        # DNS isn't running, or somehow we encountered an error
+
+        # note: if an interface is configured and up, but nothing is
+        # connected to it, gethostbyname("A.ROOT-SERVERS.NET") will take 20
+        # seconds to raise socket.gaierror . This is synchronous and occurs
+        # for each node being started, so users of
+        # test.common.SystemTestMixin (like test_system) will see something
+        # like 120s of delay, which may be enough to hit the default trial
+        # timeouts. For that reason, get_local_addresses_async() was changed
+        # to default to the numerical ip address for A.ROOT-SERVERS.NET, to
+        # avoid this DNS lookup. This also makes node startup fractionally
+        # faster.
         return None
     udpprot = DatagramProtocol()
     port = reactor.listenUDP(0, udpprot)
-- 
2.45.2