From 61e1a36e740117aeac69ba5d17137a86c9bcd51d Mon Sep 17 00:00:00 2001 From: Zack Cerza Date: Wed, 15 Apr 2015 12:15:44 -0600 Subject: [PATCH] Make Remote.reconnect() retry optionally Signed-off-by: Zack Cerza --- teuthology/orchestra/remote.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/teuthology/orchestra/remote.py b/teuthology/orchestra/remote.py index d1e7bbb6ea..99c212ac82 100644 --- a/teuthology/orchestra/remote.py +++ b/teuthology/orchestra/remote.py @@ -59,13 +59,29 @@ class Remote(object): keep_alive=self.keep_alive) return self.ssh - def reconnect(self): + def reconnect(self, timeout=None): """ Attempts to re-establish connection. Returns True for success; False for failure. """ if self.ssh is not None: self.ssh.close() + if not timeout: + return self._reconnect() + start_time = time.time() + elapsed_time = lambda: time.time() - start_time + while elapsed_time() < timeout: + success = self._reconnect() + if success: + break + default_sleep_val = 30 + # Don't let time_remaining be < 0 + time_remaining = max(0, timeout - elapsed_time()) + sleep_val = min(time_remaining, default_sleep_val) + time.sleep(sleep_val) + return success + + def _reconnect(self): try: self.connect() return self.is_online -- 2.39.5