in pyignite/client.py [0:0]
def random_node(self) -> Connection:
"""
Returns random usable node.
This method is not a part of the public API. Unless you wish to
extend the `pyignite` capabilities (with additional testing, logging,
examining connections, et c.) you probably should not use it.
"""
if self.partition_aware:
# if partition awareness is used just pick a random connected node
return self._get_random_node()
else:
# if partition awareness is not used then just return the current
# node if it's alive or the next usable node if connection with the
# current is broken
node = self._nodes[self._current_node]
if node.alive:
return node
# close current (supposedly failed) node
self._nodes[self._current_node].close()
# advance the node index
self._current_node += 1
if self._current_node >= len(self._nodes):
self._current_node = 0
# prepare the list of node indexes to try to connect to
num_nodes = len(self._nodes)
for i in chain(range(self._current_node, num_nodes), range(self._current_node)):
node = self._nodes[i]
try:
node.connect()
except connection_errors:
pass
else:
return node
# no nodes left
raise ReconnectError('Can not reconnect: out of nodes.')