summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger
diff options
context:
space:
mode:
authorLuke Chen <luke.chen@mongodb.com>2018-04-10 18:25:30 +1000
committerLuke Chen <luke.chen@mongodb.com>2018-04-10 18:25:30 +1000
commit5ae38f156cb08fd5a66eb9e9327953e99442fc9c (patch)
treebdda4141d8e63aeab38fc8b615d521a8772546e8 /src/third_party/wiredtiger
parent9be2c132cb4713e13bbaa5648077e5346a29c99b (diff)
downloadmongo-5ae38f156cb08fd5a66eb9e9327953e99442fc9c.tar.gz
Import wiredtiger: 5bfcc924079afdcd6dda22c29b5fa60a14ec3dc9 from branch mongodb-3.8
ref: ea986ede14..5bfcc92407 for: 3.7.4 WT-3886 Identify statistics relevant for prepared transactions WT-3910 Fix libwiredtiger-3.0.1.dylib loading failure on OS X WT-4006 Add support for stress timing configurations to test/format WT-4009 Create fast path for cursor caching with "overwrite=false" WT-4014 If eviction walk is interrupted, clean up the queue. WT-4015 Enhance schema06 unit test to test drops WT-4017 When evicting during a checkpoint, avoid splits WT-4028 Don't check for a modified page without holding the ref locked
Diffstat (limited to 'src/third_party/wiredtiger')
-rw-r--r--src/third_party/wiredtiger/dist/api_data.py15
-rw-r--r--src/third_party/wiredtiger/dist/stat_data.py7
-rw-r--r--src/third_party/wiredtiger/import.data2
-rw-r--r--src/third_party/wiredtiger/src/btree/bt_delete.c12
-rw-r--r--src/third_party/wiredtiger/src/btree/bt_split.c20
-rw-r--r--src/third_party/wiredtiger/src/config/config_def.c25
-rw-r--r--src/third_party/wiredtiger/src/conn/conn_api.c24
-rw-r--r--src/third_party/wiredtiger/src/cursor/cur_std.c14
-rw-r--r--src/third_party/wiredtiger/src/evict/evict_lru.c17
-rw-r--r--src/third_party/wiredtiger/src/evict/evict_page.c21
-rw-r--r--src/third_party/wiredtiger/src/include/connection.h11
-rw-r--r--src/third_party/wiredtiger/src/include/stat.h7
-rw-r--r--src/third_party/wiredtiger/src/include/txn.i2
-rw-r--r--src/third_party/wiredtiger/src/include/wiredtiger.in638
-rw-r--r--src/third_party/wiredtiger/src/session/session_api.c16
-rw-r--r--src/third_party/wiredtiger/src/support/stat.c25
-rw-r--r--src/third_party/wiredtiger/test/format/config.h32
-rw-r--r--src/third_party/wiredtiger/test/format/format.h8
-rw-r--r--src/third_party/wiredtiger/test/format/wts.c20
-rw-r--r--src/third_party/wiredtiger/test/mciproject.yml16
-rw-r--r--src/third_party/wiredtiger/test/suite/test_schema06.py6
21 files changed, 564 insertions, 374 deletions
diff --git a/src/third_party/wiredtiger/dist/api_data.py b/src/third_party/wiredtiger/dist/api_data.py
index f54d2e1fe5b..89072b51df7 100644
--- a/src/third_party/wiredtiger/dist/api_data.py
+++ b/src/third_party/wiredtiger/dist/api_data.py
@@ -589,14 +589,13 @@ connection_runtime_config = [
type='list',
choices=['all', 'cache_walk', 'fast', 'none', 'clear', 'tree_walk']),
Config('timing_stress_for_test', '', r'''
- enable code that interrupts the usual timing of operations with a
- goal of uncovering race conditions and unexpected blocking.
- This option is intended for use with internal stress
- testing of WiredTiger. Options are given as a list, such as
- <code>"timing_stress_for_test=[checkpoint_slow,
- internal_page_split_race, page_split_race]"</code>''',
- type='list', undoc=True, choices=[
- 'checkpoint_slow', 'internal_page_split_race', 'page_split_race']),
+ enable code that interrupts the usual timing of operations with a goal
+ of uncovering race conditions and unexpected blocking. This option is
+ intended for use with internal stress testing of WiredTiger.''',
+ type='list', undoc=True,
+ choices=[
+ 'checkpoint_slow', 'split_race_1', 'split_race_2', 'split_race_3',
+ 'split_race_4', 'split_race_5', 'split_race_6', 'split_race_7']),
Config('verbose', '', r'''
enable messages for various events. Options are given as a
list, such as <code>"verbose=[evictserver,read]"</code>''',
diff --git a/src/third_party/wiredtiger/dist/stat_data.py b/src/third_party/wiredtiger/dist/stat_data.py
index 8b79d2daed8..2e8b1756913 100644
--- a/src/third_party/wiredtiger/dist/stat_data.py
+++ b/src/third_party/wiredtiger/dist/stat_data.py
@@ -272,6 +272,7 @@ connection_stats = [
CacheStat('cache_read_app_count', 'application threads page read from disk to cache count'),
CacheStat('cache_read_app_time', 'application threads page read from disk to cache time (usecs)'),
CacheStat('cache_read_deleted', 'pages read into cache after truncate'),
+ CacheStat('cache_read_deleted_prepared', 'pages read into cache after truncate in prepare state'),
CacheStat('cache_read_lookaside', 'pages read into cache requiring lookaside entries'),
CacheStat('cache_read_lookaside_delay', 'pages read into cache with skipped lookaside entries needed later'),
CacheStat('cache_read_lookaside_skipped', 'pages read into cache skipping older lookaside entries'),
@@ -513,6 +514,10 @@ connection_stats = [
TxnStat('txn_pinned_snapshot_range', 'transaction range of IDs currently pinned by named snapshots', 'no_clear,no_scale'),
TxnStat('txn_pinned_timestamp', 'transaction range of timestamps currently pinned', 'no_clear,no_scale'),
TxnStat('txn_pinned_timestamp_oldest', 'transaction range of timestamps pinned by the oldest timestamp', 'no_clear,no_scale'),
+ TxnStat('txn_prepare', 'prepared transactions'),
+ TxnStat('txn_prepare_active', 'prepared transactions currently active'),
+ TxnStat('txn_prepare_commit', 'prepared transactions committed'),
+ TxnStat('txn_prepare_rollback', 'prepared transactions rolled back'),
TxnStat('txn_query_ts', 'query timestamp calls'),
TxnStat('txn_read_queue_empty', 'read timestamp queue insert to empty'),
TxnStat('txn_read_queue_head', 'read timestamp queue inserts to head'),
@@ -550,6 +555,7 @@ connection_stats = [
YieldStat('page_locked_blocked', 'page acquire locked blocked'),
YieldStat('page_read_blocked', 'page acquire read blocked'),
YieldStat('page_sleep', 'page acquire time sleeping (usecs)'),
+ YieldStat('prepared_transition_blocked_page', 'page access yielded due to prepare state change'),
YieldStat('txn_release_blocked', 'connection close blocked waiting for transaction state stabilization'),
]
@@ -630,6 +636,7 @@ dsrc_stats = [
CacheStat('cache_pages_requested', 'pages requested from the cache'),
CacheStat('cache_read', 'pages read into cache'),
CacheStat('cache_read_deleted', 'pages read into cache after truncate'),
+ CacheStat('cache_read_deleted_prepared', 'pages read into cache after truncate in prepare state'),
CacheStat('cache_read_lookaside', 'pages read into cache requiring lookaside entries'),
CacheStat('cache_read_overflow', 'overflow pages read into cache'),
CacheStat('cache_write', 'pages written from cache'),
diff --git a/src/third_party/wiredtiger/import.data b/src/third_party/wiredtiger/import.data
index dc6689f6bf1..39867b1ec14 100644
--- a/src/third_party/wiredtiger/import.data
+++ b/src/third_party/wiredtiger/import.data
@@ -1,5 +1,5 @@
{
- "commit": "ea986ede145b8c2e3da8f8d11ef25813770c0b39",
+ "commit": "5bfcc924079afdcd6dda22c29b5fa60a14ec3dc9",
"github": "wiredtiger/wiredtiger.git",
"vendor": "wiredtiger",
"branch": "mongodb-3.8"
diff --git a/src/third_party/wiredtiger/src/btree/bt_delete.c b/src/third_party/wiredtiger/src/btree/bt_delete.c
index a10c82d2cf2..cb283fc0f92 100644
--- a/src/third_party/wiredtiger/src/btree/bt_delete.c
+++ b/src/third_party/wiredtiger/src/btree/bt_delete.c
@@ -71,13 +71,9 @@ __wt_delete_page(WT_SESSION_IMPL *session, WT_REF *ref, bool *skipp)
*skipp = false;
- /*
- * If we have a clean page in memory, attempt to evict it. Do a fast
- * check for a dirty page, and then repeat the test once we're locked.
- */
+ /* If we have a clean page in memory, attempt to evict it. */
previous_state = ref->state;
if ((previous_state == WT_REF_MEM || previous_state == WT_REF_LIMBO) &&
- !__wt_page_is_modified(ref->page) &&
__wt_atomic_casv32(&ref->state, previous_state, WT_REF_LOCKED)) {
if (__wt_page_is_modified(ref->page)) {
ref->state = previous_state;
@@ -372,6 +368,12 @@ __wt_delete_page_instantiate(WT_SESSION_IMPL *session, WT_REF *ref)
if (btree->modified)
__wt_page_modify_set(session, page);
+ if (ref->page_del != NULL &&
+ ref->page_del->prepare_state != WT_PREPARE_INIT) {
+ WT_STAT_CONN_INCR(session, cache_read_deleted_prepared);
+ WT_STAT_DATA_INCR(session, cache_read_deleted_prepared);
+ }
+
/*
* An operation is accessing a "deleted" page, and we're building an
* in-memory version of the page (making it look like all entries in
diff --git a/src/third_party/wiredtiger/src/btree/bt_split.c b/src/third_party/wiredtiger/src/btree/bt_split.c
index 3596f5a72b7..57effcbae7c 100644
--- a/src/third_party/wiredtiger/src/btree/bt_split.c
+++ b/src/third_party/wiredtiger/src/btree/bt_split.c
@@ -36,8 +36,8 @@ typedef enum {
* debug purposes. The purpose is to uncover the race conditions in page split.
*/
static void
-__page_split_timing_stress(WT_SESSION_IMPL *session,
- uint32_t flag, uint64_t micro_seconds)
+__page_split_timing_stress(
+ WT_SESSION_IMPL *session, uint64_t flag, uint64_t micro_seconds)
{
WT_CONNECTION_IMPL *conn;
@@ -522,7 +522,7 @@ __split_root(WT_SESSION_IMPL *session, WT_PAGE *root)
/* Encourage a race */
__page_split_timing_stress(session,
- WT_TIMING_STRESS_INTERNAL_PAGE_SPLIT_RACE, 100 * WT_THOUSAND);
+ WT_TIMING_STRESS_SPLIT_RACE_1, 100 * WT_THOUSAND);
/*
* Confirm the root page's index hasn't moved, then update it, which
@@ -534,7 +534,7 @@ __split_root(WT_SESSION_IMPL *session, WT_PAGE *root)
/* Encourage a race */
__page_split_timing_stress(session,
- WT_TIMING_STRESS_INTERNAL_PAGE_SPLIT_RACE, 100 * WT_THOUSAND);
+ WT_TIMING_STRESS_SPLIT_RACE_2, 100 * WT_THOUSAND);
/*
* Get a generation for this split, mark the root page. This must be
@@ -723,7 +723,7 @@ __split_parent(WT_SESSION_IMPL *session, WT_REF *ref, WT_REF **ref_new,
/* Encourage a race */
__page_split_timing_stress(session,
- WT_TIMING_STRESS_INTERNAL_PAGE_SPLIT_RACE, 100 * WT_THOUSAND);
+ WT_TIMING_STRESS_SPLIT_RACE_3, 100 * WT_THOUSAND);
/*
* Confirm the parent page's index hasn't moved then update it, which
@@ -735,7 +735,7 @@ __split_parent(WT_SESSION_IMPL *session, WT_REF *ref, WT_REF **ref_new,
/* Encourage a race */
__page_split_timing_stress(session,
- WT_TIMING_STRESS_INTERNAL_PAGE_SPLIT_RACE, 100 * WT_THOUSAND);
+ WT_TIMING_STRESS_SPLIT_RACE_4, 100 * WT_THOUSAND);
/*
* Get a generation for this split, mark the page. This must be after
@@ -1077,7 +1077,7 @@ __split_internal(WT_SESSION_IMPL *session, WT_PAGE *parent, WT_PAGE *page)
/* Encourage a race */
__page_split_timing_stress(session,
- WT_TIMING_STRESS_INTERNAL_PAGE_SPLIT_RACE, 100 * WT_THOUSAND);
+ WT_TIMING_STRESS_SPLIT_RACE_5, 100 * WT_THOUSAND);
/* Split into the parent. */
WT_ERR(__split_parent(session, page_ref, alloc_index->index,
@@ -1092,7 +1092,7 @@ __split_internal(WT_SESSION_IMPL *session, WT_PAGE *parent, WT_PAGE *page)
/* Encourage a race */
__page_split_timing_stress(session,
- WT_TIMING_STRESS_INTERNAL_PAGE_SPLIT_RACE, 100 * WT_THOUSAND);
+ WT_TIMING_STRESS_SPLIT_RACE_6, 100 * WT_THOUSAND);
/*
* Get a generation for this split, mark the parent page. This must be
@@ -1205,9 +1205,9 @@ __split_internal_lock(
for (;;) {
parent = ref->home;
- /* Encourage race */
+ /* Encourage races. */
__page_split_timing_stress(session,
- WT_TIMING_STRESS_PAGE_SPLIT_RACE, WT_THOUSAND);
+ WT_TIMING_STRESS_SPLIT_RACE_7, WT_THOUSAND);
/* Page locks live in the modify structure. */
WT_RET(__wt_page_modify_init(session, parent));
diff --git a/src/third_party/wiredtiger/src/config/config_def.c b/src/third_party/wiredtiger/src/config/config_def.c
index bd68a8b0937..9c692fd8075 100644
--- a/src/third_party/wiredtiger/src/config/config_def.c
+++ b/src/third_party/wiredtiger/src/config/config_def.c
@@ -187,8 +187,9 @@ static const WT_CONFIG_CHECK confchk_WT_CONNECTION_reconfigure[] = {
NULL, NULL,
confchk_WT_CONNECTION_reconfigure_statistics_log_subconfigs, 5 },
{ "timing_stress_for_test", "list",
- NULL, "choices=[\"checkpoint_slow\",\"internal_page_split_race\""
- ",\"page_split_race\"]",
+ NULL, "choices=[\"checkpoint_slow\",\"split_race_1\","
+ "\"split_race_2\",\"split_race_3\",\"split_race_4\","
+ "\"split_race_5\",\"split_race_6\",\"split_race_7\"]",
NULL, 0 },
{ "verbose", "list",
NULL, "choices=[\"api\",\"block\",\"checkpoint\","
@@ -868,8 +869,9 @@ static const WT_CONFIG_CHECK confchk_wiredtiger_open[] = {
NULL, NULL,
confchk_wiredtiger_open_statistics_log_subconfigs, 6 },
{ "timing_stress_for_test", "list",
- NULL, "choices=[\"checkpoint_slow\",\"internal_page_split_race\""
- ",\"page_split_race\"]",
+ NULL, "choices=[\"checkpoint_slow\",\"split_race_1\","
+ "\"split_race_2\",\"split_race_3\",\"split_race_4\","
+ "\"split_race_5\",\"split_race_6\",\"split_race_7\"]",
NULL, 0 },
{ "transaction_sync", "category",
NULL, NULL,
@@ -970,8 +972,9 @@ static const WT_CONFIG_CHECK confchk_wiredtiger_open_all[] = {
NULL, NULL,
confchk_wiredtiger_open_statistics_log_subconfigs, 6 },
{ "timing_stress_for_test", "list",
- NULL, "choices=[\"checkpoint_slow\",\"internal_page_split_race\""
- ",\"page_split_race\"]",
+ NULL, "choices=[\"checkpoint_slow\",\"split_race_1\","
+ "\"split_race_2\",\"split_race_3\",\"split_race_4\","
+ "\"split_race_5\",\"split_race_6\",\"split_race_7\"]",
NULL, 0 },
{ "transaction_sync", "category",
NULL, NULL,
@@ -1069,8 +1072,9 @@ static const WT_CONFIG_CHECK confchk_wiredtiger_open_basecfg[] = {
NULL, NULL,
confchk_wiredtiger_open_statistics_log_subconfigs, 6 },
{ "timing_stress_for_test", "list",
- NULL, "choices=[\"checkpoint_slow\",\"internal_page_split_race\""
- ",\"page_split_race\"]",
+ NULL, "choices=[\"checkpoint_slow\",\"split_race_1\","
+ "\"split_race_2\",\"split_race_3\",\"split_race_4\","
+ "\"split_race_5\",\"split_race_6\",\"split_race_7\"]",
NULL, 0 },
{ "transaction_sync", "category",
NULL, NULL,
@@ -1166,8 +1170,9 @@ static const WT_CONFIG_CHECK confchk_wiredtiger_open_usercfg[] = {
NULL, NULL,
confchk_wiredtiger_open_statistics_log_subconfigs, 6 },
{ "timing_stress_for_test", "list",
- NULL, "choices=[\"checkpoint_slow\",\"internal_page_split_race\""
- ",\"page_split_race\"]",
+ NULL, "choices=[\"checkpoint_slow\",\"split_race_1\","
+ "\"split_race_2\",\"split_race_3\",\"split_race_4\","
+ "\"split_race_5\",\"split_race_6\",\"split_race_7\"]",
NULL, 0 },
{ "transaction_sync", "category",
NULL, NULL,
diff --git a/src/third_party/wiredtiger/src/conn/conn_api.c b/src/third_party/wiredtiger/src/conn/conn_api.c
index 6f23508ba14..c67ec597f66 100644
--- a/src/third_party/wiredtiger/src/conn/conn_api.c
+++ b/src/third_party/wiredtiger/src/conn/conn_api.c
@@ -1987,16 +1987,29 @@ err: __wt_scr_free(session, &buf);
/*
* __wt_timing_stress_config --
- * Set timing stress for test delay configuration.
+ * Set timing stress configuration. There are a places we optionally make
+ * threads sleep in order to stress the system and increase the likelihood of
+ * failure. For example, there are several places where page splits are delayed
+ * to make cursor iteration races more likely.
*/
int
__wt_timing_stress_config(WT_SESSION_IMPL *session, const char *cfg[])
{
+ /*
+ * Each split race delay is controlled using a different flag to allow
+ * more effective race condition detection, since enabling all delays
+ * at once can lead to an overall slowdown to the point where race
+ * conditions aren't encountered.
+ */
static const WT_NAME_FLAG stress_types[] = {
{ "checkpoint_slow", WT_TIMING_STRESS_CHECKPOINT_SLOW },
- { "internal_page_split_race",
- WT_TIMING_STRESS_INTERNAL_PAGE_SPLIT_RACE },
- { "page_split_race", WT_TIMING_STRESS_PAGE_SPLIT_RACE },
+ { "split_race_1", WT_TIMING_STRESS_SPLIT_RACE_1 },
+ { "split_race_2", WT_TIMING_STRESS_SPLIT_RACE_2 },
+ { "split_race_3", WT_TIMING_STRESS_SPLIT_RACE_3 },
+ { "split_race_4", WT_TIMING_STRESS_SPLIT_RACE_4 },
+ { "split_race_5", WT_TIMING_STRESS_SPLIT_RACE_5 },
+ { "split_race_6", WT_TIMING_STRESS_SPLIT_RACE_6 },
+ { "split_race_7", WT_TIMING_STRESS_SPLIT_RACE_7 },
{ NULL, 0 }
};
WT_CONFIG_ITEM cval, sval;
@@ -2007,8 +2020,7 @@ __wt_timing_stress_config(WT_SESSION_IMPL *session, const char *cfg[])
conn = S2C(session);
- WT_RET(__wt_config_gets(
- session, cfg, "timing_stress_for_test", &cval));
+ WT_RET(__wt_config_gets(session, cfg, "timing_stress_for_test", &cval));
flags = 0;
for (ft = stress_types; ft->name != NULL; ft++) {
diff --git a/src/third_party/wiredtiger/src/cursor/cur_std.c b/src/third_party/wiredtiger/src/cursor/cur_std.c
index 00a6bc4645d..766712c244c 100644
--- a/src/third_party/wiredtiger/src/cursor/cur_std.c
+++ b/src/third_party/wiredtiger/src/cursor/cur_std.c
@@ -710,6 +710,7 @@ __wt_cursor_cache_get(WT_SESSION_IMPL *session, const char *uri,
WT_CURSOR *cursor;
WT_DECL_RET;
uint64_t bucket, hash_value;
+ uint32_t overwrite_flag;
bool have_config;
if (!F_ISSET(session, WT_SESSION_CACHE_CURSORS))
@@ -719,6 +720,14 @@ __wt_cursor_cache_get(WT_SESSION_IMPL *session, const char *uri,
have_config = (cfg != NULL && cfg[0] != NULL && cfg[1] != NULL &&
(cfg[2] != NULL || cfg[1][0] != '\0'));
+ /* Fast path overwrite configuration */
+ if (have_config && cfg[2] == NULL &&
+ WT_STREQ(cfg[1], "overwrite=false")) {
+ have_config = false;
+ overwrite_flag = 0;
+ } else
+ overwrite_flag = WT_CURSTD_OVERWRITE;
+
if (have_config) {
/*
* Any cursors that have special configuration cannot
@@ -785,8 +794,9 @@ __wt_cursor_cache_get(WT_SESSION_IMPL *session, const char *uri,
* cursor other than flag values, so fix
* them up according to the given configuration.
*/
- F_CLR(cursor, WT_CURSTD_APPEND | WT_CURSTD_RAW);
- F_SET(cursor, WT_CURSTD_OVERWRITE);
+ F_CLR(cursor, WT_CURSTD_APPEND | WT_CURSTD_RAW |
+ WT_CURSTD_OVERWRITE);
+ F_SET(cursor, overwrite_flag);
if (have_config) {
/*
diff --git a/src/third_party/wiredtiger/src/evict/evict_lru.c b/src/third_party/wiredtiger/src/evict/evict_lru.c
index 46d52ee0c68..7e769c03cf0 100644
--- a/src/third_party/wiredtiger/src/evict/evict_lru.c
+++ b/src/third_party/wiredtiger/src/evict/evict_lru.c
@@ -1224,13 +1224,6 @@ __evict_lru_walk(WT_SESSION_IMPL *session)
cache->evict_empty_score < WT_EVICT_SCORE_CUTOFF)
goto err;
- /* Get some more pages to consider for eviction. */
- if ((ret = __evict_walk(cache->walk_session, queue)) == EBUSY) {
- ret = 0;
- goto err; /* An interrupt was requested, give up. */
- }
- WT_ERR_NOTFOUND_OK(ret);
-
/*
* If the queue we are filling is empty, pages are being requested
* faster than they are being queued.
@@ -1245,6 +1238,16 @@ __evict_lru_walk(WT_SESSION_IMPL *session)
} else
WT_STAT_CONN_INCR(session, cache_eviction_queue_not_empty);
+ /*
+ * Get some more pages to consider for eviction.
+ *
+ * If the walk is interrupted, we still need to sort the queue: the
+ * next walk assumes there are no entries beyond WT_EVICT_WALK_BASE.
+ */
+ if ((ret = __evict_walk(cache->walk_session, queue)) == EBUSY)
+ ret = 0;
+ WT_ERR_NOTFOUND_OK(ret);
+
/* Sort the list into LRU order and restart. */
__wt_spin_lock(session, &queue->evict_lock);
diff --git a/src/third_party/wiredtiger/src/evict/evict_page.c b/src/third_party/wiredtiger/src/evict/evict_page.c
index 719fa7e8c5f..d0203fea19c 100644
--- a/src/third_party/wiredtiger/src/evict/evict_page.c
+++ b/src/third_party/wiredtiger/src/evict/evict_page.c
@@ -609,10 +609,10 @@ __evict_review(
ret = __wt_reconcile(session, ref, NULL, flags, lookaside_retryp);
/*
- * If attempting eviction in service of a checkpoint, we may
- * successfully reconcile but then find that there are updates on the
- * page too new to evict. Give up evicting in that case: checkpoint
- * will include the reconciled page when it visits the parent.
+ * If attempting eviction during a checkpoint, we may successfully
+ * reconcile but then find that there are updates on the page too new
+ * to evict. Give up evicting in that case: checkpoint will include
+ * the reconciled page when it visits the parent.
*/
if (WT_SESSION_IS_CHECKPOINT(session) && !__wt_page_is_modified(page) &&
!__wt_txn_visible_all(session, page->modify->rec_max_txn,
@@ -634,6 +634,19 @@ __evict_review(
WT_RET(ret);
/*
+ * Give up on eviction during a checkpoint if the page splits.
+ *
+ * We get here if checkpoint reads a page with lookaside 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_IS_CHECKPOINT(session) &&
+ page->modify->rec_result == WT_PM_REC_MULTIBLOCK)
+ return (EBUSY);
+
+ /*
* Success: assert the page is clean or reconciliation was configured
* for update/restore. If the page is clean, assert that reconciliation
* was configured for a lookaside table, or it's not a durable object
diff --git a/src/third_party/wiredtiger/src/include/connection.h b/src/third_party/wiredtiger/src/include/connection.h
index 193c1ced8be..e9573087469 100644
--- a/src/third_party/wiredtiger/src/include/connection.h
+++ b/src/third_party/wiredtiger/src/include/connection.h
@@ -442,9 +442,14 @@ struct __wt_connection_impl {
* delays have been requested.
*/
/* AUTOMATIC FLAG VALUE GENERATION START */
-#define WT_TIMING_STRESS_CHECKPOINT_SLOW 0x1u
-#define WT_TIMING_STRESS_INTERNAL_PAGE_SPLIT_RACE 0x2u
-#define WT_TIMING_STRESS_PAGE_SPLIT_RACE 0x4u
+#define WT_TIMING_STRESS_CHECKPOINT_SLOW 0x01u
+#define WT_TIMING_STRESS_SPLIT_RACE_1 0x02u
+#define WT_TIMING_STRESS_SPLIT_RACE_2 0x04u
+#define WT_TIMING_STRESS_SPLIT_RACE_3 0x08u
+#define WT_TIMING_STRESS_SPLIT_RACE_4 0x10u
+#define WT_TIMING_STRESS_SPLIT_RACE_5 0x20u
+#define WT_TIMING_STRESS_SPLIT_RACE_6 0x40u
+#define WT_TIMING_STRESS_SPLIT_RACE_7 0x80u
/* AUTOMATIC FLAG VALUE GENERATION STOP */
uint64_t timing_stress_flags;
diff --git a/src/third_party/wiredtiger/src/include/stat.h b/src/third_party/wiredtiger/src/include/stat.h
index 616ca59b57e..1aa00902359 100644
--- a/src/third_party/wiredtiger/src/include/stat.h
+++ b/src/third_party/wiredtiger/src/include/stat.h
@@ -420,6 +420,7 @@ struct __wt_connection_stats {
int64_t cache_eviction_pages_queued_oldest;
int64_t cache_read;
int64_t cache_read_deleted;
+ int64_t cache_read_deleted_prepared;
int64_t cache_read_lookaside;
int64_t cache_read_lookaside_skipped;
int64_t cache_read_lookaside_delay;
@@ -609,6 +610,7 @@ struct __wt_connection_stats {
int64_t dhandle_lock_blocked;
int64_t page_index_slot_ref_blocked;
int64_t log_server_sync_blocked;
+ int64_t prepared_transition_blocked_page;
int64_t page_busy_blocked;
int64_t page_forcible_evict_blocked;
int64_t page_locked_blocked;
@@ -622,6 +624,10 @@ struct __wt_connection_stats {
int64_t txn_commit_queue_len;
int64_t txn_snapshots_created;
int64_t txn_snapshots_dropped;
+ int64_t txn_prepare;
+ int64_t txn_prepare_commit;
+ int64_t txn_prepare_active;
+ int64_t txn_prepare_rollback;
int64_t txn_query_ts;
int64_t txn_read_queue_empty;
int64_t txn_read_queue_head;
@@ -737,6 +743,7 @@ struct __wt_dsrc_stats {
int64_t cache_write_lookaside;
int64_t cache_read;
int64_t cache_read_deleted;
+ int64_t cache_read_deleted_prepared;
int64_t cache_read_lookaside;
int64_t cache_pages_requested;
int64_t cache_eviction_pages_seen;
diff --git a/src/third_party/wiredtiger/src/include/txn.i b/src/third_party/wiredtiger/src/include/txn.i
index f077ef164e9..33c5712d9cb 100644
--- a/src/third_party/wiredtiger/src/include/txn.i
+++ b/src/third_party/wiredtiger/src/include/txn.i
@@ -581,6 +581,8 @@ __wt_txn_upd_visible_type(WT_SESSION_IMPL *session, WT_UPDATE *upd)
WT_ORDERED_READ(prepare_state, upd->prepare_state);
if (previous_state == prepare_state)
break;
+
+ WT_STAT_CONN_INCR(session, prepared_transition_blocked_page);
}
if (!upd_visible)
diff --git a/src/third_party/wiredtiger/src/include/wiredtiger.in b/src/third_party/wiredtiger/src/include/wiredtiger.in
index 1c3b75ec6ae..822e5419c05 100644
--- a/src/third_party/wiredtiger/src/include/wiredtiger.in
+++ b/src/third_party/wiredtiger/src/include/wiredtiger.in
@@ -5106,543 +5106,555 @@ extern int wiredtiger_extension_terminate(WT_CONNECTION *connection);
#define WT_STAT_CONN_CACHE_READ 1105
/*! cache: pages read into cache after truncate */
#define WT_STAT_CONN_CACHE_READ_DELETED 1106
+/*! cache: pages read into cache after truncate in prepare state */
+#define WT_STAT_CONN_CACHE_READ_DELETED_PREPARED 1107
/*! cache: pages read into cache requiring lookaside entries */
-#define WT_STAT_CONN_CACHE_READ_LOOKASIDE 1107
+#define WT_STAT_CONN_CACHE_READ_LOOKASIDE 1108
/*! cache: pages read into cache skipping older lookaside entries */
-#define WT_STAT_CONN_CACHE_READ_LOOKASIDE_SKIPPED 1108
+#define WT_STAT_CONN_CACHE_READ_LOOKASIDE_SKIPPED 1109
/*!
* cache: pages read into cache with skipped lookaside entries needed
* later
*/
-#define WT_STAT_CONN_CACHE_READ_LOOKASIDE_DELAY 1109
+#define WT_STAT_CONN_CACHE_READ_LOOKASIDE_DELAY 1110
/*! cache: pages requested from the cache */
-#define WT_STAT_CONN_CACHE_PAGES_REQUESTED 1110
+#define WT_STAT_CONN_CACHE_PAGES_REQUESTED 1111
/*! cache: pages seen by eviction walk */
-#define WT_STAT_CONN_CACHE_EVICTION_PAGES_SEEN 1111
+#define WT_STAT_CONN_CACHE_EVICTION_PAGES_SEEN 1112
/*! cache: pages selected for eviction unable to be evicted */
-#define WT_STAT_CONN_CACHE_EVICTION_FAIL 1112
+#define WT_STAT_CONN_CACHE_EVICTION_FAIL 1113
/*! cache: pages walked for eviction */
-#define WT_STAT_CONN_CACHE_EVICTION_WALK 1113
+#define WT_STAT_CONN_CACHE_EVICTION_WALK 1114
/*! cache: pages written from cache */
-#define WT_STAT_CONN_CACHE_WRITE 1114
+#define WT_STAT_CONN_CACHE_WRITE 1115
/*! cache: pages written requiring in-memory restoration */
-#define WT_STAT_CONN_CACHE_WRITE_RESTORE 1115
+#define WT_STAT_CONN_CACHE_WRITE_RESTORE 1116
/*! cache: percentage overhead */
-#define WT_STAT_CONN_CACHE_OVERHEAD 1116
+#define WT_STAT_CONN_CACHE_OVERHEAD 1117
/*! cache: tracked bytes belonging to internal pages in the cache */
-#define WT_STAT_CONN_CACHE_BYTES_INTERNAL 1117
+#define WT_STAT_CONN_CACHE_BYTES_INTERNAL 1118
/*! cache: tracked bytes belonging to leaf pages in the cache */
-#define WT_STAT_CONN_CACHE_BYTES_LEAF 1118
+#define WT_STAT_CONN_CACHE_BYTES_LEAF 1119
/*! cache: tracked dirty bytes in the cache */
-#define WT_STAT_CONN_CACHE_BYTES_DIRTY 1119
+#define WT_STAT_CONN_CACHE_BYTES_DIRTY 1120
/*! cache: tracked dirty pages in the cache */
-#define WT_STAT_CONN_CACHE_PAGES_DIRTY 1120
+#define WT_STAT_CONN_CACHE_PAGES_DIRTY 1121
/*! cache: unmodified pages evicted */
-#define WT_STAT_CONN_CACHE_EVICTION_CLEAN 1121
+#define WT_STAT_CONN_CACHE_EVICTION_CLEAN 1122
/*! connection: auto adjusting condition resets */
-#define WT_STAT_CONN_COND_AUTO_WAIT_RESET 1122
+#define WT_STAT_CONN_COND_AUTO_WAIT_RESET 1123
/*! connection: auto adjusting condition wait calls */
-#define WT_STAT_CONN_COND_AUTO_WAIT 1123
+#define WT_STAT_CONN_COND_AUTO_WAIT 1124
/*! connection: detected system time went backwards */
-#define WT_STAT_CONN_TIME_TRAVEL 1124
+#define WT_STAT_CONN_TIME_TRAVEL 1125
/*! connection: files currently open */
-#define WT_STAT_CONN_FILE_OPEN 1125
+#define WT_STAT_CONN_FILE_OPEN 1126
/*! connection: memory allocations */
-#define WT_STAT_CONN_MEMORY_ALLOCATION 1126
+#define WT_STAT_CONN_MEMORY_ALLOCATION 1127
/*! connection: memory frees */
-#define WT_STAT_CONN_MEMORY_FREE 1127
+#define WT_STAT_CONN_MEMORY_FREE 1128
/*! connection: memory re-allocations */
-#define WT_STAT_CONN_MEMORY_GROW 1128
+#define WT_STAT_CONN_MEMORY_GROW 1129
/*! connection: pthread mutex condition wait calls */
-#define WT_STAT_CONN_COND_WAIT 1129
+#define WT_STAT_CONN_COND_WAIT 1130
/*! connection: pthread mutex shared lock read-lock calls */
-#define WT_STAT_CONN_RWLOCK_READ 1130
+#define WT_STAT_CONN_RWLOCK_READ 1131
/*! connection: pthread mutex shared lock write-lock calls */
-#define WT_STAT_CONN_RWLOCK_WRITE 1131
+#define WT_STAT_CONN_RWLOCK_WRITE 1132
/*! connection: total fsync I/Os */
-#define WT_STAT_CONN_FSYNC_IO 1132
+#define WT_STAT_CONN_FSYNC_IO 1133
/*! connection: total read I/Os */
-#define WT_STAT_CONN_READ_IO 1133
+#define WT_STAT_CONN_READ_IO 1134
/*! connection: total write I/Os */
-#define WT_STAT_CONN_WRITE_IO 1134
+#define WT_STAT_CONN_WRITE_IO 1135
/*! cursor: cursor create calls */
-#define WT_STAT_CONN_CURSOR_CREATE 1135
+#define WT_STAT_CONN_CURSOR_CREATE 1136
/*! cursor: cursor insert calls */
-#define WT_STAT_CONN_CURSOR_INSERT 1136
+#define WT_STAT_CONN_CURSOR_INSERT 1137
/*! cursor: cursor modify calls */
-#define WT_STAT_CONN_CURSOR_MODIFY 1137
+#define WT_STAT_CONN_CURSOR_MODIFY 1138
/*! cursor: cursor next calls */
-#define WT_STAT_CONN_CURSOR_NEXT 1138
+#define WT_STAT_CONN_CURSOR_NEXT 1139
/*! cursor: cursor prev calls */
-#define WT_STAT_CONN_CURSOR_PREV 1139
+#define WT_STAT_CONN_CURSOR_PREV 1140
/*! cursor: cursor remove calls */
-#define WT_STAT_CONN_CURSOR_REMOVE 1140
+#define WT_STAT_CONN_CURSOR_REMOVE 1141
/*! cursor: cursor reserve calls */
-#define WT_STAT_CONN_CURSOR_RESERVE 1141
+#define WT_STAT_CONN_CURSOR_RESERVE 1142
/*! cursor: cursor reset calls */
-#define WT_STAT_CONN_CURSOR_RESET 1142
+#define WT_STAT_CONN_CURSOR_RESET 1143
/*! cursor: cursor restarted searches */
-#define WT_STAT_CONN_CURSOR_RESTART 1143
+#define WT_STAT_CONN_CURSOR_RESTART 1144
/*! cursor: cursor search calls */
-#define WT_STAT_CONN_CURSOR_SEARCH 1144
+#define WT_STAT_CONN_CURSOR_SEARCH 1145
/*! cursor: cursor search near calls */
-#define WT_STAT_CONN_CURSOR_SEARCH_NEAR 1145
+#define WT_STAT_CONN_CURSOR_SEARCH_NEAR 1146
/*! cursor: cursor sweep buckets */
-#define WT_STAT_CONN_CURSOR_SWEEP_BUCKETS 1146
+#define WT_STAT_CONN_CURSOR_SWEEP_BUCKETS 1147
/*! cursor: cursor sweep cursors closed */
-#define WT_STAT_CONN_CURSOR_SWEEP_CLOSED 1147
+#define WT_STAT_CONN_CURSOR_SWEEP_CLOSED 1148
/*! cursor: cursor sweep cursors examined */
-#define WT_STAT_CONN_CURSOR_SWEEP_EXAMINED 1148
+#define WT_STAT_CONN_CURSOR_SWEEP_EXAMINED 1149
/*! cursor: cursor sweeps */
-#define WT_STAT_CONN_CURSOR_SWEEP 1149
+#define WT_STAT_CONN_CURSOR_SWEEP 1150
/*! cursor: cursor update calls */
-#define WT_STAT_CONN_CURSOR_UPDATE 1150
+#define WT_STAT_CONN_CURSOR_UPDATE 1151
/*! cursor: cursors cached on close */
-#define WT_STAT_CONN_CURSOR_CACHE 1151
+#define WT_STAT_CONN_CURSOR_CACHE 1152
/*! cursor: cursors reused from cache */
-#define WT_STAT_CONN_CURSOR_REOPEN 1152
+#define WT_STAT_CONN_CURSOR_REOPEN 1153
/*! cursor: truncate calls */
-#define WT_STAT_CONN_CURSOR_TRUNCATE 1153
+#define WT_STAT_CONN_CURSOR_TRUNCATE 1154
/*! data-handle: connection data handles currently active */
-#define WT_STAT_CONN_DH_CONN_HANDLE_COUNT 1154
+#define WT_STAT_CONN_DH_CONN_HANDLE_COUNT 1155
/*! data-handle: connection sweep candidate became referenced */
-#define WT_STAT_CONN_DH_SWEEP_REF 1155
+#define WT_STAT_CONN_DH_SWEEP_REF 1156
/*! data-handle: connection sweep dhandles closed */
-#define WT_STAT_CONN_DH_SWEEP_CLOSE 1156
+#define WT_STAT_CONN_DH_SWEEP_CLOSE 1157
/*! data-handle: connection sweep dhandles removed from hash list */
-#define WT_STAT_CONN_DH_SWEEP_REMOVE 1157
+#define WT_STAT_CONN_DH_SWEEP_REMOVE 1158
/*! data-handle: connection sweep time-of-death sets */
-#define WT_STAT_CONN_DH_SWEEP_TOD 1158
+#define WT_STAT_CONN_DH_SWEEP_TOD 1159
/*! data-handle: connection sweeps */
-#define WT_STAT_CONN_DH_SWEEPS 1159
+#define WT_STAT_CONN_DH_SWEEPS 1160
/*! data-handle: session dhandles swept */
-#define WT_STAT_CONN_DH_SESSION_HANDLES 1160
+#define WT_STAT_CONN_DH_SESSION_HANDLES 1161
/*! data-handle: session sweep attempts */
-#define WT_STAT_CONN_DH_SESSION_SWEEPS 1161
+#define WT_STAT_CONN_DH_SESSION_SWEEPS 1162
/*! lock: checkpoint lock acquisitions */
-#define WT_STAT_CONN_LOCK_CHECKPOINT_COUNT 1162
+#define WT_STAT_CONN_LOCK_CHECKPOINT_COUNT 1163
/*! lock: checkpoint lock application thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_APPLICATION 1163
+#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_APPLICATION 1164
/*! lock: checkpoint lock internal thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_INTERNAL 1164
+#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_INTERNAL 1165
/*!
* lock: commit timestamp queue lock application thread time waiting for
* the dhandle lock (usecs)
*/
-#define WT_STAT_CONN_LOCK_COMMIT_TIMESTAMP_WAIT_APPLICATION 1165
+#define WT_STAT_CONN_LOCK_COMMIT_TIMESTAMP_WAIT_APPLICATION 1166
/*!
* lock: commit timestamp queue lock internal thread time waiting for the
* dhandle lock (usecs)
*/
-#define WT_STAT_CONN_LOCK_COMMIT_TIMESTAMP_WAIT_INTERNAL 1166
+#define WT_STAT_CONN_LOCK_COMMIT_TIMESTAMP_WAIT_INTERNAL 1167
/*! lock: commit timestamp queue read lock acquisitions */
-#define WT_STAT_CONN_LOCK_COMMIT_TIMESTAMP_READ_COUNT 1167
+#define WT_STAT_CONN_LOCK_COMMIT_TIMESTAMP_READ_COUNT 1168
/*! lock: commit timestamp queue write lock acquisitions */
-#define WT_STAT_CONN_LOCK_COMMIT_TIMESTAMP_WRITE_COUNT 1168
+#define WT_STAT_CONN_LOCK_COMMIT_TIMESTAMP_WRITE_COUNT 1169
/*!
* lock: dhandle lock application thread time waiting for the dhandle
* lock (usecs)
*/
-#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_APPLICATION 1169
+#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_APPLICATION 1170
/*!
* lock: dhandle lock internal thread time waiting for the dhandle lock
* (usecs)
*/
-#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_INTERNAL 1170
+#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_INTERNAL 1171
/*! lock: dhandle read lock acquisitions */
-#define WT_STAT_CONN_LOCK_DHANDLE_READ_COUNT 1171
+#define WT_STAT_CONN_LOCK_DHANDLE_READ_COUNT 1172
/*! lock: dhandle write lock acquisitions */
-#define WT_STAT_CONN_LOCK_DHANDLE_WRITE_COUNT 1172
+#define WT_STAT_CONN_LOCK_DHANDLE_WRITE_COUNT 1173
/*! lock: metadata lock acquisitions */
-#define WT_STAT_CONN_LOCK_METADATA_COUNT 1173
+#define WT_STAT_CONN_LOCK_METADATA_COUNT 1174
/*! lock: metadata lock application thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_METADATA_WAIT_APPLICATION 1174
+#define WT_STAT_CONN_LOCK_METADATA_WAIT_APPLICATION 1175
/*! lock: metadata lock internal thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_METADATA_WAIT_INTERNAL 1175
+#define WT_STAT_CONN_LOCK_METADATA_WAIT_INTERNAL 1176
/*!
* lock: read timestamp queue lock application thread time waiting for
* the dhandle lock (usecs)
*/
-#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_APPLICATION 1176
+#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_APPLICATION 1177
/*!
* lock: read timestamp queue lock internal thread time waiting for the
* dhandle lock (usecs)
*/
-#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_INTERNAL 1177
+#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_INTERNAL 1178
/*! lock: read timestamp queue read lock acquisitions */
-#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_READ_COUNT 1178
+#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_READ_COUNT 1179
/*! lock: read timestamp queue write lock acquisitions */
-#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WRITE_COUNT 1179
+#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WRITE_COUNT 1180
/*! lock: schema lock acquisitions */
-#define WT_STAT_CONN_LOCK_SCHEMA_COUNT 1180
+#define WT_STAT_CONN_LOCK_SCHEMA_COUNT 1181
/*! lock: schema lock application thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_APPLICATION 1181
+#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_APPLICATION 1182
/*! lock: schema lock internal thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_INTERNAL 1182
+#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_INTERNAL 1183
/*!
* lock: table lock application thread time waiting for the table lock
* (usecs)
*/
-#define WT_STAT_CONN_LOCK_TABLE_WAIT_APPLICATION 1183
+#define WT_STAT_CONN_LOCK_TABLE_WAIT_APPLICATION 1184
/*!
* lock: table lock internal thread time waiting for the table lock
* (usecs)
*/
-#define WT_STAT_CONN_LOCK_TABLE_WAIT_INTERNAL 1184
+#define WT_STAT_CONN_LOCK_TABLE_WAIT_INTERNAL 1185
/*! lock: table read lock acquisitions */
-#define WT_STAT_CONN_LOCK_TABLE_READ_COUNT 1185
+#define WT_STAT_CONN_LOCK_TABLE_READ_COUNT 1186
/*! lock: table write lock acquisitions */
-#define WT_STAT_CONN_LOCK_TABLE_WRITE_COUNT 1186
+#define WT_STAT_CONN_LOCK_TABLE_WRITE_COUNT 1187
/*!
* lock: txn global lock application thread time waiting for the dhandle
* lock (usecs)
*/
-#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_APPLICATION 1187
+#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_APPLICATION 1188
/*!
* lock: txn global lock internal thread time waiting for the dhandle
* lock (usecs)
*/
-#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_INTERNAL 1188
+#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_INTERNAL 1189
/*! lock: txn global read lock acquisitions */
-#define WT_STAT_CONN_LOCK_TXN_GLOBAL_READ_COUNT 1189
+#define WT_STAT_CONN_LOCK_TXN_GLOBAL_READ_COUNT 1190
/*! lock: txn global write lock acquisitions */
-#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WRITE_COUNT 1190
+#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WRITE_COUNT 1191
/*! log: busy returns attempting to switch slots */
-#define WT_STAT_CONN_LOG_SLOT_SWITCH_BUSY 1191
+#define WT_STAT_CONN_LOG_SLOT_SWITCH_BUSY 1192
/*! log: force checkpoint calls slept */
-#define WT_STAT_CONN_LOG_FORCE_CKPT_SLEEP 1192
+#define WT_STAT_CONN_LOG_FORCE_CKPT_SLEEP 1193
/*! log: log bytes of payload data */
-#define WT_STAT_CONN_LOG_BYTES_PAYLOAD 1193
+#define WT_STAT_CONN_LOG_BYTES_PAYLOAD 1194
/*! log: log bytes written */
-#define WT_STAT_CONN_LOG_BYTES_WRITTEN 1194
+#define WT_STAT_CONN_LOG_BYTES_WRITTEN 1195
/*! log: log files manually zero-filled */
-#define WT_STAT_CONN_LOG_ZERO_FILLS 1195
+#define WT_STAT_CONN_LOG_ZERO_FILLS 1196
/*! log: log flush operations */
-#define WT_STAT_CONN_LOG_FLUSH 1196
+#define WT_STAT_CONN_LOG_FLUSH 1197
/*! log: log force write operations */
-#define WT_STAT_CONN_LOG_FORCE_WRITE 1197
+#define WT_STAT_CONN_LOG_FORCE_WRITE 1198
/*! log: log force write operations skipped */
-#define WT_STAT_CONN_LOG_FORCE_WRITE_SKIP 1198
+#define WT_STAT_CONN_LOG_FORCE_WRITE_SKIP 1199
/*! log: log records compressed */
-#define WT_STAT_CONN_LOG_COMPRESS_WRITES 1199
+#define WT_STAT_CONN_LOG_COMPRESS_WRITES 1200
/*! log: log records not compressed */
-#define WT_STAT_CONN_LOG_COMPRESS_WRITE_FAILS 1200
+#define WT_STAT_CONN_LOG_COMPRESS_WRITE_FAILS 1201
/*! log: log records too small to compress */
-#define WT_STAT_CONN_LOG_COMPRESS_SMALL 1201
+#define WT_STAT_CONN_LOG_COMPRESS_SMALL 1202
/*! log: log release advances write LSN */
-#define WT_STAT_CONN_LOG_RELEASE_WRITE_LSN 1202
+#define WT_STAT_CONN_LOG_RELEASE_WRITE_LSN 1203
/*! log: log scan operations */
-#define WT_STAT_CONN_LOG_SCANS 1203
+#define WT_STAT_CONN_LOG_SCANS 1204
/*! log: log scan records requiring two reads */
-#define WT_STAT_CONN_LOG_SCAN_REREADS 1204
+#define WT_STAT_CONN_LOG_SCAN_REREADS 1205
/*! log: log server thread advances write LSN */
-#define WT_STAT_CONN_LOG_WRITE_LSN 1205
+#define WT_STAT_CONN_LOG_WRITE_LSN 1206
/*! log: log server thread write LSN walk skipped */
-#define WT_STAT_CONN_LOG_WRITE_LSN_SKIP 1206
+#define WT_STAT_CONN_LOG_WRITE_LSN_SKIP 1207
/*! log: log sync operations */
-#define WT_STAT_CONN_LOG_SYNC 1207
+#define WT_STAT_CONN_LOG_SYNC 1208
/*! log: log sync time duration (usecs) */
-#define WT_STAT_CONN_LOG_SYNC_DURATION 1208
+#define WT_STAT_CONN_LOG_SYNC_DURATION 1209
/*! log: log sync_dir operations */
-#define WT_STAT_CONN_LOG_SYNC_DIR 1209
+#define WT_STAT_CONN_LOG_SYNC_DIR 1210
/*! log: log sync_dir time duration (usecs) */
-#define WT_STAT_CONN_LOG_SYNC_DIR_DURATION 1210
+#define WT_STAT_CONN_LOG_SYNC_DIR_DURATION 1211
/*! log: log write operations */
-#define WT_STAT_CONN_LOG_WRITES 1211
+#define WT_STAT_CONN_LOG_WRITES 1212
/*! log: logging bytes consolidated */
-#define WT_STAT_CONN_LOG_SLOT_CONSOLIDATED 1212
+#define WT_STAT_CONN_LOG_SLOT_CONSOLIDATED 1213
/*! log: maximum log file size */
-#define WT_STAT_CONN_LOG_MAX_FILESIZE 1213
+#define WT_STAT_CONN_LOG_MAX_FILESIZE 1214
/*! log: number of pre-allocated log files to create */
-#define WT_STAT_CONN_LOG_PREALLOC_MAX 1214
+#define WT_STAT_CONN_LOG_PREALLOC_MAX 1215
/*! log: pre-allocated log files not ready and missed */
-#define WT_STAT_CONN_LOG_PREALLOC_MISSED 1215
+#define WT_STAT_CONN_LOG_PREALLOC_MISSED 1216
/*! log: pre-allocated log files prepared */
-#define WT_STAT_CONN_LOG_PREALLOC_FILES 1216
+#define WT_STAT_CONN_LOG_PREALLOC_FILES 1217
/*! log: pre-allocated log files used */
-#define WT_STAT_CONN_LOG_PREALLOC_USED 1217
+#define WT_STAT_CONN_LOG_PREALLOC_USED 1218
/*! log: records processed by log scan */
-#define WT_STAT_CONN_LOG_SCAN_RECORDS 1218
+#define WT_STAT_CONN_LOG_SCAN_RECORDS 1219
/*! log: slot close lost race */
-#define WT_STAT_CONN_LOG_SLOT_CLOSE_RACE 1219
+#define WT_STAT_CONN_LOG_SLOT_CLOSE_RACE 1220
/*! log: slot close unbuffered waits */
-#define WT_STAT_CONN_LOG_SLOT_CLOSE_UNBUF 1220
+#define WT_STAT_CONN_LOG_SLOT_CLOSE_UNBUF 1221
/*! log: slot closures */
-#define WT_STAT_CONN_LOG_SLOT_CLOSES 1221
+#define WT_STAT_CONN_LOG_SLOT_CLOSES 1222
/*! log: slot join atomic update races */
-#define WT_STAT_CONN_LOG_SLOT_RACES 1222
+#define WT_STAT_CONN_LOG_SLOT_RACES 1223
/*! log: slot join calls atomic updates raced */
-#define WT_STAT_CONN_LOG_SLOT_YIELD_RACE 1223
+#define WT_STAT_CONN_LOG_SLOT_YIELD_RACE 1224
/*! log: slot join calls did not yield */
-#define WT_STAT_CONN_LOG_SLOT_IMMEDIATE 1224
+#define WT_STAT_CONN_LOG_SLOT_IMMEDIATE 1225
/*! log: slot join calls found active slot closed */
-#define WT_STAT_CONN_LOG_SLOT_YIELD_CLOSE 1225
+#define WT_STAT_CONN_LOG_SLOT_YIELD_CLOSE 1226
/*! log: slot join calls slept */
-#define WT_STAT_CONN_LOG_SLOT_YIELD_SLEEP 1226
+#define WT_STAT_CONN_LOG_SLOT_YIELD_SLEEP 1227
/*! log: slot join calls yielded */
-#define WT_STAT_CONN_LOG_SLOT_YIELD 1227
+#define WT_STAT_CONN_LOG_SLOT_YIELD 1228
/*! log: slot join found active slot closed */
-#define WT_STAT_CONN_LOG_SLOT_ACTIVE_CLOSED 1228
+#define WT_STAT_CONN_LOG_SLOT_ACTIVE_CLOSED 1229
/*! log: slot joins yield time (usecs) */
-#define WT_STAT_CONN_LOG_SLOT_YIELD_DURATION 1229
+#define WT_STAT_CONN_LOG_SLOT_YIELD_DURATION 1230
/*! log: slot transitions unable to find free slot */
-#define WT_STAT_CONN_LOG_SLOT_NO_FREE_SLOTS 1230
+#define WT_STAT_CONN_LOG_SLOT_NO_FREE_SLOTS 1231
/*! log: slot unbuffered writes */
-#define WT_STAT_CONN_LOG_SLOT_UNBUFFERED 1231
+#define WT_STAT_CONN_LOG_SLOT_UNBUFFERED 1232
/*! log: total in-memory size of compressed records */
-#define WT_STAT_CONN_LOG_COMPRESS_MEM 1232
+#define WT_STAT_CONN_LOG_COMPRESS_MEM 1233
/*! log: total log buffer size */
-#define WT_STAT_CONN_LOG_BUFFER_SIZE 1233
+#define WT_STAT_CONN_LOG_BUFFER_SIZE 1234
/*! log: total size of compressed records */
-#define WT_STAT_CONN_LOG_COMPRESS_LEN 1234
+#define WT_STAT_CONN_LOG_COMPRESS_LEN 1235
/*! log: written slots coalesced */
-#define WT_STAT_CONN_LOG_SLOT_COALESCED 1235
+#define WT_STAT_CONN_LOG_SLOT_COALESCED 1236
/*! log: yields waiting for previous log file close */
-#define WT_STAT_CONN_LOG_CLOSE_YIELDS 1236
+#define WT_STAT_CONN_LOG_CLOSE_YIELDS 1237
/*! perf: file system read latency histogram (bucket 1) - 10-49ms */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT50 1237
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT50 1238
/*! perf: file system read latency histogram (bucket 2) - 50-99ms */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT100 1238
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT100 1239
/*! perf: file system read latency histogram (bucket 3) - 100-249ms */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT250 1239
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT250 1240
/*! perf: file system read latency histogram (bucket 4) - 250-499ms */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT500 1240
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT500 1241
/*! perf: file system read latency histogram (bucket 5) - 500-999ms */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT1000 1241
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT1000 1242
/*! perf: file system read latency histogram (bucket 6) - 1000ms+ */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_GT1000 1242
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_GT1000 1243
/*! perf: file system write latency histogram (bucket 1) - 10-49ms */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT50 1243
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT50 1244
/*! perf: file system write latency histogram (bucket 2) - 50-99ms */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT100 1244
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT100 1245
/*! perf: file system write latency histogram (bucket 3) - 100-249ms */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT250 1245
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT250 1246
/*! perf: file system write latency histogram (bucket 4) - 250-499ms */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT500 1246
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT500 1247
/*! perf: file system write latency histogram (bucket 5) - 500-999ms */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT1000 1247
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT1000 1248
/*! perf: file system write latency histogram (bucket 6) - 1000ms+ */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_GT1000 1248
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_GT1000 1249
/*! perf: operation read latency histogram (bucket 1) - 100-249us */
-#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT250 1249
+#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT250 1250
/*! perf: operation read latency histogram (bucket 2) - 250-499us */
-#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT500 1250
+#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT500 1251
/*! perf: operation read latency histogram (bucket 3) - 500-999us */
-#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT1000 1251
+#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT1000 1252
/*! perf: operation read latency histogram (bucket 4) - 1000-9999us */
-#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT10000 1252
+#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT10000 1253
/*! perf: operation read latency histogram (bucket 5) - 10000us+ */
-#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_GT10000 1253
+#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_GT10000 1254
/*! perf: operation write latency histogram (bucket 1) - 100-249us */
-#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT250 1254
+#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT250 1255
/*! perf: operation write latency histogram (bucket 2) - 250-499us */
-#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT500 1255
+#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT500 1256
/*! perf: operation write latency histogram (bucket 3) - 500-999us */
-#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT1000 1256
+#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT1000 1257
/*! perf: operation write latency histogram (bucket 4) - 1000-9999us */
-#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT10000 1257
+#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT10000 1258
/*! perf: operation write latency histogram (bucket 5) - 10000us+ */
-#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_GT10000 1258
+#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_GT10000 1259
/*! reconciliation: fast-path pages deleted */
-#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1259
+#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1260
/*! reconciliation: page reconciliation calls */
-#define WT_STAT_CONN_REC_PAGES 1260
+#define WT_STAT_CONN_REC_PAGES 1261
/*! reconciliation: page reconciliation calls for eviction */
-#define WT_STAT_CONN_REC_PAGES_EVICTION 1261
+#define WT_STAT_CONN_REC_PAGES_EVICTION 1262
/*! reconciliation: pages deleted */
-#define WT_STAT_CONN_REC_PAGE_DELETE 1262
+#define WT_STAT_CONN_REC_PAGE_DELETE 1263
/*! reconciliation: split bytes currently awaiting free */
-#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1263
+#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1264
/*! reconciliation: split objects currently awaiting free */
-#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1264
+#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1265
/*! session: open cursor count */
-#define WT_STAT_CONN_SESSION_CURSOR_OPEN 1265
+#define WT_STAT_CONN_SESSION_CURSOR_OPEN 1266
/*! session: open session count */
-#define WT_STAT_CONN_SESSION_OPEN 1266
+#define WT_STAT_CONN_SESSION_OPEN 1267
/*! session: table alter failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1267
+#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1268
/*! session: table alter successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1268
+#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1269
/*! session: table alter unchanged and skipped */
-#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1269
+#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1270
/*! session: table compact failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1270
+#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1271
/*! session: table compact successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1271
+#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1272
/*! session: table create failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1272
+#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1273
/*! session: table create successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1273
+#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1274
/*! session: table drop failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1274
+#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1275
/*! session: table drop successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1275
+#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1276
/*! session: table rebalance failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_FAIL 1276
+#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_FAIL 1277
/*! session: table rebalance successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_SUCCESS 1277
+#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_SUCCESS 1278
/*! session: table rename failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1278
+#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1279
/*! session: table rename successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1279
+#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1280
/*! session: table salvage failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1280
+#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1281
/*! session: table salvage successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1281
+#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1282
/*! session: table truncate failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1282
+#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1283
/*! session: table truncate successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1283
+#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1284
/*! session: table verify failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1284
+#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1285
/*! session: table verify successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1285
+#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1286
/*! thread-state: active filesystem fsync calls */
-#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1286
+#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1287
/*! thread-state: active filesystem read calls */
-#define WT_STAT_CONN_THREAD_READ_ACTIVE 1287
+#define WT_STAT_CONN_THREAD_READ_ACTIVE 1288
/*! thread-state: active filesystem write calls */
-#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1288
+#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1289
/*! thread-yield: application thread time evicting (usecs) */
-#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1289
+#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1290
/*! thread-yield: application thread time waiting for cache (usecs) */
-#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1290
+#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1291
/*!
* thread-yield: connection close blocked waiting for transaction state
* stabilization
*/
-#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1291
+#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1292
/*! thread-yield: connection close yielded for lsm manager shutdown */
-#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1292
+#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1293
/*! thread-yield: data handle lock yielded */
-#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1293
+#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1294
/*!
* thread-yield: get reference for page index and slot time sleeping
* (usecs)
*/
-#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1294
+#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1295
/*! thread-yield: log server sync yielded for log write */
-#define WT_STAT_CONN_LOG_SERVER_SYNC_BLOCKED 1295
+#define WT_STAT_CONN_LOG_SERVER_SYNC_BLOCKED 1296
+/*! thread-yield: page access yielded due to prepare state change */
+#define WT_STAT_CONN_PREPARED_TRANSITION_BLOCKED_PAGE 1297
/*! thread-yield: page acquire busy blocked */
-#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1296
+#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1298
/*! thread-yield: page acquire eviction blocked */
-#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1297
+#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1299
/*! thread-yield: page acquire locked blocked */
-#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1298
+#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1300
/*! thread-yield: page acquire read blocked */
-#define WT_STAT_CONN_PAGE_READ_BLOCKED 1299
+#define WT_STAT_CONN_PAGE_READ_BLOCKED 1301
/*! thread-yield: page acquire time sleeping (usecs) */
-#define WT_STAT_CONN_PAGE_SLEEP 1300
+#define WT_STAT_CONN_PAGE_SLEEP 1302
/*!
* thread-yield: page delete rollback time sleeping for state change
* (usecs)
*/
-#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1301
+#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1303
/*! thread-yield: page reconciliation yielded due to child modification */
-#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1302
+#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1304
/*! transaction: commit timestamp queue insert to empty */
-#define WT_STAT_CONN_TXN_COMMIT_QUEUE_EMPTY 1303
+#define WT_STAT_CONN_TXN_COMMIT_QUEUE_EMPTY 1305
/*! transaction: commit timestamp queue inserts to tail */
-#define WT_STAT_CONN_TXN_COMMIT_QUEUE_TAIL 1304
+#define WT_STAT_CONN_TXN_COMMIT_QUEUE_TAIL 1306
/*! transaction: commit timestamp queue inserts total */
-#define WT_STAT_CONN_TXN_COMMIT_QUEUE_INSERTS 1305
+#define WT_STAT_CONN_TXN_COMMIT_QUEUE_INSERTS 1307
/*! transaction: commit timestamp queue length */
-#define WT_STAT_CONN_TXN_COMMIT_QUEUE_LEN 1306
+#define WT_STAT_CONN_TXN_COMMIT_QUEUE_LEN 1308
/*! transaction: number of named snapshots created */
-#define WT_STAT_CONN_TXN_SNAPSHOTS_CREATED 1307
+#define WT_STAT_CONN_TXN_SNAPSHOTS_CREATED 1309
/*! transaction: number of named snapshots dropped */
-#define WT_STAT_CONN_TXN_SNAPSHOTS_DROPPED 1308
+#define WT_STAT_CONN_TXN_SNAPSHOTS_DROPPED 1310
+/*! transaction: prepared transactions */
+#define WT_STAT_CONN_TXN_PREPARE 1311
+/*! transaction: prepared transactions committed */
+#define WT_STAT_CONN_TXN_PREPARE_COMMIT 1312
+/*! transaction: prepared transactions currently active */
+#define WT_STAT_CONN_TXN_PREPARE_ACTIVE 1313
+/*! transaction: prepared transactions rolled back */
+#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK 1314
/*! transaction: query timestamp calls */
-#define WT_STAT_CONN_TXN_QUERY_TS 1309
+#define WT_STAT_CONN_TXN_QUERY_TS 1315
/*! transaction: read timestamp queue insert to empty */
-#define WT_STAT_CONN_TXN_READ_QUEUE_EMPTY 1310
+#define WT_STAT_CONN_TXN_READ_QUEUE_EMPTY 1316
/*! transaction: read timestamp queue inserts to head */
-#define WT_STAT_CONN_TXN_READ_QUEUE_HEAD 1311
+#define WT_STAT_CONN_TXN_READ_QUEUE_HEAD 1317
/*! transaction: read timestamp queue inserts total */
-#define WT_STAT_CONN_TXN_READ_QUEUE_INSERTS 1312
+#define WT_STAT_CONN_TXN_READ_QUEUE_INSERTS 1318
/*! transaction: read timestamp queue length */
-#define WT_STAT_CONN_TXN_READ_QUEUE_LEN 1313
+#define WT_STAT_CONN_TXN_READ_QUEUE_LEN 1319
/*! transaction: rollback to stable calls */
-#define WT_STAT_CONN_TXN_ROLLBACK_TO_STABLE 1314
+#define WT_STAT_CONN_TXN_ROLLBACK_TO_STABLE 1320
/*! transaction: rollback to stable updates aborted */
-#define WT_STAT_CONN_TXN_ROLLBACK_UPD_ABORTED 1315
+#define WT_STAT_CONN_TXN_ROLLBACK_UPD_ABORTED 1321
/*! transaction: rollback to stable updates removed from lookaside */
-#define WT_STAT_CONN_TXN_ROLLBACK_LAS_REMOVED 1316
+#define WT_STAT_CONN_TXN_ROLLBACK_LAS_REMOVED 1322
/*! transaction: set timestamp calls */
-#define WT_STAT_CONN_TXN_SET_TS 1317
+#define WT_STAT_CONN_TXN_SET_TS 1323
/*! transaction: set timestamp commit calls */
-#define WT_STAT_CONN_TXN_SET_TS_COMMIT 1318
+#define WT_STAT_CONN_TXN_SET_TS_COMMIT 1324
/*! transaction: set timestamp commit updates */
-#define WT_STAT_CONN_TXN_SET_TS_COMMIT_UPD 1319
+#define WT_STAT_CONN_TXN_SET_TS_COMMIT_UPD 1325
/*! transaction: set timestamp oldest calls */
-#define WT_STAT_CONN_TXN_SET_TS_OLDEST 1320
+#define WT_STAT_CONN_TXN_SET_TS_OLDEST 1326
/*! transaction: set timestamp oldest updates */
-#define WT_STAT_CONN_TXN_SET_TS_OLDEST_UPD 1321
+#define WT_STAT_CONN_TXN_SET_TS_OLDEST_UPD 1327
/*! transaction: set timestamp stable calls */
-#define WT_STAT_CONN_TXN_SET_TS_STABLE 1322
+#define WT_STAT_CONN_TXN_SET_TS_STABLE 1328
/*! transaction: set timestamp stable updates */
-#define WT_STAT_CONN_TXN_SET_TS_STABLE_UPD 1323
+#define WT_STAT_CONN_TXN_SET_TS_STABLE_UPD 1329
/*! transaction: transaction begins */
-#define WT_STAT_CONN_TXN_BEGIN 1324
+#define WT_STAT_CONN_TXN_BEGIN 1330
/*! transaction: transaction checkpoint currently running */
-#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1325
+#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1331
/*! transaction: transaction checkpoint generation */
-#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1326
+#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1332
/*! transaction: transaction checkpoint max time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1327
+#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1333
/*! transaction: transaction checkpoint min time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1328
+#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1334
/*! transaction: transaction checkpoint most recent time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1329
+#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1335
/*! transaction: transaction checkpoint scrub dirty target */
-#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1330
+#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1336
/*! transaction: transaction checkpoint scrub time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1331
+#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1337
/*! transaction: transaction checkpoint total time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1332
+#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1338
/*! transaction: transaction checkpoints */
-#define WT_STAT_CONN_TXN_CHECKPOINT 1333
+#define WT_STAT_CONN_TXN_CHECKPOINT 1339
/*!
* transaction: transaction checkpoints skipped because database was
* clean
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1334
+#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1340
/*! transaction: transaction failures due to cache overflow */
-#define WT_STAT_CONN_TXN_FAIL_CACHE 1335
+#define WT_STAT_CONN_TXN_FAIL_CACHE 1341
/*!
* transaction: transaction fsync calls for checkpoint after allocating
* the transaction ID
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1336
+#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1342
/*!
* transaction: transaction fsync duration for checkpoint after
* allocating the transaction ID (usecs)
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1337
+#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1343
/*! transaction: transaction range of IDs currently pinned */
-#define WT_STAT_CONN_TXN_PINNED_RANGE 1338
+#define WT_STAT_CONN_TXN_PINNED_RANGE 1344
/*! transaction: transaction range of IDs currently pinned by a checkpoint */
-#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1339
+#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1345
/*!
* transaction: transaction range of IDs currently pinned by named
* snapshots
*/
-#define WT_STAT_CONN_TXN_PINNED_SNAPSHOT_RANGE 1340
+#define WT_STAT_CONN_TXN_PINNED_SNAPSHOT_RANGE 1346
/*! transaction: transaction range of timestamps currently pinned */
-#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP 1341
+#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP 1347
/*!
* transaction: transaction range of timestamps pinned by the oldest
* timestamp
*/
-#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST 1342
+#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST 1348
/*! transaction: transaction sync calls */
-#define WT_STAT_CONN_TXN_SYNC 1343
+#define WT_STAT_CONN_TXN_SYNC 1349
/*! transaction: transactions committed */
-#define WT_STAT_CONN_TXN_COMMIT 1344
+#define WT_STAT_CONN_TXN_COMMIT 1350
/*! transaction: transactions rolled back */
-#define WT_STAT_CONN_TXN_ROLLBACK 1345
+#define WT_STAT_CONN_TXN_ROLLBACK 1351
/*! transaction: update conflicts */
-#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1346
+#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1352
/*!
* @}
@@ -5826,220 +5838,222 @@ extern int wiredtiger_extension_terminate(WT_CONNECTION *connection);
#define WT_STAT_DSRC_CACHE_READ 2068
/*! cache: pages read into cache after truncate */
#define WT_STAT_DSRC_CACHE_READ_DELETED 2069
+/*! cache: pages read into cache after truncate in prepare state */
+#define WT_STAT_DSRC_CACHE_READ_DELETED_PREPARED 2070
/*! cache: pages read into cache requiring lookaside entries */
-#define WT_STAT_DSRC_CACHE_READ_LOOKASIDE 2070
+#define WT_STAT_DSRC_CACHE_READ_LOOKASIDE 2071
/*! cache: pages requested from the cache */
-#define WT_STAT_DSRC_CACHE_PAGES_REQUESTED 2071
+#define WT_STAT_DSRC_CACHE_PAGES_REQUESTED 2072
/*! cache: pages seen by eviction walk */
-#define WT_STAT_DSRC_CACHE_EVICTION_PAGES_SEEN 2072
+#define WT_STAT_DSRC_CACHE_EVICTION_PAGES_SEEN 2073
/*! cache: pages written from cache */
-#define WT_STAT_DSRC_CACHE_WRITE 2073
+#define WT_STAT_DSRC_CACHE_WRITE 2074
/*! cache: pages written requiring in-memory restoration */
-#define WT_STAT_DSRC_CACHE_WRITE_RESTORE 2074
+#define WT_STAT_DSRC_CACHE_WRITE_RESTORE 2075
/*! cache: tracked dirty bytes in the cache */
-#define WT_STAT_DSRC_CACHE_BYTES_DIRTY 2075
+#define WT_STAT_DSRC_CACHE_BYTES_DIRTY 2076
/*! cache: unmodified pages evicted */
-#define WT_STAT_DSRC_CACHE_EVICTION_CLEAN 2076
+#define WT_STAT_DSRC_CACHE_EVICTION_CLEAN 2077
/*!
* cache_walk: Average difference between current eviction generation
* when the page was last considered, only reported if cache_walk or all
* statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_GEN_AVG_GAP 2077
+#define WT_STAT_DSRC_CACHE_STATE_GEN_AVG_GAP 2078
/*!
* cache_walk: Average on-disk page image size seen, only reported if
* cache_walk or all statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_AVG_WRITTEN_SIZE 2078
+#define WT_STAT_DSRC_CACHE_STATE_AVG_WRITTEN_SIZE 2079
/*!
* cache_walk: Average time in cache for pages that have been visited by
* the eviction server, only reported if cache_walk or all statistics are
* enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_AVG_VISITED_AGE 2079
+#define WT_STAT_DSRC_CACHE_STATE_AVG_VISITED_AGE 2080
/*!
* cache_walk: Average time in cache for pages that have not been visited
* by the eviction server, only reported if cache_walk or all statistics
* are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_AVG_UNVISITED_AGE 2080
+#define WT_STAT_DSRC_CACHE_STATE_AVG_UNVISITED_AGE 2081
/*!
* cache_walk: Clean pages currently in cache, only reported if
* cache_walk or all statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_PAGES_CLEAN 2081
+#define WT_STAT_DSRC_CACHE_STATE_PAGES_CLEAN 2082
/*!
* cache_walk: Current eviction generation, only reported if cache_walk
* or all statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_GEN_CURRENT 2082
+#define WT_STAT_DSRC_CACHE_STATE_GEN_CURRENT 2083
/*!
* cache_walk: Dirty pages currently in cache, only reported if
* cache_walk or all statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_PAGES_DIRTY 2083
+#define WT_STAT_DSRC_CACHE_STATE_PAGES_DIRTY 2084
/*!
* cache_walk: Entries in the root page, only reported if cache_walk or
* all statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_ROOT_ENTRIES 2084
+#define WT_STAT_DSRC_CACHE_STATE_ROOT_ENTRIES 2085
/*!
* cache_walk: Internal pages currently in cache, only reported if
* cache_walk or all statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_PAGES_INTERNAL 2085
+#define WT_STAT_DSRC_CACHE_STATE_PAGES_INTERNAL 2086
/*!
* cache_walk: Leaf pages currently in cache, only reported if cache_walk
* or all statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_PAGES_LEAF 2086
+#define WT_STAT_DSRC_CACHE_STATE_PAGES_LEAF 2087
/*!
* cache_walk: Maximum difference between current eviction generation
* when the page was last considered, only reported if cache_walk or all
* statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_GEN_MAX_GAP 2087
+#define WT_STAT_DSRC_CACHE_STATE_GEN_MAX_GAP 2088
/*!
* cache_walk: Maximum page size seen, only reported if cache_walk or all
* statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_MAX_PAGESIZE 2088
+#define WT_STAT_DSRC_CACHE_STATE_MAX_PAGESIZE 2089
/*!
* cache_walk: Minimum on-disk page image size seen, only reported if
* cache_walk or all statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_MIN_WRITTEN_SIZE 2089
+#define WT_STAT_DSRC_CACHE_STATE_MIN_WRITTEN_SIZE 2090
/*!
* cache_walk: Number of pages never visited by eviction server, only
* reported if cache_walk or all statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_UNVISITED_COUNT 2090
+#define WT_STAT_DSRC_CACHE_STATE_UNVISITED_COUNT 2091
/*!
* cache_walk: On-disk page image sizes smaller than a single allocation
* unit, only reported if cache_walk or all statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_SMALLER_ALLOC_SIZE 2091
+#define WT_STAT_DSRC_CACHE_STATE_SMALLER_ALLOC_SIZE 2092
/*!
* cache_walk: Pages created in memory and never written, only reported
* if cache_walk or all statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_MEMORY 2092
+#define WT_STAT_DSRC_CACHE_STATE_MEMORY 2093
/*!
* cache_walk: Pages currently queued for eviction, only reported if
* cache_walk or all statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_QUEUED 2093
+#define WT_STAT_DSRC_CACHE_STATE_QUEUED 2094
/*!
* cache_walk: Pages that could not be queued for eviction, only reported
* if cache_walk or all statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_NOT_QUEUEABLE 2094
+#define WT_STAT_DSRC_CACHE_STATE_NOT_QUEUEABLE 2095
/*!
* cache_walk: Refs skipped during cache traversal, only reported if
* cache_walk or all statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_REFS_SKIPPED 2095
+#define WT_STAT_DSRC_CACHE_STATE_REFS_SKIPPED 2096
/*!
* cache_walk: Size of the root page, only reported if cache_walk or all
* statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_ROOT_SIZE 2096
+#define WT_STAT_DSRC_CACHE_STATE_ROOT_SIZE 2097
/*!
* cache_walk: Total number of pages currently in cache, only reported if
* cache_walk or all statistics are enabled
*/
-#define WT_STAT_DSRC_CACHE_STATE_PAGES 2097
+#define WT_STAT_DSRC_CACHE_STATE_PAGES 2098
/*! compression: compressed pages read */
-#define WT_STAT_DSRC_COMPRESS_READ 2098
+#define WT_STAT_DSRC_COMPRESS_READ 2099
/*! compression: compressed pages written */
-#define WT_STAT_DSRC_COMPRESS_WRITE 2099
+#define WT_STAT_DSRC_COMPRESS_WRITE 2100
/*! compression: page written failed to compress */
-#define WT_STAT_DSRC_COMPRESS_WRITE_FAIL 2100
+#define WT_STAT_DSRC_COMPRESS_WRITE_FAIL 2101
/*! compression: page written was too small to compress */
-#define WT_STAT_DSRC_COMPRESS_WRITE_TOO_SMALL 2101
+#define WT_STAT_DSRC_COMPRESS_WRITE_TOO_SMALL 2102
/*! compression: raw compression call failed, additional data available */
-#define WT_STAT_DSRC_COMPRESS_RAW_FAIL_TEMPORARY 2102
+#define WT_STAT_DSRC_COMPRESS_RAW_FAIL_TEMPORARY 2103
/*! compression: raw compression call failed, no additional data available */
-#define WT_STAT_DSRC_COMPRESS_RAW_FAIL 2103
+#define WT_STAT_DSRC_COMPRESS_RAW_FAIL 2104
/*! compression: raw compression call succeeded */
-#define WT_STAT_DSRC_COMPRESS_RAW_OK 2104
+#define WT_STAT_DSRC_COMPRESS_RAW_OK 2105
/*! cursor: bulk-loaded cursor-insert calls */
-#define WT_STAT_DSRC_CURSOR_INSERT_BULK 2105
+#define WT_STAT_DSRC_CURSOR_INSERT_BULK 2106
/*! cursor: create calls */
-#define WT_STAT_DSRC_CURSOR_CREATE 2106
+#define WT_STAT_DSRC_CURSOR_CREATE 2107
/*! cursor: cursor-insert key and value bytes inserted */
-#define WT_STAT_DSRC_CURSOR_INSERT_BYTES 2107
+#define WT_STAT_DSRC_CURSOR_INSERT_BYTES 2108
/*! cursor: cursor-remove key bytes removed */
-#define WT_STAT_DSRC_CURSOR_REMOVE_BYTES 2108
+#define WT_STAT_DSRC_CURSOR_REMOVE_BYTES 2109
/*! cursor: cursor-update value bytes updated */
-#define WT_STAT_DSRC_CURSOR_UPDATE_BYTES 2109
+#define WT_STAT_DSRC_CURSOR_UPDATE_BYTES 2110
/*! cursor: cursors cached on close */
-#define WT_STAT_DSRC_CURSOR_CACHE 2110
+#define WT_STAT_DSRC_CURSOR_CACHE 2111
/*! cursor: cursors reused from cache */
-#define WT_STAT_DSRC_CURSOR_REOPEN 2111
+#define WT_STAT_DSRC_CURSOR_REOPEN 2112
/*! cursor: insert calls */
-#define WT_STAT_DSRC_CURSOR_INSERT 2112
+#define WT_STAT_DSRC_CURSOR_INSERT 2113
/*! cursor: modify calls */
-#define WT_STAT_DSRC_CURSOR_MODIFY 2113
+#define WT_STAT_DSRC_CURSOR_MODIFY 2114
/*! cursor: next calls */
-#define WT_STAT_DSRC_CURSOR_NEXT 2114
+#define WT_STAT_DSRC_CURSOR_NEXT 2115
/*! cursor: prev calls */
-#define WT_STAT_DSRC_CURSOR_PREV 2115
+#define WT_STAT_DSRC_CURSOR_PREV 2116
/*! cursor: remove calls */
-#define WT_STAT_DSRC_CURSOR_REMOVE 2116
+#define WT_STAT_DSRC_CURSOR_REMOVE 2117
/*! cursor: reserve calls */
-#define WT_STAT_DSRC_CURSOR_RESERVE 2117
+#define WT_STAT_DSRC_CURSOR_RESERVE 2118
/*! cursor: reset calls */
-#define WT_STAT_DSRC_CURSOR_RESET 2118
+#define WT_STAT_DSRC_CURSOR_RESET 2119
/*! cursor: restarted searches */
-#define WT_STAT_DSRC_CURSOR_RESTART 2119
+#define WT_STAT_DSRC_CURSOR_RESTART 2120
/*! cursor: search calls */
-#define WT_STAT_DSRC_CURSOR_SEARCH 2120
+#define WT_STAT_DSRC_CURSOR_SEARCH 2121
/*! cursor: search near calls */
-#define WT_STAT_DSRC_CURSOR_SEARCH_NEAR 2121
+#define WT_STAT_DSRC_CURSOR_SEARCH_NEAR 2122
/*! cursor: truncate calls */
-#define WT_STAT_DSRC_CURSOR_TRUNCATE 2122
+#define WT_STAT_DSRC_CURSOR_TRUNCATE 2123
/*! cursor: update calls */
-#define WT_STAT_DSRC_CURSOR_UPDATE 2123
+#define WT_STAT_DSRC_CURSOR_UPDATE 2124
/*! reconciliation: dictionary matches */
-#define WT_STAT_DSRC_REC_DICTIONARY 2124
+#define WT_STAT_DSRC_REC_DICTIONARY 2125
/*! reconciliation: fast-path pages deleted */
-#define WT_STAT_DSRC_REC_PAGE_DELETE_FAST 2125
+#define WT_STAT_DSRC_REC_PAGE_DELETE_FAST 2126
/*!
* reconciliation: internal page key bytes discarded using suffix
* compression
*/
-#define WT_STAT_DSRC_REC_SUFFIX_COMPRESSION 2126
+#define WT_STAT_DSRC_REC_SUFFIX_COMPRESSION 2127
/*! reconciliation: internal page multi-block writes */
-#define WT_STAT_DSRC_REC_MULTIBLOCK_INTERNAL 2127
+#define WT_STAT_DSRC_REC_MULTIBLOCK_INTERNAL 2128
/*! reconciliation: internal-page overflow keys */
-#define WT_STAT_DSRC_REC_OVERFLOW_KEY_INTERNAL 2128
+#define WT_STAT_DSRC_REC_OVERFLOW_KEY_INTERNAL 2129
/*! reconciliation: leaf page key bytes discarded using prefix compression */
-#define WT_STAT_DSRC_REC_PREFIX_COMPRESSION 2129
+#define WT_STAT_DSRC_REC_PREFIX_COMPRESSION 2130
/*! reconciliation: leaf page multi-block writes */
-#define WT_STAT_DSRC_REC_MULTIBLOCK_LEAF 2130
+#define WT_STAT_DSRC_REC_MULTIBLOCK_LEAF 2131
/*! reconciliation: leaf-page overflow keys */
-#define WT_STAT_DSRC_REC_OVERFLOW_KEY_LEAF 2131
+#define WT_STAT_DSRC_REC_OVERFLOW_KEY_LEAF 2132
/*! reconciliation: maximum blocks required for a page */
-#define WT_STAT_DSRC_REC_MULTIBLOCK_MAX 2132
+#define WT_STAT_DSRC_REC_MULTIBLOCK_MAX 2133
/*! reconciliation: overflow values written */
-#define WT_STAT_DSRC_REC_OVERFLOW_VALUE 2133
+#define WT_STAT_DSRC_REC_OVERFLOW_VALUE 2134
/*! reconciliation: page checksum matches */
-#define WT_STAT_DSRC_REC_PAGE_MATCH 2134
+#define WT_STAT_DSRC_REC_PAGE_MATCH 2135
/*! reconciliation: page reconciliation calls */
-#define WT_STAT_DSRC_REC_PAGES 2135
+#define WT_STAT_DSRC_REC_PAGES 2136
/*! reconciliation: page reconciliation calls for eviction */
-#define WT_STAT_DSRC_REC_PAGES_EVICTION 2136
+#define WT_STAT_DSRC_REC_PAGES_EVICTION 2137
/*! reconciliation: pages deleted */
-#define WT_STAT_DSRC_REC_PAGE_DELETE 2137
+#define WT_STAT_DSRC_REC_PAGE_DELETE 2138
/*! session: cached cursor count */
-#define WT_STAT_DSRC_SESSION_CURSOR_CACHED 2138
+#define WT_STAT_DSRC_SESSION_CURSOR_CACHED 2139
/*! session: object compaction */
-#define WT_STAT_DSRC_SESSION_COMPACT 2139
+#define WT_STAT_DSRC_SESSION_COMPACT 2140
/*! session: open cursor count */
-#define WT_STAT_DSRC_SESSION_CURSOR_OPEN 2140
+#define WT_STAT_DSRC_SESSION_CURSOR_OPEN 2141
/*! transaction: update conflicts */
-#define WT_STAT_DSRC_TXN_UPDATE_CONFLICT 2141
+#define WT_STAT_DSRC_TXN_UPDATE_CONFLICT 2142
/*!
* @}
diff --git a/src/third_party/wiredtiger/src/session/session_api.c b/src/third_party/wiredtiger/src/session/session_api.c
index cd06073a120..5249108382b 100644
--- a/src/third_party/wiredtiger/src/session/session_api.c
+++ b/src/third_party/wiredtiger/src/session/session_api.c
@@ -1657,9 +1657,14 @@ __session_commit_transaction(WT_SESSION *wt_session, const char *config)
session, commit_transaction, config, cfg);
WT_STAT_CONN_INCR(session, txn_commit);
+ txn = &session->txn;
+ if (F_ISSET(txn, WT_TXN_PREPARE)) {
+ WT_STAT_CONN_INCR(session, txn_prepare_commit);
+ WT_STAT_CONN_DECR(session, txn_prepare_active);
+ }
+
WT_ERR(__wt_txn_context_check(session, true));
- txn = &session->txn;
if (F_ISSET(txn, WT_TXN_ERROR) && txn->mod_count != 0)
WT_ERR_MSG(session, EINVAL,
"failed transaction requires rollback%s%s",
@@ -1689,6 +1694,8 @@ __session_prepare_transaction(WT_SESSION *wt_session, const char *config)
session = (WT_SESSION_IMPL *)wt_session;
SESSION_API_CALL(session, prepare_transaction, config, cfg);
+ WT_STAT_CONN_INCR(session, txn_prepare);
+ WT_STAT_CONN_INCR(session, txn_prepare_active);
WT_ERR(__wt_txn_context_check(session, true));
@@ -1738,12 +1745,19 @@ __session_rollback_transaction(WT_SESSION *wt_session, const char *config)
{
WT_DECL_RET;
WT_SESSION_IMPL *session;
+ WT_TXN *txn;
session = (WT_SESSION_IMPL *)wt_session;
SESSION_API_CALL_PREPARE_ALLOWED(
session, rollback_transaction, config, cfg);
WT_STAT_CONN_INCR(session, txn_rollback);
+ txn = &session->txn;
+ if (F_ISSET(txn, WT_TXN_PREPARE)) {
+ WT_STAT_CONN_INCR(session, txn_prepare_rollback);
+ WT_STAT_CONN_DECR(session, txn_prepare_active);
+ }
+
WT_ERR(__wt_txn_context_check(session, true));
WT_TRET(__wt_session_reset_cursors(session, false));
diff --git a/src/third_party/wiredtiger/src/support/stat.c b/src/third_party/wiredtiger/src/support/stat.c
index c418591d294..74f4a0b0523 100644
--- a/src/third_party/wiredtiger/src/support/stat.c
+++ b/src/third_party/wiredtiger/src/support/stat.c
@@ -73,6 +73,7 @@ static const char * const __stats_dsrc_desc[] = {
"cache: page written requiring lookaside records",
"cache: pages read into cache",
"cache: pages read into cache after truncate",
+ "cache: pages read into cache after truncate in prepare state",
"cache: pages read into cache requiring lookaside entries",
"cache: pages requested from the cache",
"cache: pages seen by eviction walk",
@@ -257,6 +258,7 @@ __wt_stat_dsrc_clear_single(WT_DSRC_STATS *stats)
stats->cache_write_lookaside = 0;
stats->cache_read = 0;
stats->cache_read_deleted = 0;
+ stats->cache_read_deleted_prepared = 0;
stats->cache_read_lookaside = 0;
stats->cache_pages_requested = 0;
stats->cache_eviction_pages_seen = 0;
@@ -438,6 +440,7 @@ __wt_stat_dsrc_aggregate_single(
to->cache_write_lookaside += from->cache_write_lookaside;
to->cache_read += from->cache_read;
to->cache_read_deleted += from->cache_read_deleted;
+ to->cache_read_deleted_prepared += from->cache_read_deleted_prepared;
to->cache_read_lookaside += from->cache_read_lookaside;
to->cache_pages_requested += from->cache_pages_requested;
to->cache_eviction_pages_seen += from->cache_eviction_pages_seen;
@@ -637,6 +640,8 @@ __wt_stat_dsrc_aggregate(
WT_STAT_READ(from, cache_write_lookaside);
to->cache_read += WT_STAT_READ(from, cache_read);
to->cache_read_deleted += WT_STAT_READ(from, cache_read_deleted);
+ to->cache_read_deleted_prepared +=
+ WT_STAT_READ(from, cache_read_deleted_prepared);
to->cache_read_lookaside += WT_STAT_READ(from, cache_read_lookaside);
to->cache_pages_requested +=
WT_STAT_READ(from, cache_pages_requested);
@@ -849,6 +854,7 @@ static const char * const __stats_connection_desc[] = {
"cache: pages queued for urgent eviction during walk",
"cache: pages read into cache",
"cache: pages read into cache after truncate",
+ "cache: pages read into cache after truncate in prepare state",
"cache: pages read into cache requiring lookaside entries",
"cache: pages read into cache skipping older lookaside entries",
"cache: pages read into cache with skipped lookaside entries needed later",
@@ -1038,6 +1044,7 @@ static const char * const __stats_connection_desc[] = {
"thread-yield: data handle lock yielded",
"thread-yield: get reference for page index and slot time sleeping (usecs)",
"thread-yield: log server sync yielded for log write",
+ "thread-yield: page access yielded due to prepare state change",
"thread-yield: page acquire busy blocked",
"thread-yield: page acquire eviction blocked",
"thread-yield: page acquire locked blocked",
@@ -1051,6 +1058,10 @@ static const char * const __stats_connection_desc[] = {
"transaction: commit timestamp queue length",
"transaction: number of named snapshots created",
"transaction: number of named snapshots dropped",
+ "transaction: prepared transactions",
+ "transaction: prepared transactions committed",
+ "transaction: prepared transactions currently active",
+ "transaction: prepared transactions rolled back",
"transaction: query timestamp calls",
"transaction: read timestamp queue insert to empty",
"transaction: read timestamp queue inserts to head",
@@ -1238,6 +1249,7 @@ __wt_stat_connection_clear_single(WT_CONNECTION_STATS *stats)
stats->cache_eviction_pages_queued_oldest = 0;
stats->cache_read = 0;
stats->cache_read_deleted = 0;
+ stats->cache_read_deleted_prepared = 0;
stats->cache_read_lookaside = 0;
stats->cache_read_lookaside_skipped = 0;
stats->cache_read_lookaside_delay = 0;
@@ -1427,6 +1439,7 @@ __wt_stat_connection_clear_single(WT_CONNECTION_STATS *stats)
stats->dhandle_lock_blocked = 0;
stats->page_index_slot_ref_blocked = 0;
stats->log_server_sync_blocked = 0;
+ stats->prepared_transition_blocked_page = 0;
stats->page_busy_blocked = 0;
stats->page_forcible_evict_blocked = 0;
stats->page_locked_blocked = 0;
@@ -1440,6 +1453,10 @@ __wt_stat_connection_clear_single(WT_CONNECTION_STATS *stats)
stats->txn_commit_queue_len = 0;
stats->txn_snapshots_created = 0;
stats->txn_snapshots_dropped = 0;
+ stats->txn_prepare = 0;
+ stats->txn_prepare_commit = 0;
+ stats->txn_prepare_active = 0;
+ stats->txn_prepare_rollback = 0;
stats->txn_query_ts = 0;
stats->txn_read_queue_empty = 0;
stats->txn_read_queue_head = 0;
@@ -1663,6 +1680,8 @@ __wt_stat_connection_aggregate(
WT_STAT_READ(from, cache_eviction_pages_queued_oldest);
to->cache_read += WT_STAT_READ(from, cache_read);
to->cache_read_deleted += WT_STAT_READ(from, cache_read_deleted);
+ to->cache_read_deleted_prepared +=
+ WT_STAT_READ(from, cache_read_deleted_prepared);
to->cache_read_lookaside += WT_STAT_READ(from, cache_read_lookaside);
to->cache_read_lookaside_skipped +=
WT_STAT_READ(from, cache_read_lookaside_skipped);
@@ -1939,6 +1958,8 @@ __wt_stat_connection_aggregate(
WT_STAT_READ(from, page_index_slot_ref_blocked);
to->log_server_sync_blocked +=
WT_STAT_READ(from, log_server_sync_blocked);
+ to->prepared_transition_blocked_page +=
+ WT_STAT_READ(from, prepared_transition_blocked_page);
to->page_busy_blocked += WT_STAT_READ(from, page_busy_blocked);
to->page_forcible_evict_blocked +=
WT_STAT_READ(from, page_forcible_evict_blocked);
@@ -1960,6 +1981,10 @@ __wt_stat_connection_aggregate(
WT_STAT_READ(from, txn_snapshots_created);
to->txn_snapshots_dropped +=
WT_STAT_READ(from, txn_snapshots_dropped);
+ to->txn_prepare += WT_STAT_READ(from, txn_prepare);
+ to->txn_prepare_commit += WT_STAT_READ(from, txn_prepare_commit);
+ to->txn_prepare_active += WT_STAT_READ(from, txn_prepare_active);
+ to->txn_prepare_rollback += WT_STAT_READ(from, txn_prepare_rollback);
to->txn_query_ts += WT_STAT_READ(from, txn_query_ts);
to->txn_read_queue_empty += WT_STAT_READ(from, txn_read_queue_empty);
to->txn_read_queue_head += WT_STAT_READ(from, txn_read_queue_head);
diff --git a/src/third_party/wiredtiger/test/format/config.h b/src/third_party/wiredtiger/test/format/config.h
index 3ea93e28b99..1b5f170abf6 100644
--- a/src/third_party/wiredtiger/test/format/config.h
+++ b/src/third_party/wiredtiger/test/format/config.h
@@ -326,6 +326,38 @@ static CONFIG c[] = {
"maximum time to run in minutes",
C_IGNORE, 0, 0, UINT_MAX, &g.c_timer, NULL },
+ { "timing_stress_checkpoint",
+ "configure slow checkpoints", /* 2% */
+ C_BOOL, 2, 0, 0, &g.c_timing_stress_checkpoint, NULL },
+
+ { "timing_stress_split_1",
+ "configure slow splits (#1)", /* 2% */
+ C_BOOL, 2, 0, 0, &g.c_timing_stress_split_1, NULL },
+
+ { "timing_stress_split_2",
+ "configure slow splits (#2)", /* 2% */
+ C_BOOL, 2, 0, 0, &g.c_timing_stress_split_2, NULL },
+
+ { "timing_stress_split_3",
+ "configure slow splits (#3)", /* 2% */
+ C_BOOL, 2, 0, 0, &g.c_timing_stress_split_3, NULL },
+
+ { "timing_stress_split_4",
+ "configure slow splits (#4)", /* 2% */
+ C_BOOL, 2, 0, 0, &g.c_timing_stress_split_4, NULL },
+
+ { "timing_stress_split_5",
+ "configure slow splits (#5)", /* 2% */
+ C_BOOL, 2, 0, 0, &g.c_timing_stress_split_5, NULL },
+
+ { "timing_stress_split_6",
+ "configure slow splits (#6)", /* 2% */
+ C_BOOL, 2, 0, 0, &g.c_timing_stress_split_6, NULL },
+
+ { "timing_stress_split_7",
+ "configure slow splits (#7)", /* 2% */
+ C_BOOL, 2, 0, 0, &g.c_timing_stress_split_7, NULL },
+
{ "transaction_timestamps", /* 10% */
"enable transaction timestamp support",
C_BOOL, 10, 0, 0, &g.c_txn_timestamps, NULL },
diff --git a/src/third_party/wiredtiger/test/format/format.h b/src/third_party/wiredtiger/test/format/format.h
index 4eac7a5eb8e..378883a314f 100644
--- a/src/third_party/wiredtiger/test/format/format.h
+++ b/src/third_party/wiredtiger/test/format/format.h
@@ -211,6 +211,14 @@ typedef struct {
uint32_t c_statistics_server;
uint32_t c_threads;
uint32_t c_timer;
+ uint32_t c_timing_stress_checkpoint;
+ uint32_t c_timing_stress_split_1;
+ uint32_t c_timing_stress_split_2;
+ uint32_t c_timing_stress_split_3;
+ uint32_t c_timing_stress_split_4;
+ uint32_t c_timing_stress_split_5;
+ uint32_t c_timing_stress_split_6;
+ uint32_t c_timing_stress_split_7;
uint32_t c_txn_freq;
uint32_t c_txn_timestamps;
uint32_t c_truncate;
diff --git a/src/third_party/wiredtiger/test/format/wts.c b/src/third_party/wiredtiger/test/format/wts.c
index 04c15136b53..4f1d99b78fb 100644
--- a/src/third_party/wiredtiger/test/format/wts.c
+++ b/src/third_party/wiredtiger/test/format/wts.c
@@ -242,6 +242,26 @@ wts_open(const char *home, bool set_api, WT_CONNECTION **connp)
CONFIG_APPEND(p,
",statistics=(%s)", g.c_statistics ? "fast" : "none");
+ /* Optionally stress operations. */
+ CONFIG_APPEND(p, ",timing_stress_for_test=[");
+ if (g.c_timing_stress_checkpoint)
+ CONFIG_APPEND(p, ",checkpoint_slow");
+ if (g.c_timing_stress_split_1)
+ CONFIG_APPEND(p, ",split_race_1");
+ if (g.c_timing_stress_split_2)
+ CONFIG_APPEND(p, ",split_race_2");
+ if (g.c_timing_stress_split_3)
+ CONFIG_APPEND(p, ",split_race_3");
+ if (g.c_timing_stress_split_4)
+ CONFIG_APPEND(p, ",split_race_4");
+ if (g.c_timing_stress_split_5)
+ CONFIG_APPEND(p, ",split_race_5");
+ if (g.c_timing_stress_split_6)
+ CONFIG_APPEND(p, ",split_race_6");
+ if (g.c_timing_stress_split_7)
+ CONFIG_APPEND(p, ",split_race_7");
+ CONFIG_APPEND(p, "]");
+
/* Extensions. */
CONFIG_APPEND(p,
",extensions=["
diff --git a/src/third_party/wiredtiger/test/mciproject.yml b/src/third_party/wiredtiger/test/mciproject.yml
index 271f392ae7c..2ab1afe7225 100644
--- a/src/third_party/wiredtiger/test/mciproject.yml
+++ b/src/third_party/wiredtiger/test/mciproject.yml
@@ -65,6 +65,16 @@ tasks:
./build_posix/reconf
${configure_env_vars|} ./configure --enable-diagnostic --enable-python --enable-zlib --enable-strict
${make_command|make} ${smp_command|} 2>&1
+
+ # On macOS, change the binary location with install_name_tool since DYLD_LIBRARY_PATH
+ # appears not to work for dynamic modules loaded by python. For wt, the libtool generated
+ # script has the wrong path for running on test machines.
+ if [ "$(uname -s)" == "Darwin" ]; then
+ WT_VERSION=$(m4 build_posix/aclocal/version.m4)
+ install_name_tool -change /usr/local/lib/libwiredtiger-$WT_VERSION.dylib $(pwd)/.libs/libwiredtiger-$WT_VERSION.dylib lang/python/_wiredtiger*.so
+ install_name_tool -change /usr/local/lib/libwiredtiger-$WT_VERSION.dylib $(pwd)/.libs/libwiredtiger-$WT_VERSION.dylib .libs/wt
+ fi
+
${test_env_vars|} TESTUTIL_ENABLE_LONG_TESTS=1 ${make_command|make} VERBOSE=1 check 2>&1
fi
- command: archive.targz_pack
@@ -178,9 +188,9 @@ buildvariants:
- macos-1012
expansions:
smp_command: -j $(sysctl -n hw.logicalcpu)
- configure_env_vars: PATH=/opt/local/bin:$PATH
- make_command: PATH=/opt/local/bin:$PATH ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future make
- test_env_vars: PATH=/opt/local/bin:$PATH DYLD_LIBRARY_PATH=`pwd`/.libs
+ configure_env_vars: PATH=/opt/mongodbtoolchain/v2/bin:$PATH
+ make_command: PATH=/opt/mongodbtoolchain/v2/bin:$PATH ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future make
+ test_env_vars: PATH=/opt/mongodbtoolchain/v2/bin:$PATH DYLD_LIBRARY_PATH=`pwd`/.libs
tasks:
- name: compile
- name: unit-test
diff --git a/src/third_party/wiredtiger/test/suite/test_schema06.py b/src/third_party/wiredtiger/test/suite/test_schema06.py
index f1352a8b87c..2676ff5b0ea 100644
--- a/src/third_party/wiredtiger/test/suite/test_schema06.py
+++ b/src/third_party/wiredtiger/test/suite/test_schema06.py
@@ -62,9 +62,9 @@ class test_schema06(wttest.WiredTigerTestCase):
self.session.create("index:schema06:" + colname,
"columns=(" + colname + ")" + self.idx_config)
- def drop_index(inum):
+ def drop_index(self, inum):
colname = "s" + str(inum)
- self.session.drop("index:main:" + colname, None)
+ self.session.drop("index:schema06:" + colname, None)
def test_index_stress(self):
self.session.create("table:schema06",
@@ -84,6 +84,8 @@ class test_schema06(wttest.WiredTigerTestCase):
values[3],values[4],values[5])
cursor.insert()
cursor.close()
+ self.drop_index(0)
+ self.drop_index(1)
def check_entries(self, check_indices):
cursor = self.session.open_cursor('table:main', None, None)