Add ParseCpuMask() utility function
[ganeti-local] / lib / http / client.py
index ba27d1a..697199d 100644 (file)
@@ -37,6 +37,7 @@ import threading
 
 from ganeti import workerpool
 from ganeti import http
+from ganeti import utils
 
 
 HTTP_CLIENT_THREADS = 10
@@ -44,7 +45,7 @@ HTTP_CLIENT_THREADS = 10
 
 class HttpClientRequest(object):
   def __init__(self, host, port, method, path, headers=None, post_data=None,
-               ssl_params=None, ssl_verify_peer=False):
+               ssl_params=None, ssl_verify_peer=False, read_timeout=None):
     """Describes an HTTP request.
 
     @type host: string
@@ -64,6 +65,9 @@ class HttpClientRequest(object):
     @type ssl_verify_peer: bool
     @param ssl_verify_peer: Whether to compare our certificate with
         server's certificate
+    @type read_timeout: int
+    @param read_timeout: if passed, it will be used as the read
+        timeout while reading the response from the server
 
     """
     if post_data is not None:
@@ -81,6 +85,7 @@ class HttpClientRequest(object):
     self.path = path
     self.headers = headers
     self.post_data = post_data
+    self.read_timeout = read_timeout
 
     self.success = None
     self.error = None
@@ -249,8 +254,8 @@ class HttpClientRequestExecutor(http.HttpBase):
 
     if not connected:
       # Wait for connection
-      event = http.WaitForSocketCondition(self.sock, select.POLLOUT,
-                                          self.CONNECT_TIMEOUT)
+      event = utils.WaitForFdCondition(self.sock, select.POLLOUT,
+                                       self.CONNECT_TIMEOUT)
       if event is None:
         raise http.HttpError("Timeout while connecting to server")
 
@@ -314,10 +319,14 @@ class HttpClientRequestExecutor(http.HttpBase):
     """
     response_msg = http.HttpMessage()
 
+    if self.request.read_timeout is None:
+      timeout = self.READ_TIMEOUT
+    else:
+      timeout = self.request.read_timeout
+
     try:
       response_msg_reader = \
-        _HttpServerToClientMessageReader(self.sock, response_msg,
-                                         self.READ_TIMEOUT)
+        _HttpServerToClientMessageReader(self.sock, response_msg, timeout)
     except http.HttpSocketTimeout:
       raise http.HttpError("Timeout while reading response")
     except socket.error, err: