Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-42750

OperationContext::inMultiDocumentTransaction() doesn't return true when applying operations for prepared transaction during recovery

    • Type: Icon: Bug Bug
    • Resolution: Fixed
    • Priority: Icon: Major - P3 Major - P3
    • 4.2.1, 4.3.1
    • Affects Version/s: None
    • Component/s: Replication
    • Labels:
    • Fully Compatible
    • ALL
    • v4.2
    • Repl 2019-09-09, Repl 2019-09-23
    • 12

      When we reconstruct prepared transactions during replication recovery, we do not explicitly call OperationContext::setInMultiDocumentTransaction(), which means that OperationContext::inMultiDocumentTransaction() will return false. This has implications for multikey writes that are done inside a prepared transaction that is being reconstructed. When we set an index to be multikey, we expect this check to tell us whether we are inside a transaction and, as a result, need to do the multikey write in a side transaction. If we do not do the write in a side transaction, the multikey write can generate prepare conflicts on the catalog object, which is undesired. The simplest way to address this may be to just call OperationContext::setInMultiDocumentTransaction() explicitly before applying a prepared transaction during recovery.

            siyuan.zhou@mongodb.com Siyuan Zhou
            william.schultz@mongodb.com William Schultz (Inactive)
            0 Vote for this issue
            4 Start watching this issue