diff options
author | Luke Chen <luke.chen@mongodb.com> | 2018-04-10 18:25:30 +1000 |
---|---|---|
committer | Luke Chen <luke.chen@mongodb.com> | 2018-04-10 18:25:30 +1000 |
commit | 5ae38f156cb08fd5a66eb9e9327953e99442fc9c (patch) | |
tree | bdda4141d8e63aeab38fc8b615d521a8772546e8 /src | |
parent | 9be2c132cb4713e13bbaa5648077e5346a29c99b (diff) | |
download | mongo-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')
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) |