From 359ddfaad751eab9a5efb134a3f537af4e1b7fb9 Mon Sep 17 00:00:00 2001 From: Noah Stapp Date: Wed, 4 Mar 2026 10:07:54 -0800 Subject: [PATCH] PYTHON-5741 - Transaction state is preserved across retries (#2718) --- pymongo/asynchronous/mongo_client.py | 7 ++++--- pymongo/synchronous/mongo_client.py | 7 ++++--- .../backpressure-retryable-writes.json | 20 ++++++++++++++++--- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/pymongo/asynchronous/mongo_client.py b/pymongo/asynchronous/mongo_client.py index a7ca7b014..27d254469 100644 --- a/pymongo/asynchronous/mongo_client.py +++ b/pymongo/asynchronous/mongo_client.py @@ -894,15 +894,16 @@ class AsyncMongoClient(common.BaseObject, Generic[_DocumentType]): self._options.read_concern, ) + self._retry_policy = _RetryPolicy( + _TokenBucket(), adaptive_retry=self._options.adaptive_retries + ) + self._init_based_on_options(self._seeds, srv_max_hosts, srv_service_name) self._opened = False self._closed = False self._loop: Optional[asyncio.AbstractEventLoop] = None - self._retry_policy = _RetryPolicy( - _TokenBucket(), adaptive_retry=self._options.adaptive_retries - ) if not is_srv: self._init_background() diff --git a/pymongo/synchronous/mongo_client.py b/pymongo/synchronous/mongo_client.py index 36f432c67..12892e52f 100644 --- a/pymongo/synchronous/mongo_client.py +++ b/pymongo/synchronous/mongo_client.py @@ -894,15 +894,16 @@ class MongoClient(common.BaseObject, Generic[_DocumentType]): self._options.read_concern, ) + self._retry_policy = _RetryPolicy( + _TokenBucket(), adaptive_retry=self._options.adaptive_retries + ) + self._init_based_on_options(self._seeds, srv_max_hosts, srv_service_name) self._opened = False self._closed = False self._loop: Optional[asyncio.AbstractEventLoop] = None - self._retry_policy = _RetryPolicy( - _TokenBucket(), adaptive_retry=self._options.adaptive_retries - ) if not is_srv: self._init_background() diff --git a/test/transactions/unified/backpressure-retryable-writes.json b/test/transactions/unified/backpressure-retryable-writes.json index 0817e03f2..eea0e6b5d 100644 --- a/test/transactions/unified/backpressure-retryable-writes.json +++ b/test/transactions/unified/backpressure-retryable-writes.json @@ -412,17 +412,31 @@ "events": [ { "commandStartedEvent": { - "commandName": "insert" + "command": { + "startTransaction": true + }, + "commandName": "insert", + "databaseName": "transaction-tests" } }, { "commandStartedEvent": { - "commandName": "insert" + "command": { + "startTransaction": true + }, + "commandName": "insert", + "databaseName": "transaction-tests" } }, { "commandStartedEvent": { - "commandName": "abortTransaction" + "command": { + "startTransaction": { + "$$exists": false + } + }, + "commandName": "abortTransaction", + "databaseName": "admin" } } ]