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

Move the expired transaction aborter thread off of PeriodicRunnerASIO

    • Type: Icon: Bug Bug
    • Resolution: Gone away
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: None
    • Component/s: Storage
    • Labels:
      None
    • ALL
    • Storage NYC 2018-05-21

      PeriodicRunnerASIO runs jobs serially and there are already jobs on it that take locks. Thus inactive transactions can block such PeriodicRunnerASIO jobs, and then the expired transaction aborter thread will never run to clear an expired transaction's lock resources, to unblock the PeriodicRunnerASIO jobs.

      While v4.0 transaction operations take only intent locks, a concurrent non-transaction operation like dropCollection that requires an exclusive X lock can block behind a transaction, and then the lock fairness policy will cause IS and IX lock requests to queue up behind the X lock request.

      So the following deadlock can occur in v4.0:
      expired transaction aborter wait on -> PeriodicRunnerASIO job waits on -> drop cmd waits on -> inactive transaction locks

            Assignee:
            dianna.hohensee@mongodb.com Dianna Hohensee (Inactive)
            Reporter:
            dianna.hohensee@mongodb.com Dianna Hohensee (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            10 Start watching this issue

              Created:
              Updated:
              Resolved: