Revision cb462b06

b/lib/luxi.py
37 37
from ganeti import serializer
38 38
from ganeti import constants
39 39
from ganeti import errors
40
from ganeti import utils
40 41

  
41 42

  
42 43
KEY_METHOD = 'method'
......
156 157

  
157 158
    try:
158 159
      self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
159
      self.socket.settimeout(self._ctimeout)
160

  
161
      # Try to connect
160 162
      try:
161
        self.socket.connect(address)
162
      except socket.timeout, err:
163
        raise TimeoutError("Connect timed out: %s" % str(err))
164
      except socket.error, err:
165
        if err.args[0] in (errno.ENOENT, errno.ECONNREFUSED):
166
          raise NoMasterError(address)
167
        raise
163
        utils.Retry(self._Connect, 1.0, self._ctimeout,
164
                    args=(self.socket, address, self._ctimeout))
165
      except utils.RetryTimeout:
166
        raise TimeoutError("Connect timed out")
167

  
168 168
      self.socket.settimeout(self._rwtimeout)
169 169
    except (socket.error, NoMasterError):
170 170
      if self.socket is not None:
......
172 172
      self.socket = None
173 173
      raise
174 174

  
175
  @staticmethod
176
  def _Connect(sock, address, timeout):
177
    sock.settimeout(timeout)
178
    try:
179
      sock.connect(address)
180
    except socket.timeout, err:
181
      raise TimeoutError("Connect timed out: %s" % str(err))
182
    except socket.error, err:
183
      if err.args[0] in (errno.ENOENT, errno.ECONNREFUSED):
184
        raise NoMasterError(address)
185
      if err.args[0] == errno.EAGAIN:
186
        # Server's socket backlog is full at the moment
187
        raise utils.RetryAgain()
188
      raise
189

  
175 190
  def _CheckSocket(self):
176 191
    """Make sure we are connected.
177 192

  

Also available in: Unified diff