diff options
Diffstat (limited to 'src/third_party/wiredtiger/src/evict/evict_lru.c')
-rw-r--r-- | src/third_party/wiredtiger/src/evict/evict_lru.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/third_party/wiredtiger/src/evict/evict_lru.c b/src/third_party/wiredtiger/src/evict/evict_lru.c index 3c1bdee2ef3..8396612b7ca 100644 --- a/src/third_party/wiredtiger/src/evict/evict_lru.c +++ b/src/third_party/wiredtiger/src/evict/evict_lru.c @@ -2375,11 +2375,14 @@ __wt_cache_eviction_worker( for (initial_progress = cache->eviction_progress;; ret = 0) { /* * A pathological case: if we're the oldest transaction in the - * system and the eviction server is stuck trying to find space, - * abort the transaction to give up all hazard pointers before - * trying again. + * system and the eviction server is stuck trying to find space + * (and we're not in recovery, because those transactions can't + * be rolled back), abort the transaction to give up all hazard + * pointers before trying again. */ - if (__wt_cache_stuck(session) && __wt_txn_am_oldest(session)) { + if (__wt_cache_stuck(session) && + __wt_txn_am_oldest(session) && + !F_ISSET(conn, WT_CONN_RECOVERING)) { --cache->evict_aggressive_score; WT_STAT_CONN_INCR(session, txn_fail_cache); WT_ERR(__wt_txn_rollback_required(session, |