From c044e693a57e4ae702e72acac8001a90dadda27f Mon Sep 17 00:00:00 2001 From: Luke Chen Date: Mon, 5 Dec 2022 15:46:27 +1100 Subject: Import wiredtiger: 7b279fd981e787fd9fe294a706aec8a0fbaa200b from branch mongodb-6.0 ref: 34136bb791..7b279fd981 for: 6.0.4 WT-9268 Delay deletion the history store record to reconciliation --- src/third_party/wiredtiger/dist/stat_data.py | 3 +- src/third_party/wiredtiger/import.data | 2 +- src/third_party/wiredtiger/src/btree/row_modify.c | 4 + src/third_party/wiredtiger/src/cursor/cur_hs.c | 2 + src/third_party/wiredtiger/src/history/hs_rec.c | 119 +- src/third_party/wiredtiger/src/include/btmem.h | 1 + src/third_party/wiredtiger/src/include/stat.h | 4 +- .../wiredtiger/src/include/wiredtiger.in | 1260 ++++++++++---------- .../wiredtiger/src/reconcile/rec_visibility.c | 52 +- src/third_party/wiredtiger/src/support/stat.c | 21 +- src/third_party/wiredtiger/src/txn/txn.c | 157 +-- .../wiredtiger/test/suite/test_prepare20.py | 16 +- .../wiredtiger/test/suite/test_prepare21.py | 135 +++ 13 files changed, 1011 insertions(+), 765 deletions(-) create mode 100644 src/third_party/wiredtiger/test/suite/test_prepare21.py diff --git a/src/third_party/wiredtiger/dist/stat_data.py b/src/third_party/wiredtiger/dist/stat_data.py index b02b8512af5..573b7f633f7 100644 --- a/src/third_party/wiredtiger/dist/stat_data.py +++ b/src/third_party/wiredtiger/dist/stat_data.py @@ -590,8 +590,6 @@ conn_stats = [ 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_prepare_rollback_do_not_remove_hs_update', 'prepared transactions rolled back and do not remove the history store entry'), - TxnStat('txn_prepare_rollback_fix_hs_update_with_ckpt_reserved_txnid', 'prepared transactions rolled back and fix the history store entry with checkpoint reserved transaction id'), TxnStat('txn_prepared_updates_committed', 'Number of prepared updates committed'), TxnStat('txn_prepared_updates', 'Number of prepared updates'), TxnStat('txn_prepared_updates_key_repeated', 'Number of prepared updates repeated on the same key'), @@ -811,6 +809,7 @@ conn_dsrc_stats = [ CacheStat('cache_eviction_blocked_ooo_checkpoint_race_2', 'eviction gave up due to detecting an out of order tombstone ahead of the selected on disk update'), CacheStat('cache_eviction_blocked_ooo_checkpoint_race_3', 'eviction gave up due to detecting an out of order tombstone ahead of the selected on disk update after validating the update chain'), CacheStat('cache_eviction_blocked_ooo_checkpoint_race_4', 'eviction gave up due to detecting out of order timestamps on the update chain after the selected on disk update'), + CacheStat('cache_eviction_blocked_remove_hs_race_with_checkpoint', 'eviction gave up due to needing to remove a record from the history store but checkpoint is running'), CacheStat('cache_eviction_clean', 'unmodified pages evicted'), CacheStat('cache_eviction_deepen', 'page split during eviction deepened the tree'), CacheStat('cache_eviction_dirty', 'modified pages evicted'), diff --git a/src/third_party/wiredtiger/import.data b/src/third_party/wiredtiger/import.data index 72cf077a775..7f3c8903b07 100644 --- a/src/third_party/wiredtiger/import.data +++ b/src/third_party/wiredtiger/import.data @@ -2,5 +2,5 @@ "vendor": "wiredtiger", "github": "wiredtiger/wiredtiger.git", "branch": "mongodb-6.0", - "commit": "34136bb7914272cc2d9705744ae28bdb373a8781" + "commit": "7b279fd981e787fd9fe294a706aec8a0fbaa200b" } diff --git a/src/third_party/wiredtiger/src/btree/row_modify.c b/src/third_party/wiredtiger/src/btree/row_modify.c index c7a2e76e1de..53195c95cdd 100644 --- a/src/third_party/wiredtiger/src/btree/row_modify.c +++ b/src/third_party/wiredtiger/src/btree/row_modify.c @@ -384,6 +384,10 @@ __wt_update_obsolete_check( if (upd->start_ts != WT_TS_NONE && upd->start_ts >= oldest && upd->start_ts < stable) ++upd_unstable; } + + /* Cannot truncate the updates if we need to remove the updates from the history store. */ + if (F_ISSET(upd, WT_UPDATE_TO_DELETE_FROM_HS)) + first = NULL; } /* diff --git a/src/third_party/wiredtiger/src/cursor/cur_hs.c b/src/third_party/wiredtiger/src/cursor/cur_hs.c index 3acdabcb451..6d828176d53 100644 --- a/src/third_party/wiredtiger/src/cursor/cur_hs.c +++ b/src/third_party/wiredtiger/src/cursor/cur_hs.c @@ -914,6 +914,8 @@ __curhs_insert(WT_CURSOR *cursor) * update as the update after the tombstone. */ if (WT_TIME_WINDOW_HAS_STOP(&hs_cursor->time_window)) { + /* We should not see a tombstone with max transaction id. */ + WT_ASSERT(session, hs_cursor->time_window.stop_txn != WT_TXN_MAX); /* * Insert a delete record to represent stop time point for the actual record to be inserted. * Set the stop time point as the commit time point of the history store delete record. diff --git a/src/third_party/wiredtiger/src/history/hs_rec.c b/src/third_party/wiredtiger/src/history/hs_rec.c index aefc1f31764..2514ec4fa90 100644 --- a/src/third_party/wiredtiger/src/history/hs_rec.c +++ b/src/third_party/wiredtiger/src/history/hs_rec.c @@ -60,6 +60,65 @@ __hs_verbose_cache_stats(WT_SESSION_IMPL *session, WT_BTREE *btree) cache->hs_verb_gen_write = ckpt_gen_current; } +/* + * __hs_delete_record -- + * Delete the update left in the history store + */ +static int +__hs_delete_record(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, WT_ITEM *key, + WT_UPDATE *delete_upd, WT_UPDATE *delete_tombstone) +{ + WT_DECL_RET; + bool hs_read_committed; +#ifdef HAVE_DIAGNOSTIC + WT_TIME_WINDOW *hs_tw; +#endif + + hs_read_committed = F_ISSET(hs_cursor, WT_CURSTD_HS_READ_COMMITTED); + F_SET(hs_cursor, WT_CURSTD_HS_READ_COMMITTED); + + /* No need to delete from the history store if it is already obsolete. */ + if (delete_tombstone != NULL && __wt_txn_upd_visible_all(session, delete_tombstone)) { + ret = 0; + goto done; + } + + hs_cursor->set_key(hs_cursor, 4, S2BT(session)->id, key, WT_TS_MAX, UINT64_MAX); + WT_ERR_NOTFOUND_OK(__wt_curhs_search_near_before(session, hs_cursor), true); + /* It's possible the value in the history store becomes obsolete concurrently. */ + if (ret == WT_NOTFOUND) { + WT_ASSERT( + session, delete_tombstone != NULL && __wt_txn_upd_visible_all(session, delete_tombstone)); + ret = 0; + goto done; + } + +#ifdef HAVE_DIAGNOSTIC + __wt_hs_upd_time_window(hs_cursor, &hs_tw); + WT_ASSERT(session, hs_tw->start_txn == WT_TXN_NONE || hs_tw->start_txn == delete_upd->txnid); + WT_ASSERT(session, hs_tw->start_ts == WT_TS_NONE || hs_tw->start_ts == delete_upd->start_ts); + WT_ASSERT(session, + hs_tw->durable_start_ts == WT_TS_NONE || hs_tw->durable_start_ts == delete_upd->durable_ts); + if (delete_tombstone != NULL) { + WT_ASSERT(session, hs_tw->stop_txn == delete_tombstone->txnid); + WT_ASSERT(session, hs_tw->stop_ts == delete_tombstone->start_ts); + WT_ASSERT(session, hs_tw->durable_stop_ts == delete_tombstone->durable_ts); + } else + WT_ASSERT(session, !WT_TIME_WINDOW_HAS_STOP(hs_tw)); +#endif + + WT_ERR(hs_cursor->remove(hs_cursor)); +done: + if (delete_tombstone != NULL) + F_CLR(delete_tombstone, WT_UPDATE_TO_DELETE_FROM_HS | WT_UPDATE_HS); + F_CLR(delete_upd, WT_UPDATE_TO_DELETE_FROM_HS | WT_UPDATE_HS); + +err: + if (!hs_read_committed) + F_CLR(hs_cursor, WT_CURSTD_HS_READ_COMMITTED); + return (ret); +} + /* * __hs_insert_record -- * A helper function to insert the record into the history store including stop time point. @@ -313,7 +372,8 @@ __wt_hs_insert_updates(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_MULTI *mult WT_UPDATE_VECTOR out_of_order_ts_updates; WT_SAVE_UPD *list; WT_UPDATE *first_globally_visible_upd, *fix_ts_upd, *min_ts_upd, *out_of_order_ts_upd; - WT_UPDATE *newest_hs, *non_aborted_upd, *oldest_upd, *prev_upd, *ref_upd, *tombstone, *upd; + WT_UPDATE *delete_tombstone, *delete_upd, *newest_hs, *non_aborted_upd, *oldest_upd, *prev_upd, + *ref_upd, *tombstone, *upd; WT_TIME_WINDOW tw; wt_off_t hs_size; uint64_t insert_cnt, max_hs_size, modify_cnt; @@ -362,19 +422,6 @@ __wt_hs_insert_updates(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_MULTI *mult if (list->onpage_upd == NULL) continue; - /* Skip aborted updates. */ - for (upd = list->onpage_upd->next; upd != NULL && upd->txnid == WT_TXN_ABORTED; - upd = upd->next) - ; - - /* No update to insert to history store. */ - if (upd == NULL) - continue; - - /* Updates have already been inserted to the history store. */ - if (F_ISSET(upd, WT_UPDATE_HS)) - continue; - /* History store table key component: source key. */ switch (r->page->type) { case WT_PAGE_COL_FIX: @@ -399,6 +446,7 @@ __wt_hs_insert_updates(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_MULTI *mult newest_hs = first_globally_visible_upd = min_ts_upd = out_of_order_ts_upd = NULL; ref_upd = list->onpage_upd; + delete_tombstone = delete_upd = NULL; __wt_update_vector_clear(&out_of_order_ts_updates); __wt_update_vector_clear(&updates); @@ -409,6 +457,41 @@ __wt_hs_insert_updates(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_MULTI *mult enable_reverse_modify = (WT_STREQ(btree->value_format, "S") || WT_STREQ(btree->value_format, "u")); + /* + * Delete the update that is both on the update chain and the history store from the history + * store. Otherwise, we will trigger out of order fix when the update is inserted to the + * history store again. + */ + for (upd = list->onpage_tombstone != NULL ? list->onpage_tombstone : list->onpage_upd; + upd != NULL; upd = upd->next) { + if (upd->txnid == WT_TXN_ABORTED) + continue; + + if (F_ISSET(upd, WT_UPDATE_TO_DELETE_FROM_HS)) { + if (upd->type == WT_UPDATE_TOMBSTONE) + delete_tombstone = upd; + else { + delete_upd = upd; + WT_ERR( + __hs_delete_record(session, hs_cursor, key, delete_upd, delete_tombstone)); + break; + } + } + } + + /* Skip aborted updates. */ + for (upd = list->onpage_upd->next; upd != NULL && upd->txnid == WT_TXN_ABORTED; + upd = upd->next) + ; + + /* No update to insert to history store. */ + if (upd == NULL) + continue; + + /* Updates have already been inserted to the history store. */ + if (F_ISSET(upd, WT_UPDATE_HS)) + continue; + /* * The algorithm assumes the oldest update on the update chain in memory is either a full * update or a tombstone. @@ -443,6 +526,9 @@ __wt_hs_insert_updates(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_MULTI *mult if (upd->txnid == WT_TXN_ABORTED) continue; + /* We must have deleted any update left in the history store. */ + WT_ASSERT(session, !F_ISSET(upd, WT_UPDATE_TO_DELETE_FROM_HS)); + non_aborted_upd = upd; /* Detect out of order timestamp update. */ @@ -661,11 +747,6 @@ __wt_hs_insert_updates(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_MULTI *mult continue; } - /* We should never write a prepared update to the history store. */ - WT_ASSERT(session, - upd->prepare_state != WT_PREPARE_INPROGRESS && - upd->prepare_state != WT_PREPARE_LOCKED); - /* * Ensure all the updates inserted to the history store are committed. * diff --git a/src/third_party/wiredtiger/src/include/btmem.h b/src/third_party/wiredtiger/src/include/btmem.h index c22422dabf5..3c8e63059fc 100644 --- a/src/third_party/wiredtiger/src/include/btmem.h +++ b/src/third_party/wiredtiger/src/include/btmem.h @@ -1176,6 +1176,7 @@ struct __wt_update { #define WT_UPDATE_RESTORED_FAST_TRUNCATE 0x10u /* Fast truncate instantiation */ #define WT_UPDATE_RESTORED_FROM_DS 0x20u /* Update restored from data store. */ #define WT_UPDATE_RESTORED_FROM_HS 0x40u /* Update restored from history store. */ +#define WT_UPDATE_TO_DELETE_FROM_HS 0x80u /* Update needs to be deleted from history store */ /* AUTOMATIC FLAG VALUE GENERATION STOP 8 */ uint8_t flags; diff --git a/src/third_party/wiredtiger/src/include/stat.h b/src/third_party/wiredtiger/src/include/stat.h index 9d1cf91fe3e..cae50e4a9d5 100644 --- a/src/third_party/wiredtiger/src/include/stat.h +++ b/src/third_party/wiredtiger/src/include/stat.h @@ -400,6 +400,7 @@ struct __wt_connection_stats { int64_t cache_eviction_blocked_ooo_checkpoint_race_2; int64_t cache_eviction_blocked_ooo_checkpoint_race_3; int64_t cache_eviction_blocked_ooo_checkpoint_race_4; + int64_t cache_eviction_blocked_remove_hs_race_with_checkpoint; int64_t cache_eviction_walk_passes; int64_t cache_eviction_queue_empty; int64_t cache_eviction_queue_not_empty; @@ -781,8 +782,6 @@ struct __wt_connection_stats { int64_t txn_prepare_commit; int64_t txn_prepare_active; int64_t txn_prepare_rollback; - int64_t txn_prepare_rollback_do_not_remove_hs_update; - int64_t txn_prepare_rollback_fix_hs_update_with_ckpt_reserved_txnid; int64_t txn_query_ts; int64_t txn_read_race_prepare_update; int64_t txn_rts; @@ -911,6 +910,7 @@ struct __wt_dsrc_stats { int64_t cache_eviction_blocked_ooo_checkpoint_race_2; int64_t cache_eviction_blocked_ooo_checkpoint_race_3; int64_t cache_eviction_blocked_ooo_checkpoint_race_4; + int64_t cache_eviction_blocked_remove_hs_race_with_checkpoint; int64_t cache_eviction_walk_passes; int64_t cache_eviction_target_page_lt10; int64_t cache_eviction_target_page_lt32; diff --git a/src/third_party/wiredtiger/src/include/wiredtiger.in b/src/third_party/wiredtiger/src/include/wiredtiger.in index a7a6d4737ab..930aa8e9fd1 100644 --- a/src/third_party/wiredtiger/src/include/wiredtiger.in +++ b/src/third_party/wiredtiger/src/include/wiredtiger.in @@ -5325,1091 +5325,1086 @@ extern int wiredtiger_extension_terminate(WT_CONNECTION *connection); * the update chain after the selected on disk update */ #define WT_STAT_CONN_CACHE_EVICTION_BLOCKED_OOO_CHECKPOINT_RACE_4 1067 +/*! + * cache: eviction gave up due to needing to remove a record from the + * history store but checkpoint is running + */ +#define WT_STAT_CONN_CACHE_EVICTION_BLOCKED_REMOVE_HS_RACE_WITH_CHECKPOINT 1068 /*! cache: eviction passes of a file */ -#define WT_STAT_CONN_CACHE_EVICTION_WALK_PASSES 1068 +#define WT_STAT_CONN_CACHE_EVICTION_WALK_PASSES 1069 /*! cache: eviction server candidate queue empty when topping up */ -#define WT_STAT_CONN_CACHE_EVICTION_QUEUE_EMPTY 1069 +#define WT_STAT_CONN_CACHE_EVICTION_QUEUE_EMPTY 1070 /*! cache: eviction server candidate queue not empty when topping up */ -#define WT_STAT_CONN_CACHE_EVICTION_QUEUE_NOT_EMPTY 1070 +#define WT_STAT_CONN_CACHE_EVICTION_QUEUE_NOT_EMPTY 1071 /*! cache: eviction server evicting pages */ -#define WT_STAT_CONN_CACHE_EVICTION_SERVER_EVICTING 1071 +#define WT_STAT_CONN_CACHE_EVICTION_SERVER_EVICTING 1072 /*! * cache: eviction server slept, because we did not make progress with * eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_SERVER_SLEPT 1072 +#define WT_STAT_CONN_CACHE_EVICTION_SERVER_SLEPT 1073 /*! cache: eviction server unable to reach eviction goal */ -#define WT_STAT_CONN_CACHE_EVICTION_SLOW 1073 +#define WT_STAT_CONN_CACHE_EVICTION_SLOW 1074 /*! cache: eviction server waiting for a leaf page */ -#define WT_STAT_CONN_CACHE_EVICTION_WALK_LEAF_NOTFOUND 1074 +#define WT_STAT_CONN_CACHE_EVICTION_WALK_LEAF_NOTFOUND 1075 /*! cache: eviction state */ -#define WT_STAT_CONN_CACHE_EVICTION_STATE 1075 +#define WT_STAT_CONN_CACHE_EVICTION_STATE 1076 /*! * cache: eviction walk most recent sleeps for checkpoint handle * gathering */ -#define WT_STAT_CONN_CACHE_EVICTION_WALK_SLEEPS 1076 +#define WT_STAT_CONN_CACHE_EVICTION_WALK_SLEEPS 1077 /*! cache: eviction walk target pages histogram - 0-9 */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT10 1077 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT10 1078 /*! cache: eviction walk target pages histogram - 10-31 */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT32 1078 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT32 1079 /*! cache: eviction walk target pages histogram - 128 and higher */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_GE128 1079 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_GE128 1080 /*! cache: eviction walk target pages histogram - 32-63 */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT64 1080 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT64 1081 /*! cache: eviction walk target pages histogram - 64-128 */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT128 1081 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT128 1082 /*! * cache: eviction walk target pages reduced due to history store cache * pressure */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_REDUCED 1082 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_REDUCED 1083 /*! cache: eviction walk target strategy both clean and dirty pages */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_BOTH_CLEAN_AND_DIRTY 1083 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_BOTH_CLEAN_AND_DIRTY 1084 /*! cache: eviction walk target strategy only clean pages */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_CLEAN 1084 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_CLEAN 1085 /*! cache: eviction walk target strategy only dirty pages */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_DIRTY 1085 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_DIRTY 1086 /*! cache: eviction walks abandoned */ -#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ABANDONED 1086 +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ABANDONED 1087 /*! cache: eviction walks gave up because they restarted their walk twice */ -#define WT_STAT_CONN_CACHE_EVICTION_WALKS_STOPPED 1087 +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_STOPPED 1088 /*! * cache: eviction walks gave up because they saw too many pages and * found no candidates */ -#define WT_STAT_CONN_CACHE_EVICTION_WALKS_GAVE_UP_NO_TARGETS 1088 +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_GAVE_UP_NO_TARGETS 1089 /*! * cache: eviction walks gave up because they saw too many pages and * found too few candidates */ -#define WT_STAT_CONN_CACHE_EVICTION_WALKS_GAVE_UP_RATIO 1089 +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_GAVE_UP_RATIO 1090 /*! cache: eviction walks reached end of tree */ -#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ENDED 1090 +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ENDED 1091 /*! cache: eviction walks restarted */ -#define WT_STAT_CONN_CACHE_EVICTION_WALK_RESTART 1091 +#define WT_STAT_CONN_CACHE_EVICTION_WALK_RESTART 1092 /*! cache: eviction walks started from root of tree */ -#define WT_STAT_CONN_CACHE_EVICTION_WALK_FROM_ROOT 1092 +#define WT_STAT_CONN_CACHE_EVICTION_WALK_FROM_ROOT 1093 /*! cache: eviction walks started from saved location in tree */ -#define WT_STAT_CONN_CACHE_EVICTION_WALK_SAVED_POS 1093 +#define WT_STAT_CONN_CACHE_EVICTION_WALK_SAVED_POS 1094 /*! cache: eviction worker thread active */ -#define WT_STAT_CONN_CACHE_EVICTION_ACTIVE_WORKERS 1094 +#define WT_STAT_CONN_CACHE_EVICTION_ACTIVE_WORKERS 1095 /*! cache: eviction worker thread created */ -#define WT_STAT_CONN_CACHE_EVICTION_WORKER_CREATED 1095 +#define WT_STAT_CONN_CACHE_EVICTION_WORKER_CREATED 1096 /*! cache: eviction worker thread evicting pages */ -#define WT_STAT_CONN_CACHE_EVICTION_WORKER_EVICTING 1096 +#define WT_STAT_CONN_CACHE_EVICTION_WORKER_EVICTING 1097 /*! cache: eviction worker thread removed */ -#define WT_STAT_CONN_CACHE_EVICTION_WORKER_REMOVED 1097 +#define WT_STAT_CONN_CACHE_EVICTION_WORKER_REMOVED 1098 /*! cache: eviction worker thread stable number */ -#define WT_STAT_CONN_CACHE_EVICTION_STABLE_STATE_WORKERS 1098 +#define WT_STAT_CONN_CACHE_EVICTION_STABLE_STATE_WORKERS 1099 /*! cache: files with active eviction walks */ -#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ACTIVE 1099 +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ACTIVE 1100 /*! cache: files with new eviction walks started */ -#define WT_STAT_CONN_CACHE_EVICTION_WALKS_STARTED 1100 +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_STARTED 1101 /*! cache: force re-tuning of eviction workers once in a while */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_RETUNE 1101 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_RETUNE 1102 /*! * cache: forced eviction - history store pages failed to evict while * session has history store cursor open */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS_FAIL 1102 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS_FAIL 1103 /*! * cache: forced eviction - history store pages selected while session * has history store cursor open */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS 1103 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS 1104 /*! * cache: forced eviction - history store pages successfully evicted * while session has history store cursor open */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS_SUCCESS 1104 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS_SUCCESS 1105 /*! cache: forced eviction - pages evicted that were clean count */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_CLEAN 1105 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_CLEAN 1106 /*! cache: forced eviction - pages evicted that were clean time (usecs) */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_CLEAN_TIME 1106 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_CLEAN_TIME 1107 /*! cache: forced eviction - pages evicted that were dirty count */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DIRTY 1107 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DIRTY 1108 /*! cache: forced eviction - pages evicted that were dirty time (usecs) */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DIRTY_TIME 1108 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DIRTY_TIME 1109 /*! * cache: forced eviction - pages selected because of a large number of * updates to a single item */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_LONG_UPDATE_LIST 1109 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_LONG_UPDATE_LIST 1110 /*! * cache: forced eviction - pages selected because of too many deleted * items count */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DELETE 1110 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DELETE 1111 /*! cache: forced eviction - pages selected count */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE 1111 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE 1112 /*! cache: forced eviction - pages selected unable to be evicted count */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_FAIL 1112 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_FAIL 1113 /*! cache: forced eviction - pages selected unable to be evicted time */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_FAIL_TIME 1113 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_FAIL_TIME 1114 /*! cache: hazard pointer blocked page eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_HAZARD 1114 +#define WT_STAT_CONN_CACHE_EVICTION_HAZARD 1115 /*! cache: hazard pointer check calls */ -#define WT_STAT_CONN_CACHE_HAZARD_CHECKS 1115 +#define WT_STAT_CONN_CACHE_HAZARD_CHECKS 1116 /*! cache: hazard pointer check entries walked */ -#define WT_STAT_CONN_CACHE_HAZARD_WALKS 1116 +#define WT_STAT_CONN_CACHE_HAZARD_WALKS 1117 /*! cache: hazard pointer maximum array length */ -#define WT_STAT_CONN_CACHE_HAZARD_MAX 1117 +#define WT_STAT_CONN_CACHE_HAZARD_MAX 1118 /*! cache: history store table insert calls */ -#define WT_STAT_CONN_CACHE_HS_INSERT 1118 +#define WT_STAT_CONN_CACHE_HS_INSERT 1119 /*! cache: history store table insert calls that returned restart */ -#define WT_STAT_CONN_CACHE_HS_INSERT_RESTART 1119 +#define WT_STAT_CONN_CACHE_HS_INSERT_RESTART 1120 /*! cache: history store table max on-disk size */ -#define WT_STAT_CONN_CACHE_HS_ONDISK_MAX 1120 +#define WT_STAT_CONN_CACHE_HS_ONDISK_MAX 1121 /*! cache: history store table on-disk size */ -#define WT_STAT_CONN_CACHE_HS_ONDISK 1121 +#define WT_STAT_CONN_CACHE_HS_ONDISK 1122 /*! * cache: history store table out-of-order resolved updates that lose * their durable timestamp */ -#define WT_STAT_CONN_CACHE_HS_ORDER_LOSE_DURABLE_TIMESTAMP 1122 +#define WT_STAT_CONN_CACHE_HS_ORDER_LOSE_DURABLE_TIMESTAMP 1123 /*! * cache: history store table out-of-order updates that were fixed up by * reinserting with the fixed timestamp */ -#define WT_STAT_CONN_CACHE_HS_ORDER_REINSERT 1123 +#define WT_STAT_CONN_CACHE_HS_ORDER_REINSERT 1124 /*! cache: history store table reads */ -#define WT_STAT_CONN_CACHE_HS_READ 1124 +#define WT_STAT_CONN_CACHE_HS_READ 1125 /*! cache: history store table reads missed */ -#define WT_STAT_CONN_CACHE_HS_READ_MISS 1125 +#define WT_STAT_CONN_CACHE_HS_READ_MISS 1126 /*! cache: history store table reads requiring squashed modifies */ -#define WT_STAT_CONN_CACHE_HS_READ_SQUASH 1126 +#define WT_STAT_CONN_CACHE_HS_READ_SQUASH 1127 /*! * cache: history store table truncation by rollback to stable to remove * an unstable update */ -#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_RTS_UNSTABLE 1127 +#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_RTS_UNSTABLE 1128 /*! * cache: history store table truncation by rollback to stable to remove * an update */ -#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_RTS 1128 +#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_RTS 1129 /*! cache: history store table truncation to remove an update */ -#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE 1129 +#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE 1130 /*! * cache: history store table truncation to remove range of updates due * to key being removed from the data page during reconciliation */ -#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_ONPAGE_REMOVAL 1130 +#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_ONPAGE_REMOVAL 1131 /*! * cache: history store table truncation to remove range of updates due * to out-of-order timestamp update on data page */ -#define WT_STAT_CONN_CACHE_HS_ORDER_REMOVE 1131 +#define WT_STAT_CONN_CACHE_HS_ORDER_REMOVE 1132 /*! cache: history store table writes requiring squashed modifies */ -#define WT_STAT_CONN_CACHE_HS_WRITE_SQUASH 1132 +#define WT_STAT_CONN_CACHE_HS_WRITE_SQUASH 1133 /*! cache: in-memory page passed criteria to be split */ -#define WT_STAT_CONN_CACHE_INMEM_SPLITTABLE 1133 +#define WT_STAT_CONN_CACHE_INMEM_SPLITTABLE 1134 /*! cache: in-memory page splits */ -#define WT_STAT_CONN_CACHE_INMEM_SPLIT 1134 +#define WT_STAT_CONN_CACHE_INMEM_SPLIT 1135 /*! cache: internal pages evicted */ -#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL 1135 +#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL 1136 /*! cache: internal pages queued for eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_QUEUED 1136 +#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_QUEUED 1137 /*! cache: internal pages seen by eviction walk */ -#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_SEEN 1137 +#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_SEEN 1138 /*! cache: internal pages seen by eviction walk that are already queued */ -#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_ALREADY_QUEUED 1138 +#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_ALREADY_QUEUED 1139 /*! cache: internal pages split during eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_INTERNAL 1139 +#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_INTERNAL 1140 /*! cache: leaf pages split during eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_LEAF 1140 +#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_LEAF 1141 /*! cache: maximum bytes configured */ -#define WT_STAT_CONN_CACHE_BYTES_MAX 1141 +#define WT_STAT_CONN_CACHE_BYTES_MAX 1142 /*! cache: maximum page size at eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_MAXIMUM_PAGE_SIZE 1142 +#define WT_STAT_CONN_CACHE_EVICTION_MAXIMUM_PAGE_SIZE 1143 /*! cache: modified pages evicted */ -#define WT_STAT_CONN_CACHE_EVICTION_DIRTY 1143 +#define WT_STAT_CONN_CACHE_EVICTION_DIRTY 1144 /*! cache: modified pages evicted by application threads */ -#define WT_STAT_CONN_CACHE_EVICTION_APP_DIRTY 1144 +#define WT_STAT_CONN_CACHE_EVICTION_APP_DIRTY 1145 /*! cache: operations timed out waiting for space in cache */ -#define WT_STAT_CONN_CACHE_TIMED_OUT_OPS 1145 +#define WT_STAT_CONN_CACHE_TIMED_OUT_OPS 1146 /*! cache: overflow pages read into cache */ -#define WT_STAT_CONN_CACHE_READ_OVERFLOW 1146 +#define WT_STAT_CONN_CACHE_READ_OVERFLOW 1147 /*! cache: page split during eviction deepened the tree */ -#define WT_STAT_CONN_CACHE_EVICTION_DEEPEN 1147 +#define WT_STAT_CONN_CACHE_EVICTION_DEEPEN 1148 /*! cache: page written requiring history store records */ -#define WT_STAT_CONN_CACHE_WRITE_HS 1148 +#define WT_STAT_CONN_CACHE_WRITE_HS 1149 /*! cache: pages currently held in the cache */ -#define WT_STAT_CONN_CACHE_PAGES_INUSE 1149 +#define WT_STAT_CONN_CACHE_PAGES_INUSE 1150 /*! cache: pages evicted by application threads */ -#define WT_STAT_CONN_CACHE_EVICTION_APP 1150 +#define WT_STAT_CONN_CACHE_EVICTION_APP 1151 /*! cache: pages evicted in parallel with checkpoint */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_IN_PARALLEL_WITH_CHECKPOINT 1151 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_IN_PARALLEL_WITH_CHECKPOINT 1152 /*! cache: pages queued for eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED 1152 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED 1153 /*! cache: pages queued for eviction post lru sorting */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_POST_LRU 1153 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_POST_LRU 1154 /*! cache: pages queued for urgent eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_URGENT 1154 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_URGENT 1155 /*! cache: pages queued for urgent eviction during walk */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_OLDEST 1155 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_OLDEST 1156 /*! * cache: pages queued for urgent eviction from history store due to high * dirty content */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_URGENT_HS_DIRTY 1156 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_URGENT_HS_DIRTY 1157 /*! cache: pages read into cache */ -#define WT_STAT_CONN_CACHE_READ 1157 +#define WT_STAT_CONN_CACHE_READ 1158 /*! cache: pages read into cache after truncate */ -#define WT_STAT_CONN_CACHE_READ_DELETED 1158 +#define WT_STAT_CONN_CACHE_READ_DELETED 1159 /*! cache: pages read into cache after truncate in prepare state */ -#define WT_STAT_CONN_CACHE_READ_DELETED_PREPARED 1159 +#define WT_STAT_CONN_CACHE_READ_DELETED_PREPARED 1160 /*! cache: pages requested from the cache */ -#define WT_STAT_CONN_CACHE_PAGES_REQUESTED 1160 +#define WT_STAT_CONN_CACHE_PAGES_REQUESTED 1161 /*! cache: pages seen by eviction walk */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_SEEN 1161 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_SEEN 1162 /*! cache: pages seen by eviction walk that are already queued */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_ALREADY_QUEUED 1162 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_ALREADY_QUEUED 1163 /*! cache: pages selected for eviction unable to be evicted */ -#define WT_STAT_CONN_CACHE_EVICTION_FAIL 1163 +#define WT_STAT_CONN_CACHE_EVICTION_FAIL 1164 /*! * cache: pages selected for eviction unable to be evicted because of * active children on an internal page */ -#define WT_STAT_CONN_CACHE_EVICTION_FAIL_ACTIVE_CHILDREN_ON_AN_INTERNAL_PAGE 1164 +#define WT_STAT_CONN_CACHE_EVICTION_FAIL_ACTIVE_CHILDREN_ON_AN_INTERNAL_PAGE 1165 /*! * cache: pages selected for eviction unable to be evicted because of * failure in reconciliation */ -#define WT_STAT_CONN_CACHE_EVICTION_FAIL_IN_RECONCILIATION 1165 +#define WT_STAT_CONN_CACHE_EVICTION_FAIL_IN_RECONCILIATION 1166 /*! * cache: pages selected for eviction unable to be evicted because of * race between checkpoint and out of order timestamps handling */ -#define WT_STAT_CONN_CACHE_EVICTION_FAIL_CHECKPOINT_OUT_OF_ORDER_TS 1166 +#define WT_STAT_CONN_CACHE_EVICTION_FAIL_CHECKPOINT_OUT_OF_ORDER_TS 1167 /*! cache: pages walked for eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_WALK 1167 +#define WT_STAT_CONN_CACHE_EVICTION_WALK 1168 /*! cache: pages written from cache */ -#define WT_STAT_CONN_CACHE_WRITE 1168 +#define WT_STAT_CONN_CACHE_WRITE 1169 /*! cache: pages written requiring in-memory restoration */ -#define WT_STAT_CONN_CACHE_WRITE_RESTORE 1169 +#define WT_STAT_CONN_CACHE_WRITE_RESTORE 1170 /*! cache: percentage overhead */ -#define WT_STAT_CONN_CACHE_OVERHEAD 1170 +#define WT_STAT_CONN_CACHE_OVERHEAD 1171 /*! cache: the number of times full update inserted to history store */ -#define WT_STAT_CONN_CACHE_HS_INSERT_FULL_UPDATE 1171 +#define WT_STAT_CONN_CACHE_HS_INSERT_FULL_UPDATE 1172 /*! cache: the number of times reverse modify inserted to history store */ -#define WT_STAT_CONN_CACHE_HS_INSERT_REVERSE_MODIFY 1172 +#define WT_STAT_CONN_CACHE_HS_INSERT_REVERSE_MODIFY 1173 /*! cache: tracked bytes belonging to internal pages in the cache */ -#define WT_STAT_CONN_CACHE_BYTES_INTERNAL 1173 +#define WT_STAT_CONN_CACHE_BYTES_INTERNAL 1174 /*! cache: tracked bytes belonging to leaf pages in the cache */ -#define WT_STAT_CONN_CACHE_BYTES_LEAF 1174 +#define WT_STAT_CONN_CACHE_BYTES_LEAF 1175 /*! cache: tracked dirty bytes in the cache */ -#define WT_STAT_CONN_CACHE_BYTES_DIRTY 1175 +#define WT_STAT_CONN_CACHE_BYTES_DIRTY 1176 /*! cache: tracked dirty pages in the cache */ -#define WT_STAT_CONN_CACHE_PAGES_DIRTY 1176 +#define WT_STAT_CONN_CACHE_PAGES_DIRTY 1177 /*! cache: unmodified pages evicted */ -#define WT_STAT_CONN_CACHE_EVICTION_CLEAN 1177 +#define WT_STAT_CONN_CACHE_EVICTION_CLEAN 1178 /*! capacity: background fsync file handles considered */ -#define WT_STAT_CONN_FSYNC_ALL_FH_TOTAL 1178 +#define WT_STAT_CONN_FSYNC_ALL_FH_TOTAL 1179 /*! capacity: background fsync file handles synced */ -#define WT_STAT_CONN_FSYNC_ALL_FH 1179 +#define WT_STAT_CONN_FSYNC_ALL_FH 1180 /*! capacity: background fsync time (msecs) */ -#define WT_STAT_CONN_FSYNC_ALL_TIME 1180 +#define WT_STAT_CONN_FSYNC_ALL_TIME 1181 /*! capacity: bytes read */ -#define WT_STAT_CONN_CAPACITY_BYTES_READ 1181 +#define WT_STAT_CONN_CAPACITY_BYTES_READ 1182 /*! capacity: bytes written for checkpoint */ -#define WT_STAT_CONN_CAPACITY_BYTES_CKPT 1182 +#define WT_STAT_CONN_CAPACITY_BYTES_CKPT 1183 /*! capacity: bytes written for eviction */ -#define WT_STAT_CONN_CAPACITY_BYTES_EVICT 1183 +#define WT_STAT_CONN_CAPACITY_BYTES_EVICT 1184 /*! capacity: bytes written for log */ -#define WT_STAT_CONN_CAPACITY_BYTES_LOG 1184 +#define WT_STAT_CONN_CAPACITY_BYTES_LOG 1185 /*! capacity: bytes written total */ -#define WT_STAT_CONN_CAPACITY_BYTES_WRITTEN 1185 +#define WT_STAT_CONN_CAPACITY_BYTES_WRITTEN 1186 /*! capacity: threshold to call fsync */ -#define WT_STAT_CONN_CAPACITY_THRESHOLD 1186 +#define WT_STAT_CONN_CAPACITY_THRESHOLD 1187 /*! capacity: time waiting due to total capacity (usecs) */ -#define WT_STAT_CONN_CAPACITY_TIME_TOTAL 1187 +#define WT_STAT_CONN_CAPACITY_TIME_TOTAL 1188 /*! capacity: time waiting during checkpoint (usecs) */ -#define WT_STAT_CONN_CAPACITY_TIME_CKPT 1188 +#define WT_STAT_CONN_CAPACITY_TIME_CKPT 1189 /*! capacity: time waiting during eviction (usecs) */ -#define WT_STAT_CONN_CAPACITY_TIME_EVICT 1189 +#define WT_STAT_CONN_CAPACITY_TIME_EVICT 1190 /*! capacity: time waiting during logging (usecs) */ -#define WT_STAT_CONN_CAPACITY_TIME_LOG 1190 +#define WT_STAT_CONN_CAPACITY_TIME_LOG 1191 /*! capacity: time waiting during read (usecs) */ -#define WT_STAT_CONN_CAPACITY_TIME_READ 1191 +#define WT_STAT_CONN_CAPACITY_TIME_READ 1192 /*! checkpoint-cleanup: pages added for eviction */ -#define WT_STAT_CONN_CC_PAGES_EVICT 1192 +#define WT_STAT_CONN_CC_PAGES_EVICT 1193 /*! checkpoint-cleanup: pages removed */ -#define WT_STAT_CONN_CC_PAGES_REMOVED 1193 +#define WT_STAT_CONN_CC_PAGES_REMOVED 1194 /*! checkpoint-cleanup: pages skipped during tree walk */ -#define WT_STAT_CONN_CC_PAGES_WALK_SKIPPED 1194 +#define WT_STAT_CONN_CC_PAGES_WALK_SKIPPED 1195 /*! checkpoint-cleanup: pages visited */ -#define WT_STAT_CONN_CC_PAGES_VISITED 1195 +#define WT_STAT_CONN_CC_PAGES_VISITED 1196 /*! connection: auto adjusting condition resets */ -#define WT_STAT_CONN_COND_AUTO_WAIT_RESET 1196 +#define WT_STAT_CONN_COND_AUTO_WAIT_RESET 1197 /*! connection: auto adjusting condition wait calls */ -#define WT_STAT_CONN_COND_AUTO_WAIT 1197 +#define WT_STAT_CONN_COND_AUTO_WAIT 1198 /*! * connection: auto adjusting condition wait raced to update timeout and * skipped updating */ -#define WT_STAT_CONN_COND_AUTO_WAIT_SKIPPED 1198 +#define WT_STAT_CONN_COND_AUTO_WAIT_SKIPPED 1199 /*! connection: detected system time went backwards */ -#define WT_STAT_CONN_TIME_TRAVEL 1199 +#define WT_STAT_CONN_TIME_TRAVEL 1200 /*! connection: files currently open */ -#define WT_STAT_CONN_FILE_OPEN 1200 +#define WT_STAT_CONN_FILE_OPEN 1201 /*! connection: hash bucket array size for data handles */ -#define WT_STAT_CONN_BUCKETS_DH 1201 +#define WT_STAT_CONN_BUCKETS_DH 1202 /*! connection: hash bucket array size general */ -#define WT_STAT_CONN_BUCKETS 1202 +#define WT_STAT_CONN_BUCKETS 1203 /*! connection: memory allocations */ -#define WT_STAT_CONN_MEMORY_ALLOCATION 1203 +#define WT_STAT_CONN_MEMORY_ALLOCATION 1204 /*! connection: memory frees */ -#define WT_STAT_CONN_MEMORY_FREE 1204 +#define WT_STAT_CONN_MEMORY_FREE 1205 /*! connection: memory re-allocations */ -#define WT_STAT_CONN_MEMORY_GROW 1205 +#define WT_STAT_CONN_MEMORY_GROW 1206 /*! connection: pthread mutex condition wait calls */ -#define WT_STAT_CONN_COND_WAIT 1206 +#define WT_STAT_CONN_COND_WAIT 1207 /*! connection: pthread mutex shared lock read-lock calls */ -#define WT_STAT_CONN_RWLOCK_READ 1207 +#define WT_STAT_CONN_RWLOCK_READ 1208 /*! connection: pthread mutex shared lock write-lock calls */ -#define WT_STAT_CONN_RWLOCK_WRITE 1208 +#define WT_STAT_CONN_RWLOCK_WRITE 1209 /*! connection: total fsync I/Os */ -#define WT_STAT_CONN_FSYNC_IO 1209 +#define WT_STAT_CONN_FSYNC_IO 1210 /*! connection: total read I/Os */ -#define WT_STAT_CONN_READ_IO 1210 +#define WT_STAT_CONN_READ_IO 1211 /*! connection: total write I/Os */ -#define WT_STAT_CONN_WRITE_IO 1211 +#define WT_STAT_CONN_WRITE_IO 1212 /*! cursor: Total number of entries skipped by cursor next calls */ -#define WT_STAT_CONN_CURSOR_NEXT_SKIP_TOTAL 1212 +#define WT_STAT_CONN_CURSOR_NEXT_SKIP_TOTAL 1213 /*! cursor: Total number of entries skipped by cursor prev calls */ -#define WT_STAT_CONN_CURSOR_PREV_SKIP_TOTAL 1213 +#define WT_STAT_CONN_CURSOR_PREV_SKIP_TOTAL 1214 /*! * cursor: Total number of entries skipped to position the history store * cursor */ -#define WT_STAT_CONN_CURSOR_SKIP_HS_CUR_POSITION 1214 +#define WT_STAT_CONN_CURSOR_SKIP_HS_CUR_POSITION 1215 /*! * cursor: Total number of times a search near has exited due to prefix * config */ -#define WT_STAT_CONN_CURSOR_SEARCH_NEAR_PREFIX_FAST_PATHS 1215 +#define WT_STAT_CONN_CURSOR_SEARCH_NEAR_PREFIX_FAST_PATHS 1216 /*! cursor: cached cursor count */ -#define WT_STAT_CONN_CURSOR_CACHED_COUNT 1216 +#define WT_STAT_CONN_CURSOR_CACHED_COUNT 1217 /*! cursor: cursor bulk loaded cursor insert calls */ -#define WT_STAT_CONN_CURSOR_INSERT_BULK 1217 +#define WT_STAT_CONN_CURSOR_INSERT_BULK 1218 /*! cursor: cursor close calls that result in cache */ -#define WT_STAT_CONN_CURSOR_CACHE 1218 +#define WT_STAT_CONN_CURSOR_CACHE 1219 /*! cursor: cursor create calls */ -#define WT_STAT_CONN_CURSOR_CREATE 1219 +#define WT_STAT_CONN_CURSOR_CREATE 1220 /*! cursor: cursor insert calls */ -#define WT_STAT_CONN_CURSOR_INSERT 1220 +#define WT_STAT_CONN_CURSOR_INSERT 1221 /*! cursor: cursor insert key and value bytes */ -#define WT_STAT_CONN_CURSOR_INSERT_BYTES 1221 +#define WT_STAT_CONN_CURSOR_INSERT_BYTES 1222 /*! cursor: cursor modify calls */ -#define WT_STAT_CONN_CURSOR_MODIFY 1222 +#define WT_STAT_CONN_CURSOR_MODIFY 1223 /*! cursor: cursor modify key and value bytes affected */ -#define WT_STAT_CONN_CURSOR_MODIFY_BYTES 1223 +#define WT_STAT_CONN_CURSOR_MODIFY_BYTES 1224 /*! cursor: cursor modify value bytes modified */ -#define WT_STAT_CONN_CURSOR_MODIFY_BYTES_TOUCH 1224 +#define WT_STAT_CONN_CURSOR_MODIFY_BYTES_TOUCH 1225 /*! cursor: cursor next calls */ -#define WT_STAT_CONN_CURSOR_NEXT 1225 +#define WT_STAT_CONN_CURSOR_NEXT 1226 /*! * cursor: cursor next calls that skip due to a globally visible history * store tombstone */ -#define WT_STAT_CONN_CURSOR_NEXT_HS_TOMBSTONE 1226 +#define WT_STAT_CONN_CURSOR_NEXT_HS_TOMBSTONE 1227 /*! * cursor: cursor next calls that skip greater than or equal to 100 * entries */ -#define WT_STAT_CONN_CURSOR_NEXT_SKIP_GE_100 1227 +#define WT_STAT_CONN_CURSOR_NEXT_SKIP_GE_100 1228 /*! cursor: cursor next calls that skip less than 100 entries */ -#define WT_STAT_CONN_CURSOR_NEXT_SKIP_LT_100 1228 +#define WT_STAT_CONN_CURSOR_NEXT_SKIP_LT_100 1229 /*! cursor: cursor operation restarted */ -#define WT_STAT_CONN_CURSOR_RESTART 1229 +#define WT_STAT_CONN_CURSOR_RESTART 1230 /*! cursor: cursor prev calls */ -#define WT_STAT_CONN_CURSOR_PREV 1230 +#define WT_STAT_CONN_CURSOR_PREV 1231 /*! * cursor: cursor prev calls that skip due to a globally visible history * store tombstone */ -#define WT_STAT_CONN_CURSOR_PREV_HS_TOMBSTONE 1231 +#define WT_STAT_CONN_CURSOR_PREV_HS_TOMBSTONE 1232 /*! * cursor: cursor prev calls that skip greater than or equal to 100 * entries */ -#define WT_STAT_CONN_CURSOR_PREV_SKIP_GE_100 1232 +#define WT_STAT_CONN_CURSOR_PREV_SKIP_GE_100 1233 /*! cursor: cursor prev calls that skip less than 100 entries */ -#define WT_STAT_CONN_CURSOR_PREV_SKIP_LT_100 1233 +#define WT_STAT_CONN_CURSOR_PREV_SKIP_LT_100 1234 /*! cursor: cursor remove calls */ -#define WT_STAT_CONN_CURSOR_REMOVE 1234 +#define WT_STAT_CONN_CURSOR_REMOVE 1235 /*! cursor: cursor remove key bytes removed */ -#define WT_STAT_CONN_CURSOR_REMOVE_BYTES 1235 +#define WT_STAT_CONN_CURSOR_REMOVE_BYTES 1236 /*! cursor: cursor reserve calls */ -#define WT_STAT_CONN_CURSOR_RESERVE 1236 +#define WT_STAT_CONN_CURSOR_RESERVE 1237 /*! cursor: cursor reset calls */ -#define WT_STAT_CONN_CURSOR_RESET 1237 +#define WT_STAT_CONN_CURSOR_RESET 1238 /*! cursor: cursor search calls */ -#define WT_STAT_CONN_CURSOR_SEARCH 1238 +#define WT_STAT_CONN_CURSOR_SEARCH 1239 /*! cursor: cursor search history store calls */ -#define WT_STAT_CONN_CURSOR_SEARCH_HS 1239 +#define WT_STAT_CONN_CURSOR_SEARCH_HS 1240 /*! cursor: cursor search near calls */ -#define WT_STAT_CONN_CURSOR_SEARCH_NEAR 1240 +#define WT_STAT_CONN_CURSOR_SEARCH_NEAR 1241 /*! cursor: cursor sweep buckets */ -#define WT_STAT_CONN_CURSOR_SWEEP_BUCKETS 1241 +#define WT_STAT_CONN_CURSOR_SWEEP_BUCKETS 1242 /*! cursor: cursor sweep cursors closed */ -#define WT_STAT_CONN_CURSOR_SWEEP_CLOSED 1242 +#define WT_STAT_CONN_CURSOR_SWEEP_CLOSED 1243 /*! cursor: cursor sweep cursors examined */ -#define WT_STAT_CONN_CURSOR_SWEEP_EXAMINED 1243 +#define WT_STAT_CONN_CURSOR_SWEEP_EXAMINED 1244 /*! cursor: cursor sweeps */ -#define WT_STAT_CONN_CURSOR_SWEEP 1244 +#define WT_STAT_CONN_CURSOR_SWEEP 1245 /*! cursor: cursor truncate calls */ -#define WT_STAT_CONN_CURSOR_TRUNCATE 1245 +#define WT_STAT_CONN_CURSOR_TRUNCATE 1246 /*! cursor: cursor update calls */ -#define WT_STAT_CONN_CURSOR_UPDATE 1246 +#define WT_STAT_CONN_CURSOR_UPDATE 1247 /*! cursor: cursor update key and value bytes */ -#define WT_STAT_CONN_CURSOR_UPDATE_BYTES 1247 +#define WT_STAT_CONN_CURSOR_UPDATE_BYTES 1248 /*! cursor: cursor update value size change */ -#define WT_STAT_CONN_CURSOR_UPDATE_BYTES_CHANGED 1248 +#define WT_STAT_CONN_CURSOR_UPDATE_BYTES_CHANGED 1249 /*! cursor: cursors reused from cache */ -#define WT_STAT_CONN_CURSOR_REOPEN 1249 +#define WT_STAT_CONN_CURSOR_REOPEN 1250 /*! cursor: open cursor count */ -#define WT_STAT_CONN_CURSOR_OPEN_COUNT 1250 +#define WT_STAT_CONN_CURSOR_OPEN_COUNT 1251 /*! data-handle: connection data handle size */ -#define WT_STAT_CONN_DH_CONN_HANDLE_SIZE 1251 +#define WT_STAT_CONN_DH_CONN_HANDLE_SIZE 1252 /*! data-handle: connection data handles currently active */ -#define WT_STAT_CONN_DH_CONN_HANDLE_COUNT 1252 +#define WT_STAT_CONN_DH_CONN_HANDLE_COUNT 1253 /*! data-handle: connection sweep candidate became referenced */ -#define WT_STAT_CONN_DH_SWEEP_REF 1253 +#define WT_STAT_CONN_DH_SWEEP_REF 1254 /*! data-handle: connection sweep dhandles closed */ -#define WT_STAT_CONN_DH_SWEEP_CLOSE 1254 +#define WT_STAT_CONN_DH_SWEEP_CLOSE 1255 /*! data-handle: connection sweep dhandles removed from hash list */ -#define WT_STAT_CONN_DH_SWEEP_REMOVE 1255 +#define WT_STAT_CONN_DH_SWEEP_REMOVE 1256 /*! data-handle: connection sweep time-of-death sets */ -#define WT_STAT_CONN_DH_SWEEP_TOD 1256 +#define WT_STAT_CONN_DH_SWEEP_TOD 1257 /*! data-handle: connection sweeps */ -#define WT_STAT_CONN_DH_SWEEPS 1257 +#define WT_STAT_CONN_DH_SWEEPS 1258 /*! * data-handle: connection sweeps skipped due to checkpoint gathering * handles */ -#define WT_STAT_CONN_DH_SWEEP_SKIP_CKPT 1258 +#define WT_STAT_CONN_DH_SWEEP_SKIP_CKPT 1259 /*! data-handle: session dhandles swept */ -#define WT_STAT_CONN_DH_SESSION_HANDLES 1259 +#define WT_STAT_CONN_DH_SESSION_HANDLES 1260 /*! data-handle: session sweep attempts */ -#define WT_STAT_CONN_DH_SESSION_SWEEPS 1260 +#define WT_STAT_CONN_DH_SESSION_SWEEPS 1261 /*! lock: checkpoint lock acquisitions */ -#define WT_STAT_CONN_LOCK_CHECKPOINT_COUNT 1261 +#define WT_STAT_CONN_LOCK_CHECKPOINT_COUNT 1262 /*! lock: checkpoint lock application thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_APPLICATION 1262 +#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_APPLICATION 1263 /*! lock: checkpoint lock internal thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_INTERNAL 1263 +#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_INTERNAL 1264 /*! lock: dhandle lock application thread time waiting (usecs) */ -#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_APPLICATION 1264 +#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_APPLICATION 1265 /*! lock: dhandle lock internal thread time waiting (usecs) */ -#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_INTERNAL 1265 +#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_INTERNAL 1266 /*! lock: dhandle read lock acquisitions */ -#define WT_STAT_CONN_LOCK_DHANDLE_READ_COUNT 1266 +#define WT_STAT_CONN_LOCK_DHANDLE_READ_COUNT 1267 /*! lock: dhandle write lock acquisitions */ -#define WT_STAT_CONN_LOCK_DHANDLE_WRITE_COUNT 1267 +#define WT_STAT_CONN_LOCK_DHANDLE_WRITE_COUNT 1268 /*! * lock: durable timestamp queue lock application thread time waiting * (usecs) */ -#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_APPLICATION 1268 +#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_APPLICATION 1269 /*! * lock: durable timestamp queue lock internal thread time waiting * (usecs) */ -#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_INTERNAL 1269 +#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_INTERNAL 1270 /*! lock: durable timestamp queue read lock acquisitions */ -#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_READ_COUNT 1270 +#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_READ_COUNT 1271 /*! lock: durable timestamp queue write lock acquisitions */ -#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WRITE_COUNT 1271 +#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WRITE_COUNT 1272 /*! lock: metadata lock acquisitions */ -#define WT_STAT_CONN_LOCK_METADATA_COUNT 1272 +#define WT_STAT_CONN_LOCK_METADATA_COUNT 1273 /*! lock: metadata lock application thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_METADATA_WAIT_APPLICATION 1273 +#define WT_STAT_CONN_LOCK_METADATA_WAIT_APPLICATION 1274 /*! lock: metadata lock internal thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_METADATA_WAIT_INTERNAL 1274 +#define WT_STAT_CONN_LOCK_METADATA_WAIT_INTERNAL 1275 /*! * lock: read timestamp queue lock application thread time waiting * (usecs) */ -#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_APPLICATION 1275 +#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_APPLICATION 1276 /*! lock: read timestamp queue lock internal thread time waiting (usecs) */ -#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_INTERNAL 1276 +#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_INTERNAL 1277 /*! lock: read timestamp queue read lock acquisitions */ -#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_READ_COUNT 1277 +#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_READ_COUNT 1278 /*! lock: read timestamp queue write lock acquisitions */ -#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WRITE_COUNT 1278 +#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WRITE_COUNT 1279 /*! lock: schema lock acquisitions */ -#define WT_STAT_CONN_LOCK_SCHEMA_COUNT 1279 +#define WT_STAT_CONN_LOCK_SCHEMA_COUNT 1280 /*! lock: schema lock application thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_APPLICATION 1280 +#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_APPLICATION 1281 /*! lock: schema lock internal thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_INTERNAL 1281 +#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_INTERNAL 1282 /*! * lock: table lock application thread time waiting for the table lock * (usecs) */ -#define WT_STAT_CONN_LOCK_TABLE_WAIT_APPLICATION 1282 +#define WT_STAT_CONN_LOCK_TABLE_WAIT_APPLICATION 1283 /*! * lock: table lock internal thread time waiting for the table lock * (usecs) */ -#define WT_STAT_CONN_LOCK_TABLE_WAIT_INTERNAL 1283 +#define WT_STAT_CONN_LOCK_TABLE_WAIT_INTERNAL 1284 /*! lock: table read lock acquisitions */ -#define WT_STAT_CONN_LOCK_TABLE_READ_COUNT 1284 +#define WT_STAT_CONN_LOCK_TABLE_READ_COUNT 1285 /*! lock: table write lock acquisitions */ -#define WT_STAT_CONN_LOCK_TABLE_WRITE_COUNT 1285 +#define WT_STAT_CONN_LOCK_TABLE_WRITE_COUNT 1286 /*! lock: txn global lock application thread time waiting (usecs) */ -#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_APPLICATION 1286 +#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_APPLICATION 1287 /*! lock: txn global lock internal thread time waiting (usecs) */ -#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_INTERNAL 1287 +#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_INTERNAL 1288 /*! lock: txn global read lock acquisitions */ -#define WT_STAT_CONN_LOCK_TXN_GLOBAL_READ_COUNT 1288 +#define WT_STAT_CONN_LOCK_TXN_GLOBAL_READ_COUNT 1289 /*! lock: txn global write lock acquisitions */ -#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WRITE_COUNT 1289 +#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WRITE_COUNT 1290 /*! log: busy returns attempting to switch slots */ -#define WT_STAT_CONN_LOG_SLOT_SWITCH_BUSY 1290 +#define WT_STAT_CONN_LOG_SLOT_SWITCH_BUSY 1291 /*! log: force log remove time sleeping (usecs) */ -#define WT_STAT_CONN_LOG_FORCE_REMOVE_SLEEP 1291 +#define WT_STAT_CONN_LOG_FORCE_REMOVE_SLEEP 1292 /*! log: log bytes of payload data */ -#define WT_STAT_CONN_LOG_BYTES_PAYLOAD 1292 +#define WT_STAT_CONN_LOG_BYTES_PAYLOAD 1293 /*! log: log bytes written */ -#define WT_STAT_CONN_LOG_BYTES_WRITTEN 1293 +#define WT_STAT_CONN_LOG_BYTES_WRITTEN 1294 /*! log: log files manually zero-filled */ -#define WT_STAT_CONN_LOG_ZERO_FILLS 1294 +#define WT_STAT_CONN_LOG_ZERO_FILLS 1295 /*! log: log flush operations */ -#define WT_STAT_CONN_LOG_FLUSH 1295 +#define WT_STAT_CONN_LOG_FLUSH 1296 /*! log: log force write operations */ -#define WT_STAT_CONN_LOG_FORCE_WRITE 1296 +#define WT_STAT_CONN_LOG_FORCE_WRITE 1297 /*! log: log force write operations skipped */ -#define WT_STAT_CONN_LOG_FORCE_WRITE_SKIP 1297 +#define WT_STAT_CONN_LOG_FORCE_WRITE_SKIP 1298 /*! log: log records compressed */ -#define WT_STAT_CONN_LOG_COMPRESS_WRITES 1298 +#define WT_STAT_CONN_LOG_COMPRESS_WRITES 1299 /*! log: log records not compressed */ -#define WT_STAT_CONN_LOG_COMPRESS_WRITE_FAILS 1299 +#define WT_STAT_CONN_LOG_COMPRESS_WRITE_FAILS 1300 /*! log: log records too small to compress */ -#define WT_STAT_CONN_LOG_COMPRESS_SMALL 1300 +#define WT_STAT_CONN_LOG_COMPRESS_SMALL 1301 /*! log: log release advances write LSN */ -#define WT_STAT_CONN_LOG_RELEASE_WRITE_LSN 1301 +#define WT_STAT_CONN_LOG_RELEASE_WRITE_LSN 1302 /*! log: log scan operations */ -#define WT_STAT_CONN_LOG_SCANS 1302 +#define WT_STAT_CONN_LOG_SCANS 1303 /*! log: log scan records requiring two reads */ -#define WT_STAT_CONN_LOG_SCAN_REREADS 1303 +#define WT_STAT_CONN_LOG_SCAN_REREADS 1304 /*! log: log server thread advances write LSN */ -#define WT_STAT_CONN_LOG_WRITE_LSN 1304 +#define WT_STAT_CONN_LOG_WRITE_LSN 1305 /*! log: log server thread write LSN walk skipped */ -#define WT_STAT_CONN_LOG_WRITE_LSN_SKIP 1305 +#define WT_STAT_CONN_LOG_WRITE_LSN_SKIP 1306 /*! log: log sync operations */ -#define WT_STAT_CONN_LOG_SYNC 1306 +#define WT_STAT_CONN_LOG_SYNC 1307 /*! log: log sync time duration (usecs) */ -#define WT_STAT_CONN_LOG_SYNC_DURATION 1307 +#define WT_STAT_CONN_LOG_SYNC_DURATION 1308 /*! log: log sync_dir operations */ -#define WT_STAT_CONN_LOG_SYNC_DIR 1308 +#define WT_STAT_CONN_LOG_SYNC_DIR 1309 /*! log: log sync_dir time duration (usecs) */ -#define WT_STAT_CONN_LOG_SYNC_DIR_DURATION 1309 +#define WT_STAT_CONN_LOG_SYNC_DIR_DURATION 1310 /*! log: log write operations */ -#define WT_STAT_CONN_LOG_WRITES 1310 +#define WT_STAT_CONN_LOG_WRITES 1311 /*! log: logging bytes consolidated */ -#define WT_STAT_CONN_LOG_SLOT_CONSOLIDATED 1311 +#define WT_STAT_CONN_LOG_SLOT_CONSOLIDATED 1312 /*! log: maximum log file size */ -#define WT_STAT_CONN_LOG_MAX_FILESIZE 1312 +#define WT_STAT_CONN_LOG_MAX_FILESIZE 1313 /*! log: number of pre-allocated log files to create */ -#define WT_STAT_CONN_LOG_PREALLOC_MAX 1313 +#define WT_STAT_CONN_LOG_PREALLOC_MAX 1314 /*! log: pre-allocated log files not ready and missed */ -#define WT_STAT_CONN_LOG_PREALLOC_MISSED 1314 +#define WT_STAT_CONN_LOG_PREALLOC_MISSED 1315 /*! log: pre-allocated log files prepared */ -#define WT_STAT_CONN_LOG_PREALLOC_FILES 1315 +#define WT_STAT_CONN_LOG_PREALLOC_FILES 1316 /*! log: pre-allocated log files used */ -#define WT_STAT_CONN_LOG_PREALLOC_USED 1316 +#define WT_STAT_CONN_LOG_PREALLOC_USED 1317 /*! log: records processed by log scan */ -#define WT_STAT_CONN_LOG_SCAN_RECORDS 1317 +#define WT_STAT_CONN_LOG_SCAN_RECORDS 1318 /*! log: slot close lost race */ -#define WT_STAT_CONN_LOG_SLOT_CLOSE_RACE 1318 +#define WT_STAT_CONN_LOG_SLOT_CLOSE_RACE 1319 /*! log: slot close unbuffered waits */ -#define WT_STAT_CONN_LOG_SLOT_CLOSE_UNBUF 1319 +#define WT_STAT_CONN_LOG_SLOT_CLOSE_UNBUF 1320 /*! log: slot closures */ -#define WT_STAT_CONN_LOG_SLOT_CLOSES 1320 +#define WT_STAT_CONN_LOG_SLOT_CLOSES 1321 /*! log: slot join atomic update races */ -#define WT_STAT_CONN_LOG_SLOT_RACES 1321 +#define WT_STAT_CONN_LOG_SLOT_RACES 1322 /*! log: slot join calls atomic updates raced */ -#define WT_STAT_CONN_LOG_SLOT_YIELD_RACE 1322 +#define WT_STAT_CONN_LOG_SLOT_YIELD_RACE 1323 /*! log: slot join calls did not yield */ -#define WT_STAT_CONN_LOG_SLOT_IMMEDIATE 1323 +#define WT_STAT_CONN_LOG_SLOT_IMMEDIATE 1324 /*! log: slot join calls found active slot closed */ -#define WT_STAT_CONN_LOG_SLOT_YIELD_CLOSE 1324 +#define WT_STAT_CONN_LOG_SLOT_YIELD_CLOSE 1325 /*! log: slot join calls slept */ -#define WT_STAT_CONN_LOG_SLOT_YIELD_SLEEP 1325 +#define WT_STAT_CONN_LOG_SLOT_YIELD_SLEEP 1326 /*! log: slot join calls yielded */ -#define WT_STAT_CONN_LOG_SLOT_YIELD 1326 +#define WT_STAT_CONN_LOG_SLOT_YIELD 1327 /*! log: slot join found active slot closed */ -#define WT_STAT_CONN_LOG_SLOT_ACTIVE_CLOSED 1327 +#define WT_STAT_CONN_LOG_SLOT_ACTIVE_CLOSED 1328 /*! log: slot joins yield time (usecs) */ -#define WT_STAT_CONN_LOG_SLOT_YIELD_DURATION 1328 +#define WT_STAT_CONN_LOG_SLOT_YIELD_DURATION 1329 /*! log: slot transitions unable to find free slot */ -#define WT_STAT_CONN_LOG_SLOT_NO_FREE_SLOTS 1329 +#define WT_STAT_CONN_LOG_SLOT_NO_FREE_SLOTS 1330 /*! log: slot unbuffered writes */ -#define WT_STAT_CONN_LOG_SLOT_UNBUFFERED 1330 +#define WT_STAT_CONN_LOG_SLOT_UNBUFFERED 1331 /*! log: total in-memory size of compressed records */ -#define WT_STAT_CONN_LOG_COMPRESS_MEM 1331 +#define WT_STAT_CONN_LOG_COMPRESS_MEM 1332 /*! log: total log buffer size */ -#define WT_STAT_CONN_LOG_BUFFER_SIZE 1332 +#define WT_STAT_CONN_LOG_BUFFER_SIZE 1333 /*! log: total size of compressed records */ -#define WT_STAT_CONN_LOG_COMPRESS_LEN 1333 +#define WT_STAT_CONN_LOG_COMPRESS_LEN 1334 /*! log: written slots coalesced */ -#define WT_STAT_CONN_LOG_SLOT_COALESCED 1334 +#define WT_STAT_CONN_LOG_SLOT_COALESCED 1335 /*! log: yields waiting for previous log file close */ -#define WT_STAT_CONN_LOG_CLOSE_YIELDS 1335 +#define WT_STAT_CONN_LOG_CLOSE_YIELDS 1336 /*! perf: file system read latency histogram (bucket 1) - 10-49ms */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT50 1336 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT50 1337 /*! perf: file system read latency histogram (bucket 2) - 50-99ms */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT100 1337 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT100 1338 /*! perf: file system read latency histogram (bucket 3) - 100-249ms */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT250 1338 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT250 1339 /*! perf: file system read latency histogram (bucket 4) - 250-499ms */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT500 1339 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT500 1340 /*! perf: file system read latency histogram (bucket 5) - 500-999ms */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT1000 1340 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT1000 1341 /*! perf: file system read latency histogram (bucket 6) - 1000ms+ */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_GT1000 1341 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_GT1000 1342 /*! perf: file system write latency histogram (bucket 1) - 10-49ms */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT50 1342 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT50 1343 /*! perf: file system write latency histogram (bucket 2) - 50-99ms */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT100 1343 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT100 1344 /*! perf: file system write latency histogram (bucket 3) - 100-249ms */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT250 1344 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT250 1345 /*! perf: file system write latency histogram (bucket 4) - 250-499ms */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT500 1345 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT500 1346 /*! perf: file system write latency histogram (bucket 5) - 500-999ms */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT1000 1346 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT1000 1347 /*! perf: file system write latency histogram (bucket 6) - 1000ms+ */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_GT1000 1347 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_GT1000 1348 /*! perf: operation read latency histogram (bucket 1) - 100-249us */ -#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT250 1348 +#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT250 1349 /*! perf: operation read latency histogram (bucket 2) - 250-499us */ -#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT500 1349 +#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT500 1350 /*! perf: operation read latency histogram (bucket 3) - 500-999us */ -#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT1000 1350 +#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT1000 1351 /*! perf: operation read latency histogram (bucket 4) - 1000-9999us */ -#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT10000 1351 +#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT10000 1352 /*! perf: operation read latency histogram (bucket 5) - 10000us+ */ -#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_GT10000 1352 +#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_GT10000 1353 /*! perf: operation write latency histogram (bucket 1) - 100-249us */ -#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT250 1353 +#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT250 1354 /*! perf: operation write latency histogram (bucket 2) - 250-499us */ -#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT500 1354 +#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT500 1355 /*! perf: operation write latency histogram (bucket 3) - 500-999us */ -#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT1000 1355 +#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT1000 1356 /*! perf: operation write latency histogram (bucket 4) - 1000-9999us */ -#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT10000 1356 +#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT10000 1357 /*! perf: operation write latency histogram (bucket 5) - 10000us+ */ -#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_GT10000 1357 +#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_GT10000 1358 /*! reconciliation: approximate byte size of timestamps in pages written */ -#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TS 1358 +#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TS 1359 /*! * reconciliation: approximate byte size of transaction IDs in pages * written */ -#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TXN 1359 +#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TXN 1360 /*! reconciliation: fast-path pages deleted */ -#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1360 +#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1361 /*! reconciliation: leaf-page overflow keys */ -#define WT_STAT_CONN_REC_OVERFLOW_KEY_LEAF 1361 +#define WT_STAT_CONN_REC_OVERFLOW_KEY_LEAF 1362 /*! reconciliation: maximum seconds spent in a reconciliation call */ -#define WT_STAT_CONN_REC_MAXIMUM_SECONDS 1362 +#define WT_STAT_CONN_REC_MAXIMUM_SECONDS 1363 /*! reconciliation: page reconciliation calls */ -#define WT_STAT_CONN_REC_PAGES 1363 +#define WT_STAT_CONN_REC_PAGES 1364 /*! reconciliation: page reconciliation calls for eviction */ -#define WT_STAT_CONN_REC_PAGES_EVICTION 1364 +#define WT_STAT_CONN_REC_PAGES_EVICTION 1365 /*! * reconciliation: page reconciliation calls that resulted in values with * prepared transaction metadata */ -#define WT_STAT_CONN_REC_PAGES_WITH_PREPARE 1365 +#define WT_STAT_CONN_REC_PAGES_WITH_PREPARE 1366 /*! * reconciliation: page reconciliation calls that resulted in values with * timestamps */ -#define WT_STAT_CONN_REC_PAGES_WITH_TS 1366 +#define WT_STAT_CONN_REC_PAGES_WITH_TS 1367 /*! * reconciliation: page reconciliation calls that resulted in values with * transaction ids */ -#define WT_STAT_CONN_REC_PAGES_WITH_TXN 1367 +#define WT_STAT_CONN_REC_PAGES_WITH_TXN 1368 /*! reconciliation: pages deleted */ -#define WT_STAT_CONN_REC_PAGE_DELETE 1368 +#define WT_STAT_CONN_REC_PAGE_DELETE 1369 /*! * reconciliation: pages written including an aggregated newest start * durable timestamp */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 1369 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 1370 /*! * reconciliation: pages written including an aggregated newest stop * durable timestamp */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 1370 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 1371 /*! * reconciliation: pages written including an aggregated newest stop * timestamp */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TS 1371 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TS 1372 /*! * reconciliation: pages written including an aggregated newest stop * transaction ID */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TXN 1372 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TXN 1373 /*! * reconciliation: pages written including an aggregated newest * transaction ID */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_TXN 1373 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_TXN 1374 /*! * reconciliation: pages written including an aggregated oldest start * timestamp */ -#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TS 1374 +#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TS 1375 /*! reconciliation: pages written including an aggregated prepare */ -#define WT_STAT_CONN_REC_TIME_AGGR_PREPARED 1375 +#define WT_STAT_CONN_REC_TIME_AGGR_PREPARED 1376 /*! reconciliation: pages written including at least one prepare state */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_PREPARED 1376 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_PREPARED 1377 /*! * reconciliation: pages written including at least one start durable * timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 1377 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 1378 /*! reconciliation: pages written including at least one start timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TS 1378 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TS 1379 /*! * reconciliation: pages written including at least one start transaction * ID */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TXN 1379 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TXN 1380 /*! * reconciliation: pages written including at least one stop durable * timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 1380 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 1381 /*! reconciliation: pages written including at least one stop timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TS 1381 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TS 1382 /*! * reconciliation: pages written including at least one stop transaction * ID */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TXN 1382 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TXN 1383 /*! reconciliation: records written including a prepare state */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PREPARED 1383 +#define WT_STAT_CONN_REC_TIME_WINDOW_PREPARED 1384 /*! reconciliation: records written including a start durable timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_START_TS 1384 +#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_START_TS 1385 /*! reconciliation: records written including a start timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_START_TS 1385 +#define WT_STAT_CONN_REC_TIME_WINDOW_START_TS 1386 /*! reconciliation: records written including a start transaction ID */ -#define WT_STAT_CONN_REC_TIME_WINDOW_START_TXN 1386 +#define WT_STAT_CONN_REC_TIME_WINDOW_START_TXN 1387 /*! reconciliation: records written including a stop durable timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_STOP_TS 1387 +#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_STOP_TS 1388 /*! reconciliation: records written including a stop timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TS 1388 +#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TS 1389 /*! reconciliation: records written including a stop transaction ID */ -#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TXN 1389 +#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TXN 1390 /*! reconciliation: split bytes currently awaiting free */ -#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1390 +#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1391 /*! reconciliation: split objects currently awaiting free */ -#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1391 +#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1392 /*! session: attempts to remove a local object and the object is in use */ -#define WT_STAT_CONN_LOCAL_OBJECTS_INUSE 1392 +#define WT_STAT_CONN_LOCAL_OBJECTS_INUSE 1393 /*! session: flush_tier operation calls */ -#define WT_STAT_CONN_FLUSH_TIER 1393 +#define WT_STAT_CONN_FLUSH_TIER 1394 /*! session: flush_tier tables skipped due to no checkpoint */ -#define WT_STAT_CONN_FLUSH_TIER_SKIPPED 1394 +#define WT_STAT_CONN_FLUSH_TIER_SKIPPED 1395 /*! session: flush_tier tables switched */ -#define WT_STAT_CONN_FLUSH_TIER_SWITCHED 1395 +#define WT_STAT_CONN_FLUSH_TIER_SWITCHED 1396 /*! session: local objects removed */ -#define WT_STAT_CONN_LOCAL_OBJECTS_REMOVED 1396 +#define WT_STAT_CONN_LOCAL_OBJECTS_REMOVED 1397 /*! session: open session count */ -#define WT_STAT_CONN_SESSION_OPEN 1397 +#define WT_STAT_CONN_SESSION_OPEN 1398 /*! session: session query timestamp calls */ -#define WT_STAT_CONN_SESSION_QUERY_TS 1398 +#define WT_STAT_CONN_SESSION_QUERY_TS 1399 /*! session: table alter failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1399 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1400 /*! session: table alter successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1400 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1401 /*! session: table alter triggering checkpoint calls */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_TRIGGER_CHECKPOINT 1401 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_TRIGGER_CHECKPOINT 1402 /*! session: table alter unchanged and skipped */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1402 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1403 /*! session: table compact failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1403 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1404 /*! session: table compact failed calls due to cache pressure */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL_CACHE_PRESSURE 1404 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL_CACHE_PRESSURE 1405 /*! session: table compact running */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_RUNNING 1405 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_RUNNING 1406 /*! session: table compact skipped as process would not reduce file size */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SKIPPED 1406 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SKIPPED 1407 /*! session: table compact successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1407 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1408 /*! session: table compact timeout */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_TIMEOUT 1408 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_TIMEOUT 1409 /*! session: table create failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1409 +#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1410 /*! session: table create successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1410 +#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1411 /*! session: table drop failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1411 +#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1412 /*! session: table drop successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1412 +#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1413 /*! session: table rename failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1413 +#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1414 /*! session: table rename successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1414 +#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1415 /*! session: table salvage failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1415 +#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1416 /*! session: table salvage successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1416 +#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1417 /*! session: table truncate failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1417 +#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1418 /*! session: table truncate successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1418 +#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1419 /*! session: table verify failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1419 +#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1420 /*! session: table verify successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1420 +#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1421 /*! session: tiered operations dequeued and processed */ -#define WT_STAT_CONN_TIERED_WORK_UNITS_DEQUEUED 1421 +#define WT_STAT_CONN_TIERED_WORK_UNITS_DEQUEUED 1422 /*! session: tiered operations scheduled */ -#define WT_STAT_CONN_TIERED_WORK_UNITS_CREATED 1422 +#define WT_STAT_CONN_TIERED_WORK_UNITS_CREATED 1423 /*! session: tiered storage local retention time (secs) */ -#define WT_STAT_CONN_TIERED_RETENTION 1423 +#define WT_STAT_CONN_TIERED_RETENTION 1424 /*! thread-state: active filesystem fsync calls */ -#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1424 +#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1425 /*! thread-state: active filesystem read calls */ -#define WT_STAT_CONN_THREAD_READ_ACTIVE 1425 +#define WT_STAT_CONN_THREAD_READ_ACTIVE 1426 /*! thread-state: active filesystem write calls */ -#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1426 +#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1427 /*! thread-yield: application thread time evicting (usecs) */ -#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1427 +#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1428 /*! thread-yield: application thread time waiting for cache (usecs) */ -#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1428 +#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1429 /*! * thread-yield: connection close blocked waiting for transaction state * stabilization */ -#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1429 +#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1430 /*! thread-yield: connection close yielded for lsm manager shutdown */ -#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1430 +#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1431 /*! thread-yield: data handle lock yielded */ -#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1431 +#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1432 /*! * thread-yield: get reference for page index and slot time sleeping * (usecs) */ -#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1432 +#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1433 /*! thread-yield: page access yielded due to prepare state change */ -#define WT_STAT_CONN_PREPARED_TRANSITION_BLOCKED_PAGE 1433 +#define WT_STAT_CONN_PREPARED_TRANSITION_BLOCKED_PAGE 1434 /*! thread-yield: page acquire busy blocked */ -#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1434 +#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1435 /*! thread-yield: page acquire eviction blocked */ -#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1435 +#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1436 /*! thread-yield: page acquire locked blocked */ -#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1436 +#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1437 /*! thread-yield: page acquire read blocked */ -#define WT_STAT_CONN_PAGE_READ_BLOCKED 1437 +#define WT_STAT_CONN_PAGE_READ_BLOCKED 1438 /*! thread-yield: page acquire time sleeping (usecs) */ -#define WT_STAT_CONN_PAGE_SLEEP 1438 +#define WT_STAT_CONN_PAGE_SLEEP 1439 /*! * thread-yield: page delete rollback time sleeping for state change * (usecs) */ -#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1439 +#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1440 /*! thread-yield: page reconciliation yielded due to child modification */ -#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1440 +#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1441 /*! transaction: Number of prepared updates */ -#define WT_STAT_CONN_TXN_PREPARED_UPDATES 1441 +#define WT_STAT_CONN_TXN_PREPARED_UPDATES 1442 /*! transaction: Number of prepared updates committed */ -#define WT_STAT_CONN_TXN_PREPARED_UPDATES_COMMITTED 1442 +#define WT_STAT_CONN_TXN_PREPARED_UPDATES_COMMITTED 1443 /*! transaction: Number of prepared updates repeated on the same key */ -#define WT_STAT_CONN_TXN_PREPARED_UPDATES_KEY_REPEATED 1443 +#define WT_STAT_CONN_TXN_PREPARED_UPDATES_KEY_REPEATED 1444 /*! transaction: Number of prepared updates rolled back */ -#define WT_STAT_CONN_TXN_PREPARED_UPDATES_ROLLEDBACK 1444 +#define WT_STAT_CONN_TXN_PREPARED_UPDATES_ROLLEDBACK 1445 /*! transaction: prepared transactions */ -#define WT_STAT_CONN_TXN_PREPARE 1445 +#define WT_STAT_CONN_TXN_PREPARE 1446 /*! transaction: prepared transactions committed */ -#define WT_STAT_CONN_TXN_PREPARE_COMMIT 1446 +#define WT_STAT_CONN_TXN_PREPARE_COMMIT 1447 /*! transaction: prepared transactions currently active */ -#define WT_STAT_CONN_TXN_PREPARE_ACTIVE 1447 +#define WT_STAT_CONN_TXN_PREPARE_ACTIVE 1448 /*! transaction: prepared transactions rolled back */ -#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK 1448 -/*! - * transaction: prepared transactions rolled back and do not remove the - * history store entry - */ -#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK_DO_NOT_REMOVE_HS_UPDATE 1449 -/*! - * transaction: prepared transactions rolled back and fix the history - * store entry with checkpoint reserved transaction id - */ -#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK_FIX_HS_UPDATE_WITH_CKPT_RESERVED_TXNID 1450 +#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK 1449 /*! transaction: query timestamp calls */ -#define WT_STAT_CONN_TXN_QUERY_TS 1451 +#define WT_STAT_CONN_TXN_QUERY_TS 1450 /*! transaction: race to read prepared update retry */ -#define WT_STAT_CONN_TXN_READ_RACE_PREPARE_UPDATE 1452 +#define WT_STAT_CONN_TXN_READ_RACE_PREPARE_UPDATE 1451 /*! transaction: rollback to stable calls */ -#define WT_STAT_CONN_TXN_RTS 1453 +#define WT_STAT_CONN_TXN_RTS 1452 /*! * transaction: rollback to stable history store records with stop * timestamps older than newer records */ -#define WT_STAT_CONN_TXN_RTS_HS_STOP_OLDER_THAN_NEWER_START 1454 +#define WT_STAT_CONN_TXN_RTS_HS_STOP_OLDER_THAN_NEWER_START 1453 /*! transaction: rollback to stable inconsistent checkpoint */ -#define WT_STAT_CONN_TXN_RTS_INCONSISTENT_CKPT 1455 +#define WT_STAT_CONN_TXN_RTS_INCONSISTENT_CKPT 1454 /*! transaction: rollback to stable keys removed */ -#define WT_STAT_CONN_TXN_RTS_KEYS_REMOVED 1456 +#define WT_STAT_CONN_TXN_RTS_KEYS_REMOVED 1455 /*! transaction: rollback to stable keys restored */ -#define WT_STAT_CONN_TXN_RTS_KEYS_RESTORED 1457 +#define WT_STAT_CONN_TXN_RTS_KEYS_RESTORED 1456 /*! transaction: rollback to stable pages visited */ -#define WT_STAT_CONN_TXN_RTS_PAGES_VISITED 1458 +#define WT_STAT_CONN_TXN_RTS_PAGES_VISITED 1457 /*! transaction: rollback to stable restored tombstones from history store */ -#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_TOMBSTONES 1459 +#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_TOMBSTONES 1458 /*! transaction: rollback to stable restored updates from history store */ -#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_UPDATES 1460 +#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_UPDATES 1459 /*! transaction: rollback to stable skipping delete rle */ -#define WT_STAT_CONN_TXN_RTS_DELETE_RLE_SKIPPED 1461 +#define WT_STAT_CONN_TXN_RTS_DELETE_RLE_SKIPPED 1460 /*! transaction: rollback to stable skipping stable rle */ -#define WT_STAT_CONN_TXN_RTS_STABLE_RLE_SKIPPED 1462 +#define WT_STAT_CONN_TXN_RTS_STABLE_RLE_SKIPPED 1461 /*! transaction: rollback to stable sweeping history store keys */ -#define WT_STAT_CONN_TXN_RTS_SWEEP_HS_KEYS 1463 +#define WT_STAT_CONN_TXN_RTS_SWEEP_HS_KEYS 1462 /*! transaction: rollback to stable tree walk skipping pages */ -#define WT_STAT_CONN_TXN_RTS_TREE_WALK_SKIP_PAGES 1464 +#define WT_STAT_CONN_TXN_RTS_TREE_WALK_SKIP_PAGES 1463 /*! transaction: rollback to stable updates aborted */ -#define WT_STAT_CONN_TXN_RTS_UPD_ABORTED 1465 +#define WT_STAT_CONN_TXN_RTS_UPD_ABORTED 1464 /*! transaction: rollback to stable updates removed from history store */ -#define WT_STAT_CONN_TXN_RTS_HS_REMOVED 1466 +#define WT_STAT_CONN_TXN_RTS_HS_REMOVED 1465 /*! transaction: sessions scanned in each walk of concurrent sessions */ -#define WT_STAT_CONN_TXN_SESSIONS_WALKED 1467 +#define WT_STAT_CONN_TXN_SESSIONS_WALKED 1466 /*! transaction: set timestamp calls */ -#define WT_STAT_CONN_TXN_SET_TS 1468 +#define WT_STAT_CONN_TXN_SET_TS 1467 /*! transaction: set timestamp durable calls */ -#define WT_STAT_CONN_TXN_SET_TS_DURABLE 1469 +#define WT_STAT_CONN_TXN_SET_TS_DURABLE 1468 /*! transaction: set timestamp durable updates */ -#define WT_STAT_CONN_TXN_SET_TS_DURABLE_UPD 1470 +#define WT_STAT_CONN_TXN_SET_TS_DURABLE_UPD 1469 /*! transaction: set timestamp oldest calls */ -#define WT_STAT_CONN_TXN_SET_TS_OLDEST 1471 +#define WT_STAT_CONN_TXN_SET_TS_OLDEST 1470 /*! transaction: set timestamp oldest updates */ -#define WT_STAT_CONN_TXN_SET_TS_OLDEST_UPD 1472 +#define WT_STAT_CONN_TXN_SET_TS_OLDEST_UPD 1471 /*! transaction: set timestamp stable calls */ -#define WT_STAT_CONN_TXN_SET_TS_STABLE 1473 +#define WT_STAT_CONN_TXN_SET_TS_STABLE 1472 /*! transaction: set timestamp stable updates */ -#define WT_STAT_CONN_TXN_SET_TS_STABLE_UPD 1474 +#define WT_STAT_CONN_TXN_SET_TS_STABLE_UPD 1473 /*! transaction: transaction begins */ -#define WT_STAT_CONN_TXN_BEGIN 1475 +#define WT_STAT_CONN_TXN_BEGIN 1474 /*! transaction: transaction checkpoint currently running */ -#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1476 +#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1475 /*! * transaction: transaction checkpoint currently running for history * store file */ -#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING_HS 1477 +#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING_HS 1476 /*! transaction: transaction checkpoint generation */ -#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1478 +#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1477 /*! * transaction: transaction checkpoint history store file duration * (usecs) */ -#define WT_STAT_CONN_TXN_HS_CKPT_DURATION 1479 +#define WT_STAT_CONN_TXN_HS_CKPT_DURATION 1478 /*! transaction: transaction checkpoint max time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1480 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1479 /*! transaction: transaction checkpoint min time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1481 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1480 /*! * transaction: transaction checkpoint most recent duration for gathering * all handles (usecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION 1482 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION 1481 /*! * transaction: transaction checkpoint most recent duration for gathering * applied handles (usecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_APPLY 1483 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_APPLY 1482 /*! * transaction: transaction checkpoint most recent duration for gathering * skipped handles (usecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_SKIP 1484 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_SKIP 1483 /*! transaction: transaction checkpoint most recent handles applied */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_APPLIED 1485 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_APPLIED 1484 /*! transaction: transaction checkpoint most recent handles skipped */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_SKIPPED 1486 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_SKIPPED 1485 /*! transaction: transaction checkpoint most recent handles walked */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_WALKED 1487 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_WALKED 1486 /*! transaction: transaction checkpoint most recent time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1488 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1487 /*! transaction: transaction checkpoint prepare currently running */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RUNNING 1489 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RUNNING 1488 /*! transaction: transaction checkpoint prepare max time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MAX 1490 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MAX 1489 /*! transaction: transaction checkpoint prepare min time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MIN 1491 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MIN 1490 /*! transaction: transaction checkpoint prepare most recent time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RECENT 1492 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RECENT 1491 /*! transaction: transaction checkpoint prepare total time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_TOTAL 1493 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_TOTAL 1492 /*! transaction: transaction checkpoint scrub dirty target */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1494 +#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1493 /*! transaction: transaction checkpoint scrub time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1495 +#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1494 /*! transaction: transaction checkpoint stop timing stress active */ -#define WT_STAT_CONN_TXN_CHECKPOINT_STOP_STRESS_ACTIVE 1496 +#define WT_STAT_CONN_TXN_CHECKPOINT_STOP_STRESS_ACTIVE 1495 /*! transaction: transaction checkpoint total time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1497 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1496 /*! transaction: transaction checkpoints */ -#define WT_STAT_CONN_TXN_CHECKPOINT 1498 +#define WT_STAT_CONN_TXN_CHECKPOINT 1497 /*! transaction: transaction checkpoints due to obsolete pages */ -#define WT_STAT_CONN_TXN_CHECKPOINT_OBSOLETE_APPLIED 1499 +#define WT_STAT_CONN_TXN_CHECKPOINT_OBSOLETE_APPLIED 1498 /*! * transaction: transaction checkpoints skipped because database was * clean */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1500 +#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1499 /*! transaction: transaction failures due to history store */ -#define WT_STAT_CONN_TXN_FAIL_CACHE 1501 +#define WT_STAT_CONN_TXN_FAIL_CACHE 1500 /*! * transaction: transaction fsync calls for checkpoint after allocating * the transaction ID */ -#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1502 +#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1501 /*! * transaction: transaction fsync duration for checkpoint after * allocating the transaction ID (usecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1503 +#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1502 /*! transaction: transaction range of IDs currently pinned */ -#define WT_STAT_CONN_TXN_PINNED_RANGE 1504 +#define WT_STAT_CONN_TXN_PINNED_RANGE 1503 /*! transaction: transaction range of IDs currently pinned by a checkpoint */ -#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1505 +#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1504 /*! transaction: transaction range of timestamps currently pinned */ -#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP 1506 +#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP 1505 /*! transaction: transaction range of timestamps pinned by a checkpoint */ -#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_CHECKPOINT 1507 +#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_CHECKPOINT 1506 /*! * transaction: transaction range of timestamps pinned by the oldest * active read timestamp */ -#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_READER 1508 +#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_READER 1507 /*! * transaction: transaction range of timestamps pinned by the oldest * timestamp */ -#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST 1509 +#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST 1508 /*! transaction: transaction read timestamp of the oldest active reader */ -#define WT_STAT_CONN_TXN_TIMESTAMP_OLDEST_ACTIVE_READ 1510 +#define WT_STAT_CONN_TXN_TIMESTAMP_OLDEST_ACTIVE_READ 1509 /*! transaction: transaction rollback to stable currently running */ -#define WT_STAT_CONN_TXN_ROLLBACK_TO_STABLE_RUNNING 1511 +#define WT_STAT_CONN_TXN_ROLLBACK_TO_STABLE_RUNNING 1510 /*! transaction: transaction walk of concurrent sessions */ -#define WT_STAT_CONN_TXN_WALK_SESSIONS 1512 +#define WT_STAT_CONN_TXN_WALK_SESSIONS 1511 /*! transaction: transactions committed */ -#define WT_STAT_CONN_TXN_COMMIT 1513 +#define WT_STAT_CONN_TXN_COMMIT 1512 /*! transaction: transactions rolled back */ -#define WT_STAT_CONN_TXN_ROLLBACK 1514 +#define WT_STAT_CONN_TXN_ROLLBACK 1513 /*! transaction: update conflicts */ -#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1515 +#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1514 /*! * @} @@ -6580,511 +6575,516 @@ extern int wiredtiger_extension_terminate(WT_CONNECTION *connection); * the update chain after the selected on disk update */ #define WT_STAT_DSRC_CACHE_EVICTION_BLOCKED_OOO_CHECKPOINT_RACE_4 2055 +/*! + * cache: eviction gave up due to needing to remove a record from the + * history store but checkpoint is running + */ +#define WT_STAT_DSRC_CACHE_EVICTION_BLOCKED_REMOVE_HS_RACE_WITH_CHECKPOINT 2056 /*! cache: eviction walk passes of a file */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALK_PASSES 2056 +#define WT_STAT_DSRC_CACHE_EVICTION_WALK_PASSES 2057 /*! cache: eviction walk target pages histogram - 0-9 */ -#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_LT10 2057 +#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_LT10 2058 /*! cache: eviction walk target pages histogram - 10-31 */ -#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_LT32 2058 +#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_LT32 2059 /*! cache: eviction walk target pages histogram - 128 and higher */ -#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_GE128 2059 +#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_GE128 2060 /*! cache: eviction walk target pages histogram - 32-63 */ -#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_LT64 2060 +#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_LT64 2061 /*! cache: eviction walk target pages histogram - 64-128 */ -#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_LT128 2061 +#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_LT128 2062 /*! * cache: eviction walk target pages reduced due to history store cache * pressure */ -#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_REDUCED 2062 +#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_REDUCED 2063 /*! cache: eviction walks abandoned */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_ABANDONED 2063 +#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_ABANDONED 2064 /*! cache: eviction walks gave up because they restarted their walk twice */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_STOPPED 2064 +#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_STOPPED 2065 /*! * cache: eviction walks gave up because they saw too many pages and * found no candidates */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_GAVE_UP_NO_TARGETS 2065 +#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_GAVE_UP_NO_TARGETS 2066 /*! * cache: eviction walks gave up because they saw too many pages and * found too few candidates */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_GAVE_UP_RATIO 2066 +#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_GAVE_UP_RATIO 2067 /*! cache: eviction walks reached end of tree */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_ENDED 2067 +#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_ENDED 2068 /*! cache: eviction walks restarted */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALK_RESTART 2068 +#define WT_STAT_DSRC_CACHE_EVICTION_WALK_RESTART 2069 /*! cache: eviction walks started from root of tree */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALK_FROM_ROOT 2069 +#define WT_STAT_DSRC_CACHE_EVICTION_WALK_FROM_ROOT 2070 /*! cache: eviction walks started from saved location in tree */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALK_SAVED_POS 2070 +#define WT_STAT_DSRC_CACHE_EVICTION_WALK_SAVED_POS 2071 /*! cache: hazard pointer blocked page eviction */ -#define WT_STAT_DSRC_CACHE_EVICTION_HAZARD 2071 +#define WT_STAT_DSRC_CACHE_EVICTION_HAZARD 2072 /*! cache: history store table insert calls */ -#define WT_STAT_DSRC_CACHE_HS_INSERT 2072 +#define WT_STAT_DSRC_CACHE_HS_INSERT 2073 /*! cache: history store table insert calls that returned restart */ -#define WT_STAT_DSRC_CACHE_HS_INSERT_RESTART 2073 +#define WT_STAT_DSRC_CACHE_HS_INSERT_RESTART 2074 /*! * cache: history store table out-of-order resolved updates that lose * their durable timestamp */ -#define WT_STAT_DSRC_CACHE_HS_ORDER_LOSE_DURABLE_TIMESTAMP 2074 +#define WT_STAT_DSRC_CACHE_HS_ORDER_LOSE_DURABLE_TIMESTAMP 2075 /*! * cache: history store table out-of-order updates that were fixed up by * reinserting with the fixed timestamp */ -#define WT_STAT_DSRC_CACHE_HS_ORDER_REINSERT 2075 +#define WT_STAT_DSRC_CACHE_HS_ORDER_REINSERT 2076 /*! cache: history store table reads */ -#define WT_STAT_DSRC_CACHE_HS_READ 2076 +#define WT_STAT_DSRC_CACHE_HS_READ 2077 /*! cache: history store table reads missed */ -#define WT_STAT_DSRC_CACHE_HS_READ_MISS 2077 +#define WT_STAT_DSRC_CACHE_HS_READ_MISS 2078 /*! cache: history store table reads requiring squashed modifies */ -#define WT_STAT_DSRC_CACHE_HS_READ_SQUASH 2078 +#define WT_STAT_DSRC_CACHE_HS_READ_SQUASH 2079 /*! * cache: history store table truncation by rollback to stable to remove * an unstable update */ -#define WT_STAT_DSRC_CACHE_HS_KEY_TRUNCATE_RTS_UNSTABLE 2079 +#define WT_STAT_DSRC_CACHE_HS_KEY_TRUNCATE_RTS_UNSTABLE 2080 /*! * cache: history store table truncation by rollback to stable to remove * an update */ -#define WT_STAT_DSRC_CACHE_HS_KEY_TRUNCATE_RTS 2080 +#define WT_STAT_DSRC_CACHE_HS_KEY_TRUNCATE_RTS 2081 /*! cache: history store table truncation to remove an update */ -#define WT_STAT_DSRC_CACHE_HS_KEY_TRUNCATE 2081 +#define WT_STAT_DSRC_CACHE_HS_KEY_TRUNCATE 2082 /*! * cache: history store table truncation to remove range of updates due * to key being removed from the data page during reconciliation */ -#define WT_STAT_DSRC_CACHE_HS_KEY_TRUNCATE_ONPAGE_REMOVAL 2082 +#define WT_STAT_DSRC_CACHE_HS_KEY_TRUNCATE_ONPAGE_REMOVAL 2083 /*! * cache: history store table truncation to remove range of updates due * to out-of-order timestamp update on data page */ -#define WT_STAT_DSRC_CACHE_HS_ORDER_REMOVE 2083 +#define WT_STAT_DSRC_CACHE_HS_ORDER_REMOVE 2084 /*! cache: history store table writes requiring squashed modifies */ -#define WT_STAT_DSRC_CACHE_HS_WRITE_SQUASH 2084 +#define WT_STAT_DSRC_CACHE_HS_WRITE_SQUASH 2085 /*! cache: in-memory page passed criteria to be split */ -#define WT_STAT_DSRC_CACHE_INMEM_SPLITTABLE 2085 +#define WT_STAT_DSRC_CACHE_INMEM_SPLITTABLE 2086 /*! cache: in-memory page splits */ -#define WT_STAT_DSRC_CACHE_INMEM_SPLIT 2086 +#define WT_STAT_DSRC_CACHE_INMEM_SPLIT 2087 /*! cache: internal pages evicted */ -#define WT_STAT_DSRC_CACHE_EVICTION_INTERNAL 2087 +#define WT_STAT_DSRC_CACHE_EVICTION_INTERNAL 2088 /*! cache: internal pages split during eviction */ -#define WT_STAT_DSRC_CACHE_EVICTION_SPLIT_INTERNAL 2088 +#define WT_STAT_DSRC_CACHE_EVICTION_SPLIT_INTERNAL 2089 /*! cache: leaf pages split during eviction */ -#define WT_STAT_DSRC_CACHE_EVICTION_SPLIT_LEAF 2089 +#define WT_STAT_DSRC_CACHE_EVICTION_SPLIT_LEAF 2090 /*! cache: modified pages evicted */ -#define WT_STAT_DSRC_CACHE_EVICTION_DIRTY 2090 +#define WT_STAT_DSRC_CACHE_EVICTION_DIRTY 2091 /*! cache: overflow pages read into cache */ -#define WT_STAT_DSRC_CACHE_READ_OVERFLOW 2091 +#define WT_STAT_DSRC_CACHE_READ_OVERFLOW 2092 /*! cache: page split during eviction deepened the tree */ -#define WT_STAT_DSRC_CACHE_EVICTION_DEEPEN 2092 +#define WT_STAT_DSRC_CACHE_EVICTION_DEEPEN 2093 /*! cache: page written requiring history store records */ -#define WT_STAT_DSRC_CACHE_WRITE_HS 2093 +#define WT_STAT_DSRC_CACHE_WRITE_HS 2094 /*! cache: pages read into cache */ -#define WT_STAT_DSRC_CACHE_READ 2094 +#define WT_STAT_DSRC_CACHE_READ 2095 /*! cache: pages read into cache after truncate */ -#define WT_STAT_DSRC_CACHE_READ_DELETED 2095 +#define WT_STAT_DSRC_CACHE_READ_DELETED 2096 /*! cache: pages read into cache after truncate in prepare state */ -#define WT_STAT_DSRC_CACHE_READ_DELETED_PREPARED 2096 +#define WT_STAT_DSRC_CACHE_READ_DELETED_PREPARED 2097 /*! cache: pages requested from the cache */ -#define WT_STAT_DSRC_CACHE_PAGES_REQUESTED 2097 +#define WT_STAT_DSRC_CACHE_PAGES_REQUESTED 2098 /*! cache: pages seen by eviction walk */ -#define WT_STAT_DSRC_CACHE_EVICTION_PAGES_SEEN 2098 +#define WT_STAT_DSRC_CACHE_EVICTION_PAGES_SEEN 2099 /*! cache: pages written from cache */ -#define WT_STAT_DSRC_CACHE_WRITE 2099 +#define WT_STAT_DSRC_CACHE_WRITE 2100 /*! cache: pages written requiring in-memory restoration */ -#define WT_STAT_DSRC_CACHE_WRITE_RESTORE 2100 +#define WT_STAT_DSRC_CACHE_WRITE_RESTORE 2101 /*! cache: the number of times full update inserted to history store */ -#define WT_STAT_DSRC_CACHE_HS_INSERT_FULL_UPDATE 2101 +#define WT_STAT_DSRC_CACHE_HS_INSERT_FULL_UPDATE 2102 /*! cache: the number of times reverse modify inserted to history store */ -#define WT_STAT_DSRC_CACHE_HS_INSERT_REVERSE_MODIFY 2102 +#define WT_STAT_DSRC_CACHE_HS_INSERT_REVERSE_MODIFY 2103 /*! cache: tracked dirty bytes in the cache */ -#define WT_STAT_DSRC_CACHE_BYTES_DIRTY 2103 +#define WT_STAT_DSRC_CACHE_BYTES_DIRTY 2104 /*! cache: unmodified pages evicted */ -#define WT_STAT_DSRC_CACHE_EVICTION_CLEAN 2104 +#define WT_STAT_DSRC_CACHE_EVICTION_CLEAN 2105 /*! * 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 2105 +#define WT_STAT_DSRC_CACHE_STATE_GEN_AVG_GAP 2106 /*! * 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 2106 +#define WT_STAT_DSRC_CACHE_STATE_AVG_WRITTEN_SIZE 2107 /*! * 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 2107 +#define WT_STAT_DSRC_CACHE_STATE_AVG_VISITED_AGE 2108 /*! * 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 2108 +#define WT_STAT_DSRC_CACHE_STATE_AVG_UNVISITED_AGE 2109 /*! * 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 2109 +#define WT_STAT_DSRC_CACHE_STATE_PAGES_CLEAN 2110 /*! * cache_walk: Current eviction generation, only reported if cache_walk * or all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_GEN_CURRENT 2110 +#define WT_STAT_DSRC_CACHE_STATE_GEN_CURRENT 2111 /*! * 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 2111 +#define WT_STAT_DSRC_CACHE_STATE_PAGES_DIRTY 2112 /*! * 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 2112 +#define WT_STAT_DSRC_CACHE_STATE_ROOT_ENTRIES 2113 /*! * 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 2113 +#define WT_STAT_DSRC_CACHE_STATE_PAGES_INTERNAL 2114 /*! * 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 2114 +#define WT_STAT_DSRC_CACHE_STATE_PAGES_LEAF 2115 /*! * 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 2115 +#define WT_STAT_DSRC_CACHE_STATE_GEN_MAX_GAP 2116 /*! * cache_walk: Maximum page size seen, only reported if cache_walk or all * statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_MAX_PAGESIZE 2116 +#define WT_STAT_DSRC_CACHE_STATE_MAX_PAGESIZE 2117 /*! * 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 2117 +#define WT_STAT_DSRC_CACHE_STATE_MIN_WRITTEN_SIZE 2118 /*! * 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 2118 +#define WT_STAT_DSRC_CACHE_STATE_UNVISITED_COUNT 2119 /*! * 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 2119 +#define WT_STAT_DSRC_CACHE_STATE_SMALLER_ALLOC_SIZE 2120 /*! * 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 2120 +#define WT_STAT_DSRC_CACHE_STATE_MEMORY 2121 /*! * cache_walk: Pages currently queued for eviction, only reported if * cache_walk or all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_QUEUED 2121 +#define WT_STAT_DSRC_CACHE_STATE_QUEUED 2122 /*! * 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 2122 +#define WT_STAT_DSRC_CACHE_STATE_NOT_QUEUEABLE 2123 /*! * 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 2123 +#define WT_STAT_DSRC_CACHE_STATE_REFS_SKIPPED 2124 /*! * 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 2124 +#define WT_STAT_DSRC_CACHE_STATE_ROOT_SIZE 2125 /*! * 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 2125 +#define WT_STAT_DSRC_CACHE_STATE_PAGES 2126 /*! checkpoint-cleanup: pages added for eviction */ -#define WT_STAT_DSRC_CC_PAGES_EVICT 2126 +#define WT_STAT_DSRC_CC_PAGES_EVICT 2127 /*! checkpoint-cleanup: pages removed */ -#define WT_STAT_DSRC_CC_PAGES_REMOVED 2127 +#define WT_STAT_DSRC_CC_PAGES_REMOVED 2128 /*! checkpoint-cleanup: pages skipped during tree walk */ -#define WT_STAT_DSRC_CC_PAGES_WALK_SKIPPED 2128 +#define WT_STAT_DSRC_CC_PAGES_WALK_SKIPPED 2129 /*! checkpoint-cleanup: pages visited */ -#define WT_STAT_DSRC_CC_PAGES_VISITED 2129 +#define WT_STAT_DSRC_CC_PAGES_VISITED 2130 /*! * compression: compressed page maximum internal page size prior to * compression */ -#define WT_STAT_DSRC_COMPRESS_PRECOMP_INTL_MAX_PAGE_SIZE 2130 +#define WT_STAT_DSRC_COMPRESS_PRECOMP_INTL_MAX_PAGE_SIZE 2131 /*! * compression: compressed page maximum leaf page size prior to * compression */ -#define WT_STAT_DSRC_COMPRESS_PRECOMP_LEAF_MAX_PAGE_SIZE 2131 +#define WT_STAT_DSRC_COMPRESS_PRECOMP_LEAF_MAX_PAGE_SIZE 2132 /*! compression: compressed pages read */ -#define WT_STAT_DSRC_COMPRESS_READ 2132 +#define WT_STAT_DSRC_COMPRESS_READ 2133 /*! compression: compressed pages written */ -#define WT_STAT_DSRC_COMPRESS_WRITE 2133 +#define WT_STAT_DSRC_COMPRESS_WRITE 2134 /*! compression: number of blocks with compress ratio greater than 64 */ -#define WT_STAT_DSRC_COMPRESS_HIST_RATIO_MAX 2134 +#define WT_STAT_DSRC_COMPRESS_HIST_RATIO_MAX 2135 /*! compression: number of blocks with compress ratio smaller than 16 */ -#define WT_STAT_DSRC_COMPRESS_HIST_RATIO_16 2135 +#define WT_STAT_DSRC_COMPRESS_HIST_RATIO_16 2136 /*! compression: number of blocks with compress ratio smaller than 2 */ -#define WT_STAT_DSRC_COMPRESS_HIST_RATIO_2 2136 +#define WT_STAT_DSRC_COMPRESS_HIST_RATIO_2 2137 /*! compression: number of blocks with compress ratio smaller than 32 */ -#define WT_STAT_DSRC_COMPRESS_HIST_RATIO_32 2137 +#define WT_STAT_DSRC_COMPRESS_HIST_RATIO_32 2138 /*! compression: number of blocks with compress ratio smaller than 4 */ -#define WT_STAT_DSRC_COMPRESS_HIST_RATIO_4 2138 +#define WT_STAT_DSRC_COMPRESS_HIST_RATIO_4 2139 /*! compression: number of blocks with compress ratio smaller than 64 */ -#define WT_STAT_DSRC_COMPRESS_HIST_RATIO_64 2139 +#define WT_STAT_DSRC_COMPRESS_HIST_RATIO_64 2140 /*! compression: number of blocks with compress ratio smaller than 8 */ -#define WT_STAT_DSRC_COMPRESS_HIST_RATIO_8 2140 +#define WT_STAT_DSRC_COMPRESS_HIST_RATIO_8 2141 /*! compression: page written failed to compress */ -#define WT_STAT_DSRC_COMPRESS_WRITE_FAIL 2141 +#define WT_STAT_DSRC_COMPRESS_WRITE_FAIL 2142 /*! compression: page written was too small to compress */ -#define WT_STAT_DSRC_COMPRESS_WRITE_TOO_SMALL 2142 +#define WT_STAT_DSRC_COMPRESS_WRITE_TOO_SMALL 2143 /*! cursor: Total number of entries skipped by cursor next calls */ -#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_TOTAL 2143 +#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_TOTAL 2144 /*! cursor: Total number of entries skipped by cursor prev calls */ -#define WT_STAT_DSRC_CURSOR_PREV_SKIP_TOTAL 2144 +#define WT_STAT_DSRC_CURSOR_PREV_SKIP_TOTAL 2145 /*! * cursor: Total number of entries skipped to position the history store * cursor */ -#define WT_STAT_DSRC_CURSOR_SKIP_HS_CUR_POSITION 2145 +#define WT_STAT_DSRC_CURSOR_SKIP_HS_CUR_POSITION 2146 /*! * cursor: Total number of times a search near has exited due to prefix * config */ -#define WT_STAT_DSRC_CURSOR_SEARCH_NEAR_PREFIX_FAST_PATHS 2146 +#define WT_STAT_DSRC_CURSOR_SEARCH_NEAR_PREFIX_FAST_PATHS 2147 /*! cursor: bulk loaded cursor insert calls */ -#define WT_STAT_DSRC_CURSOR_INSERT_BULK 2147 +#define WT_STAT_DSRC_CURSOR_INSERT_BULK 2148 /*! cursor: cache cursors reuse count */ -#define WT_STAT_DSRC_CURSOR_REOPEN 2148 +#define WT_STAT_DSRC_CURSOR_REOPEN 2149 /*! cursor: close calls that result in cache */ -#define WT_STAT_DSRC_CURSOR_CACHE 2149 +#define WT_STAT_DSRC_CURSOR_CACHE 2150 /*! cursor: create calls */ -#define WT_STAT_DSRC_CURSOR_CREATE 2150 +#define WT_STAT_DSRC_CURSOR_CREATE 2151 /*! * cursor: cursor next calls that skip due to a globally visible history * store tombstone */ -#define WT_STAT_DSRC_CURSOR_NEXT_HS_TOMBSTONE 2151 +#define WT_STAT_DSRC_CURSOR_NEXT_HS_TOMBSTONE 2152 /*! * cursor: cursor next calls that skip greater than or equal to 100 * entries */ -#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_GE_100 2152 +#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_GE_100 2153 /*! cursor: cursor next calls that skip less than 100 entries */ -#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_LT_100 2153 +#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_LT_100 2154 /*! * cursor: cursor prev calls that skip due to a globally visible history * store tombstone */ -#define WT_STAT_DSRC_CURSOR_PREV_HS_TOMBSTONE 2154 +#define WT_STAT_DSRC_CURSOR_PREV_HS_TOMBSTONE 2155 /*! * cursor: cursor prev calls that skip greater than or equal to 100 * entries */ -#define WT_STAT_DSRC_CURSOR_PREV_SKIP_GE_100 2155 +#define WT_STAT_DSRC_CURSOR_PREV_SKIP_GE_100 2156 /*! cursor: cursor prev calls that skip less than 100 entries */ -#define WT_STAT_DSRC_CURSOR_PREV_SKIP_LT_100 2156 +#define WT_STAT_DSRC_CURSOR_PREV_SKIP_LT_100 2157 /*! cursor: insert calls */ -#define WT_STAT_DSRC_CURSOR_INSERT 2157 +#define WT_STAT_DSRC_CURSOR_INSERT 2158 /*! cursor: insert key and value bytes */ -#define WT_STAT_DSRC_CURSOR_INSERT_BYTES 2158 +#define WT_STAT_DSRC_CURSOR_INSERT_BYTES 2159 /*! cursor: modify */ -#define WT_STAT_DSRC_CURSOR_MODIFY 2159 +#define WT_STAT_DSRC_CURSOR_MODIFY 2160 /*! cursor: modify key and value bytes affected */ -#define WT_STAT_DSRC_CURSOR_MODIFY_BYTES 2160 +#define WT_STAT_DSRC_CURSOR_MODIFY_BYTES 2161 /*! cursor: modify value bytes modified */ -#define WT_STAT_DSRC_CURSOR_MODIFY_BYTES_TOUCH 2161 +#define WT_STAT_DSRC_CURSOR_MODIFY_BYTES_TOUCH 2162 /*! cursor: next calls */ -#define WT_STAT_DSRC_CURSOR_NEXT 2162 +#define WT_STAT_DSRC_CURSOR_NEXT 2163 /*! cursor: open cursor count */ -#define WT_STAT_DSRC_CURSOR_OPEN_COUNT 2163 +#define WT_STAT_DSRC_CURSOR_OPEN_COUNT 2164 /*! cursor: operation restarted */ -#define WT_STAT_DSRC_CURSOR_RESTART 2164 +#define WT_STAT_DSRC_CURSOR_RESTART 2165 /*! cursor: prev calls */ -#define WT_STAT_DSRC_CURSOR_PREV 2165 +#define WT_STAT_DSRC_CURSOR_PREV 2166 /*! cursor: remove calls */ -#define WT_STAT_DSRC_CURSOR_REMOVE 2166 +#define WT_STAT_DSRC_CURSOR_REMOVE 2167 /*! cursor: remove key bytes removed */ -#define WT_STAT_DSRC_CURSOR_REMOVE_BYTES 2167 +#define WT_STAT_DSRC_CURSOR_REMOVE_BYTES 2168 /*! cursor: reserve calls */ -#define WT_STAT_DSRC_CURSOR_RESERVE 2168 +#define WT_STAT_DSRC_CURSOR_RESERVE 2169 /*! cursor: reset calls */ -#define WT_STAT_DSRC_CURSOR_RESET 2169 +#define WT_STAT_DSRC_CURSOR_RESET 2170 /*! cursor: search calls */ -#define WT_STAT_DSRC_CURSOR_SEARCH 2170 +#define WT_STAT_DSRC_CURSOR_SEARCH 2171 /*! cursor: search history store calls */ -#define WT_STAT_DSRC_CURSOR_SEARCH_HS 2171 +#define WT_STAT_DSRC_CURSOR_SEARCH_HS 2172 /*! cursor: search near calls */ -#define WT_STAT_DSRC_CURSOR_SEARCH_NEAR 2172 +#define WT_STAT_DSRC_CURSOR_SEARCH_NEAR 2173 /*! cursor: truncate calls */ -#define WT_STAT_DSRC_CURSOR_TRUNCATE 2173 +#define WT_STAT_DSRC_CURSOR_TRUNCATE 2174 /*! cursor: update calls */ -#define WT_STAT_DSRC_CURSOR_UPDATE 2174 +#define WT_STAT_DSRC_CURSOR_UPDATE 2175 /*! cursor: update key and value bytes */ -#define WT_STAT_DSRC_CURSOR_UPDATE_BYTES 2175 +#define WT_STAT_DSRC_CURSOR_UPDATE_BYTES 2176 /*! cursor: update value size change */ -#define WT_STAT_DSRC_CURSOR_UPDATE_BYTES_CHANGED 2176 +#define WT_STAT_DSRC_CURSOR_UPDATE_BYTES_CHANGED 2177 /*! reconciliation: approximate byte size of timestamps in pages written */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_BYTES_TS 2177 +#define WT_STAT_DSRC_REC_TIME_WINDOW_BYTES_TS 2178 /*! * reconciliation: approximate byte size of transaction IDs in pages * written */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_BYTES_TXN 2178 +#define WT_STAT_DSRC_REC_TIME_WINDOW_BYTES_TXN 2179 /*! reconciliation: dictionary matches */ -#define WT_STAT_DSRC_REC_DICTIONARY 2179 +#define WT_STAT_DSRC_REC_DICTIONARY 2180 /*! reconciliation: fast-path pages deleted */ -#define WT_STAT_DSRC_REC_PAGE_DELETE_FAST 2180 +#define WT_STAT_DSRC_REC_PAGE_DELETE_FAST 2181 /*! * reconciliation: internal page key bytes discarded using suffix * compression */ -#define WT_STAT_DSRC_REC_SUFFIX_COMPRESSION 2181 +#define WT_STAT_DSRC_REC_SUFFIX_COMPRESSION 2182 /*! reconciliation: internal page multi-block writes */ -#define WT_STAT_DSRC_REC_MULTIBLOCK_INTERNAL 2182 +#define WT_STAT_DSRC_REC_MULTIBLOCK_INTERNAL 2183 /*! reconciliation: leaf page key bytes discarded using prefix compression */ -#define WT_STAT_DSRC_REC_PREFIX_COMPRESSION 2183 +#define WT_STAT_DSRC_REC_PREFIX_COMPRESSION 2184 /*! reconciliation: leaf page multi-block writes */ -#define WT_STAT_DSRC_REC_MULTIBLOCK_LEAF 2184 +#define WT_STAT_DSRC_REC_MULTIBLOCK_LEAF 2185 /*! reconciliation: leaf-page overflow keys */ -#define WT_STAT_DSRC_REC_OVERFLOW_KEY_LEAF 2185 +#define WT_STAT_DSRC_REC_OVERFLOW_KEY_LEAF 2186 /*! reconciliation: maximum blocks required for a page */ -#define WT_STAT_DSRC_REC_MULTIBLOCK_MAX 2186 +#define WT_STAT_DSRC_REC_MULTIBLOCK_MAX 2187 /*! reconciliation: overflow values written */ -#define WT_STAT_DSRC_REC_OVERFLOW_VALUE 2187 +#define WT_STAT_DSRC_REC_OVERFLOW_VALUE 2188 /*! reconciliation: page checksum matches */ -#define WT_STAT_DSRC_REC_PAGE_MATCH 2188 +#define WT_STAT_DSRC_REC_PAGE_MATCH 2189 /*! reconciliation: page reconciliation calls */ -#define WT_STAT_DSRC_REC_PAGES 2189 +#define WT_STAT_DSRC_REC_PAGES 2190 /*! reconciliation: page reconciliation calls for eviction */ -#define WT_STAT_DSRC_REC_PAGES_EVICTION 2190 +#define WT_STAT_DSRC_REC_PAGES_EVICTION 2191 /*! reconciliation: pages deleted */ -#define WT_STAT_DSRC_REC_PAGE_DELETE 2191 +#define WT_STAT_DSRC_REC_PAGE_DELETE 2192 /*! * reconciliation: pages written including an aggregated newest start * durable timestamp */ -#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 2192 +#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 2193 /*! * reconciliation: pages written including an aggregated newest stop * durable timestamp */ -#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 2193 +#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 2194 /*! * reconciliation: pages written including an aggregated newest stop * timestamp */ -#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_TS 2194 +#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_TS 2195 /*! * reconciliation: pages written including an aggregated newest stop * transaction ID */ -#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_TXN 2195 +#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_TXN 2196 /*! * reconciliation: pages written including an aggregated newest * transaction ID */ -#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_TXN 2196 +#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_TXN 2197 /*! * reconciliation: pages written including an aggregated oldest start * timestamp */ -#define WT_STAT_DSRC_REC_TIME_AGGR_OLDEST_START_TS 2197 +#define WT_STAT_DSRC_REC_TIME_AGGR_OLDEST_START_TS 2198 /*! reconciliation: pages written including an aggregated prepare */ -#define WT_STAT_DSRC_REC_TIME_AGGR_PREPARED 2198 +#define WT_STAT_DSRC_REC_TIME_AGGR_PREPARED 2199 /*! reconciliation: pages written including at least one prepare */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_PREPARED 2199 +#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_PREPARED 2200 /*! * reconciliation: pages written including at least one start durable * timestamp */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 2200 +#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 2201 /*! reconciliation: pages written including at least one start timestamp */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_START_TS 2201 +#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_START_TS 2202 /*! * reconciliation: pages written including at least one start transaction * ID */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_START_TXN 2202 +#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_START_TXN 2203 /*! * reconciliation: pages written including at least one stop durable * timestamp */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 2203 +#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 2204 /*! reconciliation: pages written including at least one stop timestamp */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_STOP_TS 2204 +#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_STOP_TS 2205 /*! * reconciliation: pages written including at least one stop transaction * ID */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_STOP_TXN 2205 +#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_STOP_TXN 2206 /*! reconciliation: records written including a prepare */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_PREPARED 2206 +#define WT_STAT_DSRC_REC_TIME_WINDOW_PREPARED 2207 /*! reconciliation: records written including a start durable timestamp */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_DURABLE_START_TS 2207 +#define WT_STAT_DSRC_REC_TIME_WINDOW_DURABLE_START_TS 2208 /*! reconciliation: records written including a start timestamp */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_START_TS 2208 +#define WT_STAT_DSRC_REC_TIME_WINDOW_START_TS 2209 /*! reconciliation: records written including a start transaction ID */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_START_TXN 2209 +#define WT_STAT_DSRC_REC_TIME_WINDOW_START_TXN 2210 /*! reconciliation: records written including a stop durable timestamp */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_DURABLE_STOP_TS 2210 +#define WT_STAT_DSRC_REC_TIME_WINDOW_DURABLE_STOP_TS 2211 /*! reconciliation: records written including a stop timestamp */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_STOP_TS 2211 +#define WT_STAT_DSRC_REC_TIME_WINDOW_STOP_TS 2212 /*! reconciliation: records written including a stop transaction ID */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_STOP_TXN 2212 +#define WT_STAT_DSRC_REC_TIME_WINDOW_STOP_TXN 2213 /*! session: object compaction */ -#define WT_STAT_DSRC_SESSION_COMPACT 2213 +#define WT_STAT_DSRC_SESSION_COMPACT 2214 /*! session: tiered operations dequeued and processed */ -#define WT_STAT_DSRC_TIERED_WORK_UNITS_DEQUEUED 2214 +#define WT_STAT_DSRC_TIERED_WORK_UNITS_DEQUEUED 2215 /*! session: tiered operations scheduled */ -#define WT_STAT_DSRC_TIERED_WORK_UNITS_CREATED 2215 +#define WT_STAT_DSRC_TIERED_WORK_UNITS_CREATED 2216 /*! session: tiered storage local retention time (secs) */ -#define WT_STAT_DSRC_TIERED_RETENTION 2216 +#define WT_STAT_DSRC_TIERED_RETENTION 2217 /*! transaction: race to read prepared update retry */ -#define WT_STAT_DSRC_TXN_READ_RACE_PREPARE_UPDATE 2217 +#define WT_STAT_DSRC_TXN_READ_RACE_PREPARE_UPDATE 2218 /*! * transaction: rollback to stable history store records with stop * timestamps older than newer records */ -#define WT_STAT_DSRC_TXN_RTS_HS_STOP_OLDER_THAN_NEWER_START 2218 +#define WT_STAT_DSRC_TXN_RTS_HS_STOP_OLDER_THAN_NEWER_START 2219 /*! transaction: rollback to stable inconsistent checkpoint */ -#define WT_STAT_DSRC_TXN_RTS_INCONSISTENT_CKPT 2219 +#define WT_STAT_DSRC_TXN_RTS_INCONSISTENT_CKPT 2220 /*! transaction: rollback to stable keys removed */ -#define WT_STAT_DSRC_TXN_RTS_KEYS_REMOVED 2220 +#define WT_STAT_DSRC_TXN_RTS_KEYS_REMOVED 2221 /*! transaction: rollback to stable keys restored */ -#define WT_STAT_DSRC_TXN_RTS_KEYS_RESTORED 2221 +#define WT_STAT_DSRC_TXN_RTS_KEYS_RESTORED 2222 /*! transaction: rollback to stable restored tombstones from history store */ -#define WT_STAT_DSRC_TXN_RTS_HS_RESTORE_TOMBSTONES 2222 +#define WT_STAT_DSRC_TXN_RTS_HS_RESTORE_TOMBSTONES 2223 /*! transaction: rollback to stable restored updates from history store */ -#define WT_STAT_DSRC_TXN_RTS_HS_RESTORE_UPDATES 2223 +#define WT_STAT_DSRC_TXN_RTS_HS_RESTORE_UPDATES 2224 /*! transaction: rollback to stable skipping delete rle */ -#define WT_STAT_DSRC_TXN_RTS_DELETE_RLE_SKIPPED 2224 +#define WT_STAT_DSRC_TXN_RTS_DELETE_RLE_SKIPPED 2225 /*! transaction: rollback to stable skipping stable rle */ -#define WT_STAT_DSRC_TXN_RTS_STABLE_RLE_SKIPPED 2225 +#define WT_STAT_DSRC_TXN_RTS_STABLE_RLE_SKIPPED 2226 /*! transaction: rollback to stable sweeping history store keys */ -#define WT_STAT_DSRC_TXN_RTS_SWEEP_HS_KEYS 2226 +#define WT_STAT_DSRC_TXN_RTS_SWEEP_HS_KEYS 2227 /*! transaction: rollback to stable updates removed from history store */ -#define WT_STAT_DSRC_TXN_RTS_HS_REMOVED 2227 +#define WT_STAT_DSRC_TXN_RTS_HS_REMOVED 2228 /*! transaction: transaction checkpoints due to obsolete pages */ -#define WT_STAT_DSRC_TXN_CHECKPOINT_OBSOLETE_APPLIED 2228 +#define WT_STAT_DSRC_TXN_CHECKPOINT_OBSOLETE_APPLIED 2229 /*! transaction: update conflicts */ -#define WT_STAT_DSRC_TXN_UPDATE_CONFLICT 2229 +#define WT_STAT_DSRC_TXN_UPDATE_CONFLICT 2230 /*! * @} diff --git a/src/third_party/wiredtiger/src/reconcile/rec_visibility.c b/src/third_party/wiredtiger/src/reconcile/rec_visibility.c index c1f48d84612..21ca2b57037 100644 --- a/src/third_party/wiredtiger/src/reconcile/rec_visibility.c +++ b/src/third_party/wiredtiger/src/reconcile/rec_visibility.c @@ -189,12 +189,27 @@ static inline bool __rec_need_save_upd( WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_UPDATE_SELECT *upd_select, bool has_newer_updates) { + WT_UPDATE *upd; + if (upd_select->tw.prepare) return (true); if (F_ISSET(r, WT_REC_EVICT) && has_newer_updates) return (true); + /* No need to save the update chain if we want to delete the key from the disk image. */ + if (upd_select->upd != NULL && upd_select->upd->type == WT_UPDATE_TOMBSTONE) + return (false); + + /* Save the update chain to delete the update from the history store later. */ + for (upd = upd_select->upd; upd != NULL; upd = upd->next) { + if (upd->txnid == WT_TXN_ABORTED) + continue; + + if (F_ISSET(upd, WT_UPDATE_TO_DELETE_FROM_HS)) + return (true); + } + /* * Don't save updates for any reconciliation that doesn't involve history store (in-memory * database, metadata, and history store reconciliation itself), except when the selected stop @@ -279,6 +294,17 @@ __rec_validate_upd_chain(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_UPDATE *s if (!F_ISSET(r, WT_REC_CHECKPOINT_RUNNING)) return (0); + for (upd = select_upd; upd != NULL; upd = upd->next) { + if (upd->txnid == WT_TXN_ABORTED) + continue; + + /* Cannot delete the update from history store when checkpoint is running. */ + if (F_ISSET(upd, WT_UPDATE_TO_DELETE_FROM_HS)) { + WT_STAT_CONN_DATA_INCR(session, cache_eviction_blocked_remove_hs_race_with_checkpoint); + return (EBUSY); + } + } + /* * The selected time window may contain information that isn't visible given the selected * update, as such we have to check it separately. This is true when there is a tombstone ahead @@ -380,6 +406,9 @@ __wt_rec_upd_select(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_INSERT *ins, W size_t upd_memsize; uint64_t max_txn, session_txnid, txnid; bool has_newer_updates, is_hs_page, supd_restore, upd_saved; +#ifdef HAVE_DIAGNOSTIC + bool seen_prepare; +#endif /* * The "saved updates" return value is used independently of returning an update we can write, @@ -400,6 +429,10 @@ __wt_rec_upd_select(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_INSERT *ins, W is_hs_page = F_ISSET(session->dhandle, WT_DHANDLE_HS); session_txnid = WT_SESSION_TXN_SHARED(session)->id; +#ifdef HAVE_DIAGNOSTIC + seen_prepare = false; +#endif + /* * If called with a WT_INSERT item, use its WT_UPDATE list (which must exist), otherwise check * for an on-page row-store WT_UPDATE list (which may not exist). Return immediately if the item @@ -479,6 +512,9 @@ __wt_rec_upd_select(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_INSERT *ins, W has_newer_updates = true; if (upd->start_ts > max_ts) max_ts = upd->start_ts; +#ifdef HAVE_DIADNOSTIC + seen_prepare = true; +#endif continue; } else { /* @@ -760,9 +796,16 @@ __wt_rec_upd_select(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_INSERT *ins, W * Paranoia: check that we didn't choose an update that has since been rolled back. */ WT_ASSERT(session, upd_select->upd == NULL || upd_select->upd->txnid != WT_TXN_ABORTED); - /* We should never select an update that has been written to the history store. */ - WT_ASSERT(session, upd_select->upd == NULL || !F_ISSET(upd_select->upd, WT_UPDATE_HS)); - WT_ASSERT(session, tombstone == NULL || !F_ISSET(tombstone, WT_UPDATE_HS)); + /* + * We should never select an update that has been written to the history store except checkpoint + * writes the update that is older than a prepared update. + */ + WT_ASSERT(session, + upd_select->upd == NULL || !F_ISSET(upd_select->upd, WT_UPDATE_HS) || + (!F_ISSET(r, WT_REC_EVICT) && seen_prepare)); + WT_ASSERT(session, + tombstone == NULL || !F_ISSET(tombstone, WT_UPDATE_HS) || + (!F_ISSET(r, WT_REC_EVICT) && seen_prepare)); /* * Returning an update means the original on-page value might be lost, and that's a problem if @@ -785,5 +828,8 @@ __wt_rec_upd_select(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_INSERT *ins, W __wt_rec_time_window_clear_obsolete(session, upd_select, NULL, r); + WT_ASSERT( + session, upd_select->tw.stop_txn != WT_TXN_MAX || upd_select->tw.stop_ts == WT_TS_MAX); + return (0); } diff --git a/src/third_party/wiredtiger/src/support/stat.c b/src/third_party/wiredtiger/src/support/stat.c index 5187beac9cc..b3363821bbf 100644 --- a/src/third_party/wiredtiger/src/support/stat.c +++ b/src/third_party/wiredtiger/src/support/stat.c @@ -63,6 +63,8 @@ static const char *const __stats_dsrc_desc[] = { "disk update after validating the update chain", "cache: eviction gave up due to detecting out of order timestamps on the update chain after the " "selected on disk update", + "cache: eviction gave up due to needing to remove a record from the history store but checkpoint " + "is running", "cache: eviction walk passes of a file", "cache: eviction walk target pages histogram - 0-9", "cache: eviction walk target pages histogram - 10-31", @@ -339,6 +341,7 @@ __wt_stat_dsrc_clear_single(WT_DSRC_STATS *stats) stats->cache_eviction_blocked_ooo_checkpoint_race_2 = 0; stats->cache_eviction_blocked_ooo_checkpoint_race_3 = 0; stats->cache_eviction_blocked_ooo_checkpoint_race_4 = 0; + stats->cache_eviction_blocked_remove_hs_race_with_checkpoint = 0; stats->cache_eviction_walk_passes = 0; stats->cache_eviction_target_page_lt10 = 0; stats->cache_eviction_target_page_lt32 = 0; @@ -598,6 +601,8 @@ __wt_stat_dsrc_aggregate_single(WT_DSRC_STATS *from, WT_DSRC_STATS *to) from->cache_eviction_blocked_ooo_checkpoint_race_3; to->cache_eviction_blocked_ooo_checkpoint_race_4 += from->cache_eviction_blocked_ooo_checkpoint_race_4; + to->cache_eviction_blocked_remove_hs_race_with_checkpoint += + from->cache_eviction_blocked_remove_hs_race_with_checkpoint; to->cache_eviction_walk_passes += from->cache_eviction_walk_passes; to->cache_eviction_target_page_lt10 += from->cache_eviction_target_page_lt10; to->cache_eviction_target_page_lt32 += from->cache_eviction_target_page_lt32; @@ -852,6 +857,8 @@ __wt_stat_dsrc_aggregate(WT_DSRC_STATS **from, WT_DSRC_STATS *to) WT_STAT_READ(from, cache_eviction_blocked_ooo_checkpoint_race_3); to->cache_eviction_blocked_ooo_checkpoint_race_4 += WT_STAT_READ(from, cache_eviction_blocked_ooo_checkpoint_race_4); + to->cache_eviction_blocked_remove_hs_race_with_checkpoint += + WT_STAT_READ(from, cache_eviction_blocked_remove_hs_race_with_checkpoint); to->cache_eviction_walk_passes += WT_STAT_READ(from, cache_eviction_walk_passes); to->cache_eviction_target_page_lt10 += WT_STAT_READ(from, cache_eviction_target_page_lt10); to->cache_eviction_target_page_lt32 += WT_STAT_READ(from, cache_eviction_target_page_lt32); @@ -1117,6 +1124,8 @@ static const char *const __stats_connection_desc[] = { "disk update after validating the update chain", "cache: eviction gave up due to detecting out of order timestamps on the update chain after the " "selected on disk update", + "cache: eviction gave up due to needing to remove a record from the history store but checkpoint " + "is running", "cache: eviction passes of a file", "cache: eviction server candidate queue empty when topping up", "cache: eviction server candidate queue not empty when topping up", @@ -1507,9 +1516,6 @@ static const char *const __stats_connection_desc[] = { "transaction: prepared transactions committed", "transaction: prepared transactions currently active", "transaction: prepared transactions rolled back", - "transaction: prepared transactions rolled back and do not remove the history store entry", - "transaction: prepared transactions rolled back and fix the history store entry with checkpoint " - "reserved transaction id", "transaction: query timestamp calls", "transaction: race to read prepared update retry", "transaction: rollback to stable calls", @@ -1685,6 +1691,7 @@ __wt_stat_connection_clear_single(WT_CONNECTION_STATS *stats) stats->cache_eviction_blocked_ooo_checkpoint_race_2 = 0; stats->cache_eviction_blocked_ooo_checkpoint_race_3 = 0; stats->cache_eviction_blocked_ooo_checkpoint_race_4 = 0; + stats->cache_eviction_blocked_remove_hs_race_with_checkpoint = 0; stats->cache_eviction_walk_passes = 0; stats->cache_eviction_queue_empty = 0; stats->cache_eviction_queue_not_empty = 0; @@ -2066,8 +2073,6 @@ __wt_stat_connection_clear_single(WT_CONNECTION_STATS *stats) stats->txn_prepare_commit = 0; stats->txn_prepare_active = 0; stats->txn_prepare_rollback = 0; - stats->txn_prepare_rollback_do_not_remove_hs_update = 0; - stats->txn_prepare_rollback_fix_hs_update_with_ckpt_reserved_txnid = 0; stats->txn_query_ts = 0; stats->txn_read_race_prepare_update = 0; stats->txn_rts = 0; @@ -2222,6 +2227,8 @@ __wt_stat_connection_aggregate(WT_CONNECTION_STATS **from, WT_CONNECTION_STATS * WT_STAT_READ(from, cache_eviction_blocked_ooo_checkpoint_race_3); to->cache_eviction_blocked_ooo_checkpoint_race_4 += WT_STAT_READ(from, cache_eviction_blocked_ooo_checkpoint_race_4); + to->cache_eviction_blocked_remove_hs_race_with_checkpoint += + WT_STAT_READ(from, cache_eviction_blocked_remove_hs_race_with_checkpoint); to->cache_eviction_walk_passes += WT_STAT_READ(from, cache_eviction_walk_passes); to->cache_eviction_queue_empty += WT_STAT_READ(from, cache_eviction_queue_empty); to->cache_eviction_queue_not_empty += WT_STAT_READ(from, cache_eviction_queue_not_empty); @@ -2638,10 +2645,6 @@ __wt_stat_connection_aggregate(WT_CONNECTION_STATS **from, WT_CONNECTION_STATS * 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_prepare_rollback_do_not_remove_hs_update += - WT_STAT_READ(from, txn_prepare_rollback_do_not_remove_hs_update); - to->txn_prepare_rollback_fix_hs_update_with_ckpt_reserved_txnid += - WT_STAT_READ(from, txn_prepare_rollback_fix_hs_update_with_ckpt_reserved_txnid); to->txn_query_ts += WT_STAT_READ(from, txn_query_ts); to->txn_read_race_prepare_update += WT_STAT_READ(from, txn_read_race_prepare_update); to->txn_rts += WT_STAT_READ(from, txn_rts); diff --git a/src/third_party/wiredtiger/src/txn/txn.c b/src/third_party/wiredtiger/src/txn/txn.c index 5beb059c12b..6de0205e967 100644 --- a/src/third_party/wiredtiger/src/txn/txn.c +++ b/src/third_party/wiredtiger/src/txn/txn.c @@ -719,7 +719,7 @@ __wt_txn_release(WT_SESSION_IMPL *session) static int __txn_locate_hs_record(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, WT_PAGE *page, WT_UPDATE *chain, bool commit, WT_UPDATE **fix_updp, bool *upd_appended, - bool first_committed_upd_in_hs) + WT_UPDATE *first_committed_upd, bool first_committed_upd_in_hs) { WT_DECL_ITEM(hs_value); WT_DECL_RET; @@ -732,6 +732,7 @@ __txn_locate_hs_record(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, WT_PAGE * WT_ASSERT(session, chain != NULL); + hs_tw = NULL; *fix_updp = NULL; *upd_appended = false; size = total_size = 0; @@ -752,12 +753,16 @@ __txn_locate_hs_record(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, WT_PAGE * if (hs_stop_durable_ts != WT_TS_MAX && commit) goto done; - __wt_hs_upd_time_window(hs_cursor, &hs_tw); - WT_ERR(__wt_upd_alloc(session, hs_value, WT_UPDATE_STANDARD, &upd, &size)); - upd->txnid = hs_tw->start_txn; - upd->durable_ts = hs_tw->durable_start_ts; - upd->start_ts = hs_tw->start_ts; - *fix_updp = upd; + if (!first_committed_upd_in_hs) { + __wt_hs_upd_time_window(hs_cursor, &hs_tw); + WT_ERR(__wt_upd_alloc(session, hs_value, WT_UPDATE_STANDARD, &upd, &size)); + upd->txnid = hs_tw->start_txn; + upd->durable_ts = hs_tw->durable_start_ts; + upd->start_ts = hs_tw->start_ts; + if (commit) + *fix_updp = upd; + } else if (commit) + *fix_updp = first_committed_upd; /* * When the prepared update is getting committed or the history store update is still on the @@ -770,7 +775,7 @@ __txn_locate_hs_record(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, WT_PAGE * * Set the flag to indicate that this update has been restored from history store for the * rollback of a prepared transaction. */ - F_SET(upd, WT_UPDATE_RESTORED_FROM_HS); + F_SET(upd, WT_UPDATE_RESTORED_FROM_HS | WT_UPDATE_TO_DELETE_FROM_HS); total_size += size; __wt_verbose(session, WT_VERB_TRANSACTION, @@ -790,7 +795,7 @@ __txn_locate_hs_record(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, WT_PAGE * * Set the flag to indicate that this update has been restored from history store for the * rollback of a prepared transaction. */ - F_SET(tombstone, WT_UPDATE_RESTORED_FROM_HS); + F_SET(tombstone, WT_UPDATE_RESTORED_FROM_HS | WT_UPDATE_TO_DELETE_FROM_HS); total_size += size; __wt_verbose(session, WT_VERB_TRANSACTION, @@ -814,7 +819,6 @@ __txn_locate_hs_record(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, WT_PAGE * WT_PUBLISH(chain->next, upd); *upd_appended = true; - *fix_updp = upd; __wt_cache_page_inmem_incr(session, page, total_size); if (0) { @@ -909,18 +913,15 @@ __txn_timestamp_usage_check(WT_SESSION_IMPL *session, WT_TXN_OP *op, WT_UPDATE * /* * __txn_fixup_prepared_update -- - * Fix/restore the history store update of a prepared datastore update based on transaction - * status. + * Fix the history store record with the max stop time point if we commit the prepared update. */ static int -__txn_fixup_prepared_update( - WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, WT_UPDATE *fix_upd, bool commit) +__txn_fixup_prepared_update(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, WT_UPDATE *fix_upd) { WT_DECL_RET; WT_ITEM hs_value; WT_TIME_WINDOW tw; WT_TXN *txn; - WT_TXN_GLOBAL *txn_global; uint32_t txn_flags; #ifdef HAVE_DIAGNOSTIC uint64_t hs_upd_type; @@ -928,12 +929,14 @@ __txn_fixup_prepared_update( #endif txn = session->txn; - txn_global = &S2C(session)->txn_global; WT_TIME_WINDOW_INIT(&tw); + /* We should not fix a history store record already with a valid tombstone. */ + WT_ASSERT(session, fix_upd->type != WT_UPDATE_TOMBSTONE); + /* - * Transaction error and prepare are cleared temporarily as cursor functions are not allowed - * after an error or a prepared transaction. + * Transaction error is cleared temporarily as cursor functions are not allowed after an error + * or a prepared transaction. */ txn_flags = FLD_MASK(txn->flags, WT_TXN_ERROR); F_CLR(txn, txn_flags); @@ -947,75 +950,28 @@ __txn_fixup_prepared_update( */ F_SET(txn, WT_TXN_PREPARE_IGNORE_API_CHECK); - /* - * If the history update already has a stop time point and we are committing the prepared update - * there is no work to do. - */ - if (commit) { - tw.stop_ts = txn->commit_timestamp; - tw.durable_stop_ts = txn->durable_timestamp; - tw.stop_txn = txn->id; - WT_TIME_WINDOW_SET_START(&tw, fix_upd); + tw.stop_ts = txn->commit_timestamp; + tw.durable_stop_ts = txn->durable_timestamp; + tw.stop_txn = txn->id; + WT_TIME_WINDOW_SET_START(&tw, fix_upd); #ifdef HAVE_DIAGNOSTIC - /* Retrieve the existing update value and stop timestamp. */ - WT_ERR(hs_cursor->get_value( - hs_cursor, &hs_stop_durable_ts, &hs_durable_ts, &hs_upd_type, &hs_value)); - WT_ASSERT(session, hs_stop_durable_ts == WT_TS_MAX); - WT_ASSERT(session, (uint8_t)hs_upd_type == WT_UPDATE_STANDARD); + /* Retrieve the existing update value and stop timestamp. */ + WT_ERR(hs_cursor->get_value( + hs_cursor, &hs_stop_durable_ts, &hs_durable_ts, &hs_upd_type, &hs_value)); + WT_ASSERT(session, hs_stop_durable_ts == WT_TS_MAX); + WT_ASSERT(session, (uint8_t)hs_upd_type == WT_UPDATE_STANDARD); #endif - /* - * We need to update the stop durable timestamp stored in the history store value. - * - * Pack the value using cursor api. - */ - hs_value.data = fix_upd->data; - hs_value.size = fix_upd->size; - hs_cursor->set_value(hs_cursor, &tw, tw.durable_stop_ts, tw.durable_start_ts, - (uint64_t)WT_UPDATE_STANDARD, &hs_value); - WT_ERR(hs_cursor->update(hs_cursor)); - } else { - /* - * Remove the history store entry if a checkpoint is not running, otherwise place a - * tombstone in front of the history store entry if it doesn't have a stop timestamp. - */ - if (txn_global->checkpoint_running) { - /* Don't update the history store entry if the entry already has a stop timestamp. */ - if (fix_upd->type != WT_UPDATE_TOMBSTONE) { - /* - * When the history store's update start transaction id is greater than the - * checkpoint's reserved transaction id, the durable timestamp of this update is - * guaranteed to be greater than the checkpoint timestamp, as such there is no need - * to save this unstable update in the history store. - */ - if (fix_upd->txnid > txn_global->checkpoint_reserved_txn_id) - WT_ERR(hs_cursor->remove(hs_cursor)); - else { - tw.durable_stop_ts = fix_upd->durable_ts; - tw.stop_ts = fix_upd->start_ts; - - /* - * Set the stop transaction id of the time window to the checkpoint reserved - * transaction id. As such the tombstone won't be visible to rollback to stable, - * additionally checkpoint garbage collection cannot clean it up as it greater - * than the globally visible transaction id. - */ - tw.stop_txn = txn_global->checkpoint_reserved_txn_id; - WT_TIME_WINDOW_SET_START(&tw, fix_upd); - - hs_value.data = fix_upd->data; - hs_value.size = fix_upd->size; - hs_cursor->set_value(hs_cursor, &tw, tw.durable_stop_ts, tw.durable_start_ts, - (uint64_t)WT_UPDATE_STANDARD, &hs_value); - WT_ERR(hs_cursor->update(hs_cursor)); - WT_STAT_CONN_INCR( - session, txn_prepare_rollback_fix_hs_update_with_ckpt_reserved_txnid); - } - } else - WT_STAT_CONN_INCR(session, txn_prepare_rollback_do_not_remove_hs_update); - } else - WT_ERR(hs_cursor->remove(hs_cursor)); - } + /* + * We need to update the stop durable timestamp stored in the history store value. + * + * Pack the value using cursor api. + */ + hs_value.data = fix_upd->data; + hs_value.size = fix_upd->size; + hs_cursor->set_value(hs_cursor, &tw, tw.durable_stop_ts, tw.durable_start_ts, + (uint64_t)WT_UPDATE_STANDARD, &hs_value); + WT_ERR(hs_cursor->update(hs_cursor)); err: F_SET(txn, txn_flags); @@ -1197,7 +1153,7 @@ __txn_resolve_prepared_op(WT_SESSION_IMPL *session, WT_TXN_OP *op, bool commit, WT_PAGE *page; WT_TIME_WINDOW tw; WT_TXN *txn; - WT_UPDATE *first_committed_upd, *fix_upd, *upd; + WT_UPDATE *first_committed_upd, *fix_upd, *upd, *upd_followed_tombstone; #ifdef HAVE_DIAGNOSTIC WT_UPDATE *head_upd; #endif @@ -1282,6 +1238,27 @@ __txn_resolve_prepared_op(WT_SESSION_IMPL *session, WT_TXN_OP *op, bool commit, upd->txnid == upd->next->txnid && upd->start_ts == upd->next->start_ts)); first_committed_upd_in_hs = first_committed_upd != NULL && F_ISSET(first_committed_upd, WT_UPDATE_HS); + + /* + * Marked the update older than the prepared update that is already in the history store to be + * deleted from the history store. + */ + if (first_committed_upd_in_hs && !commit) { + if (first_committed_upd->type == WT_UPDATE_TOMBSTONE) { + for (upd_followed_tombstone = first_committed_upd->next; upd_followed_tombstone != NULL; + upd_followed_tombstone = upd_followed_tombstone->next) + if (upd_followed_tombstone->txnid != WT_TXN_ABORTED) + break; + /* We may not find a full update following the tombstone if it is obsolete. */ + if (upd_followed_tombstone != NULL) { + WT_ASSERT(session, F_ISSET(upd_followed_tombstone, WT_UPDATE_HS)); + F_SET(first_committed_upd, WT_UPDATE_TO_DELETE_FROM_HS); + F_SET(upd_followed_tombstone, WT_UPDATE_TO_DELETE_FROM_HS); + } + } else + F_SET(first_committed_upd, WT_UPDATE_TO_DELETE_FROM_HS); + } + if (prepare_on_disk || first_committed_upd_in_hs) { btree = S2BT(session); @@ -1312,8 +1289,8 @@ __txn_resolve_prepared_op(WT_SESSION_IMPL *session, WT_TXN_OP *op, bool commit, */ WT_ERR(__txn_append_tombstone(session, op, cbt)); } else if (ret == 0) - WT_ERR(__txn_locate_hs_record( - session, hs_cursor, page, upd, commit, &fix_upd, &upd_appended, first_committed_upd)); + WT_ERR(__txn_locate_hs_record(session, hs_cursor, page, upd, commit, &fix_upd, + &upd_appended, first_committed_upd, first_committed_upd_in_hs)); else ret = 0; } else if (F_ISSET(S2C(session), WT_CONN_IN_MEMORY) && !commit && first_committed_upd == NULL) { @@ -1365,10 +1342,8 @@ __txn_resolve_prepared_op(WT_SESSION_IMPL *session, WT_TXN_OP *op, bool commit, * will be only one uncommitted prepared update. */ if (fix_upd != NULL) { - WT_ERR(__txn_fixup_prepared_update(session, hs_cursor, fix_upd, commit)); - /* Clear the WT_UPDATE_HS flag as we should have removed it from the history store. */ - if (first_committed_upd_in_hs && !commit) - F_CLR(first_committed_upd, WT_UPDATE_HS); + WT_ASSERT(session, commit && fix_upd->type != WT_UPDATE_TOMBSTONE); + WT_ERR(__txn_fixup_prepared_update(session, hs_cursor, fix_upd)); } prepare_verify: diff --git a/src/third_party/wiredtiger/test/suite/test_prepare20.py b/src/third_party/wiredtiger/test/suite/test_prepare20.py index 0b541d40730..6f219ea2c83 100644 --- a/src/third_party/wiredtiger/test/suite/test_prepare20.py +++ b/src/third_party/wiredtiger/test/suite/test_prepare20.py @@ -27,14 +27,14 @@ # OTHER DEALINGS IN THE SOFTWARE. -# test_prepare19.py +# test_prepare20.py # Check that we can use an application-level log to replay unstable transactions. -import wiredtiger, wttest +import wttest from wtscenario import make_scenarios from helper import simulate_crash_restart -class test_prepare19(wttest.WiredTigerTestCase): +class test_prepare20(wttest.WiredTigerTestCase): # Do write the logs immediately, but don't waste time fsyncing them. conn_config = 'log=(enabled),transaction_sync=(enabled=true,method=none)' @@ -131,7 +131,7 @@ class test_prepare19(wttest.WiredTigerTestCase): # First pass: find prepared txns. Ignore (thus abort) any that didn't even prepare. txns = {} self.lcursor.reset() - for lsn, op, k, oldv, newv in self.lcursor: + for _, op, k, oldv, newv in self.lcursor: if op == self.BEGIN: # "key" is the txnid txns[k] = False @@ -143,7 +143,7 @@ class test_prepare19(wttest.WiredTigerTestCase): writing = False committime = None durabletime = None - for lsn, op, k, oldv, newv in self.lcursor: + for _, op, k, oldv, newv in self.lcursor: if op == self.BEGIN: # "key" is the txnid if txns[k]: @@ -198,9 +198,9 @@ class test_prepare19(wttest.WiredTigerTestCase): # Now the test. - def test_prepare19(self): - data_uri = 'file:prepare19data' - log_uri = 'file:prepare19log' + def test_prepare20(self): + data_uri = 'file:prepare20data' + log_uri = 'file:prepare20log' # Create one table for data and another to be an application-level log. # The log's format is application-lsn -> operation, key, oldvalue, newvalue diff --git a/src/third_party/wiredtiger/test/suite/test_prepare21.py b/src/third_party/wiredtiger/test/suite/test_prepare21.py new file mode 100644 index 00000000000..ec61092d04c --- /dev/null +++ b/src/third_party/wiredtiger/test/suite/test_prepare21.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python +# +# Public Domain 2014-present MongoDB, Inc. +# Public Domain 2008-2014 WiredTiger, Inc. +# +# This is free and unencumbered software released into the public domain. +# +# Anyone is free to copy, modify, publish, use, compile, sell, or +# distribute this software, either in source code form or as a compiled +# binary, for any purpose, commercial or non-commercial, and by any +# means. +# +# In jurisdictions that recognize copyright laws, the author or authors +# of this software dedicate any and all copyright interest in the +# software to the public domain. We make this dedication for the benefit +# of the public at large and to the detriment of our heirs and +# successors. We intend this dedication to be an overt act of +# relinquishment in perpetuity of all present and future rights to this +# software under copyright law. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. + +import threading, time +from helper import simulate_crash_restart +from test_rollback_to_stable01 import test_rollback_to_stable_base +from wiredtiger import stat +from wtdataset import SimpleDataSet +from wtscenario import make_scenarios +from wtthread import checkpoint_thread + +# test_prepare21.py +# Test prepare rollback doesn't crash because of triggering out of order fix. +class test_prepare21(test_rollback_to_stable_base): + + format_values = [ + ('column', dict(key_format='r', value_format='S')), + ('column_fix', dict(key_format='r', value_format='8t')), + ('row_integer', dict(key_format='i', value_format='S')), + ] + + scenarios = make_scenarios(format_values) + + def conn_config(self): + config = 'cache_size=10MB,statistics=(all),timing_stress_for_test=[history_store_checkpoint_delay]' + return config + + def evict_cursor(self, uri, nrows): + # Configure debug behavior on a cursor to evict the page positioned on when the reset API is used. + evict_cursor = self.session.open_cursor(uri, None, "debug=(release_evict)") + self.session.begin_transaction("ignore_prepare=true") + for i in range (1, nrows + 1): + evict_cursor.set_key(i) + evict_cursor.search() + evict_cursor.reset() + evict_cursor.close() + self.session.rollback_transaction() + + def test_prepare_rollback(self): + nrows = 10 + + # Create a table. + uri = "table:prepare21" + ds = SimpleDataSet(self, uri, 0, key_format=self.key_format, value_format=self.value_format) + ds.populate() + + if self.value_format == '8t': + value_a = 97 + value_b = 98 + value_c = 99 + value_d = 100 + else: + value_a = "aaaaa" * 100 + value_b = "bbbbb" * 100 + value_c = "ccccc" * 100 + value_d = "ddddd" * 100 + + # Pin oldest and stable to timestamp 10. + self.conn.set_timestamp('oldest_timestamp=' + self.timestamp_str(10) + + ',stable_timestamp=' + self.timestamp_str(10)) + + self.large_updates(uri, value_a, ds, nrows, False, 20) + self.large_updates(uri, value_b, ds, nrows, False, 30) + self.large_removes(uri, ds, nrows, False, 40) + + prepare_session = self.conn.open_session() + prepare_session.begin_transaction() + cursor = prepare_session.open_cursor(uri) + for i in range (1, nrows + 1): + cursor[i] = value_c + cursor.close() + prepare_session.prepare_transaction('prepare_timestamp=' + self.timestamp_str(50)) + + # Verify data is visible and correct. + self.check(value_a, uri, nrows, None, 20) + self.check(value_b, uri, nrows, None, 30) + + self.evict_cursor(uri, nrows) + + # Pin stable to timestamp 40. + self.conn.set_timestamp('stable_timestamp=' + self.timestamp_str(40)) + + # Rollback the prepared update + prepare_session.rollback_transaction() + self.large_updates(uri, value_d, ds, nrows, False, 60) + + done = threading.Event() + ckpt = checkpoint_thread(self.conn, done) + try: + ckpt.start() + + # Wait for checkpoint to start before committing last transaction. + ckpt_started = 0 + while not ckpt_started: + stat_cursor = self.session.open_cursor('statistics:', None, None) + ckpt_started = stat_cursor[stat.conn.txn_checkpoint_running][2] + stat_cursor.close() + + self.evict_cursor(uri, nrows) + finally: + done.set() + ckpt.join() + + # Verify data is visible and correct. + self.check(value_a, uri, nrows, None, 20) + self.check(value_b, uri, nrows, None, 30) + self.check(value_d, uri, nrows, None, 60) + +if __name__ == '__main__': + wttest.run() -- cgit v1.2.1