Uploaded image for project: 'Documentation'
  1. Documentation
  2. DOCS-16132

Investigate changes in SERVER-77018: Deadlock between dbStats and 2 index builds

    XMLWordPrintableJSON

Details

    • 2

    Description

      Original Downstream Change Summary

      In-progress index builds are no longer accounted for 'indexFreeStorageSize' when running dbStats.

      Description of Linked Ticket

      If an on-going index build yields its locks after initiating a bulk insert (which is initialized here), it still holds onto the write lock on the index table at the WiredTiger level. If a dbStats command comes in, it will take collection level MODE_IS lock and attempt to acquire a read_lock for the ident the index build is currently writing to (but cannot since IndexBuild_1 holds the exclusive lock on that ident). (In (collection_impl.cpp) we iterate through the unfinished indexes and that is how we can see the in-progress index table).
        

      The problem arises when another operation comes in and prevents IndexBuild_1 from re-acquiring its lock, like another index build that enqueues a collection MODE_X lock. These events can produce a deadlock in the system represented by:

      dbStats IndexBuild_0 IndexBuild_1
      [Global, DB, Coll]- MODE_IS [Global, DB] - MODE_IX  [Global, DB, Coll] - MODE_IX 
          yields MDB level locks
      - holds write lock on table:index-X
      blocks IndexBuild_1
      - waiting on read lock of table:index-X
      - holds coll lock - MODE_IS 
         
       
      • waiting for MODE_X coll lock
       
         
      • waiting to reacquire locks

       

      Original explanation by Suganthi here

      Attachments

        Activity

          People

            corry.root@mongodb.com Corry Root
            backlog-server-pm Backlog - Core Eng Program Management Team
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:
              34 weeks, 1 day ago