summaryrefslogtreecommitdiff
path: root/kafka/conn.py
diff options
context:
space:
mode:
authorDana Powers <dana.powers@gmail.com>2016-04-04 16:27:18 -0700
committerDana Powers <dana.powers@gmail.com>2016-04-07 08:27:53 -0700
commit5ed59a95e7acbadaaa9a633a4d0e61c043a1fed9 (patch)
tree7f48d2b71c2f7a9c02fc529b3b97498941061682 /kafka/conn.py
parent71b0d05c161442f2e66f1608d2a2e9eb2bd9c305 (diff)
downloadkafka-python-5ed59a95e7acbadaaa9a633a4d0e61c043a1fed9.tar.gz
Simplify connect logic further
Diffstat (limited to 'kafka/conn.py')
-rw-r--r--kafka/conn.py29
1 files changed, 14 insertions, 15 deletions
diff --git a/kafka/conn.py b/kafka/conn.py
index 014b340..44912a5 100644
--- a/kafka/conn.py
+++ b/kafka/conn.py
@@ -77,6 +77,7 @@ class BrokerConnection(object):
"""Attempt to connect and return ConnectionState"""
if self.state is ConnectionStates.DISCONNECTED:
self.close()
+ log.debug('%s: creating new socket', str(self))
self._sock = socket.socket(self.afi, socket.SOCK_STREAM)
if self.config['receive_buffer_bytes'] is not None:
self._sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF,
@@ -85,23 +86,9 @@ class BrokerConnection(object):
self._sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF,
self.config['send_buffer_bytes'])
self._sock.setblocking(False)
- try:
- ret = self._sock.connect_ex((self.host, self.port))
- except socket.error as ret:
- pass
+ self.state = ConnectionStates.CONNECTING
self.last_attempt = time.time()
- if not ret or ret == errno.EISCONN:
- self.state = ConnectionStates.CONNECTED
- # WSAEINVAL == 10022, but errno.WSAEINVAL is not available on non-win systems
- elif ret in (errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK, 10022):
- self.state = ConnectionStates.CONNECTING
- else:
- log.error('Connect attempt to %s returned error %s.'
- ' Disconnecting.', self, ret)
- self.close()
- self.last_failure = time.time()
-
if self.state is ConnectionStates.CONNECTING:
# in non-blocking mode, use repeated calls to socket.connect_ex
# to check connection status
@@ -110,18 +97,30 @@ class BrokerConnection(object):
ret = self._sock.connect_ex((self.host, self.port))
except socket.error as ret:
pass
+
+ # Connection succeeded
if not ret or ret == errno.EISCONN:
+ log.debug('%s: established TCP connection', str(self))
self.state = ConnectionStates.CONNECTED
+
+ # Connection failed
+ # WSAEINVAL == 10022, but errno.WSAEINVAL is not available on non-win systems
elif ret not in (errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK, 10022):
log.error('Connect attempt to %s returned error %s.'
' Disconnecting.', self, ret)
self.close()
self.last_failure = time.time()
+
+ # Connection timedout
elif time.time() > request_timeout + self.last_attempt:
log.error('Connection attempt to %s timed out', self)
self.close() # error=TimeoutError ?
self.last_failure = time.time()
+ # Needs retry
+ else:
+ pass
+
return self.state
def blacked_out(self):