summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Cahill <michael.cahill@mongodb.com>2016-04-12 13:21:31 +1000
committerAlex Gorrod <alexander.gorrod@mongodb.com>2016-04-12 13:21:31 +1000
commited2d07f2902bfb3c6e1c39ebd9828de060b421bc (patch)
tree8c98b7719f70cc89ba1eea56e45a18abd7ab1053
parent353af609a97782ff86c97e5b6994399821ca57bd (diff)
downloadmongo-ed2d07f2902bfb3c6e1c39ebd9828de060b421bc.tar.gz
Merge pull request #2478 from wiredtiger/wt-2361 (#2642)
* Merge pull request #2478 from wiredtiger/wt-2361 WT-2361 column-store starting record number error (cherry picked from commit 27763ba51a9f4dc8cc35e22e3a481219fa2d2d0b) * WT-2361 Don't force evict when eviction is disabled (e.g., during checkpoints).
-rw-r--r--src/btree/bt_page.c3
-rw-r--r--src/btree/bt_split.c9
2 files changed, 11 insertions, 1 deletions
diff --git a/src/btree/bt_page.c b/src/btree/bt_page.c
index ad8f0293108..4531538de7d 100644
--- a/src/btree/bt_page.c
+++ b/src/btree/bt_page.c
@@ -135,7 +135,8 @@ __wt_page_in_func(WT_SESSION_IMPL *session, WT_REF *ref, uint32_t flags
/*
* Forcibly evict pages that are too big.
*/
- if (force_attempts < 10 &&
+ if (!F_ISSET(session, WT_SESSION_NO_CACHE_CHECK) &&
+ force_attempts < 10 &&
__evict_force_check(session, page, flags)) {
++force_attempts;
ret = __wt_page_release_evict(session, ref);
diff --git a/src/btree/bt_split.c b/src/btree/bt_split.c
index 6e0436bb01f..7f3620bb361 100644
--- a/src/btree/bt_split.c
+++ b/src/btree/bt_split.c
@@ -1289,6 +1289,15 @@ __split_insert(WT_SESSION_IMPL *session, WT_REF *ref)
__wt_page_modify_set(session, right);
/*
+ * We perform insert splits concurrently with checkpoints, where the
+ * requirement is a checkpoint must include either the original page
+ * or both new pages. The page we're splitting is dirty, but that's
+ * insufficient: set the first dirty transaction to an impossibly old
+ * value so this page is not skipped by a checkpoint.
+ */
+ page->modify->first_dirty_txn = WT_TXN_FIRST;
+
+ /*
* We modified the page above, which will have set the first dirty
* transaction to the last transaction current running. However, the
* updates we installed may be older than that. Set the first dirty