Fix: use F_SET_ATOMIC_32/F_CLR_ATOMIC_32 for WT_CONN_RECONFIGURING_STEP_UP flag

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Duplicate
    • Priority: Minor - P4
    • None
    • Affects Version/s: None
    • Component/s: Configuration
    • None
    • Storage Engines
    • 137.961
    • None
    • None

      Summary

      WT_CONN_RECONFIGURING_STEP_UP is stored in conn->flags_atomic, which is managed with F_SET_ATOMIC_32 / F_CLR_ATOMIC_32. However, __disagg_step_up sets and clears the flag using the non-atomic F_SET / F_CLR, and the reader in __wt_evict_needed uses the non-atomic F_ISSET. Without atomic semantics this is a TSAN-visible data race that can cause the eviction heuristic to miss the step-up state on weakly-ordered architectures.

      Impact

      TSAN-visible data race. Disaggregated storage only.

      Files

      • src/conn/conn_layered.c
      • src/evict/evict_inline.h

      Fix

      // src/conn/conn_layered.c
      -F_SET(conn, WT_CONN_RECONFIGURING_STEP_UP);
      +F_SET_ATOMIC_32(conn, WT_CONN_RECONFIGURING_STEP_UP);
      -F_CLR(conn, WT_CONN_RECONFIGURING_STEP_UP);
      +F_CLR_ATOMIC_32(conn, WT_CONN_RECONFIGURING_STEP_UP);
      
      // src/evict/evict_inline.h
      -F_ISSET(conn, WT_CONN_RECONFIGURING_STEP_UP)
      +F_ISSET_ATOMIC_32(conn, WT_CONN_RECONFIGURING_STEP_UP)
      

      Notes

      Discovered during development on the WT-16973 clean-scrub eviction branch (PR #13605). Disagg only. Fix is independent of that feature and should be applied directly to develop.

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

              Created:
              Updated:
              Resolved: