summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-07-21 16:20:00 +0000
committerGerrit Code Review <review@openstack.org>2016-07-21 16:20:00 +0000
commit2f7e5b6e61bdfb753b807a32915d5d2b00c8cc9a (patch)
tree020eecc7e592dd5d223efd38f322bc11e51812cd
parentb604bc9fb64e5ae83076add7fb6f61b29211b857 (diff)
parentb7107e2e62889e3f549b3ff56986616664b5d101 (diff)
downloadgear-2f7e5b6e61bdfb753b807a32915d5d2b00c8cc9a.tar.gz
Merge "Allow setting a timeout for Client.waitForServer()"0.7.0
-rw-r--r--gear/__init__.py15
-rw-r--r--gear/tests/test_gear.py6
2 files changed, 20 insertions, 1 deletions
diff --git a/gear/__init__.py b/gear/__init__.py
index fa6b872..fecce32 100644
--- a/gear/__init__.py
+++ b/gear/__init__.py
@@ -1199,15 +1199,28 @@ class BaseClient(BaseClientServer):
finally:
self.connections_condition.release()
- def waitForServer(self):
+ def _checkTimeout(self, start_time, timeout):
+ if time.time() - start_time > timeout:
+ raise TimeoutError()
+
+ def waitForServer(self, timeout=None):
"""Wait for at least one server to be connected.
Block until at least one gearman server is connected.
+
+ :arg numeric timeout: Number of seconds to wait for a connection.
+ If None, wait forever (default: no timeout).
+ :raises TimeoutError: If the timeout is reached before any server
+ connects.
"""
+
connected = False
+ start_time = time.time()
while self.running:
self.connections_condition.acquire()
while self.running and not self.active_connections:
+ if timeout is not None:
+ self._checkTimeout(start_time, timeout)
self.log.debug("Waiting for at least one active connection")
self.connections_condition.wait(timeout=1)
if self.active_connections:
diff --git a/gear/tests/test_gear.py b/gear/tests/test_gear.py
index 3791295..546d4c4 100644
--- a/gear/tests/test_gear.py
+++ b/gear/tests/test_gear.py
@@ -232,6 +232,12 @@ class TestServerConnection(tests.BaseTestCase):
class TestClient(tests.BaseTestCase):
+ def test_wait_for_server_timeout(self):
+ client = gear.Client('client')
+ client.addServer('127.0.0.1', 0)
+ self.assertRaises(gear.TimeoutError,
+ client.waitForServer, timeout=1)
+
def test_handleStatusRes_1(self):
client = gear.Client()