in src/internal/Router.ts [306:333]
async _affinitySend(opCode, payloadWriter, payloadReader, affinityHint: AffinityHint) {
let connection = await this._chooseConnection(affinityHint);
while (true) {
Logger.logDebug('Endpoint chosen: ' + connection.endpoint);
try {
await connection.sendRequest(opCode, payloadWriter, payloadReader);
return;
}
catch (err) {
if (!(err instanceof LostConnectionError)) {
throw err;
}
Logger.logDebug(connection.endpoint + ' is unavailable');
this._removeConnection(connection);
if (this._getAllConnections().length == 0) {
throw new LostConnectionError('Cluster is unavailable');
}
}
connection = this._getRandomConnection();
Logger.logDebug('Node has been chosen randomly');
}
}