diff options
Diffstat (limited to 'src/third_party/wiredtiger')
-rw-r--r-- | src/third_party/wiredtiger/dist/api_data.py | 8 | ||||
-rw-r--r-- | src/third_party/wiredtiger/dist/stat_data.py | 1 | ||||
-rw-r--r-- | src/third_party/wiredtiger/import.data | 2 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/config/config_def.c | 5 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/conn/conn_tiered.c | 93 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/include/connection.h | 2 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/include/extern.h | 1 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/include/stat.h | 1 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/include/tiered.h | 12 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/include/wiredtiger.in | 422 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/support/stat.c | 3 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/tiered/tiered_work.c | 37 | ||||
-rwxr-xr-x | src/third_party/wiredtiger/test/suite/test_tiered05.py | 1 |
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, |