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

Reading between commit_timestamp and durable_timestamp can produce inconsistency

    • Type: Icon: Bug Bug
    • Resolution: Gone away
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: None
    • Component/s: None
    • None
    • Storage Execution
    • ALL
    • Execution Team 2022-02-21, Execution Team 2022-03-07

      There is a problem with prepared transactions whose durable timestamp is greater than their commit timestamp, which is that it's possible for another transaction to read them and commit before them, then get checkpointed without them, such that a crash causes the first transaction to disappear but not the second that depended on it.

      See WT-8747 for additional information and examples.

      This is a potential data consistency error.

      The ideal fix for WiredTiger is to return ::WT_ROLLBACK to the reader, which requires the reader to handle transaction rollback and which may not be possible for Server. We considered returning ::WT_NOTFOUND in this case (although that is problematical as well and could lead to its own problems), but patch builds returning the two different errors have roughly similar numbers of failures.

      The patch build returning ::WT_ROLLBACK is here: https://evergreen.mongodb.com/version/61fc61400305b973ad2bf953?redirect_spruce_users=true

      The patch build returning ::WT_NOTFOUND is here: https://evergreen.mongodb.com/version/61fd6248a4cf472d4bc3243c?redirect_spruce_users=true

      Can someone please help us investigate this problem? – Thanks!

      cc: geert.bosch, louis.williams

            Assignee:
            backlog-server-execution [DO NOT USE] Backlog - Storage Execution Team
            Reporter:
            keith.bostic@mongodb.com Keith Bostic (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            9 Start watching this issue

              Created:
              Updated:
              Resolved: