_participants can be accessed concurrently in TransactionCoordinator

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Fixed
    • Priority: Major - P3
    • 8.3.0-rc0
    • Affects Version/s: None
    • Component/s: None
    • None
    • Replication
    • Fully Compatible
    • ALL
    • v8.2, v8.0, v7.0
    • Repl 2026-01-19
    • 200
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      There's a race on the _participants variable, where it's being set in runCommit() and simultaneously read in reportState(). It's being set without a mutex, but read with a mutex.

      Adding _mutex protection to where it's being set should be sufficient in this case.

      I don't think there is any risk today of concurrent writers to any variables, because the TransactionCoordinator exposes a limited interface that can be called from the TransactionCoordinatorService, which itself is triggered when a command with a session and transaction number is run. However, since only one command with a particular LSID can be run at a time, there shouldn't be a risk of multiple commands with the same LSID being run concurrently, which means only one thread should be running on the TransactionCoordinator at a time, other than the reportState() case which is an exception.

            Assignee:
            Vishnu Kaushik
            Reporter:
            Vishnu Kaushik
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: