]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
pytests/kresd: improve backoff when establishing initial kresd connection
authorTomas Krizek <tomas.krizek@nic.cz>
Fri, 4 Jan 2019 14:08:04 +0000 (15:08 +0100)
committerTomas Krizek <tomas.krizek@nic.cz>
Tue, 8 Jan 2019 15:48:49 +0000 (16:48 +0100)
tests/pytests/kresd.py

index aa0dcfac9a8cb06e2f4d5d34dda01ea00bc3200f..0963f1ef33982f7d0182064f12e0ced0c258142c 100644 (file)
@@ -136,14 +136,22 @@ class Kresd(ContextDecorator):
             alive &= utils.try_ping_alive(self.ip6_tls_socket(), close=True, msgid=msgid + 3)
         return alive
 
-    def _wait_for_tcp_port(self, delay=0.1, max_attempts=50):
+    def _wait_for_tcp_port(self, max_delay=10, delay_step=0.2):
         family = socket.AF_INET if self.ip else socket.AF_INET6
-        for _ in range(max_attempts):
+        i = 0
+        end_time = time.time() + max_delay
+
+        while time.time() < end_time:
+            i += 1
+
+            # use exponential backoff algorhitm to choose next delay
+            rand_delay = random.randrange(0, i)
+            time.sleep(rand_delay * delay_step)
+
             try:
                 sock, dest = self.stream_socket(family, timeout=5)
                 sock.connect(dest)
             except ConnectionRefusedError:
-                time.sleep(delay)
                 continue
             else:
                 return utils.try_ping_alive(sock, close=True, msgid=10000)