summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/src
diff options
context:
space:
mode:
authorLuke Chen <luke.chen@mongodb.com>2021-10-07 17:44:57 +1100
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-10-07 07:04:01 +0000
commit58971da1ef93435a9f62bf4708a81713def6e88c (patch)
treec75ff94f74016177b2eef5f82c76a7d79238e8a5 /src/third_party/wiredtiger/src
parentcf4ce26ca21a836aa336313a4a10676ca91c3131 (diff)
downloadmongo-2d4e12caf7ca1bc44735216b64bb68ce3b527eab.tar.gz
Import wiredtiger: e8bf2e5fcb33197b73c7bb550742926f59e22218 from branch mongodb-4.4r4.4.10-rc0r4.4.10
ref: a9bd69a7ca..e8bf2e5fcb for: 4.4.10 WT-5270 Create wtperf script for evergreen WT-7169 Commit ts should not be lesser than the last durable ts in test_timestamp22.py WT-7392 Added evicted flag to dhandle for use by session sweep WT-7757 Skip obsolete leaf pages without having to read them WT-7924 Create a stress test for prefix search near key validation WT-7980 Create interface to "log:" cursor which switches log files before returning them WT-7992 Provide API to return the last key in a table regardless of visibility WT-8022 Verify WT_CURSOR.modify return values in format test program WT-8036 Added connection panic flag in two assert statements in wt_evict_thread_run and _wt_evict_thread_stop. WT-8048 Remove split_8 timing stress configuration WT-8055 Fix issue when compact quits when running at the same time as a checkpoint WT-8059 Add a check in salvage when no overflow items are found WT-8068 Improve __rollback_row_modify control flow WT-8069 Coverity analysis defect 120706: Redundant test WT-8070 Remove discrepancy between prefix_key and prefix_search WT-8078 Implement tiered storage local retention caching WT-8086 Create cpp test for prefix search near entries WT-8092 Prefix early exit when keys are present in the insert list WT-8101 Enable diagnostic mode for the CPP tests in evergreen WT-8115 Define macros only when necessary in cpp files WT-8119 Add targeted compact testing to the existing testing framework WT-8146 Stop the tracking component when a CPP test ends WT-8161 Reduce verbosity of CMake Evergreen smoke WT-8162 Refactor uses of SMOKE arg in 'define_c_test' helper WT-8164 Disable rollback_to_stable10 python test on Windows WT-8171 Implement a C style test in the CPP testing framework WT-8193 Wrong corner case in VLCS rollback-to-stable
Diffstat (limited to 'src/third_party/wiredtiger/src')
-rw-r--r--src/third_party/wiredtiger/src/btree/bt_curnext.c52
-rw-r--r--src/third_party/wiredtiger/src/btree/bt_curprev.c52
-rw-r--r--src/third_party/wiredtiger/src/btree/bt_cursor.c29
-rw-r--r--src/third_party/wiredtiger/src/btree/bt_read.c1
-rw-r--r--src/third_party/wiredtiger/src/btree/bt_slvg.c7
-rw-r--r--src/third_party/wiredtiger/src/btree/bt_walk.c3
-rw-r--r--src/third_party/wiredtiger/src/config/config_def.c10
-rw-r--r--src/third_party/wiredtiger/src/config/test_config.c101
-rw-r--r--src/third_party/wiredtiger/src/conn/conn_api.c2
-rw-r--r--src/third_party/wiredtiger/src/conn/conn_dhandle.c3
-rw-r--r--src/third_party/wiredtiger/src/conn/conn_tiered.c123
-rw-r--r--src/third_party/wiredtiger/src/cursor/cur_backup.c1
-rw-r--r--src/third_party/wiredtiger/src/cursor/cur_config.c1
-rw-r--r--src/third_party/wiredtiger/src/cursor/cur_ds.c1
-rw-r--r--src/third_party/wiredtiger/src/cursor/cur_dump.c1
-rw-r--r--src/third_party/wiredtiger/src/cursor/cur_file.c1
-rw-r--r--src/third_party/wiredtiger/src/cursor/cur_hs.c1
-rw-r--r--src/third_party/wiredtiger/src/cursor/cur_index.c1
-rw-r--r--src/third_party/wiredtiger/src/cursor/cur_join.c2
-rw-r--r--src/third_party/wiredtiger/src/cursor/cur_log.c1
-rw-r--r--src/third_party/wiredtiger/src/cursor/cur_metadata.c1
-rw-r--r--src/third_party/wiredtiger/src/cursor/cur_stat.c1
-rw-r--r--src/third_party/wiredtiger/src/cursor/cur_std.c50
-rw-r--r--src/third_party/wiredtiger/src/cursor/cur_table.c27
-rw-r--r--src/third_party/wiredtiger/src/docs/cursor-ops.dox10
-rw-r--r--src/third_party/wiredtiger/src/docs/spell.ok1
-rw-r--r--src/third_party/wiredtiger/src/evict/evict_lru.c18
-rw-r--r--src/third_party/wiredtiger/src/include/btree_inline.h54
-rw-r--r--src/third_party/wiredtiger/src/include/connection.h1
-rw-r--r--src/third_party/wiredtiger/src/include/cursor.h42
-rw-r--r--src/third_party/wiredtiger/src/include/dhandle.h11
-rw-r--r--src/third_party/wiredtiger/src/include/extern.h12
-rw-r--r--src/third_party/wiredtiger/src/include/os_fs_inline.h2
-rw-r--r--src/third_party/wiredtiger/src/include/session.h9
-rw-r--r--src/third_party/wiredtiger/src/include/stat.h7
-rw-r--r--src/third_party/wiredtiger/src/include/wiredtiger.in799
-rw-r--r--src/third_party/wiredtiger/src/log/log.c5
-rw-r--r--src/third_party/wiredtiger/src/lsm/lsm_cursor.c1
-rw-r--r--src/third_party/wiredtiger/src/os_common/os_fhandle.c5
-rw-r--r--src/third_party/wiredtiger/src/os_posix/os_fs.c6
-rw-r--r--src/third_party/wiredtiger/src/session/session_api.c23
-rw-r--r--src/third_party/wiredtiger/src/session/session_compact.c26
-rw-r--r--src/third_party/wiredtiger/src/session/session_dhandle.c14
-rw-r--r--src/third_party/wiredtiger/src/support/stat.c23
-rw-r--r--src/third_party/wiredtiger/src/support/thread_group.c5
-rw-r--r--src/third_party/wiredtiger/src/tiered/tiered_handle.c6
-rw-r--r--src/third_party/wiredtiger/src/tiered/tiered_opener.c38
-rw-r--r--src/third_party/wiredtiger/src/tiered/tiered_work.c43
-rw-r--r--src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c189
49 files changed, 1021 insertions, 801 deletions
diff --git a/src/third_party/wiredtiger/src/btree/bt_curnext.c b/src/third_party/wiredtiger/src/btree/bt_curnext.c
index 8506083e006..6953eb3dc02 100644
--- a/src/third_party/wiredtiger/src/btree/bt_curnext.c
+++ b/src/third_party/wiredtiger/src/btree/bt_curnext.c
@@ -343,10 +343,12 @@ __cursor_row_next(
WT_PAGE *page;
WT_ROW *rip;
WT_SESSION_IMPL *session;
+ bool prefix_search;
- session = CUR2S(cbt);
- page = cbt->ref->page;
key = &cbt->iface.key;
+ page = cbt->ref->page;
+ session = CUR2S(cbt);
+ prefix_search = prefix != NULL && F_ISSET(&cbt->iface, WT_CURSTD_PREFIX_SEARCH);
*skippedp = 0;
/* If restarting after a prepare conflict, jump to the right spot. */
@@ -394,6 +396,14 @@ restart_read_insert:
if ((ins = cbt->ins) != NULL) {
key->data = WT_INSERT_KEY(ins);
key->size = WT_INSERT_KEY_SIZE(ins);
+ /*
+ * If the cursor has prefix search configured we can early exit here if the key that we
+ * are visiting is after our prefix.
+ */
+ if (prefix_search && __wt_prefix_match(prefix, key) < 0) {
+ WT_STAT_CONN_DATA_INCR(session, cursor_search_near_prefix_fast_paths);
+ return (WT_NOTFOUND);
+ }
WT_RET(__wt_txn_read_upd_list(session, cbt, ins->upd));
if (cbt->upd_value->type == WT_UPDATE_INVALID) {
++*skippedp;
@@ -435,10 +445,7 @@ restart_read_page:
* If the cursor has prefix search configured we can early exit here if the key that we are
* visiting is after our prefix.
*/
- if (F_ISSET(&cbt->iface, WT_CURSTD_PREFIX_SEARCH) && prefix != NULL &&
- __wt_prefix_match(prefix, &cbt->iface.key) < 0) {
- /* It is not okay for the user to have a custom collator. */
- WT_ASSERT(session, CUR2BT(cbt)->collator == NULL);
+ if (prefix_search && __wt_prefix_match(prefix, &cbt->iface.key) < 0) {
WT_STAT_CONN_DATA_INCR(session, cursor_search_near_prefix_fast_paths);
return (WT_NOTFOUND);
}
@@ -681,13 +688,12 @@ __wt_btcur_next_prefix(WT_CURSOR_BTREE *cbt, WT_ITEM *prefix, bool truncating)
WT_DECL_RET;
WT_PAGE *page;
WT_SESSION_IMPL *session;
- size_t pages_skipped_count, total_skipped, skipped;
+ size_t total_skipped, skipped;
uint32_t flags;
bool newpage, restart;
cursor = &cbt->iface;
session = CUR2S(cbt);
- pages_skipped_count = 0;
total_skipped = 0;
WT_STAT_CONN_DATA_INCR(session, cursor_next);
@@ -707,7 +713,7 @@ __wt_btcur_next_prefix(WT_CURSOR_BTREE *cbt, WT_ITEM *prefix, bool truncating)
__wt_btcur_iterate_setup(cbt);
/*
- * Walk any page we're holding until the underlying call returns not- found. Then, move to the
+ * Walk any page we're holding until the underlying call returns not-found. Then, move to the
* next page, until we reach the end of the file.
*/
restart = F_ISSET(cbt, WT_CBT_ITERATE_RETRY_NEXT);
@@ -715,16 +721,6 @@ __wt_btcur_next_prefix(WT_CURSOR_BTREE *cbt, WT_ITEM *prefix, bool truncating)
for (newpage = false;; newpage = true, restart = false) {
page = cbt->ref == NULL ? NULL : cbt->ref->page;
- /*
- * Determine if all records on the page have been deleted and all the tombstones are visible
- * to our transaction. If so, we can avoid reading the records on the page and move to the
- * next page.
- */
- if (__wt_btcur_skip_page(cbt)) {
- pages_skipped_count++;
- goto skip_page;
- }
-
if (F_ISSET(cbt, WT_CBT_ITERATE_APPEND)) {
/* The page cannot be NULL if the above flag is set. */
WT_ASSERT(session, page != NULL);
@@ -796,16 +792,26 @@ __wt_btcur_next_prefix(WT_CURSOR_BTREE *cbt, WT_ITEM *prefix, bool truncating)
WT_STAT_CONN_INCR(session, cache_eviction_force_delete);
}
cbt->page_deleted_count = 0;
-skip_page:
+
if (F_ISSET(cbt, WT_CBT_READ_ONCE))
LF_SET(WT_READ_WONT_NEED);
- WT_ERR(__wt_tree_walk(session, &cbt->ref, flags));
+
+ /*
+ * If we are running with snapshot isolation, and not interested in returning tombstones, we
+ * could potentially skip pages. The skip function looks at the aggregated timestamp
+ * information to determine if something is visible on the page. If nothing is, the page is
+ * skipped.
+ */
+ if (session->txn->isolation == WT_ISO_SNAPSHOT &&
+ !F_ISSET(&cbt->iface, WT_CURSTD_IGNORE_TOMBSTONE))
+ WT_ERR(
+ __wt_tree_walk_custom_skip(session, &cbt->ref, __wt_btcur_skip_page, NULL, flags));
+ else
+ WT_ERR(__wt_tree_walk(session, &cbt->ref, flags));
WT_ERR_TEST(cbt->ref == NULL, WT_NOTFOUND, false);
}
err:
- WT_STAT_CONN_DATA_INCRV(session, cursor_next_skip_page_count, pages_skipped_count);
-
if (total_skipped < 100)
WT_STAT_CONN_DATA_INCR(session, cursor_next_skip_lt_100);
else
diff --git a/src/third_party/wiredtiger/src/btree/bt_curprev.c b/src/third_party/wiredtiger/src/btree/bt_curprev.c
index bcf9f7e6d5a..3941ada539c 100644
--- a/src/third_party/wiredtiger/src/btree/bt_curprev.c
+++ b/src/third_party/wiredtiger/src/btree/bt_curprev.c
@@ -484,10 +484,12 @@ __cursor_row_prev(
WT_PAGE *page;
WT_ROW *rip;
WT_SESSION_IMPL *session;
+ bool prefix_search;
- session = CUR2S(cbt);
- page = cbt->ref->page;
key = &cbt->iface.key;
+ page = cbt->ref->page;
+ session = CUR2S(cbt);
+ prefix_search = prefix != NULL && F_ISSET(&cbt->iface, WT_CURSTD_PREFIX_SEARCH);
*skippedp = 0;
/* If restarting after a prepare conflict, jump to the right spot. */
@@ -541,6 +543,14 @@ restart_read_insert:
if ((ins = cbt->ins) != NULL) {
key->data = WT_INSERT_KEY(ins);
key->size = WT_INSERT_KEY_SIZE(ins);
+ /*
+ * If the cursor has prefix search configured we can early exit here if the key we are
+ * visiting is before our prefix.
+ */
+ if (prefix_search && __wt_prefix_match(prefix, key) > 0) {
+ WT_STAT_CONN_DATA_INCR(session, cursor_search_near_prefix_fast_paths);
+ return (WT_NOTFOUND);
+ }
WT_RET(__wt_txn_read_upd_list(session, cbt, ins->upd));
if (cbt->upd_value->type == WT_UPDATE_INVALID) {
++*skippedp;
@@ -584,10 +594,7 @@ restart_read_page:
* If the cursor has prefix search configured we can early exit here if the key we are
* visiting is before our prefix.
*/
- if (F_ISSET(&cbt->iface, WT_CURSTD_PREFIX_SEARCH) && prefix != NULL &&
- __wt_prefix_match(prefix, &cbt->iface.key) > 0) {
- /* It is not okay for the user to have a custom collator. */
- WT_ASSERT(session, CUR2BT(cbt)->collator == NULL);
+ if (prefix_search && __wt_prefix_match(prefix, &cbt->iface.key) > 0) {
WT_STAT_CONN_DATA_INCR(session, cursor_search_near_prefix_fast_paths);
return (WT_NOTFOUND);
}
@@ -620,13 +627,12 @@ __wt_btcur_prev_prefix(WT_CURSOR_BTREE *cbt, WT_ITEM *prefix, bool truncating)
WT_DECL_RET;
WT_PAGE *page;
WT_SESSION_IMPL *session;
- size_t pages_skipped_count, total_skipped, skipped;
+ size_t total_skipped, skipped;
uint32_t flags;
bool newpage, restart;
cursor = &cbt->iface;
session = CUR2S(cbt);
- pages_skipped_count = 0;
total_skipped = 0;
WT_STAT_CONN_DATA_INCR(session, cursor_prev);
@@ -647,7 +653,7 @@ __wt_btcur_prev_prefix(WT_CURSOR_BTREE *cbt, WT_ITEM *prefix, bool truncating)
__wt_btcur_iterate_setup(cbt);
/*
- * Walk any page we're holding until the underlying call returns not- found. Then, move to the
+ * Walk any page we're holding until the underlying call returns not-found. Then, move to the
* previous page, until we reach the start of the file.
*/
restart = F_ISSET(cbt, WT_CBT_ITERATE_RETRY_PREV);
@@ -656,16 +662,6 @@ __wt_btcur_prev_prefix(WT_CURSOR_BTREE *cbt, WT_ITEM *prefix, bool truncating)
page = cbt->ref == NULL ? NULL : cbt->ref->page;
/*
- * Determine if all records on the page have been deleted and all the tombstones are visible
- * to our transaction. If so, we can avoid reading the records on the page and move to the
- * next page.
- */
- if (__wt_btcur_skip_page(cbt)) {
- pages_skipped_count++;
- goto skip_page;
- }
-
- /*
* Column-store pages may have appended entries. Handle it separately from the usual cursor
* code, it's in a simple format.
*/
@@ -737,16 +733,26 @@ __wt_btcur_prev_prefix(WT_CURSOR_BTREE *cbt, WT_ITEM *prefix, bool truncating)
WT_STAT_CONN_INCR(session, cache_eviction_force_delete);
}
cbt->page_deleted_count = 0;
-skip_page:
+
if (F_ISSET(cbt, WT_CBT_READ_ONCE))
LF_SET(WT_READ_WONT_NEED);
- WT_ERR(__wt_tree_walk(session, &cbt->ref, flags));
+
+ /*
+ * If we are running with snapshot isolation, and not interested in returning tombstones, we
+ * could potentially skip pages. The skip function looks at the aggregated timestamp
+ * information to determine if something is visible on the page. If nothing is, the page is
+ * skipped.
+ */
+ if (session->txn->isolation == WT_ISO_SNAPSHOT &&
+ !F_ISSET(&cbt->iface, WT_CURSTD_IGNORE_TOMBSTONE))
+ WT_ERR(
+ __wt_tree_walk_custom_skip(session, &cbt->ref, __wt_btcur_skip_page, NULL, flags));
+ else
+ WT_ERR(__wt_tree_walk(session, &cbt->ref, flags));
WT_ERR_TEST(cbt->ref == NULL, WT_NOTFOUND, false);
}
err:
- WT_STAT_CONN_DATA_INCRV(session, cursor_prev_skip_page_count, pages_skipped_count);
-
if (total_skipped < 100)
WT_STAT_CONN_DATA_INCR(session, cursor_prev_skip_lt_100);
else
diff --git a/src/third_party/wiredtiger/src/btree/bt_cursor.c b/src/third_party/wiredtiger/src/btree/bt_cursor.c
index b3d879fae8f..6cd2b3c3fc7 100644
--- a/src/third_party/wiredtiger/src/btree/bt_cursor.c
+++ b/src/third_party/wiredtiger/src/btree/bt_cursor.c
@@ -684,15 +684,8 @@ __wt_btcur_search_near(WT_CURSOR_BTREE *cbt, int *exactp)
}
/*
- * If a valid key has been found and we are doing a prefix search near, we want to return the
- * key only if it is a prefix match.
- */
- if (valid && F_ISSET(cursor, WT_CURSTD_PREFIX_SEARCH) &&
- __wt_prefix_match(&state.key, cbt->tmp) != 0)
- valid = false;
-
- /*
- * If we find a valid key, return it.
+ * If we find a valid key, check if we are performing a prefix search near. If we are, return
+ * the record only if it is a prefix match. If not, return the record.
*
* Else, creating a record past the end of the tree in a fixed-length column-store implicitly
* fills the gap with empty records. In this case, we instantiate the empty record, it's an
@@ -708,8 +701,22 @@ __wt_btcur_search_near(WT_CURSOR_BTREE *cbt, int *exactp)
*/
if (valid) {
exact = cbt->compare;
- ret = __cursor_kv_return(cbt, cbt->upd_value);
- } else if (__cursor_fix_implicit(btree, cbt)) {
+ /*
+ * Set the cursor key before the prefix search near check. If the prefix doesn't match,
+ * restore the cursor state, and continue to search for a valid key. Otherwise set the
+ * cursor value and return the valid record.
+ */
+ WT_ERR(__wt_key_return(cbt));
+ if (F_ISSET(cursor, WT_CURSTD_PREFIX_SEARCH) &&
+ __wt_prefix_match(&state.key, &cursor->key) != 0)
+ __cursor_state_restore(cursor, &state);
+ else {
+ WT_ERR(__wt_value_return(cbt, cbt->upd_value));
+ goto done;
+ }
+ }
+
+ if (__cursor_fix_implicit(btree, cbt)) {
cbt->recno = cursor->recno;
cbt->v = 0;
cursor->value.data = &cbt->v;
diff --git a/src/third_party/wiredtiger/src/btree/bt_read.c b/src/third_party/wiredtiger/src/btree/bt_read.c
index 687c21ec086..3d6a8e82215 100644
--- a/src/third_party/wiredtiger/src/btree/bt_read.c
+++ b/src/third_party/wiredtiger/src/btree/bt_read.c
@@ -258,6 +258,7 @@ read:
/* We just read a page, don't evict it before we have a chance to use it. */
evict_skip = true;
+ F_CLR(session->dhandle, WT_DHANDLE_EVICTED);
/*
* If configured to not trash the cache, leave the page generation unset, we'll set it
diff --git a/src/third_party/wiredtiger/src/btree/bt_slvg.c b/src/third_party/wiredtiger/src/btree/bt_slvg.c
index cc8c8d47803..699270b3ffa 100644
--- a/src/third_party/wiredtiger/src/btree/bt_slvg.c
+++ b/src/third_party/wiredtiger/src/btree/bt_slvg.c
@@ -2140,7 +2140,12 @@ __slvg_ovfl_reconcile(WT_SESSION_IMPL *session, WT_STUFF *ss)
WT_ERR(__wt_calloc_def(session, trk->trk_ovfl_cnt, &slot));
for (j = 0; j < trk->trk_ovfl_cnt; ++j) {
addr = &trk->trk_ovfl_addr[j];
- searchp =
+ /*
+ * It is possible that salvage found a leaf page that points to an overflow item, but
+ * there were no overflow items at all.
+ */
+ searchp = ss->ovfl == NULL ?
+ NULL :
bsearch(addr, ss->ovfl, ss->ovfl_next, sizeof(WT_TRACK *), __slvg_ovfl_compare);
/*
diff --git a/src/third_party/wiredtiger/src/btree/bt_walk.c b/src/third_party/wiredtiger/src/btree/bt_walk.c
index 69ece30ac04..233cc2a2514 100644
--- a/src/third_party/wiredtiger/src/btree/bt_walk.c
+++ b/src/third_party/wiredtiger/src/btree/bt_walk.c
@@ -375,9 +375,6 @@ restart:
empty_internal = false;
}
- /* Encourage races. */
- __wt_timing_stress(session, WT_TIMING_STRESS_SPLIT_8);
-
/* Optionally return internal pages. */
if (LF_ISSET(WT_READ_SKIP_INTL))
continue;
diff --git a/src/third_party/wiredtiger/src/config/config_def.c b/src/third_party/wiredtiger/src/config/config_def.c
index 9b95fe6762d..6ea091cd3f6 100644
--- a/src/third_party/wiredtiger/src/config/config_def.c
+++ b/src/third_party/wiredtiger/src/config/config_def.c
@@ -145,7 +145,7 @@ static const WT_CONFIG_CHECK confchk_WT_CONNECTION_reconfigure[] = {
"\"history_store_checkpoint_delay\",\"history_store_search\","
"\"history_store_sweep_race\",\"prepare_checkpoint_delay\","
"\"split_1\",\"split_2\",\"split_3\",\"split_4\",\"split_5\","
- "\"split_6\",\"split_7\",\"split_8\"]",
+ "\"split_6\",\"split_7\"]",
NULL, 0},
{"verbose", "list", NULL,
"choices=[\"api\",\"backup\",\"block\",\"checkpoint\","
@@ -877,7 +877,7 @@ static const WT_CONFIG_CHECK confchk_wiredtiger_open[] = {
"\"history_store_checkpoint_delay\",\"history_store_search\","
"\"history_store_sweep_race\",\"prepare_checkpoint_delay\","
"\"split_1\",\"split_2\",\"split_3\",\"split_4\",\"split_5\","
- "\"split_6\",\"split_7\",\"split_8\"]",
+ "\"split_6\",\"split_7\"]",
NULL, 0},
{"transaction_sync", "category", NULL, NULL, confchk_wiredtiger_open_transaction_sync_subconfigs,
2},
@@ -959,7 +959,7 @@ static const WT_CONFIG_CHECK confchk_wiredtiger_open_all[] = {
"\"history_store_checkpoint_delay\",\"history_store_search\","
"\"history_store_sweep_race\",\"prepare_checkpoint_delay\","
"\"split_1\",\"split_2\",\"split_3\",\"split_4\",\"split_5\","
- "\"split_6\",\"split_7\",\"split_8\"]",
+ "\"split_6\",\"split_7\"]",
NULL, 0},
{"transaction_sync", "category", NULL, NULL, confchk_wiredtiger_open_transaction_sync_subconfigs,
2},
@@ -1038,7 +1038,7 @@ static const WT_CONFIG_CHECK confchk_wiredtiger_open_basecfg[] = {
"\"history_store_checkpoint_delay\",\"history_store_search\","
"\"history_store_sweep_race\",\"prepare_checkpoint_delay\","
"\"split_1\",\"split_2\",\"split_3\",\"split_4\",\"split_5\","
- "\"split_6\",\"split_7\",\"split_8\"]",
+ "\"split_6\",\"split_7\"]",
NULL, 0},
{"transaction_sync", "category", NULL, NULL, confchk_wiredtiger_open_transaction_sync_subconfigs,
2},
@@ -1115,7 +1115,7 @@ static const WT_CONFIG_CHECK confchk_wiredtiger_open_usercfg[] = {
"\"history_store_checkpoint_delay\",\"history_store_search\","
"\"history_store_sweep_race\",\"prepare_checkpoint_delay\","
"\"split_1\",\"split_2\",\"split_3\",\"split_4\",\"split_5\","
- "\"split_6\",\"split_7\",\"split_8\"]",
+ "\"split_6\",\"split_7\"]",
NULL, 0},
{"transaction_sync", "category", NULL, NULL, confchk_wiredtiger_open_transaction_sync_subconfigs,
2},
diff --git a/src/third_party/wiredtiger/src/config/test_config.c b/src/third_party/wiredtiger/src/config/test_config.c
index 30bf6d8a3c3..a9f954ace43 100644
--- a/src/third_party/wiredtiger/src/config/test_config.c
+++ b/src/third_party/wiredtiger/src/config/test_config.c
@@ -49,9 +49,10 @@ static const WT_CONFIG_CHECK confchk_populate_config_subconfigs[] = {
{"value_size", "int", NULL, "min=0,max=1000000000", NULL, 0}, {NULL, NULL, NULL, NULL, NULL, 0}};
static const WT_CONFIG_CHECK confchk_read_config_subconfigs[] = {
- {"op_rate", "string", NULL, NULL, NULL, 0},
+ {"key_size", "int", NULL, "min=0,max=10000", NULL, 0}, {"op_rate", "string", NULL, NULL, NULL, 0},
{"ops_per_transaction", "category", NULL, NULL, confchk_ops_per_transaction_subconfigs, 2},
- {"thread_count", "int", NULL, "min=0", NULL, 0}, {NULL, NULL, NULL, NULL, NULL, 0}};
+ {"thread_count", "int", NULL, "min=0", NULL, 0},
+ {"value_size", "int", NULL, "min=0,max=1000000000", NULL, 0}, {NULL, NULL, NULL, NULL, NULL, 0}};
static const WT_CONFIG_CHECK confchk_update_config_subconfigs[] = {
{"key_size", "int", NULL, "min=0,max=10000", NULL, 0}, {"op_rate", "string", NULL, NULL, NULL, 0},
@@ -64,7 +65,7 @@ static const WT_CONFIG_CHECK confchk_workload_generator_subconfigs[] = {
{"insert_config", "category", NULL, NULL, confchk_insert_config_subconfigs, 5},
{"op_rate", "string", NULL, NULL, NULL, 0},
{"populate_config", "category", NULL, NULL, confchk_populate_config_subconfigs, 5},
- {"read_config", "category", NULL, NULL, confchk_read_config_subconfigs, 3},
+ {"read_config", "category", NULL, NULL, confchk_read_config_subconfigs, 5},
{"update_config", "category", NULL, NULL, confchk_update_config_subconfigs, 5},
{NULL, NULL, NULL, NULL, NULL, 0}};
@@ -125,6 +126,32 @@ static const WT_CONFIG_CHECK confchk_hs_cleanup[] = {
{"workload_tracking", "category", NULL, NULL, confchk_workload_tracking_subconfigs, 2},
{NULL, NULL, NULL, NULL, NULL, 0}};
+static const WT_CONFIG_CHECK confchk_search_near_01[] = {
+ {"cache_size_mb", "int", NULL, "min=0,max=100000000000", NULL, 0},
+ {"checkpoint_manager", "category", NULL, NULL, confchk_checkpoint_manager_subconfigs, 2},
+ {"compression_enabled", "boolean", NULL, NULL, NULL, 0},
+ {"duration_seconds", "int", NULL, "min=0,max=1000000", NULL, 0},
+ {"enable_logging", "boolean", NULL, NULL, NULL, 0},
+ {"runtime_monitor", "category", NULL, NULL, confchk_runtime_monitor_subconfigs, 5},
+ {"statistics_config", "category", NULL, NULL, confchk_statistics_config_subconfigs, 2},
+ {"timestamp_manager", "category", NULL, NULL, confchk_timestamp_manager_subconfigs, 4},
+ {"workload_generator", "category", NULL, NULL, confchk_workload_generator_subconfigs, 6},
+ {"workload_tracking", "category", NULL, NULL, confchk_workload_tracking_subconfigs, 2},
+ {NULL, NULL, NULL, NULL, NULL, 0}};
+
+static const WT_CONFIG_CHECK confchk_search_near_02[] = {
+ {"cache_size_mb", "int", NULL, "min=0,max=100000000000", NULL, 0},
+ {"checkpoint_manager", "category", NULL, NULL, confchk_checkpoint_manager_subconfigs, 2},
+ {"compression_enabled", "boolean", NULL, NULL, NULL, 0},
+ {"duration_seconds", "int", NULL, "min=0,max=1000000", NULL, 0},
+ {"enable_logging", "boolean", NULL, NULL, NULL, 0},
+ {"runtime_monitor", "category", NULL, NULL, confchk_runtime_monitor_subconfigs, 5},
+ {"statistics_config", "category", NULL, NULL, confchk_statistics_config_subconfigs, 2},
+ {"timestamp_manager", "category", NULL, NULL, confchk_timestamp_manager_subconfigs, 4},
+ {"workload_generator", "category", NULL, NULL, confchk_workload_generator_subconfigs, 6},
+ {"workload_tracking", "category", NULL, NULL, confchk_workload_tracking_subconfigs, 2},
+ {NULL, NULL, NULL, NULL, NULL, 0}};
+
static const WT_CONFIG_ENTRY config_entries[] = {
{"base_test",
"cache_size_mb=0,checkpoint_manager=(enabled=false,op_rate=1s),"
@@ -138,10 +165,10 @@ static const WT_CONFIG_ENTRY config_entries[] = {
"insert_config=(key_size=5,op_rate=1s,ops_per_transaction=(max=1,"
"min=0),thread_count=0,value_size=5),op_rate=1s,"
"populate_config=(collection_count=1,key_count_per_collection=0,"
- "key_size=5,thread_count=1,value_size=5),read_config=(op_rate=1s,"
- "ops_per_transaction=(max=1,min=0),thread_count=0),"
- "update_config=(key_size=5,op_rate=1s,ops_per_transaction=(max=1,"
- "min=0),thread_count=0,value_size=5)),"
+ "key_size=5,thread_count=1,value_size=5),read_config=(key_size=5,"
+ "op_rate=1s,ops_per_transaction=(max=1,min=0),thread_count=0,"
+ "value_size=5),update_config=(key_size=5,op_rate=1s,"
+ "ops_per_transaction=(max=1,min=0),thread_count=0,value_size=5)),"
"workload_tracking=(enabled=true,op_rate=1s)",
confchk_base_test, 10},
{"burst_inserts",
@@ -157,10 +184,10 @@ static const WT_CONFIG_ENTRY config_entries[] = {
"insert_config=(key_size=5,op_rate=1s,ops_per_transaction=(max=1,"
"min=0),thread_count=0,value_size=5),op_rate=1s,"
"populate_config=(collection_count=1,key_count_per_collection=0,"
- "key_size=5,thread_count=1,value_size=5),read_config=(op_rate=1s,"
- "ops_per_transaction=(max=1,min=0),thread_count=0),"
- "update_config=(key_size=5,op_rate=1s,ops_per_transaction=(max=1,"
- "min=0),thread_count=0,value_size=5)),"
+ "key_size=5,thread_count=1,value_size=5),read_config=(key_size=5,"
+ "op_rate=1s,ops_per_transaction=(max=1,min=0),thread_count=0,"
+ "value_size=5),update_config=(key_size=5,op_rate=1s,"
+ "ops_per_transaction=(max=1,min=0),thread_count=0,value_size=5)),"
"workload_tracking=(enabled=true,op_rate=1s)",
confchk_burst_inserts, 11},
{"example_test",
@@ -175,10 +202,10 @@ static const WT_CONFIG_ENTRY config_entries[] = {
"insert_config=(key_size=5,op_rate=1s,ops_per_transaction=(max=1,"
"min=0),thread_count=0,value_size=5),op_rate=1s,"
"populate_config=(collection_count=1,key_count_per_collection=0,"
- "key_size=5,thread_count=1,value_size=5),read_config=(op_rate=1s,"
- "ops_per_transaction=(max=1,min=0),thread_count=0),"
- "update_config=(key_size=5,op_rate=1s,ops_per_transaction=(max=1,"
- "min=0),thread_count=0,value_size=5)),"
+ "key_size=5,thread_count=1,value_size=5),read_config=(key_size=5,"
+ "op_rate=1s,ops_per_transaction=(max=1,min=0),thread_count=0,"
+ "value_size=5),update_config=(key_size=5,op_rate=1s,"
+ "ops_per_transaction=(max=1,min=0),thread_count=0,value_size=5)),"
"workload_tracking=(enabled=true,op_rate=1s)",
confchk_example_test, 10},
{"hs_cleanup",
@@ -193,12 +220,48 @@ static const WT_CONFIG_ENTRY config_entries[] = {
"insert_config=(key_size=5,op_rate=1s,ops_per_transaction=(max=1,"
"min=0),thread_count=0,value_size=5),op_rate=1s,"
"populate_config=(collection_count=1,key_count_per_collection=0,"
- "key_size=5,thread_count=1,value_size=5),read_config=(op_rate=1s,"
- "ops_per_transaction=(max=1,min=0),thread_count=0),"
- "update_config=(key_size=5,op_rate=1s,ops_per_transaction=(max=1,"
- "min=0),thread_count=0,value_size=5)),"
+ "key_size=5,thread_count=1,value_size=5),read_config=(key_size=5,"
+ "op_rate=1s,ops_per_transaction=(max=1,min=0),thread_count=0,"
+ "value_size=5),update_config=(key_size=5,op_rate=1s,"
+ "ops_per_transaction=(max=1,min=0),thread_count=0,value_size=5)),"
"workload_tracking=(enabled=true,op_rate=1s)",
confchk_hs_cleanup, 10},
+ {"search_near_01",
+ "cache_size_mb=0,checkpoint_manager=(enabled=false,op_rate=1s),"
+ "compression_enabled=false,duration_seconds=0,"
+ "enable_logging=false,runtime_monitor=(enabled=true,op_rate=1s,"
+ "postrun_statistics=[],stat_cache_size=(enabled=false,limit=0),"
+ "stat_db_size=(enabled=false,limit=0)),"
+ "statistics_config=(enable_logging=true,type=all),"
+ "timestamp_manager=(enabled=true,oldest_lag=1,op_rate=1s,"
+ "stable_lag=1),workload_generator=(enabled=true,"
+ "insert_config=(key_size=5,op_rate=1s,ops_per_transaction=(max=1,"
+ "min=0),thread_count=0,value_size=5),op_rate=1s,"
+ "populate_config=(collection_count=1,key_count_per_collection=0,"
+ "key_size=5,thread_count=1,value_size=5),read_config=(key_size=5,"
+ "op_rate=1s,ops_per_transaction=(max=1,min=0),thread_count=0,"
+ "value_size=5),update_config=(key_size=5,op_rate=1s,"
+ "ops_per_transaction=(max=1,min=0),thread_count=0,value_size=5)),"
+ "workload_tracking=(enabled=true,op_rate=1s)",
+ confchk_search_near_01, 10},
+ {"search_near_02",
+ "cache_size_mb=0,checkpoint_manager=(enabled=false,op_rate=1s),"
+ "compression_enabled=false,duration_seconds=0,"
+ "enable_logging=false,runtime_monitor=(enabled=true,op_rate=1s,"
+ "postrun_statistics=[],stat_cache_size=(enabled=false,limit=0),"
+ "stat_db_size=(enabled=false,limit=0)),"
+ "statistics_config=(enable_logging=true,type=all),"
+ "timestamp_manager=(enabled=true,oldest_lag=1,op_rate=1s,"
+ "stable_lag=1),workload_generator=(enabled=true,"
+ "insert_config=(key_size=5,op_rate=1s,ops_per_transaction=(max=1,"
+ "min=0),thread_count=0,value_size=5),op_rate=1s,"
+ "populate_config=(collection_count=1,key_count_per_collection=0,"
+ "key_size=5,thread_count=1,value_size=5),read_config=(key_size=5,"
+ "op_rate=1s,ops_per_transaction=(max=1,min=0),thread_count=0,"
+ "value_size=5),update_config=(key_size=5,op_rate=1s,"
+ "ops_per_transaction=(max=1,min=0),thread_count=0,value_size=5)),"
+ "workload_tracking=(enabled=true,op_rate=1s)",
+ confchk_search_near_02, 10},
{NULL, NULL, NULL, 0}};
/*
diff --git a/src/third_party/wiredtiger/src/conn/conn_api.c b/src/third_party/wiredtiger/src/conn/conn_api.c
index c06ab898882..2e55aedcd63 100644
--- a/src/third_party/wiredtiger/src/conn/conn_api.c
+++ b/src/third_party/wiredtiger/src/conn/conn_api.c
@@ -2148,7 +2148,7 @@ __wt_timing_stress_config(WT_SESSION_IMPL *session, const char *cfg[])
{"split_1", WT_TIMING_STRESS_SPLIT_1}, {"split_2", WT_TIMING_STRESS_SPLIT_2},
{"split_3", WT_TIMING_STRESS_SPLIT_3}, {"split_4", WT_TIMING_STRESS_SPLIT_4},
{"split_5", WT_TIMING_STRESS_SPLIT_5}, {"split_6", WT_TIMING_STRESS_SPLIT_6},
- {"split_7", WT_TIMING_STRESS_SPLIT_7}, {"split_8", WT_TIMING_STRESS_SPLIT_8}, {NULL, 0}};
+ {"split_7", WT_TIMING_STRESS_SPLIT_7}, {NULL, 0}};
WT_CONFIG_ITEM cval, sval;
WT_CONNECTION_IMPL *conn;
WT_DECL_RET;
diff --git a/src/third_party/wiredtiger/src/conn/conn_dhandle.c b/src/third_party/wiredtiger/src/conn/conn_dhandle.c
index decf70dd7e4..215eb5a47f0 100644
--- a/src/third_party/wiredtiger/src/conn/conn_dhandle.c
+++ b/src/third_party/wiredtiger/src/conn/conn_dhandle.c
@@ -319,6 +319,9 @@ __wt_conn_dhandle_close(WT_SESSION_IMPL *session, bool final, bool mark_dead)
/* Reset the tree's eviction priority (if any). */
__wt_evict_priority_clear(session);
+
+ /* Mark the advisory bit that the tree has been evicted. */
+ F_SET(dhandle, WT_DHANDLE_EVICTED);
}
/*
diff --git a/src/third_party/wiredtiger/src/conn/conn_tiered.c b/src/third_party/wiredtiger/src/conn/conn_tiered.c
index 58b2026c5b8..6f34064ca7e 100644
--- a/src/third_party/wiredtiger/src/conn/conn_tiered.c
+++ b/src/third_party/wiredtiger/src/conn/conn_tiered.c
@@ -20,6 +20,16 @@
#endif
/*
+ * __tiered_server_run_chk --
+ * Check to decide if the tiered storage server should continue running.
+ */
+static bool
+__tiered_server_run_chk(WT_SESSION_IMPL *session)
+{
+ return (FLD_ISSET(S2C(session)->server_flags, WT_CONN_SERVER_TIERED));
+}
+
+/*
* __flush_tier_wait --
* Wait for all previous work units queued to be processed.
*/
@@ -121,55 +131,63 @@ err:
/*
* __tier_storage_remove_local --
- * Perform one iteration of tiered storage local tier removal.
+ * Perform one iteration of tiered storage local object removal.
*/
static int
-__tier_storage_remove_local(WT_SESSION_IMPL *session, const char *uri, bool force)
+__tier_storage_remove_local(WT_SESSION_IMPL *session)
{
- WT_CONFIG_ITEM cval;
WT_DECL_RET;
- size_t len;
+ WT_TIERED_WORK_UNIT *entry;
uint64_t now;
- char *config, *newfile;
- const char *cfg[2], *filename;
-
- config = newfile = NULL;
- if (uri == NULL)
- return (0);
- __wt_verbose(session, WT_VERB_TIERED, "Removing tree %s", uri);
- filename = uri;
- WT_PREFIX_SKIP_REQUIRED(session, filename, "tiered:");
- len = strlen("file:") + strlen(filename) + 1;
- WT_ERR(__wt_calloc_def(session, len, &newfile));
- WT_ERR(__wt_snprintf(newfile, len, "file:%s", filename));
+ const char *object;
- /*
- * If the file:URI of the tiered object does not exist, there is nothing to do.
- */
- ret = __wt_metadata_search(session, newfile, &config);
- if (ret == WT_NOTFOUND) {
- ret = 0;
- goto err;
- }
- WT_ERR(ret);
+ entry = NULL;
+ for (;;) {
+ /* Check if we're quitting or being reconfigured. */
+ if (!__tiered_server_run_chk(session))
+ break;
- /*
- * We have a local version of this tiered data. Check its metadata for when it expires and
- * remove if necessary.
- */
- cfg[0] = config;
- cfg[1] = NULL;
- WT_ERR(__wt_config_gets(session, cfg, "local_retention", &cval));
- __wt_seconds(session, &now);
- if (force || (uint64_t)cval.val + S2C(session)->bstorage->retain_secs >= now)
+ __wt_seconds(session, &now);
+ __wt_tiered_get_drop_local(session, now, &entry);
+ if (entry == NULL)
+ break;
+ WT_ERR(__wt_tiered_name(
+ session, &entry->tiered->iface, entry->id, WT_TIERED_NAME_OBJECT, &object));
+ __wt_verbose(session, WT_VERB_TIERED, "REMOVE_LOCAL: %s at %" PRIu64, object, now);
+ WT_PREFIX_SKIP_REQUIRED(session, object, "object:");
/*
- * We want to remove the entry and the file. Probably do a schema_drop on the file:uri.
+ * If the handle is still open, it could still be in use for reading. In that case put the
+ * work unit back on the work queue and keep trying.
*/
- __wt_verbose(session, WT_VERB_TIERED, "Would remove %s. Local retention expired", newfile);
-
+ if (__wt_handle_is_open(session, object)) {
+ __wt_verbose(session, WT_VERB_TIERED, "REMOVE_LOCAL: %s in USE, queue again", object);
+ WT_STAT_CONN_INCR(session, local_objects_inuse);
+ /*
+ * FIXME-WT-7470: If the object we want to remove is in use this is the place to call
+ * object sweep to clean up block->ofh file handles. Another alternative would be to try
+ * to sweep and then try the remove call below rather than pushing it back on the work
+ * queue. NOTE: Remove 'ofh' from s_string.ok when removing this comment.
+ *
+ * Update the time on the entry before pushing it back on the queue so that we don't get
+ * into an infinite loop trying to drop an open file that may be in use a while.
+ */
+ WT_ASSERT(session, entry->tiered != NULL && entry->tiered->bstorage != NULL);
+ entry->op_val = now + entry->tiered->bstorage->retain_secs;
+ __wt_tiered_push_work(session, entry);
+ } else {
+ __wt_verbose(session, WT_VERB_TIERED, "REMOVE_LOCAL: actually remove %s", object);
+ WT_STAT_CONN_INCR(session, local_objects_removed);
+ WT_ERR(__wt_fs_remove(session, object, false));
+ /*
+ * We are responsible for freeing the work unit when we're done with it.
+ */
+ __wt_tiered_work_free(session, entry);
+ }
+ entry = NULL;
+ }
err:
- __wt_free(session, config);
- __wt_free(session, newfile);
+ if (entry != NULL)
+ __wt_tiered_work_free(session, entry);
return (ret);
}
@@ -230,8 +248,8 @@ err:
* Perform one iteration of copying newly flushed objects to the shared storage.
*/
int
-__wt_tier_do_flush(
- WT_SESSION_IMPL *session, WT_TIERED *tiered, const char *local_uri, const char *obj_uri)
+__wt_tier_do_flush(WT_SESSION_IMPL *session, WT_TIERED *tiered, uint32_t id, const char *local_uri,
+ const char *obj_uri)
{
WT_DECL_RET;
WT_FILE_SYSTEM *bucket_fs;
@@ -260,6 +278,11 @@ __wt_tier_do_flush(
*/
WT_RET(storage_source->ss_flush_finish(
storage_source, &session->iface, bucket_fs, local_name, obj_name, NULL));
+ /*
+ * After successful flushing, push a work unit to drop the local object in the future. The
+ * object will be removed locally after the local retention period expires.
+ */
+ WT_RET(__wt_tiered_put_drop_local(session, tiered, id));
return (0);
}
@@ -276,7 +299,7 @@ __wt_tier_flush(WT_SESSION_IMPL *session, WT_TIERED *tiered, uint32_t id)
local_uri = obj_uri = NULL;
WT_ERR(__wt_tiered_name(session, &tiered->iface, id, WT_TIERED_NAME_LOCAL, &local_uri));
WT_ERR(__wt_tiered_name(session, &tiered->iface, id, WT_TIERED_NAME_OBJECT, &obj_uri));
- WT_ERR(__wt_tier_do_flush(session, tiered, local_uri, obj_uri));
+ WT_ERR(__wt_tier_do_flush(session, tiered, id, local_uri, obj_uri));
err:
__wt_free(session, local_uri);
@@ -296,6 +319,10 @@ __tier_storage_copy(WT_SESSION_IMPL *session)
entry = NULL;
for (;;) {
+ /* Check if we're quitting or being reconfigured. */
+ if (!__tiered_server_run_chk(session))
+ break;
+
/*
* We probably need some kind of flush generation so that we don't process flush items for
* tables that are added during an in-progress flush_tier. This thread could run due to a
@@ -334,7 +361,7 @@ __tier_storage_remove(WT_SESSION_IMPL *session, bool force)
* We want to walk the metadata perhaps and for each tiered URI, call remove on its file:URI
* version.
*/
- WT_RET(__tier_storage_remove_local(session, NULL, force));
+ WT_RET(__tier_storage_remove_local(session));
return (0);
}
@@ -448,16 +475,6 @@ __tiered_manager_config(WT_SESSION_IMPL *session, const char **cfg, bool *runp)
}
/*
- * __tiered_server_run_chk --
- * Check to decide if the tiered storage server should continue running.
- */
-static bool
-__tiered_server_run_chk(WT_SESSION_IMPL *session)
-{
- return (FLD_ISSET(S2C(session)->server_flags, WT_CONN_SERVER_TIERED));
-}
-
-/*
* __tiered_server --
* The tiered storage server thread.
*/
diff --git a/src/third_party/wiredtiger/src/cursor/cur_backup.c b/src/third_party/wiredtiger/src/cursor/cur_backup.c
index fd416d3c452..820ea49aca0 100644
--- a/src/third_party/wiredtiger/src/cursor/cur_backup.c
+++ b/src/third_party/wiredtiger/src/cursor/cur_backup.c
@@ -268,6 +268,7 @@ __wt_curbackup_open(WT_SESSION_IMPL *session, const char *uri, WT_CURSOR *other,
__wt_cursor_notsup, /* remove */
__wt_cursor_notsup, /* reserve */
__wt_cursor_reconfigure_notsup, /* reconfigure */
+ __wt_cursor_notsup, /* largest_key */
__wt_cursor_notsup, /* cache */
__wt_cursor_reopen_notsup, /* reopen */
__curbackup_close); /* close */
diff --git a/src/third_party/wiredtiger/src/cursor/cur_config.c b/src/third_party/wiredtiger/src/cursor/cur_config.c
index ade673bba41..0fbf1066b27 100644
--- a/src/third_party/wiredtiger/src/cursor/cur_config.c
+++ b/src/third_party/wiredtiger/src/cursor/cur_config.c
@@ -51,6 +51,7 @@ __wt_curconfig_open(
__wt_cursor_notsup, /* remove */
__wt_cursor_notsup, /* reserve */
__wt_cursor_reconfigure_notsup, /* reconfigure */
+ __wt_cursor_notsup, /* largest_key */
__wt_cursor_notsup, /* cache */
__wt_cursor_reopen_notsup, /* reopen */
__curconfig_close);
diff --git a/src/third_party/wiredtiger/src/cursor/cur_ds.c b/src/third_party/wiredtiger/src/cursor/cur_ds.c
index 7139f1a8b08..c3e28dd5f59 100644
--- a/src/third_party/wiredtiger/src/cursor/cur_ds.c
+++ b/src/third_party/wiredtiger/src/cursor/cur_ds.c
@@ -425,6 +425,7 @@ __wt_curds_open(WT_SESSION_IMPL *session, const char *uri, WT_CURSOR *owner, con
__curds_remove, /* remove */
__curds_reserve, /* reserve */
__wt_cursor_reconfigure_notsup, /* reconfigure */
+ __wt_cursor_notsup, /* largest_key */
__wt_cursor_notsup, /* cache */
__wt_cursor_reopen_notsup, /* reopen */
__curds_close); /* close */
diff --git a/src/third_party/wiredtiger/src/cursor/cur_dump.c b/src/third_party/wiredtiger/src/cursor/cur_dump.c
index be4c1c7ef34..64e273f801b 100644
--- a/src/third_party/wiredtiger/src/cursor/cur_dump.c
+++ b/src/third_party/wiredtiger/src/cursor/cur_dump.c
@@ -396,6 +396,7 @@ __wt_curdump_create(WT_CURSOR *child, WT_CURSOR *owner, WT_CURSOR **cursorp)
__curdump_remove, /* remove */
__wt_cursor_notsup, /* reserve */
__wt_cursor_reconfigure_notsup, /* reconfigure */
+ __wt_cursor_notsup, /* largest_key */
__wt_cursor_notsup, /* cache */
__wt_cursor_reopen_notsup, /* reopen */
__curdump_close); /* close */
diff --git a/src/third_party/wiredtiger/src/cursor/cur_file.c b/src/third_party/wiredtiger/src/cursor/cur_file.c
index ce54fd23abf..23c0a37776c 100644
--- a/src/third_party/wiredtiger/src/cursor/cur_file.c
+++ b/src/third_party/wiredtiger/src/cursor/cur_file.c
@@ -671,6 +671,7 @@ __curfile_create(WT_SESSION_IMPL *session, WT_CURSOR *owner, const char *cfg[],
__curfile_remove, /* remove */
__curfile_reserve, /* reserve */
__wt_cursor_reconfigure, /* reconfigure */
+ __wt_cursor_largest_key, /* largest_key */
__curfile_cache, /* cache */
__curfile_reopen, /* reopen */
__curfile_close); /* close */
diff --git a/src/third_party/wiredtiger/src/cursor/cur_hs.c b/src/third_party/wiredtiger/src/cursor/cur_hs.c
index 2a2657b828b..00d419915ac 100644
--- a/src/third_party/wiredtiger/src/cursor/cur_hs.c
+++ b/src/third_party/wiredtiger/src/cursor/cur_hs.c
@@ -1097,6 +1097,7 @@ __wt_curhs_open(WT_SESSION_IMPL *session, WT_CURSOR *owner, WT_CURSOR **cursorp)
__curhs_remove, /* remove */
__wt_cursor_notsup, /* reserve */
__wt_cursor_reconfigure_notsup, /* reconfigure */
+ __wt_cursor_notsup, /* largest_key */
__wt_cursor_notsup, /* cache */
__wt_cursor_reopen_notsup, /* reopen */
__curhs_close); /* close */
diff --git a/src/third_party/wiredtiger/src/cursor/cur_index.c b/src/third_party/wiredtiger/src/cursor/cur_index.c
index ea57c060196..c5c17e92453 100644
--- a/src/third_party/wiredtiger/src/cursor/cur_index.c
+++ b/src/third_party/wiredtiger/src/cursor/cur_index.c
@@ -453,6 +453,7 @@ __wt_curindex_open(WT_SESSION_IMPL *session, const char *uri, WT_CURSOR *owner,
__wt_cursor_notsup, /* remove */
__wt_cursor_notsup, /* reserve */
__wt_cursor_reconfigure_notsup, /* reconfigure */
+ __wt_cursor_notsup, /* largest_key */
__wt_cursor_notsup, /* cache */
__wt_cursor_reopen_notsup, /* reopen */
__curindex_close); /* close */
diff --git a/src/third_party/wiredtiger/src/cursor/cur_join.c b/src/third_party/wiredtiger/src/cursor/cur_join.c
index 7f00ea9bc3d..b721fe9d0ee 100644
--- a/src/third_party/wiredtiger/src/cursor/cur_join.c
+++ b/src/third_party/wiredtiger/src/cursor/cur_join.c
@@ -576,6 +576,7 @@ __curjoin_entry_member(
__wt_cursor_notsup, /* remove */
__wt_cursor_notsup, /* reserve */
__wt_cursor_reconfigure_notsup, /* reconfigure */
+ __wt_cursor_notsup, /* largest_key */
__wt_cursor_notsup, /* cache */
__wt_cursor_reopen_notsup, /* reopen */
__wt_cursor_notsup); /* close */
@@ -1222,6 +1223,7 @@ __wt_curjoin_open(WT_SESSION_IMPL *session, const char *uri, WT_CURSOR *owner, c
__wt_cursor_notsup, /* remove */
__wt_cursor_notsup, /* reserve */
__wt_cursor_reconfigure_notsup, /* reconfigure */
+ __wt_cursor_notsup, /* largest_key */
__wt_cursor_notsup, /* cache */
__wt_cursor_reopen_notsup, /* reopen */
__curjoin_close); /* close */
diff --git a/src/third_party/wiredtiger/src/cursor/cur_log.c b/src/third_party/wiredtiger/src/cursor/cur_log.c
index f40ef6b7d1a..281050785d4 100644
--- a/src/third_party/wiredtiger/src/cursor/cur_log.c
+++ b/src/third_party/wiredtiger/src/cursor/cur_log.c
@@ -340,6 +340,7 @@ __wt_curlog_open(WT_SESSION_IMPL *session, const char *uri, const char *cfg[], W
__wt_cursor_notsup, /* remove */
__wt_cursor_notsup, /* reserve */
__wt_cursor_reconfigure_notsup, /* reconfigure */
+ __wt_cursor_notsup, /* largest_key */
__wt_cursor_notsup, /* cache */
__wt_cursor_reopen_notsup, /* reopen */
__curlog_close); /* close */
diff --git a/src/third_party/wiredtiger/src/cursor/cur_metadata.c b/src/third_party/wiredtiger/src/cursor/cur_metadata.c
index cfd0191a782..f0b04128704 100644
--- a/src/third_party/wiredtiger/src/cursor/cur_metadata.c
+++ b/src/third_party/wiredtiger/src/cursor/cur_metadata.c
@@ -575,6 +575,7 @@ __wt_curmetadata_open(WT_SESSION_IMPL *session, const char *uri, WT_CURSOR *owne
__curmetadata_remove, /* remove */
__wt_cursor_notsup, /* reserve */
__wt_cursor_reconfigure_notsup, /* reconfigure */
+ __wt_cursor_notsup, /* largest_key */
__wt_cursor_notsup, /* cache */
__wt_cursor_reopen_notsup, /* reopen */
__curmetadata_close); /* close */
diff --git a/src/third_party/wiredtiger/src/cursor/cur_stat.c b/src/third_party/wiredtiger/src/cursor/cur_stat.c
index cafa0c49b35..ca78b4bff52 100644
--- a/src/third_party/wiredtiger/src/cursor/cur_stat.c
+++ b/src/third_party/wiredtiger/src/cursor/cur_stat.c
@@ -608,6 +608,7 @@ __wt_curstat_open(WT_SESSION_IMPL *session, const char *uri, WT_CURSOR *other, c
__wt_cursor_notsup, /* remove */
__wt_cursor_notsup, /* reserve */
__wt_cursor_reconfigure_notsup, /* reconfigure */
+ __wt_cursor_notsup, /* largest_key */
__wt_cursor_notsup, /* cache */
__wt_cursor_reopen_notsup, /* reopen */
__curstat_close); /* close */
diff --git a/src/third_party/wiredtiger/src/cursor/cur_std.c b/src/third_party/wiredtiger/src/cursor/cur_std.c
index 776ad980d3f..de5115845c7 100644
--- a/src/third_party/wiredtiger/src/cursor/cur_std.c
+++ b/src/third_party/wiredtiger/src/cursor/cur_std.c
@@ -856,7 +856,7 @@ __wt_cursor_cache_get(WT_SESSION_IMPL *session, const char *uri, uint64_t hash_v
* than flag values, so fix them up according to the given configuration.
*/
F_CLR(cursor,
- WT_CURSTD_APPEND | WT_CURSTD_PREFIX_SEARCH | WT_CURSTD_RAW | WT_CURSTD_OVERWRITE);
+ WT_CURSTD_APPEND | WT_CURSTD_OVERWRITE | WT_CURSTD_PREFIX_SEARCH | WT_CURSTD_RAW);
F_SET(cursor, overwrite_flag);
/*
* If this is a btree cursor, clear its read_once flag.
@@ -1084,7 +1084,7 @@ __wt_cursor_reconfigure(WT_CURSOR *cursor, const char *config)
WT_ERR_NOTFOUND_OK(ret, false);
/* Set the prefix search near flag. */
- if ((ret = __wt_config_getones(session, config, "prefix_key", &cval)) == 0) {
+ if ((ret = __wt_config_getones(session, config, "prefix_search", &cval)) == 0) {
if (cval.val) {
/* Prefix search near configuration can only be used for row-store. */
if (WT_CURSOR_RECNO(cursor))
@@ -1114,6 +1114,52 @@ err:
}
/*
+ * __wt_cursor_largest_key --
+ * WT_CURSOR->largest_key default implementation..
+ */
+int
+__wt_cursor_largest_key(WT_CURSOR *cursor)
+{
+ WT_DECL_ITEM(key);
+ WT_DECL_RET;
+ WT_SESSION_IMPL *session;
+ bool ignore_tombstone;
+
+ ignore_tombstone = F_ISSET(cursor, WT_CURSTD_IGNORE_TOMBSTONE);
+ CURSOR_API_CALL(cursor, session, largest_key, NULL);
+
+ if (F_ISSET(session->txn, WT_TXN_SHARED_TS_READ))
+ WT_ERR_MSG(session, EINVAL, "largest key cannot be called with a read timestamp");
+
+ WT_ERR(__wt_scr_alloc(session, 0, &key));
+
+ /* Reset the cursor to give up the cursor position. */
+ WT_ERR(cursor->reset(cursor));
+
+ /* Ignore deletion */
+ F_SET(cursor, WT_CURSTD_IGNORE_TOMBSTONE);
+
+ /* Call cursor prev with read uncommitted isolation level. */
+ WT_WITH_TXN_ISOLATION(session, WT_ISO_READ_UNCOMMITTED, ret = cursor->prev(cursor));
+ WT_ERR(ret);
+
+ /* Copy the key as we will reset the cursor after that. */
+ WT_ERR(__wt_buf_set(session, key, cursor->key.data, cursor->key.size));
+ WT_ERR(cursor->reset(cursor));
+ WT_ERR(__wt_buf_set(session, &cursor->key, key->data, key->size));
+ /* Set the key as external. */
+ F_SET(cursor, WT_CURSTD_KEY_EXT);
+
+err:
+ if (!ignore_tombstone)
+ F_CLR(cursor, WT_CURSTD_IGNORE_TOMBSTONE);
+ __wt_scr_free(session, &key);
+ if (ret != 0)
+ WT_TRET(cursor->reset(cursor));
+ API_END_RET(session, ret);
+}
+
+/*
* __wt_cursor_dup_position --
* Set a cursor to another cursor's position.
*/
diff --git a/src/third_party/wiredtiger/src/cursor/cur_table.c b/src/third_party/wiredtiger/src/cursor/cur_table.c
index e4505544544..68776b18ba3 100644
--- a/src/third_party/wiredtiger/src/cursor/cur_table.c
+++ b/src/third_party/wiredtiger/src/cursor/cur_table.c
@@ -102,6 +102,7 @@ __wt_apply_single_idx(WT_SESSION_IMPL *session, WT_INDEX *idx, WT_CURSOR *cur,
__wt_cursor_notsup, /* remove */
__wt_cursor_notsup, /* reserve */
__wt_cursor_reconfigure_notsup, /* reconfigure */
+ __wt_cursor_notsup, /* largest_key */
__wt_cursor_notsup, /* cache */
__wt_cursor_reopen_notsup, /* reopen */
__wt_cursor_notsup); /* close */
@@ -789,6 +790,31 @@ err:
}
/*
+ * __curtable_largest_key --
+ * WT_CURSOR->largest_key method for the table cursor type.
+ */
+static int
+__curtable_largest_key(WT_CURSOR *cursor)
+{
+ WT_CURSOR *primary;
+ WT_CURSOR_TABLE *ctable;
+ WT_DECL_RET;
+ WT_SESSION_IMPL *session;
+
+ ctable = (WT_CURSOR_TABLE *)cursor;
+ JOINABLE_CURSOR_API_CALL(cursor, session, largest_key, NULL);
+
+ WT_ERR(cursor->reset(cursor));
+ primary = *ctable->cg_cursors;
+ WT_ERR(primary->largest_key(primary));
+
+err:
+ if (ret != 0)
+ WT_TRET(cursor->reset(cursor));
+ API_END_RET(session, ret);
+}
+
+/*
* __curtable_close --
* WT_CURSOR->close method for the table cursor type.
*/
@@ -968,6 +994,7 @@ __wt_curtable_open(WT_SESSION_IMPL *session, const char *uri, WT_CURSOR *owner,
__curtable_remove, /* remove */
__curtable_reserve, /* reserve */
__wt_cursor_reconfigure, /* reconfigure */
+ __curtable_largest_key, /* largest_key */
__wt_cursor_notsup, /* cache */
__wt_cursor_reopen_notsup, /* reopen */
__curtable_close); /* close */
diff --git a/src/third_party/wiredtiger/src/docs/cursor-ops.dox b/src/third_party/wiredtiger/src/docs/cursor-ops.dox
index c9d75295ddc..82b763b563f 100644
--- a/src/third_party/wiredtiger/src/docs/cursor-ops.dox
+++ b/src/third_party/wiredtiger/src/docs/cursor-ops.dox
@@ -103,6 +103,16 @@ fail with ::WT_DUPLICATE_KEY if the record previously exists, and
WT_CURSOR::update and WT_CURSOR::remove will fail with ::WT_NOTFOUND if the
record does not previously exist.
+@snippet ex_cursor.c cursor largest key
+
+The WT_SESSION::largest_key \c gets the largest key in a table regardless of
+visibility.
+
+It can only be called without a read timestamp, otherwise it returns an invalid
+argument error. Any following prev or next calls will behave as if they were
+invoked on an unpositioned cursor no matter the largest key call is successful
+or not.
+
@section cursor_error Cursor position after error
After any cursor handle method failure, the cursor's position is
diff --git a/src/third_party/wiredtiger/src/docs/spell.ok b/src/third_party/wiredtiger/src/docs/spell.ok
index f34eace96d9..6a5b7f8dd5d 100644
--- a/src/third_party/wiredtiger/src/docs/spell.ok
+++ b/src/third_party/wiredtiger/src/docs/spell.ok
@@ -658,6 +658,7 @@ unescaped
unicode
uninstall
unittest
+unpositioned
untyped
uri
useconds
diff --git a/src/third_party/wiredtiger/src/evict/evict_lru.c b/src/third_party/wiredtiger/src/evict/evict_lru.c
index 0488f2346f6..0bfaf1c9f33 100644
--- a/src/third_party/wiredtiger/src/evict/evict_lru.c
+++ b/src/third_party/wiredtiger/src/evict/evict_lru.c
@@ -285,7 +285,7 @@ __wt_evict_thread_run(WT_SESSION_IMPL *session, WT_THREAD *thread)
* busy and then opens a different file (in this case, the HS file), it can deadlock with a
* thread waiting for the first file to drain from the eviction queue. See WT-5946 for details.
*/
- WT_RET(__wt_curhs_cache(session));
+ WT_ERR(__wt_curhs_cache(session));
if (conn->evict_server_running && __wt_spin_trylock(session, &cache->evict_pass_lock) == 0) {
/*
* Cannot use WT_WITH_PASS_LOCK because this is a try lock. Fix when that is supported. We
@@ -349,10 +349,11 @@ __wt_evict_thread_stop(WT_SESSION_IMPL *session, WT_THREAD *thread)
WT_WITH_PASS_LOCK(session, ret = __evict_clear_all_walks(session));
WT_ERR(ret);
/*
- * The only two cases when the eviction server is expected to stop are when recovery is finished
- * or when the connection is closing.
+ * The only cases when the eviction server is expected to stop are when recovery is finished,
+ * when the connection is closing or when an error has occurred and connection panic flag is
+ * set.
*/
- WT_ASSERT(session, F_ISSET(conn, WT_CONN_CLOSING | WT_CONN_RECOVERING));
+ WT_ASSERT(session, F_ISSET(conn, WT_CONN_CLOSING | WT_CONN_PANIC | WT_CONN_RECOVERING));
/* Clear the eviction thread session flag. */
F_CLR(session, WT_SESSION_EVICTION);
@@ -2046,9 +2047,14 @@ fast:
*/
if (pages_queued < target_pages / 2 && !urgent_queued)
btree->evict_walk_period = WT_MIN(WT_MAX(1, 2 * btree->evict_walk_period), 100);
- else if (pages_queued == target_pages)
+ else if (pages_queued == target_pages) {
btree->evict_walk_period = 0;
- else if (btree->evict_walk_period > 0)
+ /*
+ * If there's a chance the Btree was fully evicted, update the evicted flag in the handle.
+ */
+ if (__wt_btree_bytes_evictable(session) == 0)
+ F_SET(session->dhandle, WT_DHANDLE_EVICTED);
+ } else if (btree->evict_walk_period > 0)
btree->evict_walk_period /= 2;
/*
diff --git a/src/third_party/wiredtiger/src/include/btree_inline.h b/src/third_party/wiredtiger/src/include/btree_inline.h
index adcf81b83bb..7b9a2b74a5f 100644
--- a/src/third_party/wiredtiger/src/include/btree_inline.h
+++ b/src/third_party/wiredtiger/src/include/btree_inline.h
@@ -2003,50 +2003,44 @@ __wt_page_swap_func(WT_SESSION_IMPL *session, WT_REF *held, WT_REF *want, uint32
* Return if the cursor is pointing to a page with deleted records and can be skipped for cursor
* traversal.
*/
-static inline bool
-__wt_btcur_skip_page(WT_CURSOR_BTREE *cbt)
+static inline int
+__wt_btcur_skip_page(WT_SESSION_IMPL *session, WT_REF *ref, void *context, bool *skipp)
{
WT_ADDR_COPY addr;
- WT_PAGE *page;
- WT_REF *ref;
- WT_SESSION_IMPL *session;
uint8_t previous_state;
- bool can_skip;
- session = CUR2S(cbt);
- ref = cbt->ref;
- page = cbt->ref == NULL ? NULL : cbt->ref->page;
+ WT_UNUSED(context);
- if (page == NULL)
- return false;
-
- previous_state = ref->state;
- can_skip = false;
+ *skipp = false; /* Default to reading */
/*
* Determine if all records on the page have been deleted and all the tombstones are visible to
* our transaction. If so, we can avoid reading the records on the page and move to the next
* page. We base this decision on the aggregate stop point added to the page during the last
- * reconciliation. We can skip this test if the page has been modified since it was reconciled
- * or the underlying cursor is configured to ignore tombstones.
+ * reconciliation. We can skip this test if the page has been modified since it was reconciled.
+ * We also skip this test on an internal page, as we rely on reconciliation to mark the internal
+ * page dirty. There could be a period of time when the internal page is marked clean but the
+ * leaf page is dirty and has newer data than let on by the internal page's aggregated
+ * information.
*
* We are making these decisions while holding a lock for the page as checkpoint or eviction can
- * make changes to the data structures (i.e., aggregate timestamps) we are reading.
+ * make changes to the data structures (i.e., aggregate timestamps) we are reading. It is okay
+ * if the page is not in memory, or gets evicted before we lock it. In such a case, we can forgo
+ * checking if the page has been modified. So, only do a page modified check if the page was in
+ * memory before locking.
*/
- if (session->txn->isolation == WT_ISO_SNAPSHOT && !__wt_page_is_modified(page) &&
- !F_ISSET(&cbt->iface, WT_CURSTD_IGNORE_TOMBSTONE) && previous_state == WT_REF_MEM) {
-
- /* We only try to lock the page once. */
- if (!WT_REF_CAS_STATE(session, ref, previous_state, WT_REF_LOCKED))
- return false;
+ if (F_ISSET(ref, WT_REF_FLAG_INTERNAL))
+ return (0);
- if (__wt_ref_addr_copy(session, ref, &addr) &&
- __wt_txn_visible(session, addr.ta.newest_stop_txn, addr.ta.newest_stop_ts) &&
- __wt_txn_visible(session, addr.ta.newest_stop_txn, addr.ta.newest_stop_durable_ts))
- can_skip = true;
+ WT_REF_LOCK(session, ref, &previous_state);
+ if ((previous_state == WT_REF_DISK || previous_state == WT_REF_DELETED ||
+ (previous_state == WT_REF_MEM && !__wt_page_is_modified(ref->page))) &&
+ __wt_ref_addr_copy(session, ref, &addr) && addr.ta.newest_stop_txn != WT_TXN_MAX &&
+ addr.ta.newest_stop_ts != WT_TS_MAX &&
+ __wt_txn_visible(session, addr.ta.newest_stop_txn, addr.ta.newest_stop_ts))
+ *skipp = true;
- WT_REF_SET_STATE(ref, previous_state);
- }
+ WT_REF_UNLOCK(ref, previous_state);
- return (can_skip);
+ return (0);
}
diff --git a/src/third_party/wiredtiger/src/include/connection.h b/src/third_party/wiredtiger/src/include/connection.h
index c94dd274fbc..5b8f7e9f8e4 100644
--- a/src/third_party/wiredtiger/src/include/connection.h
+++ b/src/third_party/wiredtiger/src/include/connection.h
@@ -614,7 +614,6 @@ struct __wt_connection_impl {
#define WT_TIMING_STRESS_SPLIT_5 0x08000u
#define WT_TIMING_STRESS_SPLIT_6 0x10000u
#define WT_TIMING_STRESS_SPLIT_7 0x20000u
-#define WT_TIMING_STRESS_SPLIT_8 0x40000u
/* AUTOMATIC FLAG VALUE GENERATION STOP 64 */
uint64_t timing_stress_flags;
diff --git a/src/third_party/wiredtiger/src/include/cursor.h b/src/third_party/wiredtiger/src/include/cursor.h
index 569da6aabaa..85797573e23 100644
--- a/src/third_party/wiredtiger/src/include/cursor.h
+++ b/src/third_party/wiredtiger/src/include/cursor.h
@@ -12,27 +12,27 @@
/*
* Initialize a static WT_CURSOR structure.
*/
-#define WT_CURSOR_STATIC_INIT(n, get_key, get_value, set_key, set_value, compare, equals, next, \
- prev, reset, search, search_near, insert, modify, update, remove, reserve, reconfigure, cache, \
- reopen, close) \
- static const WT_CURSOR n = { \
- NULL, /* session */ \
- NULL, /* uri */ \
- NULL, /* key_format */ \
- NULL, /* value_format */ \
- get_key, get_value, set_key, set_value, compare, equals, next, prev, reset, search, \
- search_near, insert, modify, update, remove, reserve, close, reconfigure, cache, reopen, \
- 0, /* uri_hash */ \
- {NULL, NULL}, /* TAILQ_ENTRY q */ \
- 0, /* recno key */ \
- {0}, /* recno raw buffer */ \
- NULL, /* json_private */ \
- NULL, /* lang_private */ \
- {NULL, 0, NULL, 0, 0}, /* WT_ITEM key */ \
- {NULL, 0, NULL, 0, 0}, /* WT_ITEM value */ \
- 0, /* int saved_err */ \
- NULL, /* internal_uri */ \
- 0 /* uint32_t flags */ \
+#define WT_CURSOR_STATIC_INIT(n, get_key, get_value, set_key, set_value, compare, equals, next, \
+ prev, reset, search, search_near, insert, modify, update, remove, reserve, reconfigure, \
+ largest_key, cache, reopen, close) \
+ static const WT_CURSOR n = { \
+ NULL, /* session */ \
+ NULL, /* uri */ \
+ NULL, /* key_format */ \
+ NULL, /* value_format */ \
+ get_key, get_value, set_key, set_value, compare, equals, next, prev, reset, search, \
+ search_near, insert, modify, update, remove, reserve, close, reconfigure, largest_key, \
+ cache, reopen, 0, /* uri_hash */ \
+ {NULL, NULL}, /* TAILQ_ENTRY q */ \
+ 0, /* recno key */ \
+ {0}, /* recno raw buffer */ \
+ NULL, /* json_private */ \
+ NULL, /* lang_private */ \
+ {NULL, 0, NULL, 0, 0}, /* WT_ITEM key */ \
+ {NULL, 0, NULL, 0, 0}, /* WT_ITEM value */ \
+ 0, /* int saved_err */ \
+ NULL, /* internal_uri */ \
+ 0 /* uint32_t flags */ \
}
struct __wt_cursor_backup {
diff --git a/src/third_party/wiredtiger/src/include/dhandle.h b/src/third_party/wiredtiger/src/include/dhandle.h
index 133ab688544..d4e23e52c8f 100644
--- a/src/third_party/wiredtiger/src/include/dhandle.h
+++ b/src/third_party/wiredtiger/src/include/dhandle.h
@@ -119,11 +119,12 @@ struct __wt_data_handle {
#define WT_DHANDLE_DISCARD 0x002u /* Close on release */
#define WT_DHANDLE_DISCARD_KILL 0x004u /* Mark dead on release */
#define WT_DHANDLE_DROPPED 0x008u /* Handle is dropped */
-#define WT_DHANDLE_EXCLUSIVE 0x010u /* Exclusive access */
-#define WT_DHANDLE_HS 0x020u /* History store table */
-#define WT_DHANDLE_IS_METADATA 0x040u /* Metadata handle */
-#define WT_DHANDLE_LOCK_ONLY 0x080u /* Handle only used as a lock */
-#define WT_DHANDLE_OPEN 0x100u /* Handle is open */
+#define WT_DHANDLE_EVICTED 0x010u /* Btree is evicted (advisory) */
+#define WT_DHANDLE_EXCLUSIVE 0x020u /* Exclusive access */
+#define WT_DHANDLE_HS 0x040u /* History store table */
+#define WT_DHANDLE_IS_METADATA 0x080u /* Metadata handle */
+#define WT_DHANDLE_LOCK_ONLY 0x100u /* Handle only used as a lock */
+#define WT_DHANDLE_OPEN 0x200u /* Handle is open */
/* AUTOMATIC FLAG VALUE GENERATION STOP 12 */
uint32_t flags;
diff --git a/src/third_party/wiredtiger/src/include/extern.h b/src/third_party/wiredtiger/src/include/extern.h
index 3468dbfa24b..0f4f3d84a67 100644
--- a/src/third_party/wiredtiger/src/include/extern.h
+++ b/src/third_party/wiredtiger/src/include/extern.h
@@ -577,6 +577,8 @@ extern int __wt_cursor_key_order_init(WT_CURSOR_BTREE *cbt)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
extern int __wt_cursor_kv_not_set(WT_CURSOR *cursor, bool key) WT_GCC_FUNC_DECL_ATTRIBUTE((cold))
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
+extern int __wt_cursor_largest_key(WT_CURSOR *cursor)
+ WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
extern int __wt_cursor_modify_notsup(WT_CURSOR *cursor, WT_MODIFY *entries, int nentries)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
extern int __wt_cursor_modify_value_format_notsup(WT_CURSOR *cursor, WT_MODIFY *entries,
@@ -1363,8 +1365,6 @@ extern int __wt_scr_alloc_func(WT_SESSION_IMPL *session, size_t size, WT_ITEM **
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
extern int __wt_search_insert(WT_SESSION_IMPL *session, WT_CURSOR_BTREE *cbt,
WT_INSERT_HEAD *ins_head, WT_ITEM *srch_key) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
-extern int __wt_session_blocking_checkpoint(WT_SESSION_IMPL *session, bool force, uint64_t seconds)
- WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
extern int __wt_session_breakpoint(WT_SESSION *wt_session)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
extern int __wt_session_close_internal(WT_SESSION_IMPL *session)
@@ -1474,8 +1474,8 @@ extern int __wt_thread_group_destroy(WT_SESSION_IMPL *session, WT_THREAD_GROUP *
extern int __wt_thread_group_resize(WT_SESSION_IMPL *session, WT_THREAD_GROUP *group,
uint32_t new_min, uint32_t new_max, uint32_t flags)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
-extern int __wt_tier_do_flush(WT_SESSION_IMPL *session, WT_TIERED *tiered, const char *local_uri,
- const char *obj_uri) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
+extern int __wt_tier_do_flush(WT_SESSION_IMPL *session, WT_TIERED *tiered, uint32_t id,
+ const char *local_uri, const char *obj_uri) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
extern int __wt_tier_flush(WT_SESSION_IMPL *session, WT_TIERED *tiered, uint32_t id)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
extern int __wt_tiered_bucket_config(WT_SESSION_IMPL *session, const char *cfg[],
@@ -1895,8 +1895,6 @@ static inline WT_IKEY *__wt_ref_key_instantiated(WT_REF *ref)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline WT_VISIBLE_TYPE __wt_txn_upd_visible_type(WT_SESSION_IMPL *session, WT_UPDATE *upd)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
-static inline bool __wt_btcur_skip_page(WT_CURSOR_BTREE *cbt)
- WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline bool __wt_btree_can_evict_dirty(WT_SESSION_IMPL *session)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline bool __wt_btree_dominating_cache(WT_SESSION_IMPL *session, WT_BTREE *btree)
@@ -1982,6 +1980,8 @@ static inline bool __wt_txn_visible_id_snapshot(uint64_t id, uint64_t snap_min,
uint64_t *snapshot, uint32_t snapshot_count) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline double __wt_eviction_dirty_target(WT_CACHE *cache)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
+static inline int __wt_btcur_skip_page(WT_SESSION_IMPL *session, WT_REF *ref, void *context,
+ bool *skipp) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline int __wt_btree_block_free(WT_SESSION_IMPL *session, const uint8_t *addr,
size_t addr_size) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline int __wt_buf_extend(WT_SESSION_IMPL *session, WT_ITEM *buf, size_t size)
diff --git a/src/third_party/wiredtiger/src/include/os_fs_inline.h b/src/third_party/wiredtiger/src/include/os_fs_inline.h
index 2276f096312..2010032a5c2 100644
--- a/src/third_party/wiredtiger/src/include/os_fs_inline.h
+++ b/src/third_party/wiredtiger/src/include/os_fs_inline.h
@@ -141,7 +141,7 @@ __wt_fs_remove(WT_SESSION_IMPL *session, const char *name, bool durable)
* It is a layering violation to retrieve a WT_FH here, but it is a useful diagnostic to ensure
* WiredTiger doesn't have the handle open.
*/
- if (__wt_handle_is_open(session, name))
+ if (__wt_handle_is_open(session, name) && !F_ISSET(session, WT_SESSION_QUIET_TIERED))
WT_RET_MSG(session, EINVAL, "%s: file-remove: file has open handles", name);
#endif
diff --git a/src/third_party/wiredtiger/src/include/session.h b/src/third_party/wiredtiger/src/include/session.h
index 465f641954b..5206910f139 100644
--- a/src/third_party/wiredtiger/src/include/session.h
+++ b/src/third_party/wiredtiger/src/include/session.h
@@ -203,10 +203,11 @@ struct __wt_session_impl {
#define WT_SESSION_NO_LOGGING 0x00800u
#define WT_SESSION_NO_RECONCILE 0x01000u
#define WT_SESSION_QUIET_CORRUPT_FILE 0x02000u
-#define WT_SESSION_READ_WONT_NEED 0x04000u
-#define WT_SESSION_RESOLVING_TXN 0x08000u
-#define WT_SESSION_ROLLBACK_TO_STABLE 0x10000u
-#define WT_SESSION_SCHEMA_TXN 0x20000u
+#define WT_SESSION_QUIET_TIERED 0x04000u
+#define WT_SESSION_READ_WONT_NEED 0x08000u
+#define WT_SESSION_RESOLVING_TXN 0x10000u
+#define WT_SESSION_ROLLBACK_TO_STABLE 0x20000u
+#define WT_SESSION_SCHEMA_TXN 0x40000u
/* AUTOMATIC FLAG VALUE GENERATION STOP 32 */
uint32_t flags;
diff --git a/src/third_party/wiredtiger/src/include/stat.h b/src/third_party/wiredtiger/src/include/stat.h
index 2eb26c749dc..df1cd95de67 100644
--- a/src/third_party/wiredtiger/src/include/stat.h
+++ b/src/third_party/wiredtiger/src/include/stat.h
@@ -508,8 +508,6 @@ struct __wt_connection_stats {
int64_t cursor_next_skip_total;
int64_t cursor_prev_skip_total;
int64_t cursor_skip_hs_cur_position;
- int64_t cursor_next_skip_page_count;
- int64_t cursor_prev_skip_page_count;
int64_t cursor_search_near_prefix_fast_paths;
int64_t cursor_cached_count;
int64_t cursor_insert_bulk;
@@ -688,8 +686,9 @@ struct __wt_connection_stats {
int64_t rec_time_window_stop_txn;
int64_t rec_split_stashed_bytes;
int64_t rec_split_stashed_objects;
- int64_t flush_state_races;
+ int64_t local_objects_inuse;
int64_t flush_tier;
+ int64_t local_objects_removed;
int64_t session_open;
int64_t session_query_ts;
int64_t session_table_alter_fail;
@@ -946,8 +945,6 @@ struct __wt_dsrc_stats {
int64_t cursor_next_skip_total;
int64_t cursor_prev_skip_total;
int64_t cursor_skip_hs_cur_position;
- int64_t cursor_next_skip_page_count;
- int64_t cursor_prev_skip_page_count;
int64_t cursor_search_near_prefix_fast_paths;
int64_t cursor_insert_bulk;
int64_t cursor_reopen;
diff --git a/src/third_party/wiredtiger/src/include/wiredtiger.in b/src/third_party/wiredtiger/src/include/wiredtiger.in
index daba823f589..fc8e542c33a 100644
--- a/src/third_party/wiredtiger/src/include/wiredtiger.in
+++ b/src/third_party/wiredtiger/src/include/wiredtiger.in
@@ -661,6 +661,19 @@ struct __wt_cursor {
*/
int __F(reconfigure)(WT_CURSOR *cursor, const char *config);
+ /*!
+ * Get the largest key of the cursor regardless of visibility.
+ * The cursor is not positioned after calling this api. Only supported by data cursors.
+ *
+ * @snippet ex_all.c Reset the cursor
+ *
+ * @param cursor the cursor handle
+ * @errors
+ * If \c read_timestamp is set, EINVAL is returned.
+ * Also, calling \c WT_CURSOR::get_key after this api call returns EINVAL.
+ */
+ int __F(largest_key)(WT_CURSOR *cursor);
+
/*
* Protected fields, only to be used by cursor implementations.
*/
@@ -5468,728 +5481,720 @@ extern int wiredtiger_extension_terminate(WT_CONNECTION *connection);
*/
#define WT_STAT_CONN_CURSOR_SKIP_HS_CUR_POSITION 1194
/*!
- * cursor: Total number of pages skipped without reading by cursor next
- * calls
- */
-#define WT_STAT_CONN_CURSOR_NEXT_SKIP_PAGE_COUNT 1195
-/*!
- * cursor: Total number of pages skipped without reading by cursor prev
- * calls
- */
-#define WT_STAT_CONN_CURSOR_PREV_SKIP_PAGE_COUNT 1196
-/*!
* cursor: Total number of times a search near has exited due to prefix
* config
*/
-#define WT_STAT_CONN_CURSOR_SEARCH_NEAR_PREFIX_FAST_PATHS 1197
+#define WT_STAT_CONN_CURSOR_SEARCH_NEAR_PREFIX_FAST_PATHS 1195
/*! cursor: cached cursor count */
-#define WT_STAT_CONN_CURSOR_CACHED_COUNT 1198
+#define WT_STAT_CONN_CURSOR_CACHED_COUNT 1196
/*! cursor: cursor bulk loaded cursor insert calls */
-#define WT_STAT_CONN_CURSOR_INSERT_BULK 1199
+#define WT_STAT_CONN_CURSOR_INSERT_BULK 1197
/*! cursor: cursor close calls that result in cache */
-#define WT_STAT_CONN_CURSOR_CACHE 1200
+#define WT_STAT_CONN_CURSOR_CACHE 1198
/*! cursor: cursor create calls */
-#define WT_STAT_CONN_CURSOR_CREATE 1201
+#define WT_STAT_CONN_CURSOR_CREATE 1199
/*! cursor: cursor insert calls */
-#define WT_STAT_CONN_CURSOR_INSERT 1202
+#define WT_STAT_CONN_CURSOR_INSERT 1200
/*! cursor: cursor insert key and value bytes */
-#define WT_STAT_CONN_CURSOR_INSERT_BYTES 1203
+#define WT_STAT_CONN_CURSOR_INSERT_BYTES 1201
/*! cursor: cursor modify calls */
-#define WT_STAT_CONN_CURSOR_MODIFY 1204
+#define WT_STAT_CONN_CURSOR_MODIFY 1202
/*! cursor: cursor modify key and value bytes affected */
-#define WT_STAT_CONN_CURSOR_MODIFY_BYTES 1205
+#define WT_STAT_CONN_CURSOR_MODIFY_BYTES 1203
/*! cursor: cursor modify value bytes modified */
-#define WT_STAT_CONN_CURSOR_MODIFY_BYTES_TOUCH 1206
+#define WT_STAT_CONN_CURSOR_MODIFY_BYTES_TOUCH 1204
/*! cursor: cursor next calls */
-#define WT_STAT_CONN_CURSOR_NEXT 1207
+#define WT_STAT_CONN_CURSOR_NEXT 1205
/*!
* cursor: cursor next calls that skip due to a globally visible history
* store tombstone
*/
-#define WT_STAT_CONN_CURSOR_NEXT_HS_TOMBSTONE 1208
+#define WT_STAT_CONN_CURSOR_NEXT_HS_TOMBSTONE 1206
/*!
* cursor: cursor next calls that skip greater than or equal to 100
* entries
*/
-#define WT_STAT_CONN_CURSOR_NEXT_SKIP_GE_100 1209
+#define WT_STAT_CONN_CURSOR_NEXT_SKIP_GE_100 1207
/*! cursor: cursor next calls that skip less than 100 entries */
-#define WT_STAT_CONN_CURSOR_NEXT_SKIP_LT_100 1210
+#define WT_STAT_CONN_CURSOR_NEXT_SKIP_LT_100 1208
/*! cursor: cursor operation restarted */
-#define WT_STAT_CONN_CURSOR_RESTART 1211
+#define WT_STAT_CONN_CURSOR_RESTART 1209
/*! cursor: cursor prev calls */
-#define WT_STAT_CONN_CURSOR_PREV 1212
+#define WT_STAT_CONN_CURSOR_PREV 1210
/*!
* cursor: cursor prev calls that skip due to a globally visible history
* store tombstone
*/
-#define WT_STAT_CONN_CURSOR_PREV_HS_TOMBSTONE 1213
+#define WT_STAT_CONN_CURSOR_PREV_HS_TOMBSTONE 1211
/*!
* cursor: cursor prev calls that skip greater than or equal to 100
* entries
*/
-#define WT_STAT_CONN_CURSOR_PREV_SKIP_GE_100 1214
+#define WT_STAT_CONN_CURSOR_PREV_SKIP_GE_100 1212
/*! cursor: cursor prev calls that skip less than 100 entries */
-#define WT_STAT_CONN_CURSOR_PREV_SKIP_LT_100 1215
+#define WT_STAT_CONN_CURSOR_PREV_SKIP_LT_100 1213
/*! cursor: cursor remove calls */
-#define WT_STAT_CONN_CURSOR_REMOVE 1216
+#define WT_STAT_CONN_CURSOR_REMOVE 1214
/*! cursor: cursor remove key bytes removed */
-#define WT_STAT_CONN_CURSOR_REMOVE_BYTES 1217
+#define WT_STAT_CONN_CURSOR_REMOVE_BYTES 1215
/*! cursor: cursor reserve calls */
-#define WT_STAT_CONN_CURSOR_RESERVE 1218
+#define WT_STAT_CONN_CURSOR_RESERVE 1216
/*! cursor: cursor reset calls */
-#define WT_STAT_CONN_CURSOR_RESET 1219
+#define WT_STAT_CONN_CURSOR_RESET 1217
/*! cursor: cursor search calls */
-#define WT_STAT_CONN_CURSOR_SEARCH 1220
+#define WT_STAT_CONN_CURSOR_SEARCH 1218
/*! cursor: cursor search history store calls */
-#define WT_STAT_CONN_CURSOR_SEARCH_HS 1221
+#define WT_STAT_CONN_CURSOR_SEARCH_HS 1219
/*! cursor: cursor search near calls */
-#define WT_STAT_CONN_CURSOR_SEARCH_NEAR 1222
+#define WT_STAT_CONN_CURSOR_SEARCH_NEAR 1220
/*! cursor: cursor sweep buckets */
-#define WT_STAT_CONN_CURSOR_SWEEP_BUCKETS 1223
+#define WT_STAT_CONN_CURSOR_SWEEP_BUCKETS 1221
/*! cursor: cursor sweep cursors closed */
-#define WT_STAT_CONN_CURSOR_SWEEP_CLOSED 1224
+#define WT_STAT_CONN_CURSOR_SWEEP_CLOSED 1222
/*! cursor: cursor sweep cursors examined */
-#define WT_STAT_CONN_CURSOR_SWEEP_EXAMINED 1225
+#define WT_STAT_CONN_CURSOR_SWEEP_EXAMINED 1223
/*! cursor: cursor sweeps */
-#define WT_STAT_CONN_CURSOR_SWEEP 1226
+#define WT_STAT_CONN_CURSOR_SWEEP 1224
/*! cursor: cursor truncate calls */
-#define WT_STAT_CONN_CURSOR_TRUNCATE 1227
+#define WT_STAT_CONN_CURSOR_TRUNCATE 1225
/*! cursor: cursor update calls */
-#define WT_STAT_CONN_CURSOR_UPDATE 1228
+#define WT_STAT_CONN_CURSOR_UPDATE 1226
/*! cursor: cursor update key and value bytes */
-#define WT_STAT_CONN_CURSOR_UPDATE_BYTES 1229
+#define WT_STAT_CONN_CURSOR_UPDATE_BYTES 1227
/*! cursor: cursor update value size change */
-#define WT_STAT_CONN_CURSOR_UPDATE_BYTES_CHANGED 1230
+#define WT_STAT_CONN_CURSOR_UPDATE_BYTES_CHANGED 1228
/*! cursor: cursors reused from cache */
-#define WT_STAT_CONN_CURSOR_REOPEN 1231
+#define WT_STAT_CONN_CURSOR_REOPEN 1229
/*! cursor: open cursor count */
-#define WT_STAT_CONN_CURSOR_OPEN_COUNT 1232
+#define WT_STAT_CONN_CURSOR_OPEN_COUNT 1230
/*! data-handle: connection data handle size */
-#define WT_STAT_CONN_DH_CONN_HANDLE_SIZE 1233
+#define WT_STAT_CONN_DH_CONN_HANDLE_SIZE 1231
/*! data-handle: connection data handles currently active */
-#define WT_STAT_CONN_DH_CONN_HANDLE_COUNT 1234
+#define WT_STAT_CONN_DH_CONN_HANDLE_COUNT 1232
/*! data-handle: connection sweep candidate became referenced */
-#define WT_STAT_CONN_DH_SWEEP_REF 1235
+#define WT_STAT_CONN_DH_SWEEP_REF 1233
/*! data-handle: connection sweep dhandles closed */
-#define WT_STAT_CONN_DH_SWEEP_CLOSE 1236
+#define WT_STAT_CONN_DH_SWEEP_CLOSE 1234
/*! data-handle: connection sweep dhandles removed from hash list */
-#define WT_STAT_CONN_DH_SWEEP_REMOVE 1237
+#define WT_STAT_CONN_DH_SWEEP_REMOVE 1235
/*! data-handle: connection sweep time-of-death sets */
-#define WT_STAT_CONN_DH_SWEEP_TOD 1238
+#define WT_STAT_CONN_DH_SWEEP_TOD 1236
/*! data-handle: connection sweeps */
-#define WT_STAT_CONN_DH_SWEEPS 1239
+#define WT_STAT_CONN_DH_SWEEPS 1237
/*!
* data-handle: connection sweeps skipped due to checkpoint gathering
* handles
*/
-#define WT_STAT_CONN_DH_SWEEP_SKIP_CKPT 1240
+#define WT_STAT_CONN_DH_SWEEP_SKIP_CKPT 1238
/*! data-handle: session dhandles swept */
-#define WT_STAT_CONN_DH_SESSION_HANDLES 1241
+#define WT_STAT_CONN_DH_SESSION_HANDLES 1239
/*! data-handle: session sweep attempts */
-#define WT_STAT_CONN_DH_SESSION_SWEEPS 1242
+#define WT_STAT_CONN_DH_SESSION_SWEEPS 1240
/*! lock: checkpoint lock acquisitions */
-#define WT_STAT_CONN_LOCK_CHECKPOINT_COUNT 1243
+#define WT_STAT_CONN_LOCK_CHECKPOINT_COUNT 1241
/*! lock: checkpoint lock application thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_APPLICATION 1244
+#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_APPLICATION 1242
/*! lock: checkpoint lock internal thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_INTERNAL 1245
+#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_INTERNAL 1243
/*! lock: dhandle lock application thread time waiting (usecs) */
-#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_APPLICATION 1246
+#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_APPLICATION 1244
/*! lock: dhandle lock internal thread time waiting (usecs) */
-#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_INTERNAL 1247
+#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_INTERNAL 1245
/*! lock: dhandle read lock acquisitions */
-#define WT_STAT_CONN_LOCK_DHANDLE_READ_COUNT 1248
+#define WT_STAT_CONN_LOCK_DHANDLE_READ_COUNT 1246
/*! lock: dhandle write lock acquisitions */
-#define WT_STAT_CONN_LOCK_DHANDLE_WRITE_COUNT 1249
+#define WT_STAT_CONN_LOCK_DHANDLE_WRITE_COUNT 1247
/*!
* lock: durable timestamp queue lock application thread time waiting
* (usecs)
*/
-#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_APPLICATION 1250
+#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_APPLICATION 1248
/*!
* lock: durable timestamp queue lock internal thread time waiting
* (usecs)
*/
-#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_INTERNAL 1251
+#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_INTERNAL 1249
/*! lock: durable timestamp queue read lock acquisitions */
-#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_READ_COUNT 1252
+#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_READ_COUNT 1250
/*! lock: durable timestamp queue write lock acquisitions */
-#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WRITE_COUNT 1253
+#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WRITE_COUNT 1251
/*! lock: metadata lock acquisitions */
-#define WT_STAT_CONN_LOCK_METADATA_COUNT 1254
+#define WT_STAT_CONN_LOCK_METADATA_COUNT 1252
/*! lock: metadata lock application thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_METADATA_WAIT_APPLICATION 1255
+#define WT_STAT_CONN_LOCK_METADATA_WAIT_APPLICATION 1253
/*! lock: metadata lock internal thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_METADATA_WAIT_INTERNAL 1256
+#define WT_STAT_CONN_LOCK_METADATA_WAIT_INTERNAL 1254
/*!
* lock: read timestamp queue lock application thread time waiting
* (usecs)
*/
-#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_APPLICATION 1257
+#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_APPLICATION 1255
/*! lock: read timestamp queue lock internal thread time waiting (usecs) */
-#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_INTERNAL 1258
+#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_INTERNAL 1256
/*! lock: read timestamp queue read lock acquisitions */
-#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_READ_COUNT 1259
+#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_READ_COUNT 1257
/*! lock: read timestamp queue write lock acquisitions */
-#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WRITE_COUNT 1260
+#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WRITE_COUNT 1258
/*! lock: schema lock acquisitions */
-#define WT_STAT_CONN_LOCK_SCHEMA_COUNT 1261
+#define WT_STAT_CONN_LOCK_SCHEMA_COUNT 1259
/*! lock: schema lock application thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_APPLICATION 1262
+#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_APPLICATION 1260
/*! lock: schema lock internal thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_INTERNAL 1263
+#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_INTERNAL 1261
/*!
* lock: table lock application thread time waiting for the table lock
* (usecs)
*/
-#define WT_STAT_CONN_LOCK_TABLE_WAIT_APPLICATION 1264
+#define WT_STAT_CONN_LOCK_TABLE_WAIT_APPLICATION 1262
/*!
* lock: table lock internal thread time waiting for the table lock
* (usecs)
*/
-#define WT_STAT_CONN_LOCK_TABLE_WAIT_INTERNAL 1265
+#define WT_STAT_CONN_LOCK_TABLE_WAIT_INTERNAL 1263
/*! lock: table read lock acquisitions */
-#define WT_STAT_CONN_LOCK_TABLE_READ_COUNT 1266
+#define WT_STAT_CONN_LOCK_TABLE_READ_COUNT 1264
/*! lock: table write lock acquisitions */
-#define WT_STAT_CONN_LOCK_TABLE_WRITE_COUNT 1267
+#define WT_STAT_CONN_LOCK_TABLE_WRITE_COUNT 1265
/*! lock: txn global lock application thread time waiting (usecs) */
-#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_APPLICATION 1268
+#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_APPLICATION 1266
/*! lock: txn global lock internal thread time waiting (usecs) */
-#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_INTERNAL 1269
+#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_INTERNAL 1267
/*! lock: txn global read lock acquisitions */
-#define WT_STAT_CONN_LOCK_TXN_GLOBAL_READ_COUNT 1270
+#define WT_STAT_CONN_LOCK_TXN_GLOBAL_READ_COUNT 1268
/*! lock: txn global write lock acquisitions */
-#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WRITE_COUNT 1271
+#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WRITE_COUNT 1269
/*! log: busy returns attempting to switch slots */
-#define WT_STAT_CONN_LOG_SLOT_SWITCH_BUSY 1272
+#define WT_STAT_CONN_LOG_SLOT_SWITCH_BUSY 1270
/*! log: force archive time sleeping (usecs) */
-#define WT_STAT_CONN_LOG_FORCE_ARCHIVE_SLEEP 1273
+#define WT_STAT_CONN_LOG_FORCE_ARCHIVE_SLEEP 1271
/*! log: log bytes of payload data */
-#define WT_STAT_CONN_LOG_BYTES_PAYLOAD 1274
+#define WT_STAT_CONN_LOG_BYTES_PAYLOAD 1272
/*! log: log bytes written */
-#define WT_STAT_CONN_LOG_BYTES_WRITTEN 1275
+#define WT_STAT_CONN_LOG_BYTES_WRITTEN 1273
/*! log: log files manually zero-filled */
-#define WT_STAT_CONN_LOG_ZERO_FILLS 1276
+#define WT_STAT_CONN_LOG_ZERO_FILLS 1274
/*! log: log flush operations */
-#define WT_STAT_CONN_LOG_FLUSH 1277
+#define WT_STAT_CONN_LOG_FLUSH 1275
/*! log: log force write operations */
-#define WT_STAT_CONN_LOG_FORCE_WRITE 1278
+#define WT_STAT_CONN_LOG_FORCE_WRITE 1276
/*! log: log force write operations skipped */
-#define WT_STAT_CONN_LOG_FORCE_WRITE_SKIP 1279
+#define WT_STAT_CONN_LOG_FORCE_WRITE_SKIP 1277
/*! log: log records compressed */
-#define WT_STAT_CONN_LOG_COMPRESS_WRITES 1280
+#define WT_STAT_CONN_LOG_COMPRESS_WRITES 1278
/*! log: log records not compressed */
-#define WT_STAT_CONN_LOG_COMPRESS_WRITE_FAILS 1281
+#define WT_STAT_CONN_LOG_COMPRESS_WRITE_FAILS 1279
/*! log: log records too small to compress */
-#define WT_STAT_CONN_LOG_COMPRESS_SMALL 1282
+#define WT_STAT_CONN_LOG_COMPRESS_SMALL 1280
/*! log: log release advances write LSN */
-#define WT_STAT_CONN_LOG_RELEASE_WRITE_LSN 1283
+#define WT_STAT_CONN_LOG_RELEASE_WRITE_LSN 1281
/*! log: log scan operations */
-#define WT_STAT_CONN_LOG_SCANS 1284
+#define WT_STAT_CONN_LOG_SCANS 1282
/*! log: log scan records requiring two reads */
-#define WT_STAT_CONN_LOG_SCAN_REREADS 1285
+#define WT_STAT_CONN_LOG_SCAN_REREADS 1283
/*! log: log server thread advances write LSN */
-#define WT_STAT_CONN_LOG_WRITE_LSN 1286
+#define WT_STAT_CONN_LOG_WRITE_LSN 1284
/*! log: log server thread write LSN walk skipped */
-#define WT_STAT_CONN_LOG_WRITE_LSN_SKIP 1287
+#define WT_STAT_CONN_LOG_WRITE_LSN_SKIP 1285
/*! log: log sync operations */
-#define WT_STAT_CONN_LOG_SYNC 1288
+#define WT_STAT_CONN_LOG_SYNC 1286
/*! log: log sync time duration (usecs) */
-#define WT_STAT_CONN_LOG_SYNC_DURATION 1289
+#define WT_STAT_CONN_LOG_SYNC_DURATION 1287
/*! log: log sync_dir operations */
-#define WT_STAT_CONN_LOG_SYNC_DIR 1290
+#define WT_STAT_CONN_LOG_SYNC_DIR 1288
/*! log: log sync_dir time duration (usecs) */
-#define WT_STAT_CONN_LOG_SYNC_DIR_DURATION 1291
+#define WT_STAT_CONN_LOG_SYNC_DIR_DURATION 1289
/*! log: log write operations */
-#define WT_STAT_CONN_LOG_WRITES 1292
+#define WT_STAT_CONN_LOG_WRITES 1290
/*! log: logging bytes consolidated */
-#define WT_STAT_CONN_LOG_SLOT_CONSOLIDATED 1293
+#define WT_STAT_CONN_LOG_SLOT_CONSOLIDATED 1291
/*! log: maximum log file size */
-#define WT_STAT_CONN_LOG_MAX_FILESIZE 1294
+#define WT_STAT_CONN_LOG_MAX_FILESIZE 1292
/*! log: number of pre-allocated log files to create */
-#define WT_STAT_CONN_LOG_PREALLOC_MAX 1295
+#define WT_STAT_CONN_LOG_PREALLOC_MAX 1293
/*! log: pre-allocated log files not ready and missed */
-#define WT_STAT_CONN_LOG_PREALLOC_MISSED 1296
+#define WT_STAT_CONN_LOG_PREALLOC_MISSED 1294
/*! log: pre-allocated log files prepared */
-#define WT_STAT_CONN_LOG_PREALLOC_FILES 1297
+#define WT_STAT_CONN_LOG_PREALLOC_FILES 1295
/*! log: pre-allocated log files used */
-#define WT_STAT_CONN_LOG_PREALLOC_USED 1298
+#define WT_STAT_CONN_LOG_PREALLOC_USED 1296
/*! log: records processed by log scan */
-#define WT_STAT_CONN_LOG_SCAN_RECORDS 1299
+#define WT_STAT_CONN_LOG_SCAN_RECORDS 1297
/*! log: slot close lost race */
-#define WT_STAT_CONN_LOG_SLOT_CLOSE_RACE 1300
+#define WT_STAT_CONN_LOG_SLOT_CLOSE_RACE 1298
/*! log: slot close unbuffered waits */
-#define WT_STAT_CONN_LOG_SLOT_CLOSE_UNBUF 1301
+#define WT_STAT_CONN_LOG_SLOT_CLOSE_UNBUF 1299
/*! log: slot closures */
-#define WT_STAT_CONN_LOG_SLOT_CLOSES 1302
+#define WT_STAT_CONN_LOG_SLOT_CLOSES 1300
/*! log: slot join atomic update races */
-#define WT_STAT_CONN_LOG_SLOT_RACES 1303
+#define WT_STAT_CONN_LOG_SLOT_RACES 1301
/*! log: slot join calls atomic updates raced */
-#define WT_STAT_CONN_LOG_SLOT_YIELD_RACE 1304
+#define WT_STAT_CONN_LOG_SLOT_YIELD_RACE 1302
/*! log: slot join calls did not yield */
-#define WT_STAT_CONN_LOG_SLOT_IMMEDIATE 1305
+#define WT_STAT_CONN_LOG_SLOT_IMMEDIATE 1303
/*! log: slot join calls found active slot closed */
-#define WT_STAT_CONN_LOG_SLOT_YIELD_CLOSE 1306
+#define WT_STAT_CONN_LOG_SLOT_YIELD_CLOSE 1304
/*! log: slot join calls slept */
-#define WT_STAT_CONN_LOG_SLOT_YIELD_SLEEP 1307
+#define WT_STAT_CONN_LOG_SLOT_YIELD_SLEEP 1305
/*! log: slot join calls yielded */
-#define WT_STAT_CONN_LOG_SLOT_YIELD 1308
+#define WT_STAT_CONN_LOG_SLOT_YIELD 1306
/*! log: slot join found active slot closed */
-#define WT_STAT_CONN_LOG_SLOT_ACTIVE_CLOSED 1309
+#define WT_STAT_CONN_LOG_SLOT_ACTIVE_CLOSED 1307
/*! log: slot joins yield time (usecs) */
-#define WT_STAT_CONN_LOG_SLOT_YIELD_DURATION 1310
+#define WT_STAT_CONN_LOG_SLOT_YIELD_DURATION 1308
/*! log: slot transitions unable to find free slot */
-#define WT_STAT_CONN_LOG_SLOT_NO_FREE_SLOTS 1311
+#define WT_STAT_CONN_LOG_SLOT_NO_FREE_SLOTS 1309
/*! log: slot unbuffered writes */
-#define WT_STAT_CONN_LOG_SLOT_UNBUFFERED 1312
+#define WT_STAT_CONN_LOG_SLOT_UNBUFFERED 1310
/*! log: total in-memory size of compressed records */
-#define WT_STAT_CONN_LOG_COMPRESS_MEM 1313
+#define WT_STAT_CONN_LOG_COMPRESS_MEM 1311
/*! log: total log buffer size */
-#define WT_STAT_CONN_LOG_BUFFER_SIZE 1314
+#define WT_STAT_CONN_LOG_BUFFER_SIZE 1312
/*! log: total size of compressed records */
-#define WT_STAT_CONN_LOG_COMPRESS_LEN 1315
+#define WT_STAT_CONN_LOG_COMPRESS_LEN 1313
/*! log: written slots coalesced */
-#define WT_STAT_CONN_LOG_SLOT_COALESCED 1316
+#define WT_STAT_CONN_LOG_SLOT_COALESCED 1314
/*! log: yields waiting for previous log file close */
-#define WT_STAT_CONN_LOG_CLOSE_YIELDS 1317
+#define WT_STAT_CONN_LOG_CLOSE_YIELDS 1315
/*! perf: file system read latency histogram (bucket 1) - 10-49ms */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT50 1318
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT50 1316
/*! perf: file system read latency histogram (bucket 2) - 50-99ms */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT100 1319
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT100 1317
/*! perf: file system read latency histogram (bucket 3) - 100-249ms */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT250 1320
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT250 1318
/*! perf: file system read latency histogram (bucket 4) - 250-499ms */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT500 1321
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT500 1319
/*! perf: file system read latency histogram (bucket 5) - 500-999ms */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT1000 1322
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT1000 1320
/*! perf: file system read latency histogram (bucket 6) - 1000ms+ */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_GT1000 1323
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_GT1000 1321
/*! perf: file system write latency histogram (bucket 1) - 10-49ms */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT50 1324
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT50 1322
/*! perf: file system write latency histogram (bucket 2) - 50-99ms */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT100 1325
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT100 1323
/*! perf: file system write latency histogram (bucket 3) - 100-249ms */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT250 1326
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT250 1324
/*! perf: file system write latency histogram (bucket 4) - 250-499ms */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT500 1327
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT500 1325
/*! perf: file system write latency histogram (bucket 5) - 500-999ms */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT1000 1328
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT1000 1326
/*! perf: file system write latency histogram (bucket 6) - 1000ms+ */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_GT1000 1329
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_GT1000 1327
/*! perf: operation read latency histogram (bucket 1) - 100-249us */
-#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT250 1330
+#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT250 1328
/*! perf: operation read latency histogram (bucket 2) - 250-499us */
-#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT500 1331
+#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT500 1329
/*! perf: operation read latency histogram (bucket 3) - 500-999us */
-#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT1000 1332
+#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT1000 1330
/*! perf: operation read latency histogram (bucket 4) - 1000-9999us */
-#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT10000 1333
+#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT10000 1331
/*! perf: operation read latency histogram (bucket 5) - 10000us+ */
-#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_GT10000 1334
+#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_GT10000 1332
/*! perf: operation write latency histogram (bucket 1) - 100-249us */
-#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT250 1335
+#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT250 1333
/*! perf: operation write latency histogram (bucket 2) - 250-499us */
-#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT500 1336
+#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT500 1334
/*! perf: operation write latency histogram (bucket 3) - 500-999us */
-#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT1000 1337
+#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT1000 1335
/*! perf: operation write latency histogram (bucket 4) - 1000-9999us */
-#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT10000 1338
+#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT10000 1336
/*! perf: operation write latency histogram (bucket 5) - 10000us+ */
-#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_GT10000 1339
+#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_GT10000 1337
/*! reconciliation: approximate byte size of timestamps in pages written */
-#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TS 1340
+#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TS 1338
/*!
* reconciliation: approximate byte size of transaction IDs in pages
* written
*/
-#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TXN 1341
+#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TXN 1339
/*! reconciliation: fast-path pages deleted */
-#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1342
+#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1340
/*! reconciliation: internal-page overflow keys */
-#define WT_STAT_CONN_REC_OVERFLOW_KEY_INTERNAL 1343
+#define WT_STAT_CONN_REC_OVERFLOW_KEY_INTERNAL 1341
/*! reconciliation: leaf-page overflow keys */
-#define WT_STAT_CONN_REC_OVERFLOW_KEY_LEAF 1344
+#define WT_STAT_CONN_REC_OVERFLOW_KEY_LEAF 1342
/*! reconciliation: maximum seconds spent in a reconciliation call */
-#define WT_STAT_CONN_REC_MAXIMUM_SECONDS 1345
+#define WT_STAT_CONN_REC_MAXIMUM_SECONDS 1343
/*! reconciliation: page reconciliation calls */
-#define WT_STAT_CONN_REC_PAGES 1346
+#define WT_STAT_CONN_REC_PAGES 1344
/*! reconciliation: page reconciliation calls for eviction */
-#define WT_STAT_CONN_REC_PAGES_EVICTION 1347
+#define WT_STAT_CONN_REC_PAGES_EVICTION 1345
/*!
* reconciliation: page reconciliation calls that resulted in values with
* prepared transaction metadata
*/
-#define WT_STAT_CONN_REC_PAGES_WITH_PREPARE 1348
+#define WT_STAT_CONN_REC_PAGES_WITH_PREPARE 1346
/*!
* reconciliation: page reconciliation calls that resulted in values with
* timestamps
*/
-#define WT_STAT_CONN_REC_PAGES_WITH_TS 1349
+#define WT_STAT_CONN_REC_PAGES_WITH_TS 1347
/*!
* reconciliation: page reconciliation calls that resulted in values with
* transaction ids
*/
-#define WT_STAT_CONN_REC_PAGES_WITH_TXN 1350
+#define WT_STAT_CONN_REC_PAGES_WITH_TXN 1348
/*! reconciliation: pages deleted */
-#define WT_STAT_CONN_REC_PAGE_DELETE 1351
+#define WT_STAT_CONN_REC_PAGE_DELETE 1349
/*!
* reconciliation: pages written including an aggregated newest start
* durable timestamp
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 1352
+#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 1350
/*!
* reconciliation: pages written including an aggregated newest stop
* durable timestamp
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 1353
+#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 1351
/*!
* reconciliation: pages written including an aggregated newest stop
* timestamp
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TS 1354
+#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TS 1352
/*!
* reconciliation: pages written including an aggregated newest stop
* transaction ID
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TXN 1355
+#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TXN 1353
/*!
* reconciliation: pages written including an aggregated newest
* transaction ID
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_TXN 1356
+#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_TXN 1354
/*!
* reconciliation: pages written including an aggregated oldest start
* timestamp
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TS 1357
+#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TS 1355
/*! reconciliation: pages written including an aggregated prepare */
-#define WT_STAT_CONN_REC_TIME_AGGR_PREPARED 1358
+#define WT_STAT_CONN_REC_TIME_AGGR_PREPARED 1356
/*! reconciliation: pages written including at least one prepare state */
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_PREPARED 1359
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_PREPARED 1357
/*!
* reconciliation: pages written including at least one start durable
* timestamp
*/
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 1360
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 1358
/*! reconciliation: pages written including at least one start timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TS 1361
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TS 1359
/*!
* reconciliation: pages written including at least one start transaction
* ID
*/
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TXN 1362
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TXN 1360
/*!
* reconciliation: pages written including at least one stop durable
* timestamp
*/
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 1363
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 1361
/*! reconciliation: pages written including at least one stop timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TS 1364
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TS 1362
/*!
* reconciliation: pages written including at least one stop transaction
* ID
*/
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TXN 1365
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TXN 1363
/*! reconciliation: records written including a prepare state */
-#define WT_STAT_CONN_REC_TIME_WINDOW_PREPARED 1366
+#define WT_STAT_CONN_REC_TIME_WINDOW_PREPARED 1364
/*! reconciliation: records written including a start durable timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_START_TS 1367
+#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_START_TS 1365
/*! reconciliation: records written including a start timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_START_TS 1368
+#define WT_STAT_CONN_REC_TIME_WINDOW_START_TS 1366
/*! reconciliation: records written including a start transaction ID */
-#define WT_STAT_CONN_REC_TIME_WINDOW_START_TXN 1369
+#define WT_STAT_CONN_REC_TIME_WINDOW_START_TXN 1367
/*! reconciliation: records written including a stop durable timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_STOP_TS 1370
+#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_STOP_TS 1368
/*! reconciliation: records written including a stop timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TS 1371
+#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TS 1369
/*! reconciliation: records written including a stop transaction ID */
-#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TXN 1372
+#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TXN 1370
/*! reconciliation: split bytes currently awaiting free */
-#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1373
+#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1371
/*! reconciliation: split objects currently awaiting free */
-#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1374
-/*! session: flush state races */
-#define WT_STAT_CONN_FLUSH_STATE_RACES 1375
+#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1372
+/*! session: attempts to remove a local object and the object is in use */
+#define WT_STAT_CONN_LOCAL_OBJECTS_INUSE 1373
/*! session: flush_tier operation calls */
-#define WT_STAT_CONN_FLUSH_TIER 1376
+#define WT_STAT_CONN_FLUSH_TIER 1374
+/*! session: local objects removed */
+#define WT_STAT_CONN_LOCAL_OBJECTS_REMOVED 1375
/*! session: open session count */
-#define WT_STAT_CONN_SESSION_OPEN 1377
+#define WT_STAT_CONN_SESSION_OPEN 1376
/*! session: session query timestamp calls */
-#define WT_STAT_CONN_SESSION_QUERY_TS 1378
+#define WT_STAT_CONN_SESSION_QUERY_TS 1377
/*! session: table alter failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1379
+#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1378
/*! session: table alter successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1380
+#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1379
/*! session: table alter triggering checkpoint calls */
-#define WT_STAT_CONN_SESSION_TABLE_ALTER_TRIGGER_CHECKPOINT 1381
+#define WT_STAT_CONN_SESSION_TABLE_ALTER_TRIGGER_CHECKPOINT 1380
/*! session: table alter unchanged and skipped */
-#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1382
+#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1381
/*! session: table compact failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1383
+#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1382
/*! session: table compact successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1384
+#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1383
/*! session: table create failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1385
+#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1384
/*! session: table create successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1386
+#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1385
/*! session: table drop failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1387
+#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1386
/*! session: table drop successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1388
+#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1387
/*! session: table rename failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1389
+#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1388
/*! session: table rename successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1390
+#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1389
/*! session: table salvage failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1391
+#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1390
/*! session: table salvage successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1392
+#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1391
/*! session: table truncate failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1393
+#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1392
/*! session: table truncate successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1394
+#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1393
/*! session: table verify failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1395
+#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1394
/*! session: table verify successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1396
+#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1395
/*! session: tiered operations dequeued and processed */
-#define WT_STAT_CONN_TIERED_WORK_UNITS_DEQUEUED 1397
+#define WT_STAT_CONN_TIERED_WORK_UNITS_DEQUEUED 1396
/*! session: tiered operations scheduled */
-#define WT_STAT_CONN_TIERED_WORK_UNITS_CREATED 1398
+#define WT_STAT_CONN_TIERED_WORK_UNITS_CREATED 1397
/*! session: tiered storage local retention time (secs) */
-#define WT_STAT_CONN_TIERED_RETENTION 1399
+#define WT_STAT_CONN_TIERED_RETENTION 1398
/*! session: tiered storage object size */
-#define WT_STAT_CONN_TIERED_OBJECT_SIZE 1400
+#define WT_STAT_CONN_TIERED_OBJECT_SIZE 1399
/*! thread-state: active filesystem fsync calls */
-#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1401
+#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1400
/*! thread-state: active filesystem read calls */
-#define WT_STAT_CONN_THREAD_READ_ACTIVE 1402
+#define WT_STAT_CONN_THREAD_READ_ACTIVE 1401
/*! thread-state: active filesystem write calls */
-#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1403
+#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1402
/*! thread-yield: application thread time evicting (usecs) */
-#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1404
+#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1403
/*! thread-yield: application thread time waiting for cache (usecs) */
-#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1405
+#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1404
/*!
* thread-yield: connection close blocked waiting for transaction state
* stabilization
*/
-#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1406
+#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1405
/*! thread-yield: connection close yielded for lsm manager shutdown */
-#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1407
+#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1406
/*! thread-yield: data handle lock yielded */
-#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1408
+#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1407
/*!
* thread-yield: get reference for page index and slot time sleeping
* (usecs)
*/
-#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1409
+#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1408
/*! thread-yield: page access yielded due to prepare state change */
-#define WT_STAT_CONN_PREPARED_TRANSITION_BLOCKED_PAGE 1410
+#define WT_STAT_CONN_PREPARED_TRANSITION_BLOCKED_PAGE 1409
/*! thread-yield: page acquire busy blocked */
-#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1411
+#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1410
/*! thread-yield: page acquire eviction blocked */
-#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1412
+#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1411
/*! thread-yield: page acquire locked blocked */
-#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1413
+#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1412
/*! thread-yield: page acquire read blocked */
-#define WT_STAT_CONN_PAGE_READ_BLOCKED 1414
+#define WT_STAT_CONN_PAGE_READ_BLOCKED 1413
/*! thread-yield: page acquire time sleeping (usecs) */
-#define WT_STAT_CONN_PAGE_SLEEP 1415
+#define WT_STAT_CONN_PAGE_SLEEP 1414
/*!
* thread-yield: page delete rollback time sleeping for state change
* (usecs)
*/
-#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1416
+#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1415
/*! thread-yield: page reconciliation yielded due to child modification */
-#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1417
+#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1416
/*! transaction: Number of prepared updates */
-#define WT_STAT_CONN_TXN_PREPARED_UPDATES 1418
+#define WT_STAT_CONN_TXN_PREPARED_UPDATES 1417
/*! transaction: Number of prepared updates committed */
-#define WT_STAT_CONN_TXN_PREPARED_UPDATES_COMMITTED 1419
+#define WT_STAT_CONN_TXN_PREPARED_UPDATES_COMMITTED 1418
/*! transaction: Number of prepared updates repeated on the same key */
-#define WT_STAT_CONN_TXN_PREPARED_UPDATES_KEY_REPEATED 1420
+#define WT_STAT_CONN_TXN_PREPARED_UPDATES_KEY_REPEATED 1419
/*! transaction: Number of prepared updates rolled back */
-#define WT_STAT_CONN_TXN_PREPARED_UPDATES_ROLLEDBACK 1421
+#define WT_STAT_CONN_TXN_PREPARED_UPDATES_ROLLEDBACK 1420
/*! transaction: prepared transactions */
-#define WT_STAT_CONN_TXN_PREPARE 1422
+#define WT_STAT_CONN_TXN_PREPARE 1421
/*! transaction: prepared transactions committed */
-#define WT_STAT_CONN_TXN_PREPARE_COMMIT 1423
+#define WT_STAT_CONN_TXN_PREPARE_COMMIT 1422
/*! transaction: prepared transactions currently active */
-#define WT_STAT_CONN_TXN_PREPARE_ACTIVE 1424
+#define WT_STAT_CONN_TXN_PREPARE_ACTIVE 1423
/*! transaction: prepared transactions rolled back */
-#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK 1425
+#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK 1424
/*!
* 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 1426
+#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK_DO_NOT_REMOVE_HS_UPDATE 1425
/*!
* 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 1427
+#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK_FIX_HS_UPDATE_WITH_CKPT_RESERVED_TXNID 1426
/*! transaction: query timestamp calls */
-#define WT_STAT_CONN_TXN_QUERY_TS 1428
+#define WT_STAT_CONN_TXN_QUERY_TS 1427
/*! transaction: race to read prepared update retry */
-#define WT_STAT_CONN_TXN_READ_RACE_PREPARE_UPDATE 1429
+#define WT_STAT_CONN_TXN_READ_RACE_PREPARE_UPDATE 1428
/*! transaction: rollback to stable calls */
-#define WT_STAT_CONN_TXN_RTS 1430
+#define WT_STAT_CONN_TXN_RTS 1429
/*!
* 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 1431
+#define WT_STAT_CONN_TXN_RTS_HS_STOP_OLDER_THAN_NEWER_START 1430
/*! transaction: rollback to stable inconsistent checkpoint */
-#define WT_STAT_CONN_TXN_RTS_INCONSISTENT_CKPT 1432
+#define WT_STAT_CONN_TXN_RTS_INCONSISTENT_CKPT 1431
/*! transaction: rollback to stable keys removed */
-#define WT_STAT_CONN_TXN_RTS_KEYS_REMOVED 1433
+#define WT_STAT_CONN_TXN_RTS_KEYS_REMOVED 1432
/*! transaction: rollback to stable keys restored */
-#define WT_STAT_CONN_TXN_RTS_KEYS_RESTORED 1434
+#define WT_STAT_CONN_TXN_RTS_KEYS_RESTORED 1433
/*! transaction: rollback to stable pages visited */
-#define WT_STAT_CONN_TXN_RTS_PAGES_VISITED 1435
+#define WT_STAT_CONN_TXN_RTS_PAGES_VISITED 1434
/*! transaction: rollback to stable restored tombstones from history store */
-#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_TOMBSTONES 1436
+#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_TOMBSTONES 1435
/*! transaction: rollback to stable restored updates from history store */
-#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_UPDATES 1437
+#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_UPDATES 1436
/*! transaction: rollback to stable skipping delete rle */
-#define WT_STAT_CONN_TXN_RTS_DELETE_RLE_SKIPPED 1438
+#define WT_STAT_CONN_TXN_RTS_DELETE_RLE_SKIPPED 1437
/*! transaction: rollback to stable skipping stable rle */
-#define WT_STAT_CONN_TXN_RTS_STABLE_RLE_SKIPPED 1439
+#define WT_STAT_CONN_TXN_RTS_STABLE_RLE_SKIPPED 1438
/*! transaction: rollback to stable sweeping history store keys */
-#define WT_STAT_CONN_TXN_RTS_SWEEP_HS_KEYS 1440
+#define WT_STAT_CONN_TXN_RTS_SWEEP_HS_KEYS 1439
/*! transaction: rollback to stable tree walk skipping pages */
-#define WT_STAT_CONN_TXN_RTS_TREE_WALK_SKIP_PAGES 1441
+#define WT_STAT_CONN_TXN_RTS_TREE_WALK_SKIP_PAGES 1440
/*! transaction: rollback to stable updates aborted */
-#define WT_STAT_CONN_TXN_RTS_UPD_ABORTED 1442
+#define WT_STAT_CONN_TXN_RTS_UPD_ABORTED 1441
/*! transaction: rollback to stable updates removed from history store */
-#define WT_STAT_CONN_TXN_RTS_HS_REMOVED 1443
+#define WT_STAT_CONN_TXN_RTS_HS_REMOVED 1442
/*! transaction: sessions scanned in each walk of concurrent sessions */
-#define WT_STAT_CONN_TXN_SESSIONS_WALKED 1444
+#define WT_STAT_CONN_TXN_SESSIONS_WALKED 1443
/*! transaction: set timestamp calls */
-#define WT_STAT_CONN_TXN_SET_TS 1445
+#define WT_STAT_CONN_TXN_SET_TS 1444
/*! transaction: set timestamp durable calls */
-#define WT_STAT_CONN_TXN_SET_TS_DURABLE 1446
+#define WT_STAT_CONN_TXN_SET_TS_DURABLE 1445
/*! transaction: set timestamp durable updates */
-#define WT_STAT_CONN_TXN_SET_TS_DURABLE_UPD 1447
+#define WT_STAT_CONN_TXN_SET_TS_DURABLE_UPD 1446
/*! transaction: set timestamp oldest calls */
-#define WT_STAT_CONN_TXN_SET_TS_OLDEST 1448
+#define WT_STAT_CONN_TXN_SET_TS_OLDEST 1447
/*! transaction: set timestamp oldest updates */
-#define WT_STAT_CONN_TXN_SET_TS_OLDEST_UPD 1449
+#define WT_STAT_CONN_TXN_SET_TS_OLDEST_UPD 1448
/*! transaction: set timestamp stable calls */
-#define WT_STAT_CONN_TXN_SET_TS_STABLE 1450
+#define WT_STAT_CONN_TXN_SET_TS_STABLE 1449
/*! transaction: set timestamp stable updates */
-#define WT_STAT_CONN_TXN_SET_TS_STABLE_UPD 1451
+#define WT_STAT_CONN_TXN_SET_TS_STABLE_UPD 1450
/*! transaction: transaction begins */
-#define WT_STAT_CONN_TXN_BEGIN 1452
+#define WT_STAT_CONN_TXN_BEGIN 1451
/*! transaction: transaction checkpoint currently running */
-#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1453
+#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1452
/*!
* transaction: transaction checkpoint currently running for history
* store file
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING_HS 1454
+#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING_HS 1453
/*! transaction: transaction checkpoint generation */
-#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1455
+#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1454
/*!
* transaction: transaction checkpoint history store file duration
* (usecs)
*/
-#define WT_STAT_CONN_TXN_HS_CKPT_DURATION 1456
+#define WT_STAT_CONN_TXN_HS_CKPT_DURATION 1455
/*! transaction: transaction checkpoint max time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1457
+#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1456
/*! transaction: transaction checkpoint min time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1458
+#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1457
/*!
* transaction: transaction checkpoint most recent duration for gathering
* all handles (usecs)
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION 1459
+#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION 1458
/*!
* transaction: transaction checkpoint most recent duration for gathering
* applied handles (usecs)
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_APPLY 1460
+#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_APPLY 1459
/*!
* transaction: transaction checkpoint most recent duration for gathering
* skipped handles (usecs)
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_SKIP 1461
+#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_SKIP 1460
/*! transaction: transaction checkpoint most recent handles applied */
-#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_APPLIED 1462
+#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_APPLIED 1461
/*! transaction: transaction checkpoint most recent handles skipped */
-#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_SKIPPED 1463
+#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_SKIPPED 1462
/*! transaction: transaction checkpoint most recent handles walked */
-#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_WALKED 1464
+#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_WALKED 1463
/*! transaction: transaction checkpoint most recent time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1465
+#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1464
/*! transaction: transaction checkpoint prepare currently running */
-#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RUNNING 1466
+#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RUNNING 1465
/*! transaction: transaction checkpoint prepare max time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MAX 1467
+#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MAX 1466
/*! transaction: transaction checkpoint prepare min time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MIN 1468
+#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MIN 1467
/*! transaction: transaction checkpoint prepare most recent time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RECENT 1469
+#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RECENT 1468
/*! transaction: transaction checkpoint prepare total time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_TOTAL 1470
+#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_TOTAL 1469
/*! transaction: transaction checkpoint scrub dirty target */
-#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1471
+#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1470
/*! transaction: transaction checkpoint scrub time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1472
+#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1471
/*! transaction: transaction checkpoint total time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1473
+#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1472
/*! transaction: transaction checkpoints */
-#define WT_STAT_CONN_TXN_CHECKPOINT 1474
+#define WT_STAT_CONN_TXN_CHECKPOINT 1473
/*! transaction: transaction checkpoints due to obsolete pages */
-#define WT_STAT_CONN_TXN_CHECKPOINT_OBSOLETE_APPLIED 1475
+#define WT_STAT_CONN_TXN_CHECKPOINT_OBSOLETE_APPLIED 1474
/*!
* transaction: transaction checkpoints skipped because database was
* clean
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1476
+#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1475
/*! transaction: transaction failures due to history store */
-#define WT_STAT_CONN_TXN_FAIL_CACHE 1477
+#define WT_STAT_CONN_TXN_FAIL_CACHE 1476
/*!
* transaction: transaction fsync calls for checkpoint after allocating
* the transaction ID
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1478
+#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1477
/*!
* transaction: transaction fsync duration for checkpoint after
* allocating the transaction ID (usecs)
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1479
+#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1478
/*! transaction: transaction range of IDs currently pinned */
-#define WT_STAT_CONN_TXN_PINNED_RANGE 1480
+#define WT_STAT_CONN_TXN_PINNED_RANGE 1479
/*! transaction: transaction range of IDs currently pinned by a checkpoint */
-#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1481
+#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1480
/*! transaction: transaction range of timestamps currently pinned */
-#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP 1482
+#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP 1481
/*! transaction: transaction range of timestamps pinned by a checkpoint */
-#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_CHECKPOINT 1483
+#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_CHECKPOINT 1482
/*!
* transaction: transaction range of timestamps pinned by the oldest
* active read timestamp
*/
-#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_READER 1484
+#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_READER 1483
/*!
* transaction: transaction range of timestamps pinned by the oldest
* timestamp
*/
-#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST 1485
+#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST 1484
/*! transaction: transaction read timestamp of the oldest active reader */
-#define WT_STAT_CONN_TXN_TIMESTAMP_OLDEST_ACTIVE_READ 1486
+#define WT_STAT_CONN_TXN_TIMESTAMP_OLDEST_ACTIVE_READ 1485
/*! transaction: transaction rollback to stable currently running */
-#define WT_STAT_CONN_TXN_ROLLBACK_TO_STABLE_RUNNING 1487
+#define WT_STAT_CONN_TXN_ROLLBACK_TO_STABLE_RUNNING 1486
/*! transaction: transaction walk of concurrent sessions */
-#define WT_STAT_CONN_TXN_WALK_SESSIONS 1488
+#define WT_STAT_CONN_TXN_WALK_SESSIONS 1487
/*! transaction: transactions committed */
-#define WT_STAT_CONN_TXN_COMMIT 1489
+#define WT_STAT_CONN_TXN_COMMIT 1488
/*! transaction: transactions rolled back */
-#define WT_STAT_CONN_TXN_ROLLBACK 1490
+#define WT_STAT_CONN_TXN_ROLLBACK 1489
/*! transaction: update conflicts */
-#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1491
+#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1490
/*!
* @}
@@ -6617,241 +6622,231 @@ extern int wiredtiger_extension_terminate(WT_CONNECTION *connection);
*/
#define WT_STAT_DSRC_CURSOR_SKIP_HS_CUR_POSITION 2133
/*!
- * cursor: Total number of pages skipped without reading by cursor next
- * calls
- */
-#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_PAGE_COUNT 2134
-/*!
- * cursor: Total number of pages skipped without reading by cursor prev
- * calls
- */
-#define WT_STAT_DSRC_CURSOR_PREV_SKIP_PAGE_COUNT 2135
-/*!
* cursor: Total number of times a search near has exited due to prefix
* config
*/
-#define WT_STAT_DSRC_CURSOR_SEARCH_NEAR_PREFIX_FAST_PATHS 2136
+#define WT_STAT_DSRC_CURSOR_SEARCH_NEAR_PREFIX_FAST_PATHS 2134
/*! cursor: bulk loaded cursor insert calls */
-#define WT_STAT_DSRC_CURSOR_INSERT_BULK 2137
+#define WT_STAT_DSRC_CURSOR_INSERT_BULK 2135
/*! cursor: cache cursors reuse count */
-#define WT_STAT_DSRC_CURSOR_REOPEN 2138
+#define WT_STAT_DSRC_CURSOR_REOPEN 2136
/*! cursor: close calls that result in cache */
-#define WT_STAT_DSRC_CURSOR_CACHE 2139
+#define WT_STAT_DSRC_CURSOR_CACHE 2137
/*! cursor: create calls */
-#define WT_STAT_DSRC_CURSOR_CREATE 2140
+#define WT_STAT_DSRC_CURSOR_CREATE 2138
/*!
* cursor: cursor next calls that skip due to a globally visible history
* store tombstone
*/
-#define WT_STAT_DSRC_CURSOR_NEXT_HS_TOMBSTONE 2141
+#define WT_STAT_DSRC_CURSOR_NEXT_HS_TOMBSTONE 2139
/*!
* cursor: cursor next calls that skip greater than or equal to 100
* entries
*/
-#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_GE_100 2142
+#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_GE_100 2140
/*! cursor: cursor next calls that skip less than 100 entries */
-#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_LT_100 2143
+#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_LT_100 2141
/*!
* cursor: cursor prev calls that skip due to a globally visible history
* store tombstone
*/
-#define WT_STAT_DSRC_CURSOR_PREV_HS_TOMBSTONE 2144
+#define WT_STAT_DSRC_CURSOR_PREV_HS_TOMBSTONE 2142
/*!
* cursor: cursor prev calls that skip greater than or equal to 100
* entries
*/
-#define WT_STAT_DSRC_CURSOR_PREV_SKIP_GE_100 2145
+#define WT_STAT_DSRC_CURSOR_PREV_SKIP_GE_100 2143
/*! cursor: cursor prev calls that skip less than 100 entries */
-#define WT_STAT_DSRC_CURSOR_PREV_SKIP_LT_100 2146
+#define WT_STAT_DSRC_CURSOR_PREV_SKIP_LT_100 2144
/*! cursor: insert calls */
-#define WT_STAT_DSRC_CURSOR_INSERT 2147
+#define WT_STAT_DSRC_CURSOR_INSERT 2145
/*! cursor: insert key and value bytes */
-#define WT_STAT_DSRC_CURSOR_INSERT_BYTES 2148
+#define WT_STAT_DSRC_CURSOR_INSERT_BYTES 2146
/*! cursor: modify */
-#define WT_STAT_DSRC_CURSOR_MODIFY 2149
+#define WT_STAT_DSRC_CURSOR_MODIFY 2147
/*! cursor: modify key and value bytes affected */
-#define WT_STAT_DSRC_CURSOR_MODIFY_BYTES 2150
+#define WT_STAT_DSRC_CURSOR_MODIFY_BYTES 2148
/*! cursor: modify value bytes modified */
-#define WT_STAT_DSRC_CURSOR_MODIFY_BYTES_TOUCH 2151
+#define WT_STAT_DSRC_CURSOR_MODIFY_BYTES_TOUCH 2149
/*! cursor: next calls */
-#define WT_STAT_DSRC_CURSOR_NEXT 2152
+#define WT_STAT_DSRC_CURSOR_NEXT 2150
/*! cursor: open cursor count */
-#define WT_STAT_DSRC_CURSOR_OPEN_COUNT 2153
+#define WT_STAT_DSRC_CURSOR_OPEN_COUNT 2151
/*! cursor: operation restarted */
-#define WT_STAT_DSRC_CURSOR_RESTART 2154
+#define WT_STAT_DSRC_CURSOR_RESTART 2152
/*! cursor: prev calls */
-#define WT_STAT_DSRC_CURSOR_PREV 2155
+#define WT_STAT_DSRC_CURSOR_PREV 2153
/*! cursor: remove calls */
-#define WT_STAT_DSRC_CURSOR_REMOVE 2156
+#define WT_STAT_DSRC_CURSOR_REMOVE 2154
/*! cursor: remove key bytes removed */
-#define WT_STAT_DSRC_CURSOR_REMOVE_BYTES 2157
+#define WT_STAT_DSRC_CURSOR_REMOVE_BYTES 2155
/*! cursor: reserve calls */
-#define WT_STAT_DSRC_CURSOR_RESERVE 2158
+#define WT_STAT_DSRC_CURSOR_RESERVE 2156
/*! cursor: reset calls */
-#define WT_STAT_DSRC_CURSOR_RESET 2159
+#define WT_STAT_DSRC_CURSOR_RESET 2157
/*! cursor: search calls */
-#define WT_STAT_DSRC_CURSOR_SEARCH 2160
+#define WT_STAT_DSRC_CURSOR_SEARCH 2158
/*! cursor: search history store calls */
-#define WT_STAT_DSRC_CURSOR_SEARCH_HS 2161
+#define WT_STAT_DSRC_CURSOR_SEARCH_HS 2159
/*! cursor: search near calls */
-#define WT_STAT_DSRC_CURSOR_SEARCH_NEAR 2162
+#define WT_STAT_DSRC_CURSOR_SEARCH_NEAR 2160
/*! cursor: truncate calls */
-#define WT_STAT_DSRC_CURSOR_TRUNCATE 2163
+#define WT_STAT_DSRC_CURSOR_TRUNCATE 2161
/*! cursor: update calls */
-#define WT_STAT_DSRC_CURSOR_UPDATE 2164
+#define WT_STAT_DSRC_CURSOR_UPDATE 2162
/*! cursor: update key and value bytes */
-#define WT_STAT_DSRC_CURSOR_UPDATE_BYTES 2165
+#define WT_STAT_DSRC_CURSOR_UPDATE_BYTES 2163
/*! cursor: update value size change */
-#define WT_STAT_DSRC_CURSOR_UPDATE_BYTES_CHANGED 2166
+#define WT_STAT_DSRC_CURSOR_UPDATE_BYTES_CHANGED 2164
/*! reconciliation: approximate byte size of timestamps in pages written */
-#define WT_STAT_DSRC_REC_TIME_WINDOW_BYTES_TS 2167
+#define WT_STAT_DSRC_REC_TIME_WINDOW_BYTES_TS 2165
/*!
* reconciliation: approximate byte size of transaction IDs in pages
* written
*/
-#define WT_STAT_DSRC_REC_TIME_WINDOW_BYTES_TXN 2168
+#define WT_STAT_DSRC_REC_TIME_WINDOW_BYTES_TXN 2166
/*! reconciliation: dictionary matches */
-#define WT_STAT_DSRC_REC_DICTIONARY 2169
+#define WT_STAT_DSRC_REC_DICTIONARY 2167
/*! reconciliation: fast-path pages deleted */
-#define WT_STAT_DSRC_REC_PAGE_DELETE_FAST 2170
+#define WT_STAT_DSRC_REC_PAGE_DELETE_FAST 2168
/*!
* reconciliation: internal page key bytes discarded using suffix
* compression
*/
-#define WT_STAT_DSRC_REC_SUFFIX_COMPRESSION 2171
+#define WT_STAT_DSRC_REC_SUFFIX_COMPRESSION 2169
/*! reconciliation: internal page multi-block writes */
-#define WT_STAT_DSRC_REC_MULTIBLOCK_INTERNAL 2172
+#define WT_STAT_DSRC_REC_MULTIBLOCK_INTERNAL 2170
/*! reconciliation: internal-page overflow keys */
-#define WT_STAT_DSRC_REC_OVERFLOW_KEY_INTERNAL 2173
+#define WT_STAT_DSRC_REC_OVERFLOW_KEY_INTERNAL 2171
/*! reconciliation: leaf page key bytes discarded using prefix compression */
-#define WT_STAT_DSRC_REC_PREFIX_COMPRESSION 2174
+#define WT_STAT_DSRC_REC_PREFIX_COMPRESSION 2172
/*! reconciliation: leaf page multi-block writes */
-#define WT_STAT_DSRC_REC_MULTIBLOCK_LEAF 2175
+#define WT_STAT_DSRC_REC_MULTIBLOCK_LEAF 2173
/*! reconciliation: leaf-page overflow keys */
-#define WT_STAT_DSRC_REC_OVERFLOW_KEY_LEAF 2176
+#define WT_STAT_DSRC_REC_OVERFLOW_KEY_LEAF 2174
/*! reconciliation: maximum blocks required for a page */
-#define WT_STAT_DSRC_REC_MULTIBLOCK_MAX 2177
+#define WT_STAT_DSRC_REC_MULTIBLOCK_MAX 2175
/*! reconciliation: overflow values written */
-#define WT_STAT_DSRC_REC_OVERFLOW_VALUE 2178
+#define WT_STAT_DSRC_REC_OVERFLOW_VALUE 2176
/*! reconciliation: page checksum matches */
-#define WT_STAT_DSRC_REC_PAGE_MATCH 2179
+#define WT_STAT_DSRC_REC_PAGE_MATCH 2177
/*! reconciliation: page reconciliation calls */
-#define WT_STAT_DSRC_REC_PAGES 2180
+#define WT_STAT_DSRC_REC_PAGES 2178
/*! reconciliation: page reconciliation calls for eviction */
-#define WT_STAT_DSRC_REC_PAGES_EVICTION 2181
+#define WT_STAT_DSRC_REC_PAGES_EVICTION 2179
/*! reconciliation: pages deleted */
-#define WT_STAT_DSRC_REC_PAGE_DELETE 2182
+#define WT_STAT_DSRC_REC_PAGE_DELETE 2180
/*!
* reconciliation: pages written including an aggregated newest start
* durable timestamp
*/
-#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 2183
+#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 2181
/*!
* reconciliation: pages written including an aggregated newest stop
* durable timestamp
*/
-#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 2184
+#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 2182
/*!
* reconciliation: pages written including an aggregated newest stop
* timestamp
*/
-#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_TS 2185
+#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_TS 2183
/*!
* reconciliation: pages written including an aggregated newest stop
* transaction ID
*/
-#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_TXN 2186
+#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_TXN 2184
/*!
* reconciliation: pages written including an aggregated newest
* transaction ID
*/
-#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_TXN 2187
+#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_TXN 2185
/*!
* reconciliation: pages written including an aggregated oldest start
* timestamp
*/
-#define WT_STAT_DSRC_REC_TIME_AGGR_OLDEST_START_TS 2188
+#define WT_STAT_DSRC_REC_TIME_AGGR_OLDEST_START_TS 2186
/*! reconciliation: pages written including an aggregated prepare */
-#define WT_STAT_DSRC_REC_TIME_AGGR_PREPARED 2189
+#define WT_STAT_DSRC_REC_TIME_AGGR_PREPARED 2187
/*! reconciliation: pages written including at least one prepare */
-#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_PREPARED 2190
+#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_PREPARED 2188
/*!
* reconciliation: pages written including at least one start durable
* timestamp
*/
-#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 2191
+#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 2189
/*! reconciliation: pages written including at least one start timestamp */
-#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_START_TS 2192
+#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_START_TS 2190
/*!
* reconciliation: pages written including at least one start transaction
* ID
*/
-#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_START_TXN 2193
+#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_START_TXN 2191
/*!
* reconciliation: pages written including at least one stop durable
* timestamp
*/
-#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 2194
+#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 2192
/*! reconciliation: pages written including at least one stop timestamp */
-#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_STOP_TS 2195
+#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_STOP_TS 2193
/*!
* reconciliation: pages written including at least one stop transaction
* ID
*/
-#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_STOP_TXN 2196
+#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_STOP_TXN 2194
/*! reconciliation: records written including a prepare */
-#define WT_STAT_DSRC_REC_TIME_WINDOW_PREPARED 2197
+#define WT_STAT_DSRC_REC_TIME_WINDOW_PREPARED 2195
/*! reconciliation: records written including a start durable timestamp */
-#define WT_STAT_DSRC_REC_TIME_WINDOW_DURABLE_START_TS 2198
+#define WT_STAT_DSRC_REC_TIME_WINDOW_DURABLE_START_TS 2196
/*! reconciliation: records written including a start timestamp */
-#define WT_STAT_DSRC_REC_TIME_WINDOW_START_TS 2199
+#define WT_STAT_DSRC_REC_TIME_WINDOW_START_TS 2197
/*! reconciliation: records written including a start transaction ID */
-#define WT_STAT_DSRC_REC_TIME_WINDOW_START_TXN 2200
+#define WT_STAT_DSRC_REC_TIME_WINDOW_START_TXN 2198
/*! reconciliation: records written including a stop durable timestamp */
-#define WT_STAT_DSRC_REC_TIME_WINDOW_DURABLE_STOP_TS 2201
+#define WT_STAT_DSRC_REC_TIME_WINDOW_DURABLE_STOP_TS 2199
/*! reconciliation: records written including a stop timestamp */
-#define WT_STAT_DSRC_REC_TIME_WINDOW_STOP_TS 2202
+#define WT_STAT_DSRC_REC_TIME_WINDOW_STOP_TS 2200
/*! reconciliation: records written including a stop transaction ID */
-#define WT_STAT_DSRC_REC_TIME_WINDOW_STOP_TXN 2203
+#define WT_STAT_DSRC_REC_TIME_WINDOW_STOP_TXN 2201
/*! session: object compaction */
-#define WT_STAT_DSRC_SESSION_COMPACT 2204
+#define WT_STAT_DSRC_SESSION_COMPACT 2202
/*! session: tiered operations dequeued and processed */
-#define WT_STAT_DSRC_TIERED_WORK_UNITS_DEQUEUED 2205
+#define WT_STAT_DSRC_TIERED_WORK_UNITS_DEQUEUED 2203
/*! session: tiered operations scheduled */
-#define WT_STAT_DSRC_TIERED_WORK_UNITS_CREATED 2206
+#define WT_STAT_DSRC_TIERED_WORK_UNITS_CREATED 2204
/*! session: tiered storage local retention time (secs) */
-#define WT_STAT_DSRC_TIERED_RETENTION 2207
+#define WT_STAT_DSRC_TIERED_RETENTION 2205
/*! session: tiered storage object size */
-#define WT_STAT_DSRC_TIERED_OBJECT_SIZE 2208
+#define WT_STAT_DSRC_TIERED_OBJECT_SIZE 2206
/*! transaction: race to read prepared update retry */
-#define WT_STAT_DSRC_TXN_READ_RACE_PREPARE_UPDATE 2209
+#define WT_STAT_DSRC_TXN_READ_RACE_PREPARE_UPDATE 2207
/*!
* 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 2210
+#define WT_STAT_DSRC_TXN_RTS_HS_STOP_OLDER_THAN_NEWER_START 2208
/*! transaction: rollback to stable inconsistent checkpoint */
-#define WT_STAT_DSRC_TXN_RTS_INCONSISTENT_CKPT 2211
+#define WT_STAT_DSRC_TXN_RTS_INCONSISTENT_CKPT 2209
/*! transaction: rollback to stable keys removed */
-#define WT_STAT_DSRC_TXN_RTS_KEYS_REMOVED 2212
+#define WT_STAT_DSRC_TXN_RTS_KEYS_REMOVED 2210
/*! transaction: rollback to stable keys restored */
-#define WT_STAT_DSRC_TXN_RTS_KEYS_RESTORED 2213
+#define WT_STAT_DSRC_TXN_RTS_KEYS_RESTORED 2211
/*! transaction: rollback to stable restored tombstones from history store */
-#define WT_STAT_DSRC_TXN_RTS_HS_RESTORE_TOMBSTONES 2214
+#define WT_STAT_DSRC_TXN_RTS_HS_RESTORE_TOMBSTONES 2212
/*! transaction: rollback to stable restored updates from history store */
-#define WT_STAT_DSRC_TXN_RTS_HS_RESTORE_UPDATES 2215
+#define WT_STAT_DSRC_TXN_RTS_HS_RESTORE_UPDATES 2213
/*! transaction: rollback to stable skipping delete rle */
-#define WT_STAT_DSRC_TXN_RTS_DELETE_RLE_SKIPPED 2216
+#define WT_STAT_DSRC_TXN_RTS_DELETE_RLE_SKIPPED 2214
/*! transaction: rollback to stable skipping stable rle */
-#define WT_STAT_DSRC_TXN_RTS_STABLE_RLE_SKIPPED 2217
+#define WT_STAT_DSRC_TXN_RTS_STABLE_RLE_SKIPPED 2215
/*! transaction: rollback to stable sweeping history store keys */
-#define WT_STAT_DSRC_TXN_RTS_SWEEP_HS_KEYS 2218
+#define WT_STAT_DSRC_TXN_RTS_SWEEP_HS_KEYS 2216
/*! transaction: rollback to stable updates removed from history store */
-#define WT_STAT_DSRC_TXN_RTS_HS_REMOVED 2219
+#define WT_STAT_DSRC_TXN_RTS_HS_REMOVED 2217
/*! transaction: transaction checkpoints due to obsolete pages */
-#define WT_STAT_DSRC_TXN_CHECKPOINT_OBSOLETE_APPLIED 2220
+#define WT_STAT_DSRC_TXN_CHECKPOINT_OBSOLETE_APPLIED 2218
/*! transaction: update conflicts */
-#define WT_STAT_DSRC_TXN_UPDATE_CONFLICT 2221
+#define WT_STAT_DSRC_TXN_UPDATE_CONFLICT 2219
/*!
* @}
diff --git a/src/third_party/wiredtiger/src/log/log.c b/src/third_party/wiredtiger/src/log/log.c
index 6b136c6cc84..0222230a473 100644
--- a/src/third_party/wiredtiger/src/log/log.c
+++ b/src/third_party/wiredtiger/src/log/log.c
@@ -462,14 +462,13 @@ __wt_log_get_backup_files(
* log file will be removed from the list of files returned. New writes will not be included in
* the backup.
*/
- if (active_only)
- F_SET(log, WT_LOG_FORCE_NEWFILE);
+ F_SET(log, WT_LOG_FORCE_NEWFILE);
WT_RET(__wt_log_force_write(session, 1, NULL));
WT_RET(__log_get_files(session, WT_LOG_FILENAME, &files, &count));
for (max = 0, i = 0; i < count;) {
WT_ERR(__wt_log_extract_lognum(session, files[i], &id));
- if (active_only && (id < min_file || id > max_file)) {
+ if ((active_only && id < min_file) || id > max_file) {
/*
* Any files not being returned are individually freed and the array adjusted.
*/
diff --git a/src/third_party/wiredtiger/src/lsm/lsm_cursor.c b/src/third_party/wiredtiger/src/lsm/lsm_cursor.c
index 4c3aa2a3204..f1503d9bbf3 100644
--- a/src/third_party/wiredtiger/src/lsm/lsm_cursor.c
+++ b/src/third_party/wiredtiger/src/lsm/lsm_cursor.c
@@ -1685,6 +1685,7 @@ __wt_clsm_open(WT_SESSION_IMPL *session, const char *uri, WT_CURSOR *owner, cons
__clsm_remove, /* remove */
__clsm_reserve, /* reserve */
__wt_cursor_reconfigure, /* reconfigure */
+ __wt_cursor_notsup, /* largest_key */
__wt_cursor_notsup, /* cache */
__wt_cursor_reopen_notsup, /* reopen */
__wt_clsm_close); /* close */
diff --git a/src/third_party/wiredtiger/src/os_common/os_fhandle.c b/src/third_party/wiredtiger/src/os_common/os_fhandle.c
index f39fbd599e7..18bdb756176 100644
--- a/src/third_party/wiredtiger/src/os_common/os_fhandle.c
+++ b/src/third_party/wiredtiger/src/os_common/os_fhandle.c
@@ -41,7 +41,6 @@ __fhandle_method_finalize(WT_SESSION_IMPL *session, WT_FILE_HANDLE *handle, bool
return (0);
}
-#ifdef HAVE_DIAGNOSTIC
/*
* __wt_handle_is_open --
* Return if there's an open handle matching a name.
@@ -72,7 +71,6 @@ __wt_handle_is_open(WT_SESSION_IMPL *session, const char *name)
return (found);
}
-#endif
/*
* __handle_search --
@@ -288,9 +286,8 @@ __handle_close(WT_SESSION_IMPL *session, WT_FH *fh, bool locked)
conn = S2C(session);
- if (fh->ref != 0) {
+ if (fh->ref != 0)
__wt_errx(session, "Closing a file handle with open references: %s", fh->name);
- }
/* Remove from the list. */
bucket = fh->name_hash & (conn->hash_size - 1);
diff --git a/src/third_party/wiredtiger/src/os_posix/os_fs.c b/src/third_party/wiredtiger/src/os_posix/os_fs.c
index 1ae6259e5d8..3898eb74343 100644
--- a/src/third_party/wiredtiger/src/os_posix/os_fs.c
+++ b/src/third_party/wiredtiger/src/os_posix/os_fs.c
@@ -797,12 +797,16 @@ __posix_open_file(WT_FILE_SYSTEM *file_system, WT_SESSION *wt_session, const cha
/* Create/Open the file. */
WT_SYSCALL_RETRY(((pfh->fd = open(name, f, mode)) == -1 ? -1 : 0), ret);
- if (ret != 0)
+ if (ret != 0) {
+ /* If we don't want error messages, just return the error value. */
+ if (F_ISSET(session, WT_SESSION_QUIET_TIERED) && ret == ENOENT)
+ goto err;
WT_ERR_MSG(session, ret,
pfh->direct_io ? "%s: handle-open: open: failed with direct I/O configured, some "
"filesystem types do not support direct I/O" :
"%s: handle-open: open",
name);
+ }
#ifdef __linux__
/*
diff --git a/src/third_party/wiredtiger/src/session/session_api.c b/src/third_party/wiredtiger/src/session/session_api.c
index 5a4320b493e..8353a6e9d5a 100644
--- a/src/third_party/wiredtiger/src/session/session_api.c
+++ b/src/third_party/wiredtiger/src/session/session_api.c
@@ -672,22 +672,18 @@ err:
}
/*
- * __wt_session_blocking_checkpoint --
+ * __session_blocking_checkpoint --
* Perform a checkpoint or wait if it is already running to resolve an EBUSY error.
*/
-int
-__wt_session_blocking_checkpoint(WT_SESSION_IMPL *session, bool force, uint64_t seconds)
+static int
+__session_blocking_checkpoint(WT_SESSION_IMPL *session)
{
WT_DECL_RET;
WT_TXN_GLOBAL *txn_global;
uint64_t txn_gen;
- const char *cfg[3] = {NULL, NULL, NULL};
+ const char *checkpoint_cfg[] = {WT_CONFIG_BASE(session, WT_SESSION_checkpoint), NULL};
- cfg[0] = WT_CONFIG_BASE(session, WT_SESSION_checkpoint);
- if (force)
- cfg[1] = "force=1";
-
- if ((ret = __wt_txn_checkpoint(session, cfg, false)) == 0)
+ if ((ret = __wt_txn_checkpoint(session, checkpoint_cfg, false)) == 0)
return (0);
WT_RET_BUSY_OK(ret);
@@ -704,13 +700,6 @@ __wt_session_blocking_checkpoint(WT_SESSION_IMPL *session, bool force, uint64_t
*/
if (!txn_global->checkpoint_running || txn_gen != __wt_gen(session, WT_GEN_CHECKPOINT))
break;
-
- /* If there's a timeout, give up. */
- if (seconds == 0)
- continue;
- if (seconds <= WT_CKPT_WAIT)
- return (EBUSY);
- seconds -= WT_CKPT_WAIT;
}
return (0);
@@ -735,7 +724,7 @@ __session_alter(WT_SESSION *wt_session, const char *uri, const char *config)
*/
ret = __session_alter_internal(session, uri, config);
if (ret == EBUSY) {
- WT_RET(__wt_session_blocking_checkpoint(session, false, 0));
+ WT_RET(__session_blocking_checkpoint(session));
WT_STAT_CONN_INCR(session, session_table_alter_trigger_checkpoint);
ret = __session_alter_internal(session, uri, config);
}
diff --git a/src/third_party/wiredtiger/src/session/session_compact.c b/src/third_party/wiredtiger/src/session/session_compact.c
index 1f83d6e4c83..9e0ac6ce549 100644
--- a/src/third_party/wiredtiger/src/session/session_compact.c
+++ b/src/third_party/wiredtiger/src/session/session_compact.c
@@ -193,6 +193,26 @@ __wt_session_compact_check_timeout(WT_SESSION_IMPL *session)
}
/*
+ * __compact_checkpoint --
+ * This function does wait and force checkpoint.
+ */
+static int
+__compact_checkpoint(WT_SESSION_IMPL *session)
+{
+ /*
+ * Force compaction checkpoints: we don't want to skip it because the work we need to have done
+ * is done in the underlying block manager.
+ */
+ const char *checkpoint_cfg[] = {
+ WT_CONFIG_BASE(session, WT_SESSION_checkpoint), "force=1", NULL};
+
+ /* Checkpoints take a lot of time, check if we've run out. */
+ WT_RET(__wt_session_compact_check_timeout(session));
+
+ return (__wt_txn_checkpoint(session, checkpoint_cfg, true));
+}
+
+/*
* __compact_worker --
* Function to alternate between checkpoints and compaction calls.
*/
@@ -213,7 +233,7 @@ __compact_worker(WT_SESSION_IMPL *session)
/*
* Perform an initial checkpoint (see this file's leading comment for details).
*/
- WT_ERR(__wt_session_blocking_checkpoint(session, true, session->compact->max_time));
+ WT_ERR(__compact_checkpoint(session));
/*
* We compact 10% of a file on each pass (but the overall size of the file is decreasing each
@@ -263,8 +283,8 @@ __compact_worker(WT_SESSION_IMPL *session)
/*
* Perform two checkpoints (see this file's leading comment for details).
*/
- WT_ERR(__wt_session_blocking_checkpoint(session, true, session->compact->max_time));
- WT_ERR(__wt_session_blocking_checkpoint(session, true, session->compact->max_time));
+ WT_ERR(__compact_checkpoint(session));
+ WT_ERR(__compact_checkpoint(session));
}
err:
diff --git a/src/third_party/wiredtiger/src/session/session_dhandle.c b/src/third_party/wiredtiger/src/session/session_dhandle.c
index 8172fc8841d..685bc6e0c46 100644
--- a/src/third_party/wiredtiger/src/session/session_dhandle.c
+++ b/src/third_party/wiredtiger/src/session/session_dhandle.c
@@ -362,7 +362,6 @@ __session_dhandle_sweep(WT_SESSION_IMPL *session)
WT_DATA_HANDLE *dhandle;
WT_DATA_HANDLE_CACHE *dhandle_cache, *dhandle_cache_tmp;
uint64_t now;
- bool empty_btree;
conn = S2C(session);
@@ -379,15 +378,16 @@ __session_dhandle_sweep(WT_SESSION_IMPL *session)
TAILQ_FOREACH_SAFE(dhandle_cache, &session->dhandles, q, dhandle_cache_tmp)
{
dhandle = dhandle_cache->dhandle;
- empty_btree = false;
- if (WT_DHANDLE_BTREE(dhandle))
- WT_WITH_DHANDLE(
- session, dhandle, empty_btree = (__wt_btree_bytes_evictable(session) == 0));
+ /*
+ * Only discard handles that are dead or dying and, in the case of btrees, have been
+ * evicted. These checks are not done with any locks in place, other than the data handle
+ * reference, so we cannot peer past what is in the dhandle directly.
+ */
if (dhandle != session->dhandle && dhandle->session_inuse == 0 &&
(WT_DHANDLE_INACTIVE(dhandle) ||
- (dhandle->timeofdeath != 0 && now - dhandle->timeofdeath > conn->sweep_idle_time) ||
- empty_btree)) {
+ (dhandle->timeofdeath != 0 && now - dhandle->timeofdeath > conn->sweep_idle_time)) &&
+ (!WT_DHANDLE_BTREE(dhandle) || F_ISSET(dhandle, WT_DHANDLE_EVICTED))) {
WT_STAT_CONN_INCR(session, dh_session_handles);
WT_ASSERT(session, !WT_IS_METADATA(dhandle));
__session_discard_dhandle(session, dhandle_cache);
diff --git a/src/third_party/wiredtiger/src/support/stat.c b/src/third_party/wiredtiger/src/support/stat.c
index 0376a34f998..f5ae97c8cea 100644
--- a/src/third_party/wiredtiger/src/support/stat.c
+++ b/src/third_party/wiredtiger/src/support/stat.c
@@ -146,8 +146,6 @@ static const char *const __stats_dsrc_desc[] = {
"cursor: Total number of entries skipped by cursor next calls",
"cursor: Total number of entries skipped by cursor prev calls",
"cursor: Total number of entries skipped to position the history store cursor",
- "cursor: Total number of pages skipped without reading by cursor next calls",
- "cursor: Total number of pages skipped without reading by cursor prev calls",
"cursor: Total number of times a search near has exited due to prefix config",
"cursor: bulk loaded cursor insert calls",
"cursor: cache cursors reuse count",
@@ -409,8 +407,6 @@ __wt_stat_dsrc_clear_single(WT_DSRC_STATS *stats)
stats->cursor_next_skip_total = 0;
stats->cursor_prev_skip_total = 0;
stats->cursor_skip_hs_cur_position = 0;
- stats->cursor_next_skip_page_count = 0;
- stats->cursor_prev_skip_page_count = 0;
stats->cursor_search_near_prefix_fast_paths = 0;
stats->cursor_insert_bulk = 0;
stats->cursor_reopen = 0;
@@ -661,8 +657,6 @@ __wt_stat_dsrc_aggregate_single(WT_DSRC_STATS *from, WT_DSRC_STATS *to)
to->cursor_next_skip_total += from->cursor_next_skip_total;
to->cursor_prev_skip_total += from->cursor_prev_skip_total;
to->cursor_skip_hs_cur_position += from->cursor_skip_hs_cur_position;
- to->cursor_next_skip_page_count += from->cursor_next_skip_page_count;
- to->cursor_prev_skip_page_count += from->cursor_prev_skip_page_count;
to->cursor_search_near_prefix_fast_paths += from->cursor_search_near_prefix_fast_paths;
to->cursor_insert_bulk += from->cursor_insert_bulk;
to->cursor_reopen += from->cursor_reopen;
@@ -916,8 +910,6 @@ __wt_stat_dsrc_aggregate(WT_DSRC_STATS **from, WT_DSRC_STATS *to)
to->cursor_next_skip_total += WT_STAT_READ(from, cursor_next_skip_total);
to->cursor_prev_skip_total += WT_STAT_READ(from, cursor_prev_skip_total);
to->cursor_skip_hs_cur_position += WT_STAT_READ(from, cursor_skip_hs_cur_position);
- to->cursor_next_skip_page_count += WT_STAT_READ(from, cursor_next_skip_page_count);
- to->cursor_prev_skip_page_count += WT_STAT_READ(from, cursor_prev_skip_page_count);
to->cursor_search_near_prefix_fast_paths +=
WT_STAT_READ(from, cursor_search_near_prefix_fast_paths);
to->cursor_insert_bulk += WT_STAT_READ(from, cursor_insert_bulk);
@@ -1222,8 +1214,6 @@ static const char *const __stats_connection_desc[] = {
"cursor: Total number of entries skipped by cursor next calls",
"cursor: Total number of entries skipped by cursor prev calls",
"cursor: Total number of entries skipped to position the history store cursor",
- "cursor: Total number of pages skipped without reading by cursor next calls",
- "cursor: Total number of pages skipped without reading by cursor prev calls",
"cursor: Total number of times a search near has exited due to prefix config",
"cursor: cached cursor count",
"cursor: cursor bulk loaded cursor insert calls",
@@ -1403,8 +1393,9 @@ static const char *const __stats_connection_desc[] = {
"reconciliation: records written including a stop transaction ID",
"reconciliation: split bytes currently awaiting free",
"reconciliation: split objects currently awaiting free",
- "session: flush state races",
+ "session: attempts to remove a local object and the object is in use",
"session: flush_tier operation calls",
+ "session: local objects removed",
"session: open session count",
"session: session query timestamp calls",
"session: table alter failed calls",
@@ -1758,8 +1749,6 @@ __wt_stat_connection_clear_single(WT_CONNECTION_STATS *stats)
stats->cursor_next_skip_total = 0;
stats->cursor_prev_skip_total = 0;
stats->cursor_skip_hs_cur_position = 0;
- stats->cursor_next_skip_page_count = 0;
- stats->cursor_prev_skip_page_count = 0;
stats->cursor_search_near_prefix_fast_paths = 0;
/* not clearing cursor_cached_count */
stats->cursor_insert_bulk = 0;
@@ -1938,8 +1927,9 @@ __wt_stat_connection_clear_single(WT_CONNECTION_STATS *stats)
stats->rec_time_window_stop_txn = 0;
/* not clearing rec_split_stashed_bytes */
/* not clearing rec_split_stashed_objects */
- stats->flush_state_races = 0;
+ stats->local_objects_inuse = 0;
stats->flush_tier = 0;
+ stats->local_objects_removed = 0;
/* not clearing session_open */
stats->session_query_ts = 0;
/* not clearing session_table_alter_fail */
@@ -2296,8 +2286,6 @@ __wt_stat_connection_aggregate(WT_CONNECTION_STATS **from, WT_CONNECTION_STATS *
to->cursor_next_skip_total += WT_STAT_READ(from, cursor_next_skip_total);
to->cursor_prev_skip_total += WT_STAT_READ(from, cursor_prev_skip_total);
to->cursor_skip_hs_cur_position += WT_STAT_READ(from, cursor_skip_hs_cur_position);
- to->cursor_next_skip_page_count += WT_STAT_READ(from, cursor_next_skip_page_count);
- to->cursor_prev_skip_page_count += WT_STAT_READ(from, cursor_prev_skip_page_count);
to->cursor_search_near_prefix_fast_paths +=
WT_STAT_READ(from, cursor_search_near_prefix_fast_paths);
to->cursor_cached_count += WT_STAT_READ(from, cursor_cached_count);
@@ -2485,8 +2473,9 @@ __wt_stat_connection_aggregate(WT_CONNECTION_STATS **from, WT_CONNECTION_STATS *
to->rec_time_window_stop_txn += WT_STAT_READ(from, rec_time_window_stop_txn);
to->rec_split_stashed_bytes += WT_STAT_READ(from, rec_split_stashed_bytes);
to->rec_split_stashed_objects += WT_STAT_READ(from, rec_split_stashed_objects);
- to->flush_state_races += WT_STAT_READ(from, flush_state_races);
+ to->local_objects_inuse += WT_STAT_READ(from, local_objects_inuse);
to->flush_tier += WT_STAT_READ(from, flush_tier);
+ to->local_objects_removed += WT_STAT_READ(from, local_objects_removed);
to->session_open += WT_STAT_READ(from, session_open);
to->session_query_ts += WT_STAT_READ(from, session_query_ts);
to->session_table_alter_fail += WT_STAT_READ(from, session_table_alter_fail);
diff --git a/src/third_party/wiredtiger/src/support/thread_group.c b/src/third_party/wiredtiger/src/support/thread_group.c
index 6bac6d5450d..0f3e3084b54 100644
--- a/src/third_party/wiredtiger/src/support/thread_group.c
+++ b/src/third_party/wiredtiger/src/support/thread_group.c
@@ -42,14 +42,15 @@ err:
WT_IGNORE_RET(__wt_panic(session, ret, "Unrecoverable utility thread error"));
/*
- * The three cases when threads are expected to stop are:
+ * The cases when threads are expected to stop are:
* 1. When recovery is done.
* 2. When the connection is closing.
* 3. When a shutdown has been requested via clearing the run flag.
+ * 4. When an error has occurred and the connection panic flag is set.
*/
WT_ASSERT(session,
!F_ISSET(thread, WT_THREAD_RUN) ||
- F_ISSET(S2C(session), WT_CONN_CLOSING | WT_CONN_RECOVERING));
+ F_ISSET(S2C(session), WT_CONN_CLOSING | WT_CONN_PANIC | WT_CONN_RECOVERING));
return (WT_THREAD_RET_VALUE);
}
diff --git a/src/third_party/wiredtiger/src/tiered/tiered_handle.c b/src/third_party/wiredtiger/src/tiered/tiered_handle.c
index 5cfd583b1c9..5be43f315c6 100644
--- a/src/third_party/wiredtiger/src/tiered/tiered_handle.c
+++ b/src/third_party/wiredtiger/src/tiered/tiered_handle.c
@@ -441,9 +441,7 @@ __wt_tiered_switch(WT_SESSION_IMPL *session, const char *config)
/*
* __wt_tiered_name --
- * Given a dhandle structure and object number generate the URI name of the given type. XXX
- * Currently this is only used in this file but I anticipate it may be of use outside. If not,
- * make this static and tiered_name instead.
+ * Given a dhandle structure and object number generate the URI name of the given type.
*/
int
__wt_tiered_name(
@@ -567,9 +565,7 @@ __tiered_open(WT_SESSION_IMPL *session, const char *cfg[])
/* Temp code to keep s_all happy. */
FLD_SET(unused, WT_TIERED_OBJ_LOCAL | WT_TIERED_TREE_UNUSED);
FLD_SET(unused, WT_TIERED_WORK_FORCE | WT_TIERED_WORK_FREE);
- WT_ERR(__wt_tiered_put_drop_local(session, tiered, tiered->current_id));
WT_ERR(__wt_tiered_put_drop_shared(session, tiered, tiered->current_id));
- __wt_tiered_get_drop_local(session, 0, &entry);
__wt_tiered_get_drop_shared(session, &entry);
}
#endif
diff --git a/src/third_party/wiredtiger/src/tiered/tiered_opener.c b/src/third_party/wiredtiger/src/tiered/tiered_opener.c
index 5ca027510fc..b6f3df90fa7 100644
--- a/src/third_party/wiredtiger/src/tiered/tiered_opener.c
+++ b/src/third_party/wiredtiger/src/tiered/tiered_opener.c
@@ -20,44 +20,44 @@ __tiered_opener_open(WT_BLOCK_FILE_OPENER *opener, WT_SESSION_IMPL *session, uin
WT_DECL_RET;
WT_TIERED *tiered;
const char *object_name, *object_uri;
+ bool local_only;
tiered = opener->cookie;
object_uri = NULL;
+ local_only = false;
WT_ASSERT(session,
(object_id > 0 && object_id <= tiered->current_id) || object_id == WT_TIERED_CURRENT_ID);
/*
- * FIXME-WT-7590 we will need some kind of locking while we're looking at the tiered structure.
- * This can be called at any time, because we are opening the objects lazily.
+ * First look for the local file. This will be the fastest access and we retain recent objects
+ * in the local database for a while.
*/
if (object_id == tiered->current_id || object_id == WT_TIERED_CURRENT_ID) {
bstorage = NULL;
object_name = tiered->tiers[WT_TIERED_INDEX_LOCAL].name;
- if (!WT_PREFIX_SKIP(object_name, "file:"))
- WT_RET_MSG(session, EINVAL, "expected a 'file:' URI");
- WT_ERR(__wt_open(session, object_name, type, flags, fhp));
+ WT_PREFIX_SKIP_REQUIRED(session, object_name, "file:");
+ local_only = true;
} else {
WT_ERR(
__wt_tiered_name(session, &tiered->iface, object_id, WT_TIERED_NAME_OBJECT, &object_uri));
object_name = object_uri;
WT_PREFIX_SKIP_REQUIRED(session, object_name, "object:");
+ LF_SET(WT_FS_OPEN_READONLY);
+ WT_ASSERT(session, !FLD_ISSET(flags, WT_FS_OPEN_CREATE));
+ F_SET(session, WT_SESSION_QUIET_TIERED);
+ }
+ ret = __wt_open(session, object_name, type, flags, fhp);
+ F_CLR(session, WT_SESSION_QUIET_TIERED);
+
+ /*
+ * FIXME-WT-7590 we will need some kind of locking while we're looking at the tiered structure.
+ * This can be called at any time, because we are opening the objects lazily.
+ */
+ if (!local_only && ret != 0) {
bstorage = tiered->bstorage;
- flags |= WT_FS_OPEN_READONLY;
+ LF_SET(WT_FS_OPEN_READONLY);
WT_WITH_BUCKET_STORAGE(
bstorage, session, { ret = __wt_open(session, object_name, type, flags, fhp); });
- if (ret == ENOENT) {
- /*
- * There is a window where the object may not be copied yet to the bucket. If it isn't
- * found try the local system. If it isn't found there then try the bucket one more
- * time.
- */
- ret = __wt_open(session, object_name, type, flags, fhp);
- __wt_errx(session, "OPENER: local %s ret %d", object_name, ret);
- if (ret == ENOENT)
- WT_WITH_BUCKET_STORAGE(
- bstorage, session, { ret = __wt_open(session, object_name, type, flags, fhp); });
- WT_ERR(ret);
- }
}
err:
__wt_free(session, object_uri);
diff --git a/src/third_party/wiredtiger/src/tiered/tiered_work.c b/src/third_party/wiredtiger/src/tiered/tiered_work.c
index b3fd1b7f9b5..efc80ea86bd 100644
--- a/src/third_party/wiredtiger/src/tiered/tiered_work.c
+++ b/src/third_party/wiredtiger/src/tiered/tiered_work.c
@@ -9,6 +9,24 @@
#include "wt_internal.h"
/*
+ * __tiered_flush_state --
+ * Account for flush work units so threads can know when shared storage flushing is complete.
+ */
+static void
+__tiered_flush_state(WT_SESSION_IMPL *session, uint32_t type, bool incr)
+{
+ WT_CONNECTION_IMPL *conn;
+
+ if (type != WT_TIERED_WORK_FLUSH)
+ return;
+ conn = S2C(session);
+ if (incr)
+ (void)__wt_atomic_addv32(&conn->flush_state, 1);
+ else
+ (void)__wt_atomic_subv32(&conn->flush_state, 1);
+}
+
+/*
* __wt_tiered_work_free --
* Free a work unit and account for it in the flush state.
*/
@@ -16,18 +34,9 @@ void
__wt_tiered_work_free(WT_SESSION_IMPL *session, WT_TIERED_WORK_UNIT *entry)
{
WT_CONNECTION_IMPL *conn;
- uint32_t new_state, old_state;
conn = S2C(session);
- for (;;) {
- WT_BARRIER();
- old_state = conn->flush_state;
- new_state = old_state - 1;
- if (__wt_atomic_casv32(&conn->flush_state, old_state, new_state))
- break;
- WT_STAT_CONN_INCR(session, flush_state_races);
- __wt_yield();
- }
+ __tiered_flush_state(session, entry->type, false);
/* If all work is done signal any waiting thread waiting for sync. */
if (WT_FLUSH_STATE_DONE(conn->flush_state))
__wt_cond_signal(session, conn->flush_cond);
@@ -42,23 +51,13 @@ void
__wt_tiered_push_work(WT_SESSION_IMPL *session, WT_TIERED_WORK_UNIT *entry)
{
WT_CONNECTION_IMPL *conn;
- uint32_t new_state, old_state;
conn = S2C(session);
-
__wt_spin_lock(session, &conn->tiered_lock);
TAILQ_INSERT_TAIL(&conn->tieredqh, entry, q);
WT_STAT_CONN_INCR(session, tiered_work_units_created);
__wt_spin_unlock(session, &conn->tiered_lock);
- for (;;) {
- WT_BARRIER();
- old_state = conn->flush_state;
- new_state = old_state + 1;
- if (__wt_atomic_casv32(&conn->flush_state, old_state, new_state))
- break;
- WT_STAT_CONN_INCR(session, flush_state_races);
- __wt_yield();
- }
+ __tiered_flush_state(session, entry->type, true);
__wt_cond_signal(session, conn->tiered_cond);
return;
}
@@ -87,10 +86,10 @@ __wt_tiered_pop_work(
if (FLD_ISSET(type, entry->type) && (maxval == 0 || entry->op_val < maxval)) {
TAILQ_REMOVE(&conn->tieredqh, entry, q);
WT_STAT_CONN_INCR(session, tiered_work_units_dequeued);
+ *entryp = entry;
break;
}
}
- *entryp = entry;
__wt_spin_unlock(session, &conn->tiered_lock);
return;
}
diff --git a/src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c b/src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c
index 04df57cf66f..6aee858e94b 100644
--- a/src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c
+++ b/src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c
@@ -155,17 +155,19 @@ __rollback_abort_update(WT_SESSION_IMPL *session, WT_ITEM *key, WT_UPDATE *first
/*
* __rollback_abort_insert_list --
- * Apply the update abort check to each entry in an insert skip list.
+ * Apply the update abort check to each entry in an insert skip list. Return how many entries
+ * had stable updates.
*/
static int
__rollback_abort_insert_list(WT_SESSION_IMPL *session, WT_PAGE *page, WT_INSERT_HEAD *head,
- wt_timestamp_t rollback_timestamp, bool *stable_update_found)
+ wt_timestamp_t rollback_timestamp, uint32_t *stable_updates_count)
{
WT_DECL_ITEM(key);
WT_DECL_RET;
WT_INSERT *ins;
uint64_t recno;
uint8_t *memp;
+ bool stable_update_found;
WT_ERR(
__wt_scr_alloc(session, page->type == WT_PAGE_ROW_LEAF ? 0 : WT_INTPACK64_MAXSIZE, &key));
@@ -182,7 +184,9 @@ __rollback_abort_insert_list(WT_SESSION_IMPL *session, WT_PAGE *page, WT_INSERT_
key->size = WT_PTRDIFF(memp, key->data);
}
WT_ERR(__rollback_abort_update(
- session, key, ins->upd, rollback_timestamp, stable_update_found));
+ session, key, ins->upd, rollback_timestamp, &stable_update_found));
+ if (stable_update_found && stable_updates_count != NULL)
+ (*stable_updates_count)++;
}
err:
@@ -191,6 +195,19 @@ err:
}
/*
+ * __rollback_has_stable_update --
+ * Check if an update chain has a stable update on it. Assume the update chain has already been
+ * processed so all we need to do is look for a valid, non-aborted entry.
+ */
+static bool
+__rollback_has_stable_update(WT_UPDATE *upd)
+{
+ while (upd != NULL && (upd->type == WT_UPDATE_INVALID || upd->txnid == WT_TXN_ABORTED))
+ upd = upd->next;
+ return upd != NULL;
+}
+
+/*
* __rollback_col_modify --
* Add the provided update to the head of the update list.
*/
@@ -225,57 +242,27 @@ err:
* Add the provided update to the head of the update list.
*/
static inline int
-__rollback_row_modify(WT_SESSION_IMPL *session, WT_PAGE *page, WT_ROW *rip, WT_UPDATE *upd)
+__rollback_row_modify(WT_SESSION_IMPL *session, WT_REF *ref, WT_UPDATE *upd, WT_ITEM *key)
{
+ WT_CURSOR_BTREE cbt;
WT_DECL_RET;
- WT_PAGE_MODIFY *mod;
- WT_UPDATE *last_upd, *old_upd, **upd_entry;
- size_t upd_size;
-
- last_upd = NULL;
- /* If we don't yet have a modify structure, we'll need one. */
- WT_RET(__wt_page_modify_init(session, page));
- mod = page->modify;
-
- /* Allocate an update array as necessary. */
- WT_PAGE_ALLOC_AND_SWAP(session, page, mod->mod_row_update, upd_entry, page->entries);
-
- /* Set the WT_UPDATE array reference. */
- upd_entry = &mod->mod_row_update[WT_ROW_SLOT(page, rip)];
- upd_size = __wt_update_list_memsize(upd);
- /* If there are existing updates, append them after the new updates. */
- for (last_upd = upd; last_upd->next != NULL; last_upd = last_upd->next)
- ;
- last_upd->next = *upd_entry;
-
- /*
- * We can either put a tombstone plus an update or a single update on the update chain.
- *
- * Set the "old" entry to the second update in the list so that the serialization function
- * succeeds in swapping the first update into place.
- */
- if (upd->next != NULL)
- *upd_entry = upd->next;
- old_upd = *upd_entry;
+ __wt_btcur_init(session, &cbt);
+ __wt_btcur_open(&cbt);
- /*
- * Point the new WT_UPDATE item to the next element in the list. The serialization function acts
- * as our memory barrier to flush this write.
- */
- upd->next = old_upd;
+ /* Search the page. */
+ WT_ERR(__wt_row_search(&cbt, key, true, ref, true, NULL));
- /*
- * Serialize the update. Rollback to stable doesn't need to check the visibility of the on page
- * value to detect conflict.
- */
- WT_ERR(__wt_update_serial(session, NULL, page, upd_entry, &upd, upd_size, true));
+ /* Apply the modification. */
+#ifdef HAVE_DIAGNOSTIC
+ WT_ERR(__wt_row_modify(&cbt, key, NULL, upd, WT_UPDATE_INVALID, true, false));
+#else
+ WT_ERR(__wt_row_modify(&cbt, key, NULL, upd, WT_UPDATE_INVALID, true));
+#endif
- if (0) {
err:
- if (last_upd != NULL)
- last_upd->next = NULL;
- }
+ /* Free any resources that may have been cached in the cursor. */
+ WT_TRET(__wt_btcur_close(&cbt, true));
return (ret);
}
@@ -606,7 +593,7 @@ __rollback_ondisk_fixup_key(WT_SESSION_IMPL *session, WT_REF *ref, WT_ROW *rip,
}
if (rip != NULL)
- WT_ERR(__rollback_row_modify(session, page, rip, upd));
+ WT_ERR(__rollback_row_modify(session, ref, upd, key));
else
WT_ERR(__rollback_col_modify(session, ref, upd, recno));
@@ -644,6 +631,7 @@ __rollback_abort_ondisk_kv(WT_SESSION_IMPL *session, WT_REF *ref, WT_ROW *rip, u
WT_ITEM *row_key, WT_CELL_UNPACK_KV *vpack, wt_timestamp_t rollback_timestamp,
bool *is_ondisk_stable)
{
+ WT_DECL_ITEM(key);
WT_DECL_ITEM(tmp);
WT_DECL_RET;
WT_PAGE *page;
@@ -766,14 +754,24 @@ __rollback_abort_ondisk_kv(WT_SESSION_IMPL *session, WT_REF *ref, WT_ROW *rip, u
return (0);
}
- if (rip != NULL)
- WT_ERR(__rollback_row_modify(session, page, rip, upd));
- else
+ if (rip != NULL) {
+ if (row_key != NULL)
+ key = row_key;
+ else {
+ /* Unpack a row key. */
+ WT_ERR(__wt_scr_alloc(session, 0, &key));
+ WT_ERR(__wt_row_leaf_key(session, page, rip, key, false));
+ }
+ WT_ERR(__rollback_row_modify(session, ref, upd, key));
+ } else
WT_ERR(__rollback_col_modify(session, ref, upd, recno));
- return (0);
+ if (0) {
err:
- __wt_free(session, upd);
+ __wt_free(session, upd);
+ }
+ if (rip != NULL && row_key == NULL)
+ __wt_scr_free(session, &key);
return (ret);
}
@@ -788,11 +786,12 @@ __rollback_abort_col_var(WT_SESSION_IMPL *session, WT_REF *ref, wt_timestamp_t r
WT_CELL *kcell;
WT_CELL_UNPACK_KV unpack;
WT_COL *cip;
- WT_INSERT_HEAD *ins;
+ WT_INSERT *ins;
+ WT_INSERT_HEAD *inshead;
WT_PAGE *page;
- uint64_t recno, rle;
- uint32_t i, j;
- bool is_ondisk_stable, stable_update_found;
+ uint64_t ins_recno, recno, rle;
+ uint32_t i, j, stable_updates_count;
+ bool is_ondisk_stable;
page = ref->page;
/*
@@ -805,11 +804,11 @@ __rollback_abort_col_var(WT_SESSION_IMPL *session, WT_REF *ref, wt_timestamp_t r
/* Review the changes to the original on-page data items. */
WT_COL_FOREACH (page, cip, i) {
- stable_update_found = false;
+ stable_updates_count = 0;
- if ((ins = WT_COL_UPDATE(page, cip)) != NULL)
+ if ((inshead = WT_COL_UPDATE(page, cip)) != NULL)
WT_RET(__rollback_abort_insert_list(
- session, page, ins, rollback_timestamp, &stable_update_found));
+ session, page, inshead, rollback_timestamp, &stable_updates_count));
if (page->dsk != NULL) {
/* Unpack the cell. We need its RLE count whether or not we're going to iterate it. */
@@ -818,44 +817,76 @@ __rollback_abort_col_var(WT_SESSION_IMPL *session, WT_REF *ref, wt_timestamp_t r
rle = __wt_cell_rle(&unpack);
/*
- * If we found a stable update on the insert list, this key needs no further attention.
- * Any other keys in this cell with stable updates also do not require attention. But
- * beyond that, the on-disk value must be older than the update we found. That means it
- * too is stable(*), so any keys in the cell that _don't_ have stable updates on the
- * update list don't need further attention either. (And any unstable updates were just
- * handled above.) Thus we can skip iterating over the cell.
+ * Each key whose on-disk value is not stable and has no stable update on the update
+ * list must be processed downstream.
+ *
+ * If we can determine that the cell's on-disk value is stable, we can skip iterating
+ * over the cell; likewise, if we can determine that every key in the cell has a stable
+ * update on the update list, we can skip the iteration. Otherwise we have to try each
+ * key.
+ *
+ * If the on-disk cell is deleted, it is stable, because cells only appear as deleted
+ * when there is no older value that might need to be restored.
*
- * Furthermore, if the cell is deleted it must be
- * itself stable, because cells only appear as deleted if there is no older value that
- * might need to be restored. We can skip iterating over the cell.
+ * Note that in a purely timestamped world, the presence of any stable update for any
+ * key in the cell means the on-disk value must be stable, because the update must be
+ * newer than the on-disk value. However, this is no longer true if the stable update
+ * has no timestamp. It may also not be true if the on-disk value is prepared, or other
+ * corner cases. Therefore, we must iterate the cell unless _every_ key has a stable
+ * update.
*
- * (*) Either that, or the update is not timestamped, in which case the on-disk value
- * might not be stable but the non-timestamp update will hide it until the next
- * reconciliation and then overwrite it.
+ * We can, however, stop iterating as soon as the downstream code reports back that the
+ * on-disk value is actually stable.
*/
- if (stable_update_found)
- WT_STAT_CONN_DATA_INCR(session, txn_rts_stable_rle_skipped);
- else if (unpack.type == WT_CELL_DEL)
+ if (unpack.type == WT_CELL_DEL)
WT_STAT_CONN_DATA_INCR(session, txn_rts_delete_rle_skipped);
+ else if (stable_updates_count == rle)
+ WT_STAT_CONN_DATA_INCR(session, txn_rts_stable_rle_skipped);
else {
- for (j = 0; j < rle; j++) {
+ j = 0;
+ if (inshead != NULL) {
+ WT_SKIP_FOREACH (ins, inshead) {
+ /* If the update list goes past the end of the cell, something's wrong. */
+ WT_ASSERT(session, j < rle);
+ ins_recno = WT_INSERT_RECNO(ins);
+ /* Process all the keys before this update. */
+ while (recno + j < ins_recno) {
+ WT_RET(__rollback_abort_ondisk_kv(session, ref, NULL, recno + j, NULL,
+ &unpack, rollback_timestamp, &is_ondisk_stable));
+ /* We can stop right away if the on-disk version is stable. */
+ if (is_ondisk_stable) {
+ if (rle > 1)
+ WT_STAT_CONN_DATA_INCR(session, txn_rts_stable_rle_skipped);
+ goto stop;
+ }
+ j++;
+ }
+ /* If this key has a stable update, skip over it. */
+ if (recno + j == ins_recno && __rollback_has_stable_update(ins->upd))
+ j++;
+ }
+ }
+ /* Process the rest of the keys. */
+ while (j < rle) {
WT_RET(__rollback_abort_ondisk_kv(session, ref, NULL, recno + j, NULL, &unpack,
rollback_timestamp, &is_ondisk_stable));
/* We can stop right away if the on-disk version is stable. */
if (is_ondisk_stable) {
if (rle > 1)
WT_STAT_CONN_DATA_INCR(session, txn_rts_stable_rle_skipped);
- break;
+ goto stop;
}
+ j++;
}
}
+stop:
recno += rle;
}
}
/* Review the append list */
- if ((ins = WT_COL_APPEND(page)) != NULL)
- WT_RET(__rollback_abort_insert_list(session, page, ins, rollback_timestamp, NULL));
+ if ((inshead = WT_COL_APPEND(page)) != NULL)
+ WT_RET(__rollback_abort_insert_list(session, page, inshead, rollback_timestamp, NULL));
/* Mark the page as dirty to reconcile the page. */
if (page->modify)