Uploaded image for project: 'WiredTiger'
  1. WiredTiger
  2. WT-3878

Iteration can lose its position when updating a limbo page

    • Type: Icon: Bug Bug
    • Resolution: Fixed
    • Priority: Icon: Major - P3 Major - P3
    • 3.6.3, 3.7.2, WT3.1.0
    • Affects Version/s: None
    • Component/s: None
    • Labels:
    • Storage 2018-01-29, Storage 2018-02-12
    • v3.6

      I think there's a problem with cursor iteration and limbo pages.

      If we have a pinned page based on a cursor iteration, we discard the pinned page under some circumstances (the page is flagged for forced eviction or the page is in the WT_REF_LIMBO state). If we discard the pinned page, the actual key/value entry can be physically removed underneath the cursor, and we have lost the cursor's position. The next iteration will start at the beginning of the table, which is pretty bad.

      We could skip the forced eviction check when using an iterating cursor, but limbo pages aren't so easy. I think we either have to always instantiate pages being read for an iterating cursor, or somehow swap the instantiated page into place without allowing entries to be removed (which sounds impossible).

      michael.cahill, am I missing something?

            keith.bostic@mongodb.com Keith Bostic (Inactive)
            keith.bostic@mongodb.com Keith Bostic (Inactive)
            0 Vote for this issue
            3 Start watching this issue