From dab9a29af64d7f76fc05021f4befe5c15bb646f4 Mon Sep 17 00:00:00 2001 From: Dmitry Kropachev Date: Sat, 14 Feb 2026 08:01:21 -0400 Subject: [PATCH] Fix factory() returning dead connections on close during setup (#614) After connected_event.wait() returns, factory() only checks last_error and whether the event is set. If close() was called (not defunct) and the reactor didn't set last_error, factory() returns a closed connection that immediately fails on use. Add an is_closed/is_defunct check after the last_error check to catch this case and raise ConnectionShutdown instead of returning a dead connection. --- cassandra/connection.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cassandra/connection.py b/cassandra/connection.py index 87f860f32b..32037000ca 100644 --- a/cassandra/connection.py +++ b/cassandra/connection.py @@ -866,6 +866,9 @@ def factory(cls, endpoint, timeout, host_conn = None, *args, **kwargs): if conn.is_unsupported_proto_version: raise ProtocolVersionUnsupported(endpoint, conn.protocol_version) raise conn.last_error + elif conn.is_closed or conn.is_defunct: + raise ConnectionShutdown( + "Connection to %s was closed during setup" % (endpoint,)) elif not conn.connected_event.is_set(): conn.close() raise OperationTimedOut("Timed out creating connection (%s seconds)" % timeout)