forked from datastax/python-driver
-
Notifications
You must be signed in to change notification settings - Fork 48
Closed
Description
When trying to connect to unix domain socket, python driver throws following error:
Traceback (most recent call last):
File "/home/margdoc/Workspace/scylla/maintenance_mode_testing.py", line 5, in <module>
s = c.connect()
^^^^^^^^^^^
File "cassandra/cluster.py", line 1750, in cassandra.cluster.Cluster.connect
File "cassandra/cluster.py", line 1776, in cassandra.cluster.Cluster.connect
File "cassandra/cluster.py", line 1763, in cassandra.cluster.Cluster.connect
File "cassandra/cluster.py", line 3581, in cassandra.cluster.ControlConnection.connect
File "cassandra/cluster.py", line 3642, in cassandra.cluster.ControlConnection._reconnect_internal
cassandra.cluster.NoHostAvailable: ('Unable to connect to any servers', {'test_socket': IndexError('string index out of range')})
In function:
python-driver/cassandra/connection.py
Lines 926 to 961 in 679ad24
def _connect_socket(self): | |
sockerr = None | |
addresses = self._get_socket_addresses() | |
port = None | |
for (af, socktype, proto, _, sockaddr) in addresses: | |
try: | |
self._socket = self._socket_impl.socket(af, socktype, proto) | |
if self.ssl_context: | |
self._wrap_socket_from_context() | |
elif self.ssl_options: | |
if not self._ssl_impl: | |
raise RuntimeError("This version of Python was not compiled with SSL support") | |
self._socket = self._ssl_impl.wrap_socket(self._socket, **self.ssl_options) | |
self._socket.settimeout(self.connect_timeout) | |
self._initiate_connection(sockaddr) | |
self._socket.settimeout(None) | |
local_addr = self._socket.getsockname() | |
log.debug('Connection %s %s:%s -> %s:%s', id(self), local_addr[0], local_addr[1], sockaddr[0], sockaddr[1]) | |
if self._check_hostname: | |
self._match_hostname() | |
sockerr = None | |
break | |
except socket.error as err: | |
if self._socket: | |
self._socket.close() | |
self._socket = None | |
sockerr = err | |
if sockerr: | |
raise socket.error(sockerr.errno, "Tried connecting to %s. Last error: %s" % | |
([a[4] for a in addresses], sockerr.strerror or sockerr)) | |
if self.sockopts: | |
for args in self.sockopts: | |
self._socket.setsockopt(*args) | |
Line:
log.debug('Connection %s %s:%s -> %s:%s', id(self), local_addr[0], local_addr[1], sockaddr[0], sockaddr[1])
Reproducer:
Socket created in a terminal:
nc -lkU test_socket
Code that uses python driver:
from cassandra.cluster import Cluster
from cassandra.connection import UnixSocketEndPoint
c = Cluster([UnixSocketEndPoint("test_socket")])
s = c.connect()
Metadata
Metadata
Assignees
Labels
No labels