Python 3.x MongoDB-如果没有recoveryToken,则无法恢复事务决策

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

我使用的是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_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版,使其工作顺利

,而上述错误并不一致,这意味着上述代码多次成功,有时还会抛出上述错误。