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

The JournalFlusher should use a WRITE_CONFLICT_RETRY_ONLY YieldPolicy for its oplog read operation

    • Type: Icon: Bug Bug
    • Resolution: Fixed
    • Priority: Icon: Major - P3 Major - P3
    • 4.7.0
    • Affects Version/s: None
    • Component/s: Storage
    • None
    • Fully Compatible
    • ALL
    • Execution Team 2020-05-04
    • 23

      The JournalFlusher can hit an EBUSY error while trying to open a WT cursor when the validate cmd is doing WT_SESSION::verify on the same collection, local.oplog.rs. Per this WT documentation, https://source.wiredtiger.com/3.1.0/error_handling.html, indicating that WT_SESSION::verify can run into EBUSY if unable to gain exclusive access, and apparently vice versa for trying to open a cursor while WT_SESSION::verify is running.

      Our query code will normally turn WCEs into yields, here, but the JournalFlusher is using an query execution plan explicitly with the NO_YIELD setting here.

      The WRITE_CONFLICT_RETRY_ONLY policy indicates that it will retry on WriteConflictExceptions without releasing locks. It is not desirable to yield locks for the JournalFlusher's oplog query per this comment on the JournalFlusher's lock acquisitions.

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

              Created:
              Updated:
              Resolved: