Gate the split-generation eviction assert on extra_diagnostics=[eviction_check]

XMLWordPrintableJSON

    • Type: Task
    • Resolution: Unresolved
    • Priority: Major - P3
    • None
    • Affects Version/s: None
    • None
    • Storage Engines - Transactions
    • 220.199
    • SE Transactions - 2026-09-25
    • 3

      We have an assert in wt_evict 

      WT_ASSERT(session,
        closing || !F_ISSET(ref, WT_REF_FLAG_INTERNAL) ||
          F_ISSET(session->dhandle, WT_DHANDLE_DEAD) ||
          !__wt_gen_active(session, WT_GEN_SPLIT, page->pg_intl_split_gen)); 

      That asserts that we don't evict an accessible internal page with an active split generation. Violating it means every child WT_REF is freed from under any thread still walking that index.

      We have seen crashes where __wt_evict → an unmapped address. Checking this field may be able to diagnose whether a bad free caused the invalid address access. 

      Convert the assert to use the existing eviction_check category:

      WT_ASSERT_OPTIONAL(session, WT_DIAGNOSTIC_EVICTION_CHECK, <existing predicate>,
        "Evicting an accessible internal page with an active split generation"); 

      So the check can be toggled on a release build via extra_diagnostics=[eviction_check].

       

            Assignee:
            [DO NOT USE] Backlog - Storage Engines Team
            Reporter:
            Alana Huang
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: