Uploaded image for project: 'WiredTiger'
  1. WiredTiger
  2. WT-2321

WT-2321: race between eviction and worker threads on the eviction queue

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Minor - P4
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: WT2.8.0, 3.0.16
    • Labels:
      None

      Description

      When running the btree-split-stress runner, I eventually see this assert:

      WT_CURSOR.search: src/evict/evict_lru.c, 82: F_ISSET_ATOMIC(e->ref->page, WT_PAGE_EVICT_LRU)
      

      One thread has found a buffer on the eviction queue without the WT_PAGE_EVICT_LRU flag set:

      #5  0x000000000049536c in __wt_assert (session=0x803060740, error=0, 
          file_name=0x57c9f9 "src/evict/evict_lru.c", line_number=82, 
          fmt=0x58add2 "%s") at src/support/err.c:470
      #6  0x00000000004344a2 in __evict_list_clear (session=0x803060740, 
          e=0x80307d820) at src/evict/evict_lru.c:81
      #7  0x00000000004369f2 in __evict_get_ref (session=0x803060740, 
          is_server=false, btreep=0x7fffddfed930, refp=0x7fffddfed918)
          at src/evict/evict_lru.c:1420
      #8  0x0000000000435ed4 in __evict_page (session=0x803060740, is_server=false)
          at src/evict/evict_lru.c:1444
      #9  0x0000000000435b94 in __wt_cache_eviction_worker (session=0x803060740, 
          busy=false, pct_full=96) at src/evict/evict_lru.c:1553
      #10 0x0000000000568023 in __wt_cache_eviction_check (session=0x803060740, 
          busy=false, didworkp=0x0) at cache.i:245
      #11 0x0000000000567e8d in __cursor_enter (session=0x803060740) at cursor.i:59
      #12 0x0000000000567e00 in __curfile_enter (cbt=0x809826600) at cursor.i:93
      #13 0x000000000056341b in __cursor_func_init (cbt=0x809826600, reenter=true)
          at cursor.i:262
      #14 0x0000000000562c28 in __wt_btcur_search (cbt=0x809826600)
          at src/btree/bt_cursor.c:335
      #15 0x000000000050ece8 in __curfile_search (cursor=0x809826600)
          at src/cursor/cur_file.c:200
      #16 0x000000000040cd2c in worker (arg=0x8032873c0) at wtperf.c:576
      #17 0x00000008011c27c5 in pthread_create () from /lib/libthr.so.3
      #18 0x0000000000000000 in ?? ()
      

      No other threads in the system are doing anything interesting, they're all sitting in __evict_get_ref waiting on the eviction lock.

      So far, I've only seen this failure twice, both times on pixiebob (FreeBSD, 10.2), after about 80 wtperf runs.

      Alexander Gorrod, Michael Cahill, any suggestions about how to chase this one?

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                keith.bostic Keith Bostic
                Reporter:
                keith.bostic Keith Bostic
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: