in pyignite/connection/connection.py [0:0]
def connect(self):
"""
Connect to the given server node with protocol version fallback.
"""
detecting_protocol = False
# choose highest version first
if self.client.protocol_context is None:
detecting_protocol = True
self.client.protocol_context = ProtocolContext(max(PROTOCOLS), BitmaskFeature.all_supported())
while True:
try:
self._on_handshake_start()
result = self._connect_version()
self._socket.settimeout(self.timeout)
self._on_handshake_success(result)
return
except HandshakeError as e:
if e.expected_version in PROTOCOLS:
self.client.protocol_context.version = e.expected_version
continue
else:
self._on_handshake_fail(e)
raise e
except AuthenticationError as e:
self._on_handshake_fail(e)
raise e
except Exception as e:
self._on_handshake_fail(e)
# restore undefined protocol version
if detecting_protocol:
self.client.protocol_context = None
raise e