diff --git a/pymongo/asynchronous/pool.py b/pymongo/asynchronous/pool.py index 475f4bfa99..309c78f043 100644 --- a/pymongo/asynchronous/pool.py +++ b/pymongo/asynchronous/pool.py @@ -509,9 +509,7 @@ async def authenticate(self, reauthenticate: bool = False) -> None: await auth.authenticate(creds, self, reauthenticate=reauthenticate) self.ready = True duration = time.monotonic() - self.creation_time - if self.enabled_for_cmap: - assert self.listeners is not None - self.listeners.publish_connection_ready(self.address, self.id, duration) + # Log before publishing event to prevent potential listener preemption in tests if self.enabled_for_logging and _CONNECTION_LOGGER.isEnabledFor(logging.DEBUG): _debug_log( _CONNECTION_LOGGER, @@ -522,6 +520,9 @@ async def authenticate(self, reauthenticate: bool = False) -> None: driverConnectionId=self.id, durationMS=duration, ) + if self.enabled_for_cmap: + assert self.listeners is not None + self.listeners.publish_connection_ready(self.address, self.id, duration) def validate_session( self, client: Optional[AsyncMongoClient[Any]], session: Optional[AsyncClientSession] @@ -1026,9 +1027,7 @@ async def connect(self, handler: Optional[_MongoClientErrorHandler] = None) -> A self.active_contexts.add(tmp_context) listeners = self.opts._event_listeners - if self.enabled_for_cmap: - assert listeners is not None - listeners.publish_connection_created(self.address, conn_id) + # Log before publishing event to prevent potential listener preemption in tests if self.enabled_for_logging and _CONNECTION_LOGGER.isEnabledFor(logging.DEBUG): _debug_log( _CONNECTION_LOGGER, @@ -1038,6 +1037,9 @@ async def connect(self, handler: Optional[_MongoClientErrorHandler] = None) -> A serverPort=self.address[1], driverConnectionId=conn_id, ) + if self.enabled_for_cmap: + assert listeners is not None + listeners.publish_connection_created(self.address, conn_id) try: networking_interface = await _configured_protocol_interface(self.address, self.opts) diff --git a/pymongo/synchronous/pool.py b/pymongo/synchronous/pool.py index 938eca42bd..1b16e35cbc 100644 --- a/pymongo/synchronous/pool.py +++ b/pymongo/synchronous/pool.py @@ -509,9 +509,7 @@ def authenticate(self, reauthenticate: bool = False) -> None: auth.authenticate(creds, self, reauthenticate=reauthenticate) self.ready = True duration = time.monotonic() - self.creation_time - if self.enabled_for_cmap: - assert self.listeners is not None - self.listeners.publish_connection_ready(self.address, self.id, duration) + # Log before publishing event to prevent potential listener preemption in tests if self.enabled_for_logging and _CONNECTION_LOGGER.isEnabledFor(logging.DEBUG): _debug_log( _CONNECTION_LOGGER, @@ -522,6 +520,9 @@ def authenticate(self, reauthenticate: bool = False) -> None: driverConnectionId=self.id, durationMS=duration, ) + if self.enabled_for_cmap: + assert self.listeners is not None + self.listeners.publish_connection_ready(self.address, self.id, duration) def validate_session( self, client: Optional[MongoClient[Any]], session: Optional[ClientSession] @@ -1022,9 +1023,7 @@ def connect(self, handler: Optional[_MongoClientErrorHandler] = None) -> Connect self.active_contexts.add(tmp_context) listeners = self.opts._event_listeners - if self.enabled_for_cmap: - assert listeners is not None - listeners.publish_connection_created(self.address, conn_id) + # Log before publishing event to prevent potential listener preemption in tests if self.enabled_for_logging and _CONNECTION_LOGGER.isEnabledFor(logging.DEBUG): _debug_log( _CONNECTION_LOGGER, @@ -1034,6 +1033,9 @@ def connect(self, handler: Optional[_MongoClientErrorHandler] = None) -> Connect serverPort=self.address[1], driverConnectionId=conn_id, ) + if self.enabled_for_cmap: + assert listeners is not None + listeners.publish_connection_created(self.address, conn_id) try: networking_interface = _configured_socket_interface(self.address, self.opts)