Investigate ref->page == null when ret is not zero issue in __wt_evict

XMLWordPrintableJSON

    • Type: Task
    • Resolution: Works as Designed
    • Priority: Major - P3
    • None
    • Affects Version/s: None
    • Component/s: Cache and Eviction
    • Storage Engines
    • None
    • 5

      When __wt_evict attempts to evict a page, a failed eviction should leave ref->page non-null. However, in certain cases—particularly during stress test runs, we have observed ref->page becoming null despite the eviction failing. We need to investigate and identify the root cause behind this unexpected behavior.

      Please refer to the original patch build that triggered this behavior::
      patch build

      For reproduce, it's all most to happen every time with the test case burst_inserts,

      ./run -t burst_inserts -f configs/burst_inserts_stress.txt -l 2
      reproduce patch
      libc.so.6!__pthread_kill_implementation (Unknown Source:0)
      libc.so.6!raise (Unknown Source:0)
      libc.so.6!abort (Unknown Source:0)
      libwiredtiger.so.12.0.0!__wt_abort(WT_SESSION_IMPL * session) (/data/work/src/os_common/os_abort.c:32)
      libwiredtiger.so.12.0.0!__wt_evict(WT_SESSION_IMPL * session, WT_REF * ref, WT_REF_STATE previous_state, uint32_t flags) (/data/work/src/evict/evict_page.c:351)
      libwiredtiger.so.12.0.0!__evict_page(WT_SESSION_IMPL * session, _Bool is_server) (/data/work/src/evict/evict_lru.c:3050)
      libwiredtiger.so.12.0.0!__wti_evict_app_assist_worker(WT_SESSION_IMPL * session, _Bool busy, _Bool readonly, _Bool interruptible) (/data/work/src/evict/evict_lru.c:3186)
      libwiredtiger.so.12.0.0!__wt_evict_app_assist_worker_check(WT_SESSION_IMPL * session, _Bool busy, _Bool readonly, _Bool interruptible, _Bool * didworkp) (/data/work/src/evict/evict_inline.h:962)
      libwiredtiger.so.12.0.0!__wt_txn_commit(WT_SESSION_IMPL * session, const char ** cfg) (/data/work/src/txn/txn.c:1832)
      libwiredtiger.so.12.0.0!__session_commit_transaction(WT_SESSION * wt_session, const char * config) (/data/work/src/session/session_api.c:1934)
      test_harness::transaction::commit(test_harness::transaction * const this, const std::string & config) (/data/work/test/cppsuite/src/main/transaction.cpp:93)
      burst_inserts::insert_operation(burst_inserts * const this, test_harness::thread_worker * tc) (/data/work/test/cppsuite/tests/burst_inserts.cpp:126)
      std::__invoke_impl<void, void (test_harness::database_operation::*&) 

       

            Assignee:
            [DO NOT USE] Backlog - Storage Engines Team
            Reporter:
            Shoufu Du
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: