-
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.
- duplicates
-
WT-17303 Fix macros used for WT_CONN_RECONFIGURING_STEP_UP
-
- Closed
-