-
Type: Improvement
-
Resolution: Unresolved
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
Labels:None
WT-6463 allows a session to perform eviction while it has an open history store cursor. To do this safely, this change introduced a new check in wt_cache_eviction_check() to prevent the session from calling eviction if it is currently doing reconciliation. This check is required because eviction could wind up doing reconciliation, and the reconciliation code isn't re-entrant.
sulabh.mahajan observed that we should still be able to evict clean pages here, since they won't require reconciliation. So it is possible that we could restructure this check and/or the eviction code to allow only clean page evictions when we are already in reconciliation.
We should investigate whether this would provide a substantive improvement in eviction, and if so figure out how to make the necessary changes.
The fix here probably isn't simple as eliminating the check in wt_cache_eviction_check(). That check serves the second purpose of preventing us from re-entering eviction. My preliminary work on WT-6463 found that if we let wt_cache_eviction_check() call into eviction via wt_cache_eviction_worker(), the session can hang.