summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSusan LoVerso <sue@wiredtiger.com>2014-12-03 09:25:18 -0500
committerSusan LoVerso <sue@wiredtiger.com>2014-12-03 09:25:18 -0500
commit80488baea6ae3cd1dc6afd76e2850d3c11636805 (patch)
tree2ddc33853fd49433bf638fdd0dabef6e1d128a48
parentc51da773be4a244611681bc30bcfa2a16008b239 (diff)
parentcaa5e82926639fca349ea70d0f7b17e939d03ad7 (diff)
downloadmongo-80488baea6ae3cd1dc6afd76e2850d3c11636805.tar.gz
Merge branch 'develop' into log-recycle
-rw-r--r--bench/wtperf/runners/evict-lsm.wtperf2
-rw-r--r--src/btree/rec_evict.c35
-rw-r--r--src/btree/rec_split.c9
-rw-r--r--src/config/config_check.c2
4 files changed, 23 insertions, 25 deletions
diff --git a/bench/wtperf/runners/evict-lsm.wtperf b/bench/wtperf/runners/evict-lsm.wtperf
index 962f6a60201..c51cb7859c1 100644
--- a/bench/wtperf/runners/evict-lsm.wtperf
+++ b/bench/wtperf/runners/evict-lsm.wtperf
@@ -1,6 +1,6 @@
# wtperf options file: evict lsm configuration
conn_config="cache_size=50M,lsm_manager=(worker_thread_max=6)"
-table_config="type=lsm,os_cache_dirty_max=16MB"
+table_config="type=lsm,lsm=(chunk_size=2M),os_cache_dirty_max=16MB"
compact=true
icount=10000000
report_interval=5
diff --git a/src/btree/rec_evict.c b/src/btree/rec_evict.c
index f8dd4708ffd..4fec0f023de 100644
--- a/src/btree/rec_evict.c
+++ b/src/btree/rec_evict.c
@@ -284,24 +284,6 @@ __rec_review(WT_SESSION_IMPL *session, WT_REF *ref,
* valid memory.
*/
__wt_evict_list_clear_page(session, ref);
-
- /*
- * Check for an append-only workload needing an in-memory split.
- *
- * We can't do this earlier because in-memory splits require
- * exclusive access. If an in-memory split completes, the page
- * stays in memory and the tree is left in the desired state:
- * avoid the usual cleanup.
- *
- * Attempt the split before checking whether a checkpoint is
- * running - that's not a problem here because we aren't
- * evicting any dirty pages.
- */
- if (top) {
- WT_RET(__wt_split_insert(session, ref, inmem_splitp));
- if (*inmem_splitp)
- return (0);
- }
}
/*
@@ -377,6 +359,23 @@ __rec_review(WT_SESSION_IMPL *session, WT_REF *ref,
}
/*
+ * Check for an append-only workload needing an in-memory split.
+ *
+ * We can't do this earlier because in-memory splits require exclusive
+ * access. If an in-memory split completes, the page stays in memory
+ * and the tree is left in the desired state: avoid the usual cleanup.
+ *
+ * Attempt the split before checking whether a checkpoint is running -
+ * that's not a problem here because we aren't evicting any dirty
+ * pages.
+ */
+ if (top && !exclusive) {
+ WT_RET(__wt_split_insert(session, ref, inmem_splitp));
+ if (*inmem_splitp)
+ return (0);
+ }
+
+ /*
* Fail if any page in the top-level page's subtree won't be merged into
* its parent, the page that cannot be merged must be evicted first.
* The test is necessary but should not fire much: the eviction code is
diff --git a/src/btree/rec_split.c b/src/btree/rec_split.c
index dea44503c55..e25f0b73e01 100644
--- a/src/btree/rec_split.c
+++ b/src/btree/rec_split.c
@@ -1033,15 +1033,14 @@ __wt_split_insert(WT_SESSION_IMPL *session, WT_REF *ref, int *splitp)
* discarding the tree, check and see if it's worth doing a split to
* let the threads continue before doing eviction.
*
- * Ignore anything other than row-store leaf pages.
- * Ignore small pages.
+ * Ignore anything other than large, dirty row-store leaf pages.
*
* XXX KEITH
* Need a better test for append-only workloads.
*/
- if (page->type != WT_PAGE_ROW_LEAF)
- return (0);
- if (page->memory_footprint < 10 * btree->maxleafpage)
+ if (page->type != WT_PAGE_ROW_LEAF ||
+ page->memory_footprint < btree->maxmempage ||
+ !__wt_page_is_modified(page))
return (0);
/*
diff --git a/src/config/config_check.c b/src/config/config_check.c
index 310e54c3349..c6fd6bbd75b 100644
--- a/src/config/config_check.c
+++ b/src/config/config_check.c
@@ -73,7 +73,7 @@ __wt_configure_method(WT_SESSION_IMPL *session,
/*
* !!!
* We ignore the specified uri, that is, all new configuration options
- * will be valid for all data sources. That's shouldn't be too bad
+ * will be valid for all data sources. That shouldn't be too bad
* as the worst that can happen is an application might specify some
* configuration option and not get an error -- the option should be
* ignored by the underlying implementation since it's unexpected, so