summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger
diff options
context:
space:
mode:
authorLuke Chen <luke.chen@mongodb.com>2021-06-08 16:45:42 +1000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-06-08 07:12:32 +0000
commit7467aac3a0d802c09c35d203a7a5b5f156ccbefc (patch)
treeade83ccb9abf9f47086d0b9e8e17deb56eac7975 /src/third_party/wiredtiger
parent9ea4d9e37c2d2308756b7e5f946f5a8990867efc (diff)
downloadmongo-7467aac3a0d802c09c35d203a7a5b5f156ccbefc.tar.gz
Import wiredtiger: ede142862ea74ff120d1e3195cf367ea4487a0e4 from branch mongodb-5.0
ref: 5458e75c49..ede142862e for: 5.0.0-rc1 WT-7577 Add sync configuration to flush_tier
Diffstat (limited to 'src/third_party/wiredtiger')
-rw-r--r--src/third_party/wiredtiger/dist/api_data.py8
-rw-r--r--src/third_party/wiredtiger/dist/stat_data.py1
-rw-r--r--src/third_party/wiredtiger/import.data2
-rw-r--r--src/third_party/wiredtiger/src/config/config_def.c5
-rw-r--r--src/third_party/wiredtiger/src/conn/conn_tiered.c93
-rw-r--r--src/third_party/wiredtiger/src/include/connection.h2
-rw-r--r--src/third_party/wiredtiger/src/include/extern.h1
-rw-r--r--src/third_party/wiredtiger/src/include/stat.h1
-rw-r--r--src/third_party/wiredtiger/src/include/tiered.h12
-rw-r--r--src/third_party/wiredtiger/src/include/wiredtiger.in422
-rw-r--r--src/third_party/wiredtiger/src/support/stat.c3
-rw-r--r--src/third_party/wiredtiger/src/tiered/tiered_work.c37
-rwxr-xr-xsrc/third_party/wiredtiger/test/suite/test_tiered05.py1
13 files changed, 367 insertions, 221 deletions
diff --git a/src/third_party/wiredtiger/dist/api_data.py b/src/third_party/wiredtiger/dist/api_data.py
index 1731f92911f..233d0b29963 100644
--- a/src/third_party/wiredtiger/dist/api_data.py
+++ b/src/third_party/wiredtiger/dist/api_data.py
@@ -1561,6 +1561,14 @@ methods = {
Config('force', 'false', r'''
force sharing of all data''',
type='boolean'),
+ Config('sync', 'on', r'''
+ wait for all objects to be flushed to the shared storage to the level
+ specified. The \c off setting does not wait for any
+ objects to be written to the tiered storage system but returns immediately after
+ generating the objects and work units for an internal thread. The
+ \c on setting causes the caller to wait until all work queued for this call to
+ be completely processed before returning''',
+ choices=['off', 'on']),
]),
'WT_SESSION.strerror' : Method([]),
diff --git a/src/third_party/wiredtiger/dist/stat_data.py b/src/third_party/wiredtiger/dist/stat_data.py
index 5e5f99a5db0..de5cde1f494 100644
--- a/src/third_party/wiredtiger/dist/stat_data.py
+++ b/src/third_party/wiredtiger/dist/stat_data.py
@@ -501,6 +501,7 @@ connection_stats = [
##########################################
# Tiered storage statistics
##########################################
+ StorageStat('flush_state_races', 'flush state races'),
StorageStat('flush_tier', 'flush_tier operation calls'),
StorageStat('flush_tier_busy', 'flush_tier busy retries'),
diff --git a/src/third_party/wiredtiger/import.data b/src/third_party/wiredtiger/import.data
index d6023b6abc9..b07c90abef9 100644
--- a/src/third_party/wiredtiger/import.data
+++ b/src/third_party/wiredtiger/import.data
@@ -2,5 +2,5 @@
"vendor": "wiredtiger",
"github": "wiredtiger/wiredtiger.git",
"branch": "mongodb-5.0",
- "commit": "5458e75c498e18999e2c5b0748b3bf8e989930c1"
+ "commit": "ede142862ea74ff120d1e3195cf367ea4487a0e4"
}
diff --git a/src/third_party/wiredtiger/src/config/config_def.c b/src/third_party/wiredtiger/src/config/config_def.c
index 7678ea6b85c..2d40f26cbc1 100644
--- a/src/third_party/wiredtiger/src/config/config_def.c
+++ b/src/third_party/wiredtiger/src/config/config_def.c
@@ -325,7 +325,7 @@ static const WT_CONFIG_CHECK confchk_WT_SESSION_drop[] = {
static const WT_CONFIG_CHECK confchk_WT_SESSION_flush_tier[] = {
{"flush_timestamp", "string", NULL, NULL, NULL, 0}, {"force", "boolean", NULL, NULL, NULL, 0},
- {NULL, NULL, NULL, NULL, NULL, 0}};
+ {"sync", "string", NULL, "choices=[\"off\",\"on\"]", NULL, 0}, {NULL, NULL, NULL, NULL, NULL, 0}};
static const WT_CONFIG_CHECK confchk_WT_SESSION_join[] = {
{"bloom_bit_count", "int", NULL, "min=2,max=1000", NULL, 0},
@@ -1185,7 +1185,8 @@ static const WT_CONFIG_ENTRY config_entries[] = {{"WT_CONNECTION.add_collator",
"checkpoint_wait=true,force=false,lock_wait=true,"
"remove_files=true",
confchk_WT_SESSION_drop, 4},
- {"WT_SESSION.flush_tier", "flush_timestamp=,force=false", confchk_WT_SESSION_flush_tier, 2},
+ {"WT_SESSION.flush_tier", "flush_timestamp=,force=false,sync=on", confchk_WT_SESSION_flush_tier,
+ 3},
{"WT_SESSION.join",
"bloom_bit_count=16,bloom_false_positives=false,"
"bloom_hash_count=8,compare=\"eq\",count=,operation=\"and\","
diff --git a/src/third_party/wiredtiger/src/conn/conn_tiered.c b/src/third_party/wiredtiger/src/conn/conn_tiered.c
index ecdf10d34c3..b331875855b 100644
--- a/src/third_party/wiredtiger/src/conn/conn_tiered.c
+++ b/src/third_party/wiredtiger/src/conn/conn_tiered.c
@@ -20,25 +20,68 @@
#endif
/*
+ * __flush_tier_wait --
+ * Wait for all previous work units queued to be processed.
+ */
+static void
+__flush_tier_wait(WT_SESSION_IMPL *session)
+{
+ WT_CONNECTION_IMPL *conn;
+ int yield_count;
+
+ conn = S2C(session);
+ yield_count = 0;
+ /*
+ * The internal thread needs the schema lock to perform its operations and flush tier also
+ * acquires the schema lock. We cannot be waiting in this function while holding that lock or no
+ * work will get done.
+ */
+ WT_ASSERT(session, !FLD_ISSET(session->lock_flags, WT_SESSION_LOCKED_SCHEMA));
+
+ /*
+ * It may be worthwhile looking at the add and decrement values and make choices of whether to
+ * yield or wait based on how much of the workload has been performed. Flushing operations could
+ * take a long time so yielding may not be effective.
+ *
+ * TODO: We should consider a maximum wait value as a configuration setting. If we add one, then
+ * this function returns an int and this loop would check how much time we've waited and break
+ * out with EBUSY.
+ */
+ while (!WT_FLUSH_STATE_DONE(conn->flush_state)) {
+ if (++yield_count < WT_THOUSAND)
+ __wt_yield();
+ else
+ __wt_cond_wait(session, conn->flush_cond, 200, NULL);
+ }
+}
+
+/*
* __flush_tier_once --
* Perform one iteration of tiered storage maintenance.
*/
static int
-__flush_tier_once(WT_SESSION_IMPL *session, bool force)
+__flush_tier_once(WT_SESSION_IMPL *session, uint32_t flags)
{
WT_CURSOR *cursor;
WT_DECL_RET;
const char *key, *value;
- WT_UNUSED(force);
+ WT_UNUSED(flags);
__wt_verbose(session, WT_VERB_TIERED, "%s", "FLUSH_TIER_ONCE: Called");
+
+ cursor = NULL;
/*
- * - See if there is any "merging" work to do to prepare and create an object that is
+ * For supporting splits and merge:
+ * - See if there is any merging work to do to prepare and create an object that is
* suitable for placing onto tiered storage.
* - Do the work to create said objects.
* - Move the objects.
*/
- cursor = NULL;
+ S2C(session)->flush_state = 0;
+
+ /*
+ * XXX: Is it sufficient to walk the metadata cursor? If it is, why doesn't checkpoint do that?
+ */
WT_RET(__wt_metadata_cursor(session, &cursor));
while (cursor->next(cursor) == 0) {
cursor->get_key(cursor, &key);
@@ -46,6 +89,7 @@ __flush_tier_once(WT_SESSION_IMPL *session, bool force)
/* For now just switch tiers which just does metadata manipulation. */
if (WT_PREFIX_MATCH(key, "tiered:")) {
__wt_verbose(session, WT_VERB_TIERED, "FLUSH_TIER_ONCE: %s %s", key, value);
+ /* Is this instantiating every handle even if it is not opened or in use? */
WT_ERR(__wt_session_get_dhandle(session, key, NULL, NULL, WT_DHANDLE_EXCLUSIVE));
/*
* When we call wt_tiered_switch the session->dhandle points to the tiered: entry and
@@ -270,13 +314,13 @@ __tier_storage_copy(WT_SESSION_IMPL *session)
/*
* We are responsible for freeing the work unit when we're done with it.
*/
- __wt_free(session, entry);
+ __wt_tiered_work_free(session, entry);
entry = NULL;
}
err:
if (entry != NULL)
- __wt_free(session, entry);
+ __wt_tiered_work_free(session, entry);
return (ret);
}
@@ -307,21 +351,39 @@ __wt_flush_tier(WT_SESSION_IMPL *session, const char *config)
{
WT_CONFIG_ITEM cval;
WT_DECL_RET;
+ uint32_t flags;
const char *cfg[3];
- bool force;
WT_STAT_CONN_INCR(session, flush_tier);
if (FLD_ISSET(S2C(session)->server_flags, WT_CONN_SERVER_TIERED_MGR))
WT_RET_MSG(
session, EINVAL, "Cannot call flush_tier when storage manager thread is configured");
+ flags = 0;
cfg[0] = WT_CONFIG_BASE(session, WT_SESSION_flush_tier);
cfg[1] = (char *)config;
cfg[2] = NULL;
WT_RET(__wt_config_gets(session, cfg, "force", &cval));
- force = cval.val != 0;
+ if (cval.val)
+ LF_SET(WT_FLUSH_TIER_FORCE);
+ WT_RET(__wt_config_gets_def(session, cfg, "sync", 0, &cval));
+ if (WT_STRING_MATCH("off", cval.str, cval.len))
+ LF_SET(WT_FLUSH_TIER_OFF);
+ else if (WT_STRING_MATCH("on", cval.str, cval.len))
+ LF_SET(WT_FLUSH_TIER_ON);
+
+ /*
+ * We cannot perform another flush tier until any earlier ones are done. Often threads will wait
+ * after the flush tier based on the sync setting so this check will be fast. But if sync is
+ * turned off then any following call must wait and will do so here. We have to wait while not
+ * holding the schema lock.
+ */
+ __flush_tier_wait(session);
+
+ WT_WITH_SCHEMA_LOCK(session, ret = __flush_tier_once(session, flags));
- WT_WITH_SCHEMA_LOCK(session, ret = __flush_tier_once(session, force));
+ if (ret == 0 && LF_ISSET(WT_FLUSH_TIER_ON))
+ __flush_tier_wait(session);
return (ret);
}
@@ -471,8 +533,10 @@ __tiered_mgr_server(void *arg)
/*
* Here is where we do work. Work we expect to do:
*/
- WT_WITH_SCHEMA_LOCK(session, ret = __flush_tier_once(session, false));
+ WT_WITH_SCHEMA_LOCK(session, ret = __flush_tier_once(session, 0));
WT_ERR(ret);
+ if (ret == 0)
+ __flush_tier_wait(session);
WT_ERR(__tier_storage_remove(session, false));
}
@@ -523,6 +587,7 @@ __wt_tiered_storage_create(WT_SESSION_IMPL *session, const char *cfg[])
WT_RET(__tiered_manager_config(session, cfg, &start));
/* Start the internal thread. */
+ WT_ERR(__wt_cond_alloc(session, "flush tier", &conn->flush_cond));
WT_ERR(__wt_cond_alloc(session, "storage server", &conn->tiered_cond));
FLD_SET(conn->server_flags, WT_CONN_SERVER_TIERED);
@@ -559,14 +624,17 @@ __wt_tiered_storage_destroy(WT_SESSION_IMPL *session)
conn = S2C(session);
/* Stop the internal server thread. */
+ if (conn->flush_cond != NULL)
+ __wt_cond_signal(session, conn->flush_cond);
FLD_CLR(conn->server_flags, WT_CONN_SERVER_TIERED | WT_CONN_SERVER_TIERED_MGR);
if (conn->tiered_tid_set) {
+ WT_ASSERT(session, conn->tiered_cond != NULL);
__wt_cond_signal(session, conn->tiered_cond);
WT_TRET(__wt_thread_join(session, &conn->tiered_tid));
conn->tiered_tid_set = false;
while ((entry = TAILQ_FIRST(&conn->tieredqh)) != NULL) {
TAILQ_REMOVE(&conn->tieredqh, entry, q);
- __wt_free(session, entry);
+ __wt_tiered_work_free(session, entry);
}
}
__wt_cond_destroy(session, &conn->tiered_cond);
@@ -577,11 +645,14 @@ __wt_tiered_storage_destroy(WT_SESSION_IMPL *session)
/* Stop the storage manager thread. */
if (conn->tiered_mgr_tid_set) {
+ WT_ASSERT(session, conn->tiered_mgr_cond != NULL);
__wt_cond_signal(session, conn->tiered_mgr_cond);
WT_TRET(__wt_thread_join(session, &conn->tiered_mgr_tid));
conn->tiered_mgr_tid_set = false;
}
__wt_cond_destroy(session, &conn->tiered_mgr_cond);
+ /* This condition variable is last because any internal thread could be using it. */
+ __wt_cond_destroy(session, &conn->flush_cond);
if (conn->tiered_mgr_session != NULL) {
WT_TRET(__wt_session_close_internal(conn->tiered_mgr_session));
diff --git a/src/third_party/wiredtiger/src/include/connection.h b/src/third_party/wiredtiger/src/include/connection.h
index b13ab2b911e..65c48e1c37b 100644
--- a/src/third_party/wiredtiger/src/include/connection.h
+++ b/src/third_party/wiredtiger/src/include/connection.h
@@ -420,8 +420,10 @@ struct __wt_connection_impl {
WT_SESSION_IMPL *tiered_session; /* Tiered thread session */
wt_thread_t tiered_tid; /* Tiered thread */
bool tiered_tid_set; /* Tiered thread set */
+ WT_CONDVAR *flush_cond; /* Flush wait mutex */
WT_CONDVAR *tiered_cond; /* Tiered wait mutex */
bool tiered_server_running; /* Internal tiered server operating */
+ uint32_t flush_state; /* State of last flush tier */
WT_TIERED_MANAGER tiered_mgr; /* Tiered manager thread information */
WT_SESSION_IMPL *tiered_mgr_session; /* Tiered manager thread session */
diff --git a/src/third_party/wiredtiger/src/include/extern.h b/src/third_party/wiredtiger/src/include/extern.h
index 43f844e4f2f..9d6499f31a6 100644
--- a/src/third_party/wiredtiger/src/include/extern.h
+++ b/src/third_party/wiredtiger/src/include/extern.h
@@ -1830,6 +1830,7 @@ extern void __wt_tiered_get_flush(WT_SESSION_IMPL *session, WT_TIERED_WORK_UNIT
extern void __wt_tiered_pop_work(
WT_SESSION_IMPL *session, uint32_t type, uint64_t maxval, WT_TIERED_WORK_UNIT **entryp);
extern void __wt_tiered_push_work(WT_SESSION_IMPL *session, WT_TIERED_WORK_UNIT *entry);
+extern void __wt_tiered_work_free(WT_SESSION_IMPL *session, WT_TIERED_WORK_UNIT *entry);
extern void __wt_timestamp_to_hex_string(wt_timestamp_t ts, char *hex_timestamp);
extern void __wt_txn_bump_snapshot(WT_SESSION_IMPL *session);
extern void __wt_txn_clear_durable_timestamp(WT_SESSION_IMPL *session);
diff --git a/src/third_party/wiredtiger/src/include/stat.h b/src/third_party/wiredtiger/src/include/stat.h
index 72b67b9df44..5b14e4bc80e 100644
--- a/src/third_party/wiredtiger/src/include/stat.h
+++ b/src/third_party/wiredtiger/src/include/stat.h
@@ -586,6 +586,7 @@ struct __wt_connection_stats {
int64_t rec_time_window_prepared;
int64_t rec_split_stashed_bytes;
int64_t rec_split_stashed_objects;
+ int64_t flush_state_races;
int64_t flush_tier_busy;
int64_t flush_tier;
int64_t session_open;
diff --git a/src/third_party/wiredtiger/src/include/tiered.h b/src/third_party/wiredtiger/src/include/tiered.h
index 31fcdf3f9b3..12ffc5f7b49 100644
--- a/src/third_party/wiredtiger/src/include/tiered.h
+++ b/src/third_party/wiredtiger/src/include/tiered.h
@@ -46,6 +46,18 @@ struct __wt_tiered_manager {
#define WT_TIERED_NAME_SHARED 0x8u
/* AUTOMATIC FLAG VALUE GENERATION STOP */
+/* Flush tier flags */
+/* AUTOMATIC FLAG VALUE GENERATION START */
+#define WT_FLUSH_TIER_FORCE 0x1u
+#define WT_FLUSH_TIER_OFF 0x2u
+#define WT_FLUSH_TIER_ON 0x4u
+/* AUTOMATIC FLAG VALUE GENERATION STOP */
+
+/*
+ * The flush state is a simple counter we manipulate atomically.
+ */
+#define WT_FLUSH_STATE_DONE(state) ((state) == 0)
+
/*
* Different types of work units for tiered trees.
*/
diff --git a/src/third_party/wiredtiger/src/include/wiredtiger.in b/src/third_party/wiredtiger/src/include/wiredtiger.in
index f1ac840bfca..afdbcce2b2a 100644
--- a/src/third_party/wiredtiger/src/include/wiredtiger.in
+++ b/src/third_party/wiredtiger/src/include/wiredtiger.in
@@ -808,6 +808,12 @@ struct __wt_session {
* timestamp. The supplied value must not be older than the current oldest timestamp and it
* must not be newer than the stable timestamp., a string; default empty.}
* @config{force, force sharing of all data., a boolean flag; default \c false.}
+ * @config{sync, wait for all objects to be flushed to the shared storage to the level
+ * specified. The \c off setting does not wait for any objects to be written to the tiered
+ * storage system but returns immediately after generating the objects and work units for an
+ * internal thread. The \c on setting causes the caller to wait until all work queued for
+ * this call to be completely processed before returning., a string\, chosen from the
+ * following options: \c "off"\, \c "on"; default \c on.}
* @configend
* @errors
*/
@@ -5565,543 +5571,545 @@ extern int wiredtiger_extension_terminate(WT_CONNECTION *connection);
#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1271
/*! reconciliation: split objects currently awaiting free */
#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1272
+/*! session: flush state races */
+#define WT_STAT_CONN_FLUSH_STATE_RACES 1273
/*! session: flush_tier busy retries */
-#define WT_STAT_CONN_FLUSH_TIER_BUSY 1273
+#define WT_STAT_CONN_FLUSH_TIER_BUSY 1274
/*! session: flush_tier operation calls */
-#define WT_STAT_CONN_FLUSH_TIER 1274
+#define WT_STAT_CONN_FLUSH_TIER 1275
/*! session: open session count */
-#define WT_STAT_CONN_SESSION_OPEN 1275
+#define WT_STAT_CONN_SESSION_OPEN 1276
/*! session: session query timestamp calls */
-#define WT_STAT_CONN_SESSION_QUERY_TS 1276
+#define WT_STAT_CONN_SESSION_QUERY_TS 1277
/*! session: table alter failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1277
+#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1278
/*! session: table alter successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1278
+#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1279
/*! session: table alter unchanged and skipped */
-#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1279
+#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1280
/*! session: table compact failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1280
+#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1281
/*! session: table compact successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1281
+#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1282
/*! session: table create failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1282
+#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1283
/*! session: table create successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1283
+#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1284
/*! session: table drop failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1284
+#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1285
/*! session: table drop successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1285
+#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1286
/*! session: table rename failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1286
+#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1287
/*! session: table rename successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1287
+#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1288
/*! session: table salvage failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1288
+#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1289
/*! session: table salvage successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1289
+#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1290
/*! session: table truncate failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1290
+#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1291
/*! session: table truncate successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1291
+#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1292
/*! session: table verify failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1292
+#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1293
/*! session: table verify successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1293
+#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1294
/*! thread-state: active filesystem fsync calls */
-#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1294
+#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1295
/*! thread-state: active filesystem read calls */
-#define WT_STAT_CONN_THREAD_READ_ACTIVE 1295
+#define WT_STAT_CONN_THREAD_READ_ACTIVE 1296
/*! thread-state: active filesystem write calls */
-#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1296
+#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1297
/*! thread-yield: application thread time evicting (usecs) */
-#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1297
+#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1298
/*! thread-yield: application thread time waiting for cache (usecs) */
-#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1298
+#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1299
/*!
* thread-yield: connection close blocked waiting for transaction state
* stabilization
*/
-#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1299
+#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1300
/*! thread-yield: connection close yielded for lsm manager shutdown */
-#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1300
+#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1301
/*! thread-yield: data handle lock yielded */
-#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1301
+#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1302
/*!
* thread-yield: get reference for page index and slot time sleeping
* (usecs)
*/
-#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1302
+#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1303
/*! thread-yield: log server sync yielded for log write */
-#define WT_STAT_CONN_LOG_SERVER_SYNC_BLOCKED 1303
+#define WT_STAT_CONN_LOG_SERVER_SYNC_BLOCKED 1304
/*! thread-yield: page access yielded due to prepare state change */
-#define WT_STAT_CONN_PREPARED_TRANSITION_BLOCKED_PAGE 1304
+#define WT_STAT_CONN_PREPARED_TRANSITION_BLOCKED_PAGE 1305
/*! thread-yield: page acquire busy blocked */
-#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1305
+#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1306
/*! thread-yield: page acquire eviction blocked */
-#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1306
+#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1307
/*! thread-yield: page acquire locked blocked */
-#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1307
+#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1308
/*! thread-yield: page acquire read blocked */
-#define WT_STAT_CONN_PAGE_READ_BLOCKED 1308
+#define WT_STAT_CONN_PAGE_READ_BLOCKED 1309
/*! thread-yield: page acquire time sleeping (usecs) */
-#define WT_STAT_CONN_PAGE_SLEEP 1309
+#define WT_STAT_CONN_PAGE_SLEEP 1310
/*!
* thread-yield: page delete rollback time sleeping for state change
* (usecs)
*/
-#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1310
+#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1311
/*! thread-yield: page reconciliation yielded due to child modification */
-#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1311
+#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1312
/*! transaction: Number of prepared updates */
-#define WT_STAT_CONN_TXN_PREPARED_UPDATES 1312
+#define WT_STAT_CONN_TXN_PREPARED_UPDATES 1313
/*! transaction: Number of prepared updates committed */
-#define WT_STAT_CONN_TXN_PREPARED_UPDATES_COMMITTED 1313
+#define WT_STAT_CONN_TXN_PREPARED_UPDATES_COMMITTED 1314
/*! transaction: Number of prepared updates repeated on the same key */
-#define WT_STAT_CONN_TXN_PREPARED_UPDATES_KEY_REPEATED 1314
+#define WT_STAT_CONN_TXN_PREPARED_UPDATES_KEY_REPEATED 1315
/*! transaction: Number of prepared updates rolled back */
-#define WT_STAT_CONN_TXN_PREPARED_UPDATES_ROLLEDBACK 1315
+#define WT_STAT_CONN_TXN_PREPARED_UPDATES_ROLLEDBACK 1316
/*! transaction: prepared transactions */
-#define WT_STAT_CONN_TXN_PREPARE 1316
+#define WT_STAT_CONN_TXN_PREPARE 1317
/*! transaction: prepared transactions committed */
-#define WT_STAT_CONN_TXN_PREPARE_COMMIT 1317
+#define WT_STAT_CONN_TXN_PREPARE_COMMIT 1318
/*! transaction: prepared transactions currently active */
-#define WT_STAT_CONN_TXN_PREPARE_ACTIVE 1318
+#define WT_STAT_CONN_TXN_PREPARE_ACTIVE 1319
/*! transaction: prepared transactions rolled back */
-#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK 1319
+#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK 1320
/*! transaction: query timestamp calls */
-#define WT_STAT_CONN_TXN_QUERY_TS 1320
+#define WT_STAT_CONN_TXN_QUERY_TS 1321
/*! transaction: rollback to stable calls */
-#define WT_STAT_CONN_TXN_RTS 1321
+#define WT_STAT_CONN_TXN_RTS 1322
/*! transaction: rollback to stable pages visited */
-#define WT_STAT_CONN_TXN_RTS_PAGES_VISITED 1322
+#define WT_STAT_CONN_TXN_RTS_PAGES_VISITED 1323
/*! transaction: rollback to stable tree walk skipping pages */
-#define WT_STAT_CONN_TXN_RTS_TREE_WALK_SKIP_PAGES 1323
+#define WT_STAT_CONN_TXN_RTS_TREE_WALK_SKIP_PAGES 1324
/*! transaction: rollback to stable updates aborted */
-#define WT_STAT_CONN_TXN_RTS_UPD_ABORTED 1324
+#define WT_STAT_CONN_TXN_RTS_UPD_ABORTED 1325
/*! transaction: sessions scanned in each walk of concurrent sessions */
-#define WT_STAT_CONN_TXN_SESSIONS_WALKED 1325
+#define WT_STAT_CONN_TXN_SESSIONS_WALKED 1326
/*! transaction: set timestamp calls */
-#define WT_STAT_CONN_TXN_SET_TS 1326
+#define WT_STAT_CONN_TXN_SET_TS 1327
/*! transaction: set timestamp durable calls */
-#define WT_STAT_CONN_TXN_SET_TS_DURABLE 1327
+#define WT_STAT_CONN_TXN_SET_TS_DURABLE 1328
/*! transaction: set timestamp durable updates */
-#define WT_STAT_CONN_TXN_SET_TS_DURABLE_UPD 1328
+#define WT_STAT_CONN_TXN_SET_TS_DURABLE_UPD 1329
/*! transaction: set timestamp oldest calls */
-#define WT_STAT_CONN_TXN_SET_TS_OLDEST 1329
+#define WT_STAT_CONN_TXN_SET_TS_OLDEST 1330
/*! transaction: set timestamp oldest updates */
-#define WT_STAT_CONN_TXN_SET_TS_OLDEST_UPD 1330
+#define WT_STAT_CONN_TXN_SET_TS_OLDEST_UPD 1331
/*! transaction: set timestamp stable calls */
-#define WT_STAT_CONN_TXN_SET_TS_STABLE 1331
+#define WT_STAT_CONN_TXN_SET_TS_STABLE 1332
/*! transaction: set timestamp stable updates */
-#define WT_STAT_CONN_TXN_SET_TS_STABLE_UPD 1332
+#define WT_STAT_CONN_TXN_SET_TS_STABLE_UPD 1333
/*! transaction: transaction begins */
-#define WT_STAT_CONN_TXN_BEGIN 1333
+#define WT_STAT_CONN_TXN_BEGIN 1334
/*! transaction: transaction checkpoint currently running */
-#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1334
+#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1335
/*!
* transaction: transaction checkpoint currently running for history
* store file
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING_HS 1335
+#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING_HS 1336
/*! transaction: transaction checkpoint generation */
-#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1336
+#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1337
/*!
* transaction: transaction checkpoint history store file duration
* (usecs)
*/
-#define WT_STAT_CONN_TXN_HS_CKPT_DURATION 1337
+#define WT_STAT_CONN_TXN_HS_CKPT_DURATION 1338
/*! transaction: transaction checkpoint max time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1338
+#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1339
/*! transaction: transaction checkpoint min time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1339
+#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1340
/*!
* transaction: transaction checkpoint most recent duration for gathering
* all handles (usecs)
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION 1340
+#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION 1341
/*!
* transaction: transaction checkpoint most recent duration for gathering
* applied handles (usecs)
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_APPLY 1341
+#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_APPLY 1342
/*!
* transaction: transaction checkpoint most recent duration for gathering
* skipped handles (usecs)
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_SKIP 1342
+#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_SKIP 1343
/*! transaction: transaction checkpoint most recent handles applied */
-#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_APPLIED 1343
+#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_APPLIED 1344
/*! transaction: transaction checkpoint most recent handles skipped */
-#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_SKIPPED 1344
+#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_SKIPPED 1345
/*! transaction: transaction checkpoint most recent handles walked */
-#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_WALKED 1345
+#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_WALKED 1346
/*! transaction: transaction checkpoint most recent time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1346
+#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1347
/*! transaction: transaction checkpoint prepare currently running */
-#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RUNNING 1347
+#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RUNNING 1348
/*! transaction: transaction checkpoint prepare max time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MAX 1348
+#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MAX 1349
/*! transaction: transaction checkpoint prepare min time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MIN 1349
+#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MIN 1350
/*! transaction: transaction checkpoint prepare most recent time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RECENT 1350
+#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RECENT 1351
/*! transaction: transaction checkpoint prepare total time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_TOTAL 1351
+#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_TOTAL 1352
/*! transaction: transaction checkpoint scrub dirty target */
-#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1352
+#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1353
/*! transaction: transaction checkpoint scrub time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1353
+#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1354
/*! transaction: transaction checkpoint total time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1354
+#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1355
/*! transaction: transaction checkpoints */
-#define WT_STAT_CONN_TXN_CHECKPOINT 1355
+#define WT_STAT_CONN_TXN_CHECKPOINT 1356
/*!
* transaction: transaction checkpoints skipped because database was
* clean
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1356
+#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1357
/*! transaction: transaction failures due to history store */
-#define WT_STAT_CONN_TXN_FAIL_CACHE 1357
+#define WT_STAT_CONN_TXN_FAIL_CACHE 1358
/*!
* transaction: transaction fsync calls for checkpoint after allocating
* the transaction ID
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1358
+#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1359
/*!
* transaction: transaction fsync duration for checkpoint after
* allocating the transaction ID (usecs)
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1359
+#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1360
/*! transaction: transaction range of IDs currently pinned */
-#define WT_STAT_CONN_TXN_PINNED_RANGE 1360
+#define WT_STAT_CONN_TXN_PINNED_RANGE 1361
/*! transaction: transaction range of IDs currently pinned by a checkpoint */
-#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1361
+#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1362
/*! transaction: transaction range of timestamps currently pinned */
-#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP 1362
+#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP 1363
/*! transaction: transaction range of timestamps pinned by a checkpoint */
-#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_CHECKPOINT 1363
+#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_CHECKPOINT 1364
/*!
* transaction: transaction range of timestamps pinned by the oldest
* active read timestamp
*/
-#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_READER 1364
+#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_READER 1365
/*!
* transaction: transaction range of timestamps pinned by the oldest
* timestamp
*/
-#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST 1365
+#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST 1366
/*! transaction: transaction read timestamp of the oldest active reader */
-#define WT_STAT_CONN_TXN_TIMESTAMP_OLDEST_ACTIVE_READ 1366
+#define WT_STAT_CONN_TXN_TIMESTAMP_OLDEST_ACTIVE_READ 1367
/*! transaction: transaction rollback to stable currently running */
-#define WT_STAT_CONN_TXN_ROLLBACK_TO_STABLE_RUNNING 1367
+#define WT_STAT_CONN_TXN_ROLLBACK_TO_STABLE_RUNNING 1368
/*! transaction: transaction sync calls */
-#define WT_STAT_CONN_TXN_SYNC 1368
+#define WT_STAT_CONN_TXN_SYNC 1369
/*! transaction: transaction walk of concurrent sessions */
-#define WT_STAT_CONN_TXN_WALK_SESSIONS 1369
+#define WT_STAT_CONN_TXN_WALK_SESSIONS 1370
/*! transaction: transactions committed */
-#define WT_STAT_CONN_TXN_COMMIT 1370
+#define WT_STAT_CONN_TXN_COMMIT 1371
/*! transaction: transactions rolled back */
-#define WT_STAT_CONN_TXN_ROLLBACK 1371
+#define WT_STAT_CONN_TXN_ROLLBACK 1372
/*! LSM: sleep for LSM checkpoint throttle */
-#define WT_STAT_CONN_LSM_CHECKPOINT_THROTTLE 1372
+#define WT_STAT_CONN_LSM_CHECKPOINT_THROTTLE 1373
/*! LSM: sleep for LSM merge throttle */
-#define WT_STAT_CONN_LSM_MERGE_THROTTLE 1373
+#define WT_STAT_CONN_LSM_MERGE_THROTTLE 1374
/*! cache: bytes currently in the cache */
-#define WT_STAT_CONN_CACHE_BYTES_INUSE 1374
+#define WT_STAT_CONN_CACHE_BYTES_INUSE 1375
/*! cache: bytes dirty in the cache cumulative */
-#define WT_STAT_CONN_CACHE_BYTES_DIRTY_TOTAL 1375
+#define WT_STAT_CONN_CACHE_BYTES_DIRTY_TOTAL 1376
/*! cache: bytes read into cache */
-#define WT_STAT_CONN_CACHE_BYTES_READ 1376
+#define WT_STAT_CONN_CACHE_BYTES_READ 1377
/*! cache: bytes written from cache */
-#define WT_STAT_CONN_CACHE_BYTES_WRITE 1377
+#define WT_STAT_CONN_CACHE_BYTES_WRITE 1378
/*! cache: checkpoint blocked page eviction */
-#define WT_STAT_CONN_CACHE_EVICTION_CHECKPOINT 1378
+#define WT_STAT_CONN_CACHE_EVICTION_CHECKPOINT 1379
/*!
* cache: checkpoint of history store file blocked non-history store page
* eviction
*/
-#define WT_STAT_CONN_CACHE_EVICTION_BLOCKED_CHECKPOINT_HS 1379
+#define WT_STAT_CONN_CACHE_EVICTION_BLOCKED_CHECKPOINT_HS 1380
/*! cache: eviction walk target pages histogram - 0-9 */
-#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT10 1380
+#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT10 1381
/*! cache: eviction walk target pages histogram - 10-31 */
-#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT32 1381
+#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT32 1382
/*! cache: eviction walk target pages histogram - 128 and higher */
-#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_GE128 1382
+#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_GE128 1383
/*! cache: eviction walk target pages histogram - 32-63 */
-#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT64 1383
+#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT64 1384
/*! cache: eviction walk target pages histogram - 64-128 */
-#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT128 1384
+#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT128 1385
/*!
* cache: eviction walk target pages reduced due to history store cache
* pressure
*/
-#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_REDUCED 1385
+#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_REDUCED 1386
/*! cache: eviction walks abandoned */
-#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ABANDONED 1386
+#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ABANDONED 1387
/*! cache: eviction walks gave up because they restarted their walk twice */
-#define WT_STAT_CONN_CACHE_EVICTION_WALKS_STOPPED 1387
+#define WT_STAT_CONN_CACHE_EVICTION_WALKS_STOPPED 1388
/*!
* cache: eviction walks gave up because they saw too many pages and
* found no candidates
*/
-#define WT_STAT_CONN_CACHE_EVICTION_WALKS_GAVE_UP_NO_TARGETS 1388
+#define WT_STAT_CONN_CACHE_EVICTION_WALKS_GAVE_UP_NO_TARGETS 1389
/*!
* cache: eviction walks gave up because they saw too many pages and
* found too few candidates
*/
-#define WT_STAT_CONN_CACHE_EVICTION_WALKS_GAVE_UP_RATIO 1389
+#define WT_STAT_CONN_CACHE_EVICTION_WALKS_GAVE_UP_RATIO 1390
/*! cache: eviction walks reached end of tree */
-#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ENDED 1390
+#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ENDED 1391
/*! cache: eviction walks restarted */
-#define WT_STAT_CONN_CACHE_EVICTION_WALK_RESTART 1391
+#define WT_STAT_CONN_CACHE_EVICTION_WALK_RESTART 1392
/*! cache: eviction walks started from root of tree */
-#define WT_STAT_CONN_CACHE_EVICTION_WALK_FROM_ROOT 1392
+#define WT_STAT_CONN_CACHE_EVICTION_WALK_FROM_ROOT 1393
/*! cache: eviction walks started from saved location in tree */
-#define WT_STAT_CONN_CACHE_EVICTION_WALK_SAVED_POS 1393
+#define WT_STAT_CONN_CACHE_EVICTION_WALK_SAVED_POS 1394
/*! cache: hazard pointer blocked page eviction */
-#define WT_STAT_CONN_CACHE_EVICTION_HAZARD 1394
+#define WT_STAT_CONN_CACHE_EVICTION_HAZARD 1395
/*! cache: history store table insert calls */
-#define WT_STAT_CONN_CACHE_HS_INSERT 1395
+#define WT_STAT_CONN_CACHE_HS_INSERT 1396
/*! cache: history store table insert calls that returned restart */
-#define WT_STAT_CONN_CACHE_HS_INSERT_RESTART 1396
+#define WT_STAT_CONN_CACHE_HS_INSERT_RESTART 1397
/*!
* cache: history store table out-of-order resolved updates that lose
* their durable timestamp
*/
-#define WT_STAT_CONN_CACHE_HS_ORDER_LOSE_DURABLE_TIMESTAMP 1397
+#define WT_STAT_CONN_CACHE_HS_ORDER_LOSE_DURABLE_TIMESTAMP 1398
/*!
* cache: history store table out-of-order updates that were fixed up by
* reinserting with the fixed timestamp
*/
-#define WT_STAT_CONN_CACHE_HS_ORDER_REINSERT 1398
+#define WT_STAT_CONN_CACHE_HS_ORDER_REINSERT 1399
/*! cache: history store table reads */
-#define WT_STAT_CONN_CACHE_HS_READ 1399
+#define WT_STAT_CONN_CACHE_HS_READ 1400
/*! cache: history store table reads missed */
-#define WT_STAT_CONN_CACHE_HS_READ_MISS 1400
+#define WT_STAT_CONN_CACHE_HS_READ_MISS 1401
/*! cache: history store table reads requiring squashed modifies */
-#define WT_STAT_CONN_CACHE_HS_READ_SQUASH 1401
+#define WT_STAT_CONN_CACHE_HS_READ_SQUASH 1402
/*!
* cache: history store table truncation by rollback to stable to remove
* an unstable update
*/
-#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_RTS_UNSTABLE 1402
+#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_RTS_UNSTABLE 1403
/*!
* cache: history store table truncation by rollback to stable to remove
* an update
*/
-#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_RTS 1403
+#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_RTS 1404
/*! cache: history store table truncation to remove an update */
-#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE 1404
+#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE 1405
/*!
* cache: history store table truncation to remove range of updates due
* to key being removed from the data page during reconciliation
*/
-#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_ONPAGE_REMOVAL 1405
+#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_ONPAGE_REMOVAL 1406
/*!
* cache: history store table truncation to remove range of updates due
* to out-of-order timestamp update on data page
*/
-#define WT_STAT_CONN_CACHE_HS_ORDER_REMOVE 1406
+#define WT_STAT_CONN_CACHE_HS_ORDER_REMOVE 1407
/*! cache: history store table writes requiring squashed modifies */
-#define WT_STAT_CONN_CACHE_HS_WRITE_SQUASH 1407
+#define WT_STAT_CONN_CACHE_HS_WRITE_SQUASH 1408
/*! cache: in-memory page passed criteria to be split */
-#define WT_STAT_CONN_CACHE_INMEM_SPLITTABLE 1408
+#define WT_STAT_CONN_CACHE_INMEM_SPLITTABLE 1409
/*! cache: in-memory page splits */
-#define WT_STAT_CONN_CACHE_INMEM_SPLIT 1409
+#define WT_STAT_CONN_CACHE_INMEM_SPLIT 1410
/*! cache: internal pages evicted */
-#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL 1410
+#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL 1411
/*! cache: internal pages split during eviction */
-#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_INTERNAL 1411
+#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_INTERNAL 1412
/*! cache: leaf pages split during eviction */
-#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_LEAF 1412
+#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_LEAF 1413
/*! cache: modified pages evicted */
-#define WT_STAT_CONN_CACHE_EVICTION_DIRTY 1413
+#define WT_STAT_CONN_CACHE_EVICTION_DIRTY 1414
/*! cache: overflow pages read into cache */
-#define WT_STAT_CONN_CACHE_READ_OVERFLOW 1414
+#define WT_STAT_CONN_CACHE_READ_OVERFLOW 1415
/*! cache: page split during eviction deepened the tree */
-#define WT_STAT_CONN_CACHE_EVICTION_DEEPEN 1415
+#define WT_STAT_CONN_CACHE_EVICTION_DEEPEN 1416
/*! cache: page written requiring history store records */
-#define WT_STAT_CONN_CACHE_WRITE_HS 1416
+#define WT_STAT_CONN_CACHE_WRITE_HS 1417
/*! cache: pages read into cache */
-#define WT_STAT_CONN_CACHE_READ 1417
+#define WT_STAT_CONN_CACHE_READ 1418
/*! cache: pages read into cache after truncate */
-#define WT_STAT_CONN_CACHE_READ_DELETED 1418
+#define WT_STAT_CONN_CACHE_READ_DELETED 1419
/*! cache: pages read into cache after truncate in prepare state */
-#define WT_STAT_CONN_CACHE_READ_DELETED_PREPARED 1419
+#define WT_STAT_CONN_CACHE_READ_DELETED_PREPARED 1420
/*! cache: pages requested from the cache */
-#define WT_STAT_CONN_CACHE_PAGES_REQUESTED 1420
+#define WT_STAT_CONN_CACHE_PAGES_REQUESTED 1421
/*! cache: pages seen by eviction walk */
-#define WT_STAT_CONN_CACHE_EVICTION_PAGES_SEEN 1421
+#define WT_STAT_CONN_CACHE_EVICTION_PAGES_SEEN 1422
/*! cache: pages written from cache */
-#define WT_STAT_CONN_CACHE_WRITE 1422
+#define WT_STAT_CONN_CACHE_WRITE 1423
/*! cache: pages written requiring in-memory restoration */
-#define WT_STAT_CONN_CACHE_WRITE_RESTORE 1423
+#define WT_STAT_CONN_CACHE_WRITE_RESTORE 1424
/*! cache: tracked dirty bytes in the cache */
-#define WT_STAT_CONN_CACHE_BYTES_DIRTY 1424
+#define WT_STAT_CONN_CACHE_BYTES_DIRTY 1425
/*! cache: unmodified pages evicted */
-#define WT_STAT_CONN_CACHE_EVICTION_CLEAN 1425
+#define WT_STAT_CONN_CACHE_EVICTION_CLEAN 1426
/*! checkpoint-cleanup: pages added for eviction */
-#define WT_STAT_CONN_CC_PAGES_EVICT 1426
+#define WT_STAT_CONN_CC_PAGES_EVICT 1427
/*! checkpoint-cleanup: pages removed */
-#define WT_STAT_CONN_CC_PAGES_REMOVED 1427
+#define WT_STAT_CONN_CC_PAGES_REMOVED 1428
/*! checkpoint-cleanup: pages skipped during tree walk */
-#define WT_STAT_CONN_CC_PAGES_WALK_SKIPPED 1428
+#define WT_STAT_CONN_CC_PAGES_WALK_SKIPPED 1429
/*! checkpoint-cleanup: pages visited */
-#define WT_STAT_CONN_CC_PAGES_VISITED 1429
+#define WT_STAT_CONN_CC_PAGES_VISITED 1430
/*! cursor: Total number of entries skipped by cursor next calls */
-#define WT_STAT_CONN_CURSOR_NEXT_SKIP_TOTAL 1430
+#define WT_STAT_CONN_CURSOR_NEXT_SKIP_TOTAL 1431
/*! cursor: Total number of entries skipped by cursor prev calls */
-#define WT_STAT_CONN_CURSOR_PREV_SKIP_TOTAL 1431
+#define WT_STAT_CONN_CURSOR_PREV_SKIP_TOTAL 1432
/*!
* cursor: Total number of entries skipped to position the history store
* cursor
*/
-#define WT_STAT_CONN_CURSOR_SKIP_HS_CUR_POSITION 1432
+#define WT_STAT_CONN_CURSOR_SKIP_HS_CUR_POSITION 1433
/*!
* cursor: Total number of times a search near has exited due to prefix
* config
*/
-#define WT_STAT_CONN_CURSOR_SEARCH_NEAR_PREFIX_FAST_PATHS 1433
+#define WT_STAT_CONN_CURSOR_SEARCH_NEAR_PREFIX_FAST_PATHS 1434
/*!
* cursor: cursor next calls that skip due to a globally visible history
* store tombstone
*/
-#define WT_STAT_CONN_CURSOR_NEXT_HS_TOMBSTONE 1434
+#define WT_STAT_CONN_CURSOR_NEXT_HS_TOMBSTONE 1435
/*!
* cursor: cursor next calls that skip greater than or equal to 100
* entries
*/
-#define WT_STAT_CONN_CURSOR_NEXT_SKIP_GE_100 1435
+#define WT_STAT_CONN_CURSOR_NEXT_SKIP_GE_100 1436
/*! cursor: cursor next calls that skip less than 100 entries */
-#define WT_STAT_CONN_CURSOR_NEXT_SKIP_LT_100 1436
+#define WT_STAT_CONN_CURSOR_NEXT_SKIP_LT_100 1437
/*!
* cursor: cursor prev calls that skip due to a globally visible history
* store tombstone
*/
-#define WT_STAT_CONN_CURSOR_PREV_HS_TOMBSTONE 1437
+#define WT_STAT_CONN_CURSOR_PREV_HS_TOMBSTONE 1438
/*!
* cursor: cursor prev calls that skip greater than or equal to 100
* entries
*/
-#define WT_STAT_CONN_CURSOR_PREV_SKIP_GE_100 1438
+#define WT_STAT_CONN_CURSOR_PREV_SKIP_GE_100 1439
/*! cursor: cursor prev calls that skip less than 100 entries */
-#define WT_STAT_CONN_CURSOR_PREV_SKIP_LT_100 1439
+#define WT_STAT_CONN_CURSOR_PREV_SKIP_LT_100 1440
/*! cursor: open cursor count */
-#define WT_STAT_CONN_CURSOR_OPEN_COUNT 1440
+#define WT_STAT_CONN_CURSOR_OPEN_COUNT 1441
/*! reconciliation: approximate byte size of timestamps in pages written */
-#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TS 1441
+#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TS 1442
/*!
* reconciliation: approximate byte size of transaction IDs in pages
* written
*/
-#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TXN 1442
+#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TXN 1443
/*! reconciliation: fast-path pages deleted */
-#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1443
+#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1444
/*! reconciliation: page reconciliation calls */
-#define WT_STAT_CONN_REC_PAGES 1444
+#define WT_STAT_CONN_REC_PAGES 1445
/*! reconciliation: page reconciliation calls for eviction */
-#define WT_STAT_CONN_REC_PAGES_EVICTION 1445
+#define WT_STAT_CONN_REC_PAGES_EVICTION 1446
/*! reconciliation: pages deleted */
-#define WT_STAT_CONN_REC_PAGE_DELETE 1446
+#define WT_STAT_CONN_REC_PAGE_DELETE 1447
/*!
* reconciliation: pages written including an aggregated newest start
* durable timestamp
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 1447
+#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 1448
/*!
* reconciliation: pages written including an aggregated newest stop
* durable timestamp
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 1448
+#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 1449
/*!
* reconciliation: pages written including an aggregated newest stop
* timestamp
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TS 1449
+#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TS 1450
/*!
* reconciliation: pages written including an aggregated newest stop
* transaction ID
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TXN 1450
+#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TXN 1451
/*!
* reconciliation: pages written including an aggregated newest
* transaction ID
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_TXN 1451
+#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_TXN 1452
/*!
* reconciliation: pages written including an aggregated oldest start
* timestamp
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TS 1452
+#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TS 1453
/*! reconciliation: pages written including an aggregated prepare */
-#define WT_STAT_CONN_REC_TIME_AGGR_PREPARED 1453
+#define WT_STAT_CONN_REC_TIME_AGGR_PREPARED 1454
/*!
* reconciliation: pages written including at least one start durable
* timestamp
*/
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 1454
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 1455
/*!
* reconciliation: pages written including at least one start transaction
* ID
*/
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TXN 1455
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TXN 1456
/*!
* reconciliation: pages written including at least one stop durable
* timestamp
*/
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 1456
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 1457
/*! reconciliation: pages written including at least one stop timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TS 1457
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TS 1458
/*!
* reconciliation: pages written including at least one stop transaction
* ID
*/
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TXN 1458
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TXN 1459
/*! reconciliation: records written including a start durable timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_START_TS 1459
+#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_START_TS 1460
/*! reconciliation: records written including a start timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_START_TS 1460
+#define WT_STAT_CONN_REC_TIME_WINDOW_START_TS 1461
/*! reconciliation: records written including a start transaction ID */
-#define WT_STAT_CONN_REC_TIME_WINDOW_START_TXN 1461
+#define WT_STAT_CONN_REC_TIME_WINDOW_START_TXN 1462
/*! reconciliation: records written including a stop durable timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_STOP_TS 1462
+#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_STOP_TS 1463
/*! reconciliation: records written including a stop timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TS 1463
+#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TS 1464
/*! reconciliation: records written including a stop transaction ID */
-#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TXN 1464
+#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TXN 1465
/*! session: tiered operations dequeued and processed */
-#define WT_STAT_CONN_TIERED_WORK_UNITS_DEQUEUED 1465
+#define WT_STAT_CONN_TIERED_WORK_UNITS_DEQUEUED 1466
/*! session: tiered operations scheduled */
-#define WT_STAT_CONN_TIERED_WORK_UNITS_CREATED 1466
+#define WT_STAT_CONN_TIERED_WORK_UNITS_CREATED 1467
/*! session: tiered storage local retention time (secs) */
-#define WT_STAT_CONN_TIERED_RETENTION 1467
+#define WT_STAT_CONN_TIERED_RETENTION 1468
/*! session: tiered storage object size */
-#define WT_STAT_CONN_TIERED_OBJECT_SIZE 1468
+#define WT_STAT_CONN_TIERED_OBJECT_SIZE 1469
/*! transaction: race to read prepared update retry */
-#define WT_STAT_CONN_TXN_READ_RACE_PREPARE_UPDATE 1469
+#define WT_STAT_CONN_TXN_READ_RACE_PREPARE_UPDATE 1470
/*!
* 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 1470
+#define WT_STAT_CONN_TXN_RTS_HS_STOP_OLDER_THAN_NEWER_START 1471
/*! transaction: rollback to stable inconsistent checkpoint */
-#define WT_STAT_CONN_TXN_RTS_INCONSISTENT_CKPT 1471
+#define WT_STAT_CONN_TXN_RTS_INCONSISTENT_CKPT 1472
/*! transaction: rollback to stable keys removed */
-#define WT_STAT_CONN_TXN_RTS_KEYS_REMOVED 1472
+#define WT_STAT_CONN_TXN_RTS_KEYS_REMOVED 1473
/*! transaction: rollback to stable keys restored */
-#define WT_STAT_CONN_TXN_RTS_KEYS_RESTORED 1473
+#define WT_STAT_CONN_TXN_RTS_KEYS_RESTORED 1474
/*! transaction: rollback to stable restored tombstones from history store */
-#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_TOMBSTONES 1474
+#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_TOMBSTONES 1475
/*! transaction: rollback to stable restored updates from history store */
-#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_UPDATES 1475
+#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_UPDATES 1476
/*! transaction: rollback to stable sweeping history store keys */
-#define WT_STAT_CONN_TXN_RTS_SWEEP_HS_KEYS 1476
+#define WT_STAT_CONN_TXN_RTS_SWEEP_HS_KEYS 1477
/*! transaction: rollback to stable updates removed from history store */
-#define WT_STAT_CONN_TXN_RTS_HS_REMOVED 1477
+#define WT_STAT_CONN_TXN_RTS_HS_REMOVED 1478
/*! transaction: transaction checkpoints due to obsolete pages */
-#define WT_STAT_CONN_TXN_CHECKPOINT_OBSOLETE_APPLIED 1478
+#define WT_STAT_CONN_TXN_CHECKPOINT_OBSOLETE_APPLIED 1479
/*! transaction: update conflicts */
-#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1479
+#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1480
/*!
* @}
diff --git a/src/third_party/wiredtiger/src/support/stat.c b/src/third_party/wiredtiger/src/support/stat.c
index 3d156e6e3df..912e00945f5 100644
--- a/src/third_party/wiredtiger/src/support/stat.c
+++ b/src/third_party/wiredtiger/src/support/stat.c
@@ -1249,6 +1249,7 @@ static const char *const __stats_connection_desc[] = {
"reconciliation: records written including a prepare state",
"reconciliation: split bytes currently awaiting free",
"reconciliation: split objects currently awaiting free",
+ "session: flush state races",
"session: flush_tier busy retries",
"session: flush_tier operation calls",
"session: open session count",
@@ -1774,6 +1775,7 @@ __wt_stat_connection_clear_single(WT_CONNECTION_STATS *stats)
stats->rec_time_window_prepared = 0;
/* not clearing rec_split_stashed_bytes */
/* not clearing rec_split_stashed_objects */
+ stats->flush_state_races = 0;
stats->flush_tier_busy = 0;
stats->flush_tier = 0;
/* not clearing session_open */
@@ -2291,6 +2293,7 @@ __wt_stat_connection_aggregate(WT_CONNECTION_STATS **from, WT_CONNECTION_STATS *
to->rec_time_window_prepared += WT_STAT_READ(from, rec_time_window_prepared);
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->flush_tier_busy += WT_STAT_READ(from, flush_tier_busy);
to->flush_tier += WT_STAT_READ(from, flush_tier);
to->session_open += WT_STAT_READ(from, session_open);
diff --git a/src/third_party/wiredtiger/src/tiered/tiered_work.c b/src/third_party/wiredtiger/src/tiered/tiered_work.c
index 69104fddd33..8fa2634fcd2 100644
--- a/src/third_party/wiredtiger/src/tiered/tiered_work.c
+++ b/src/third_party/wiredtiger/src/tiered/tiered_work.c
@@ -9,6 +9,32 @@
#include "wt_internal.h"
/*
+ * __wt_tiered_work_free --
+ * Free a work unit and account for it in the flush state.
+ */
+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();
+ }
+ /* 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);
+ __wt_free(session, entry);
+}
+
+/*
* __wt_tiered_push_work --
* Push a work unit to the queue. Assumes it is passed an already filled out structure.
*/
@@ -16,12 +42,23 @@ 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();
+ }
__wt_cond_signal(session, conn->tiered_cond);
return;
}
diff --git a/src/third_party/wiredtiger/test/suite/test_tiered05.py b/src/third_party/wiredtiger/test/suite/test_tiered05.py
index 097af289a2b..5ac7293cb46 100755
--- a/src/third_party/wiredtiger/test/suite/test_tiered05.py
+++ b/src/third_party/wiredtiger/test/suite/test_tiered05.py
@@ -59,6 +59,7 @@ class test_tiered05(wttest.WiredTigerTestCase):
# Test calling the flush_tier API with a tiered manager. Should get an error.
def test_tiered(self):
self.session.create(self.uri, 'key_format=S')
+ # Allow time for the thread to start up.
time.sleep(self.wait)
msg = "/storage manager thread is configured/"
self.assertRaisesWithMessage(wiredtiger.WiredTigerError,