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:
|
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:
Code that uses python driver:
from cassandra.cluster import Cluster
from cassandra.connection import UnixSocketEndPoint
c = Cluster([UnixSocketEndPoint("test_socket")])
s = c.connect()
When trying to connect to unix domain socket, python driver throws following error:
In function:
python-driver/cassandra/connection.py
Lines 926 to 961 in 679ad24
Line:
Reproducer:
Socket created in a terminal:
Code that uses python driver: