MongoDB - Невозможно восстановить решение о транзакции без восстановления. - PullRequest
0 голосов
/ 08 января 2020

Я использую 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

1 Ответ

0 голосов
/ 24 января 2020

Проблема была с pymon go cliet версии v3.7, которую я обновил до v3.10.1, что позволило ему работать плавно

...