Session::open only fails over at the TCP layer: the loop over config.endpoints opens a Connection, but authenticate() (openSession + requestStatementId) runs after the loop. reconnect() does the opposite — it retries connect and authenticate for every endpoint.
With a 3-node cluster where one node accepts TCP but fails openSession (e.g. overloaded, misconfigured, or wedged by the missing socket timeout), roughly one open() in three fails while 2 of 3 nodes are healthy.
Fix: move the authenticate() step inside the endpoint loop, mirroring reconnect().
Session::openonly fails over at the TCP layer: the loop overconfig.endpointsopens aConnection, butauthenticate()(openSession + requestStatementId) runs after the loop.reconnect()does the opposite — it retries connect and authenticate for every endpoint.With a 3-node cluster where one node accepts TCP but fails
openSession(e.g. overloaded, misconfigured, or wedged by the missing socket timeout), roughly oneopen()in three fails while 2 of 3 nodes are healthy.Fix: move the
authenticate()step inside the endpoint loop, mirroringreconnect().