-
Type: Bug
-
Resolution: Fixed
-
Priority: Critical - P2
-
Affects Version/s: 4.1, 4.1.1
-
Component/s: None
-
None
Originally reported here: https://www.mongodb.com/community/forums/t/using-pymonogo-to-execute-transactions-on-single-node-replica-sets/170599
After the read preference changes in PYTHON-1864, the count_documents and distinct helpers fail when run in a transaction when connected directly to the primary (ie with directConnection=True):
>>> client = MongoClient(directConnection=True) >>> client.topology_description <TopologyDescription id: 62bb5c0eca0eb781b7d532a8, topology_type: Single, servers: [<ServerDescription ('localhost', 27017) server_type: RSPrimary, rtt: 0.0005203270000002647>]> >>> with client.start_session() as s, s.start_transaction():client.t.t.count_documents({}, session=s) ... Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/shane/git/mongo-python-driver/pymongo/collection.py", line 1843, in count_documents return self._retryable_non_cursor_read(_cmd, session) File "/Users/shane/git/mongo-python-driver/pymongo/collection.py", line 1849, in _retryable_non_cursor_read return client._retryable_read(func, self._read_preference_for(s), s) File "/Users/shane/git/mongo-python-driver/pymongo/mongo_client.py", line 1405, in _retryable_read return func(session, server, sock_info, read_pref) File "/Users/shane/git/mongo-python-driver/pymongo/collection.py", line 1838, in _cmd result = self._aggregate_one_result(sock_info, read_preference, cmd, collation, session) File "/Users/shane/git/mongo-python-driver/pymongo/collection.py", line 1712, in _aggregate_one_result session=session, File "/Users/shane/git/mongo-python-driver/pymongo/collection.py", line 301, in _command user_fields=user_fields, File "/Users/shane/git/mongo-python-driver/pymongo/pool.py", line 758, in command session._apply_to(spec, retryable_write, read_preference, self) File "/Users/shane/git/mongo-python-driver/pymongo/client_session.py", line 974, in _apply_to "%r" % (read_preference,) pymongo.errors.InvalidOperation: read preference in a transaction must be primary, not: PrimaryPreferred(tag_sets=None, max_staleness=-1, hedge=None)
- is caused by
-
PYTHON-1864 Don't send $readPreference to standalone servers
- Closed