Revision cb462b06 lib/luxi.py
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