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

Background validation needs to use ignore_prepare=false

    XMLWordPrintable

    Details

    • Type: Task
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Duplicate
    • Affects Version/s: 4.4.0-rc10
    • Fix Version/s: None
    • Component/s: Diagnostics, Storage
    • Labels:
      None
    • Backport Requested:
      v4.4
    • Sprint:
      Execution Team 2020-07-13, Execution Team 2020-08-10, Execution Team 2020-09-07, Execution Team 2020-09-21, Execution Team 2020-10-05
    • Linked BF Score:
      62

      Description

      Currently, foreground and background validation both use ignore_prepare=true. This is required for foreground validation not to deadlock on secondaries, and since it holds a strong lock there is no issue with prepared transactions concurrently committing while foreground validation is running.

      For background validation, prepared transactions can commit concurrently when the validation is running. Because snapshot isolation does not apply to prepared transaction writes when a reader is using ignore_prepare=true, the validation can mistakenly report a data corruption problem between indexes and collections updated in the same prepared transaction. For this reason, we must change ignore_prepare to be false when background validation is running. This could be problematic, however, since background validation currently stops replication application while it is running, so any encounters with prepare conflicts will cause a deadlock without further code logic changes.

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              milkie Eric Milkie
              Reporter:
              milkie Eric Milkie
              Participants:
              Votes:
              0 Vote for this issue
              Watchers:
              12 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: