Skip to content

Commit 67ea5d4

Browse files
committed
make connection timeout infinite by default
removes the need for eventlet and gevent checking for timeouts PYTHON-600
1 parent 1347519 commit 67ea5d4

3 files changed

Lines changed: 4 additions & 29 deletions

File tree

cassandra/connection.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,7 @@ def _connect_socket(self):
345345
self._socket = self._ssl_impl.wrap_socket(self._socket, **self.ssl_options)
346346
self._socket.settimeout(self.connect_timeout)
347347
self._socket.connect(sockaddr)
348+
self._socket.settimeout(None)
348349
if self._check_hostname:
349350
ssl.match_hostname(self._socket.getpeercert(), self.host)
350351
sockerr = None

cassandra/io/eventletreactor.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,10 @@
1616
# Originally derived from MagnetoDB source:
1717
# https://github.com/stackforge/magnetodb/blob/2015.1.0b1/magnetodb/common/cassandra/io/eventletreactor.py
1818

19-
from errno import EALREADY, EINPROGRESS, EWOULDBLOCK, EINVAL
2019
import eventlet
2120
from eventlet.green import socket
22-
import ssl
2321
from eventlet.queue import Queue
2422
import logging
25-
import os
2623
from threading import Event
2724
import time
2825

@@ -34,15 +31,6 @@
3431
log = logging.getLogger(__name__)
3532

3633

37-
def is_timeout(err):
38-
return (
39-
err in (EINPROGRESS, EALREADY, EWOULDBLOCK) or
40-
(err == EINVAL and os.name in ('nt', 'ce')) or
41-
(isinstance(err, ssl.SSLError) and err.args[0] == 'timed out') or
42-
isinstance(err, socket.timeout)
43-
)
44-
45-
4634
class EventletConnection(Connection):
4735
"""
4836
An implementation of :class:`.Connection` that utilizes ``eventlet``.
@@ -145,8 +133,6 @@ def handle_read(self):
145133
buf = self._socket.recv(self.in_buffer_size)
146134
self._iobuf.write(buf)
147135
except socket.error as err:
148-
if is_timeout(err):
149-
continue
150136
log.debug("Exception during socket recv for %s: %s",
151137
self, err)
152138
self.defunct(err)

cassandra/io/geventreactor.py

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,16 @@
1818
import gevent.ssl
1919

2020
import logging
21-
import os
2221
import time
2322

2423
from six.moves import range
2524

26-
from errno import EINVAL
27-
2825
from cassandra.connection import Connection, ConnectionShutdown, Timer, TimerManager
2926

3027

3128
log = logging.getLogger(__name__)
3229

3330

34-
def is_timeout(err):
35-
return (
36-
(err == EINVAL and os.name in ('nt', 'ce')) or
37-
isinstance(err, socket.timeout)
38-
)
39-
40-
4131
class GeventConnection(Connection):
4232
"""
4333
An implementation of :class:`.Connection` that utilizes ``gevent``.
@@ -131,11 +121,9 @@ def handle_read(self):
131121
buf = self._socket.recv(self.in_buffer_size)
132122
self._iobuf.write(buf)
133123
except socket.error as err:
134-
if not is_timeout(err):
135-
log.debug("Exception in read for %s: %s", self, err)
136-
self.defunct(err)
137-
return # leave the read loop
138-
continue
124+
log.debug("Exception in read for %s: %s", self, err)
125+
self.defunct(err)
126+
return # leave the read loop
139127

140128
if self._iobuf.tell():
141129
self.process_io_buffer()

0 commit comments

Comments
 (0)