summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/src/evict/evict_page.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/wiredtiger/src/evict/evict_page.c')
-rw-r--r--src/third_party/wiredtiger/src/evict/evict_page.c18
1 files changed, 5 insertions, 13 deletions
diff --git a/src/third_party/wiredtiger/src/evict/evict_page.c b/src/third_party/wiredtiger/src/evict/evict_page.c
index cf6bc39bdb7..49a33870db0 100644
--- a/src/third_party/wiredtiger/src/evict/evict_page.c
+++ b/src/third_party/wiredtiger/src/evict/evict_page.c
@@ -166,6 +166,10 @@ __wt_evict(WT_SESSION_IMPL *session, WT_REF *ref, uint8_t previous_state, uint32
if (inmem_split)
goto done;
+ /* Check that we are not about to evict an internal page with an active split generation. */
+ if (F_ISSET(ref, WT_REF_FLAG_INTERNAL) && !closing)
+ WT_ASSERT(session, !__wt_gen_active(session, WT_GEN_SPLIT, page->pg_intl_split_gen));
+
/* Count evictions of internal pages during normal operation. */
if (!closing && F_ISSET(ref, WT_REF_FLAG_INTERNAL)) {
WT_STAT_CONN_INCR(session, cache_eviction_internal);
@@ -447,8 +451,7 @@ __evict_child_check(WT_SESSION_IMPL *session, WT_REF *parent)
}
}
WT_INTL_FOREACH_END;
- WT_INTL_FOREACH_REVERSE_BEGIN(session, parent->page, child)
- {
+ WT_INTL_FOREACH_REVERSE_BEGIN (session, parent->page, child) {
switch (child->state) {
case WT_REF_DISK: /* On-disk */
case WT_REF_DELETED: /* On-disk, deleted */
@@ -714,17 +717,6 @@ __evict_review(WT_SESSION_IMPL *session, WT_REF *ref, uint32_t evict_flags, bool
WT_RET(ret);
/*
- * Give up on eviction during a checkpoint if the page splits.
- *
- * We get here if checkpoint reads a page with history store entries: if more of those entries
- * are visible now than when the original eviction happened, the page could split. In most
- * workloads, this is very unlikely. However, since checkpoint is partway through reconciling
- * the parent page, a split can corrupt the checkpoint.
- */
- if (WT_SESSION_BTREE_SYNC(session) && page->modify->rec_result == WT_PM_REC_MULTIBLOCK)
- return (__wt_set_return(session, EBUSY));
-
- /*
* Success: assert that the page is clean or reconciliation was configured to save updates.
*/
WT_ASSERT(session,