Uh oh!
There was an error while loading. Please reload this page.
connection: fix logging of non-IP sockets - #279
Merged
Conversation
Before this fix, the debug log would crash _connect_socket for UNIX domain sockets. getsockname() for UNIX domain sockets returns a single string instead of a tuple (as is the case for IPv4/IPv6). Therefore the code could crash as it tried to get the second element of a non-tuple (empty string):
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')})
Fix the issue by not unpacking those values and just printing them
as-is, relying on %s formatter to print all elements of a tuple (host,
port) for IP sockets and string for UNIX domain sockets. The printed log
is not formatted as nice as before, however this is a DEBUG print so few users will ever see it. The new approach should work with any format of getsockname().
Fixesscylladb#278mykaul
commented
Dec 8, 2023
Do we have tests for Unix sockets? |
constantfold
commented
Dec 8, 2023
Author
There is this test: https://github.com/scylladb/python-driver/blob/64e7fad42ec88dfc72c7f12c389c3ef6c3f392fb/tests/integration/advanced/test_unixsocketendpoint.py but it's not enabled. I'll check if this test works. |
Lorak-mmk
approved these changes
Dec 9, 2023
margdoc added a commit
to margdoc/scylla
that referenced
this pull request
Jan 19, 2024
kbr-scylla pushed a commit
to scylladb/scylladb
that referenced
this pull request
Jan 19, 2024
dgarcia360 pushed a commit
to dgarcia360/scylla
that referenced
this pull request
Apr 30, 2024
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Before this fix, the debug log would crash
_connect_socketfor UNIX domain sockets.getsockname()for UNIX domain sockets returns a single string instead of a tuple (as is the case for IPv4/IPv6). Therefore the code could crash as it tried to get the second element of a non-tuple (empty string):Fix the issue by not unpacking those values and just printing them as-is, relying on
%sformatter to print all elements of a tuple (host, port) for IP sockets and string for UNIX domain sockets. The printed log is not formatted as nice as before, however this is aDEBUGprint so few users will ever see it. The new approach should work with any format ofgetsockname().Fixes#278