Я использую Mon go Server v4.2. и python3 .7, pymon go v3.7.1 для обновления нескольких коллекций в транзакции в настройке Sharded (2 маршрутизатора, 3 конфигурации, 2 репликации (1 основной, 2 дополнительных)). Я написал 2 метода, чтобы начать транзакцию и завершить транзакцию ниже
def dbTransactionStart(db):
# Start Session
session = db.client.start_session()
# Start Transaction
#session.start_transaction(write_concern = wcMajority)
session.start_transaction()
return session
def dbTransactionEnd(session):
# Commit Transaction
session.commit_transaction()
# End session
session.end_session()
Обновление коллекций, как показано ниже
# Init DB
mongoClient = pymongo.MongoClient("mongodb://" + MONGO_USERNAME + ":" + urllib.parse.quote_plus(MONGO_PASSWORD) + "@" + MONGO_HOST + "/" + MONGO_DB)
db = mongoClient[MONGO_DB]
# Start Transaction
session = dbTransactionStart(db)
db.collection1.update_one(query, param, session = session)
db.collection2.update_one(query, param, session = session)
db.collection3.update_one(query, param, session = session)
# End Transaction
dbTransactionEnd(session)
Я получаю сообщение об ошибке ниже, говорящее Невозможно восстановить транзакцию решение без восстановления принято во время завершения транзакции. Может ли кто-нибудь помочь в отношении этого
File "./libs/util.py", line 167, in dbTransactionEnd
session.commit_transaction()
File "/usr/local/lib/python3.6/site-packages/pymongo/client_session.py", line 393, in commit_transaction
self._finish_transaction_with_retry("commitTransaction")
File "/usr/local/lib/python3.6/site-packages/pymongo/client_session.py", line 457, in _finish_transaction_with_retry
return self._finish_transaction(command_name)
File "/usr/local/lib/python3.6/site-packages/pymongo/client_session.py", line 452, in _finish_transaction
parse_write_concern_error=True)
File "/usr/local/lib/python3.6/site-packages/pymongo/database.py", line 514, in _command
client=self.__client)
File "/usr/local/lib/python3.6/site-packages/pymongo/pool.py", line 579, in command
unacknowledged=unacknowledged)
File "/usr/local/lib/python3.6/site-packages/pymongo/network.py", line 150, in command
parse_write_concern_error=parse_write_concern_error)
File "/usr/local/lib/python3.6/site-packages/pymongo/helpers.py", line 155, in _check_command_response
raise OperationFailure(msg % errmsg, code, response)
pymongo.errors.OperationFailure: Cannot recover the transaction decision without a recoveryToken