Python 3.x MongoDB-如果没有recoveryToken,则无法恢复事务决策
我使用的是Mongo服务器v4.2。以及python3.7、pymongo v3.7.1,以在分片设置中更新事务中的多个集合(2个路由器、3个配置、2个复制集(1个主、2个辅助))。 我在下面编写了两种方法来启动事务和结束事务Python 3.x MongoDB-如果没有recoveryToken,则无法恢复事务决策,python-3.x,mongodb,sharding,Python 3.x,Mongodb,Sharding,我使用的是Mongo服务器v4.2。以及python3.7、pymongo v3.7.1,以在分片设置中更新事务中的多个集合(2个路由器、3个配置、2个复制集(1个主、2个辅助))。 我在下面编写了两种方法来启动事务和结束事务 def dbTransactionStart(db): # Start Session session = db.client.start_session() # Start Transaction #session.start_tra
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)
在结束事务期间,如果没有recoveryToken,无法恢复事务决策,我将收到以下错误消息。有人能帮忙吗
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
问题出在pymongo cliet v3.7版上,我将其升级到v3.10.1版,使其工作顺利,而上述错误并不一致,这意味着上述代码多次成功,有时还会抛出上述错误。