From ee10647df9a99f3965350de6a0c0a6959b6d838f Mon Sep 17 00:00:00 2001 From: Luke Chen Date: Tue, 30 Jun 2020 18:35:57 +1000 Subject: Import wiredtiger: 46eb0217d46b98e7631fc463791f9e16c08ae198 from branch mongodb-4.4 ref: 48cbc0a231..46eb0217d4 for: 4.4.0-rc12 WT-6475 Create statistic to track number of cursor prev calls as a result of globally visible tombstones WT-6477 Fix silent failures about run directory never created in format.sh --- src/third_party/wiredtiger/dist/stat_data.py | 2 + src/third_party/wiredtiger/import.data | 2 +- src/third_party/wiredtiger/src/history/hs.c | 12 +- src/third_party/wiredtiger/src/include/stat.h | 2 + .../wiredtiger/src/include/wiredtiger.in | 542 +++++++++++---------- src/third_party/wiredtiger/src/support/stat.c | 7 + src/third_party/wiredtiger/src/txn/txn.c | 2 + .../wiredtiger/src/txn/txn_rollback_to_stable.c | 8 +- src/third_party/wiredtiger/test/format/format.sh | 82 ++-- src/third_party/wiredtiger/test/format/t.c | 6 +- src/third_party/wiredtiger/test/utility/misc.c | 2 +- 11 files changed, 352 insertions(+), 315 deletions(-) diff --git a/src/third_party/wiredtiger/dist/stat_data.py b/src/third_party/wiredtiger/dist/stat_data.py index 494e862c987..0a00d74797d 100644 --- a/src/third_party/wiredtiger/dist/stat_data.py +++ b/src/third_party/wiredtiger/dist/stat_data.py @@ -369,6 +369,8 @@ connection_stats = [ CursorStat('cursor_next_skip_lt_100', 'cursor next calls that skip less than 100 entries'), CursorStat('cursor_next_skip_total', 'Total number of entries skipped by cursor next calls'), CursorStat('cursor_prev', 'cursor prev calls'), + CursorStat('cursor_prev_hs_tombstone', 'cursor prev calls that skip due to a globally visible history store tombstone'), + CursorStat('cursor_prev_hs_tombstone_rts', 'cursor prev calls that skip due to a globally visible history store tombstone in rollback to stable'), CursorStat('cursor_prev_skip_ge_100', 'cursor prev calls that skip greater than or equal to 100 entries'), CursorStat('cursor_prev_skip_lt_100', 'cursor prev calls that skip less than 100 entries'), CursorStat('cursor_prev_skip_total', 'Total number of entries skipped by cursor prev calls'), diff --git a/src/third_party/wiredtiger/import.data b/src/third_party/wiredtiger/import.data index 67ebc04ac39..3c6640654e9 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-4.4", - "commit": "48cbc0a231da8005719ff1a1628aa14372e6f327" + "commit": "46eb0217d46b98e7631fc463791f9e16c08ae198" } diff --git a/src/third_party/wiredtiger/src/history/hs.c b/src/third_party/wiredtiger/src/history/hs.c index f133eacbeec..8c9c39e7f12 100644 --- a/src/third_party/wiredtiger/src/history/hs.c +++ b/src/third_party/wiredtiger/src/history/hs.c @@ -1216,8 +1216,10 @@ __wt_hs_find_upd(WT_SESSION_IMPL *session, WT_ITEM *key, const char *value_forma * we can skip it. */ if (__wt_txn_visible_all( - session, hs_cbt->upd_value->tw.stop_txn, hs_cbt->upd_value->tw.durable_stop_ts)) + session, hs_cbt->upd_value->tw.stop_txn, hs_cbt->upd_value->tw.durable_stop_ts)) { + WT_STAT_CONN_INCR(session, cursor_prev_hs_tombstone); continue; + } /* * If the stop time point of a record is visible to us, we won't be able to see anything for * this entire key. Just jump straight to the end. @@ -1548,8 +1550,10 @@ __hs_fixup_out_of_order_from_pos(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, * we can skip it. */ if (__wt_txn_visible_all( - session, hs_cbt->upd_value->tw.stop_txn, hs_cbt->upd_value->tw.durable_stop_ts)) + session, hs_cbt->upd_value->tw.stop_txn, hs_cbt->upd_value->tw.durable_stop_ts)) { + WT_STAT_CONN_INCR(session, cursor_prev_hs_tombstone); continue; + } /* * If we got here, we've got out-of-order updates in the history store. * @@ -1666,8 +1670,10 @@ __hs_delete_key_from_pos( * we can skip it. */ if (__wt_txn_visible_all( - session, hs_cbt->upd_value->tw.stop_txn, hs_cbt->upd_value->tw.durable_stop_ts)) + session, hs_cbt->upd_value->tw.stop_txn, hs_cbt->upd_value->tw.durable_stop_ts)) { + WT_STAT_CONN_INCR(session, cursor_prev_hs_tombstone); continue; + } /* * Since we're using internal functions to modify the row structure, we need to manually set * the comparison to an exact match. diff --git a/src/third_party/wiredtiger/src/include/stat.h b/src/third_party/wiredtiger/src/include/stat.h index ca249170b10..ee0e4778457 100644 --- a/src/third_party/wiredtiger/src/include/stat.h +++ b/src/third_party/wiredtiger/src/include/stat.h @@ -499,6 +499,8 @@ struct __wt_connection_stats { int64_t cursor_next_skip_lt_100; int64_t cursor_restart; int64_t cursor_prev; + int64_t cursor_prev_hs_tombstone; + int64_t cursor_prev_hs_tombstone_rts; int64_t cursor_prev_skip_ge_100; int64_t cursor_prev_skip_lt_100; int64_t cursor_remove; diff --git a/src/third_party/wiredtiger/src/include/wiredtiger.in b/src/third_party/wiredtiger/src/include/wiredtiger.in index 72d223e66b5..b740d1966be 100644 --- a/src/third_party/wiredtiger/src/include/wiredtiger.in +++ b/src/third_party/wiredtiger/src/include/wiredtiger.in @@ -5424,628 +5424,638 @@ extern int wiredtiger_extension_terminate(WT_CONNECTION *connection); #define WT_STAT_CONN_CURSOR_RESTART 1202 /*! cursor: cursor prev calls */ #define WT_STAT_CONN_CURSOR_PREV 1203 +/*! + * cursor: cursor prev calls that skip due to a globally visible history + * store tombstone + */ +#define WT_STAT_CONN_CURSOR_PREV_HS_TOMBSTONE 1204 +/*! + * cursor: cursor prev calls that skip due to a globally visible history + * store tombstone in rollback to stable + */ +#define WT_STAT_CONN_CURSOR_PREV_HS_TOMBSTONE_RTS 1205 /*! * cursor: cursor prev calls that skip greater than or equal to 100 * entries */ -#define WT_STAT_CONN_CURSOR_PREV_SKIP_GE_100 1204 +#define WT_STAT_CONN_CURSOR_PREV_SKIP_GE_100 1206 /*! cursor: cursor prev calls that skip less than 100 entries */ -#define WT_STAT_CONN_CURSOR_PREV_SKIP_LT_100 1205 +#define WT_STAT_CONN_CURSOR_PREV_SKIP_LT_100 1207 /*! cursor: cursor remove calls */ -#define WT_STAT_CONN_CURSOR_REMOVE 1206 +#define WT_STAT_CONN_CURSOR_REMOVE 1208 /*! cursor: cursor remove key bytes removed */ -#define WT_STAT_CONN_CURSOR_REMOVE_BYTES 1207 +#define WT_STAT_CONN_CURSOR_REMOVE_BYTES 1209 /*! cursor: cursor reserve calls */ -#define WT_STAT_CONN_CURSOR_RESERVE 1208 +#define WT_STAT_CONN_CURSOR_RESERVE 1210 /*! cursor: cursor reset calls */ -#define WT_STAT_CONN_CURSOR_RESET 1209 +#define WT_STAT_CONN_CURSOR_RESET 1211 /*! cursor: cursor search calls */ -#define WT_STAT_CONN_CURSOR_SEARCH 1210 +#define WT_STAT_CONN_CURSOR_SEARCH 1212 /*! cursor: cursor search history store calls */ -#define WT_STAT_CONN_CURSOR_SEARCH_HS 1211 +#define WT_STAT_CONN_CURSOR_SEARCH_HS 1213 /*! cursor: cursor search near calls */ -#define WT_STAT_CONN_CURSOR_SEARCH_NEAR 1212 +#define WT_STAT_CONN_CURSOR_SEARCH_NEAR 1214 /*! cursor: cursor sweep buckets */ -#define WT_STAT_CONN_CURSOR_SWEEP_BUCKETS 1213 +#define WT_STAT_CONN_CURSOR_SWEEP_BUCKETS 1215 /*! cursor: cursor sweep cursors closed */ -#define WT_STAT_CONN_CURSOR_SWEEP_CLOSED 1214 +#define WT_STAT_CONN_CURSOR_SWEEP_CLOSED 1216 /*! cursor: cursor sweep cursors examined */ -#define WT_STAT_CONN_CURSOR_SWEEP_EXAMINED 1215 +#define WT_STAT_CONN_CURSOR_SWEEP_EXAMINED 1217 /*! cursor: cursor sweeps */ -#define WT_STAT_CONN_CURSOR_SWEEP 1216 +#define WT_STAT_CONN_CURSOR_SWEEP 1218 /*! cursor: cursor truncate calls */ -#define WT_STAT_CONN_CURSOR_TRUNCATE 1217 +#define WT_STAT_CONN_CURSOR_TRUNCATE 1219 /*! cursor: cursor update calls */ -#define WT_STAT_CONN_CURSOR_UPDATE 1218 +#define WT_STAT_CONN_CURSOR_UPDATE 1220 /*! cursor: cursor update key and value bytes */ -#define WT_STAT_CONN_CURSOR_UPDATE_BYTES 1219 +#define WT_STAT_CONN_CURSOR_UPDATE_BYTES 1221 /*! cursor: cursor update value size change */ -#define WT_STAT_CONN_CURSOR_UPDATE_BYTES_CHANGED 1220 +#define WT_STAT_CONN_CURSOR_UPDATE_BYTES_CHANGED 1222 /*! cursor: cursors reused from cache */ -#define WT_STAT_CONN_CURSOR_REOPEN 1221 +#define WT_STAT_CONN_CURSOR_REOPEN 1223 /*! cursor: open cursor count */ -#define WT_STAT_CONN_CURSOR_OPEN_COUNT 1222 +#define WT_STAT_CONN_CURSOR_OPEN_COUNT 1224 /*! data-handle: connection data handle size */ -#define WT_STAT_CONN_DH_CONN_HANDLE_SIZE 1223 +#define WT_STAT_CONN_DH_CONN_HANDLE_SIZE 1225 /*! data-handle: connection data handles currently active */ -#define WT_STAT_CONN_DH_CONN_HANDLE_COUNT 1224 +#define WT_STAT_CONN_DH_CONN_HANDLE_COUNT 1226 /*! data-handle: connection sweep candidate became referenced */ -#define WT_STAT_CONN_DH_SWEEP_REF 1225 +#define WT_STAT_CONN_DH_SWEEP_REF 1227 /*! data-handle: connection sweep dhandles closed */ -#define WT_STAT_CONN_DH_SWEEP_CLOSE 1226 +#define WT_STAT_CONN_DH_SWEEP_CLOSE 1228 /*! data-handle: connection sweep dhandles removed from hash list */ -#define WT_STAT_CONN_DH_SWEEP_REMOVE 1227 +#define WT_STAT_CONN_DH_SWEEP_REMOVE 1229 /*! data-handle: connection sweep time-of-death sets */ -#define WT_STAT_CONN_DH_SWEEP_TOD 1228 +#define WT_STAT_CONN_DH_SWEEP_TOD 1230 /*! data-handle: connection sweeps */ -#define WT_STAT_CONN_DH_SWEEPS 1229 +#define WT_STAT_CONN_DH_SWEEPS 1231 /*! data-handle: session dhandles swept */ -#define WT_STAT_CONN_DH_SESSION_HANDLES 1230 +#define WT_STAT_CONN_DH_SESSION_HANDLES 1232 /*! data-handle: session sweep attempts */ -#define WT_STAT_CONN_DH_SESSION_SWEEPS 1231 +#define WT_STAT_CONN_DH_SESSION_SWEEPS 1233 /*! history: history pages added for eviction during garbage collection */ -#define WT_STAT_CONN_HS_GC_PAGES_EVICT 1232 +#define WT_STAT_CONN_HS_GC_PAGES_EVICT 1234 /*! history: history pages removed for garbage collection */ -#define WT_STAT_CONN_HS_GC_PAGES_REMOVED 1233 +#define WT_STAT_CONN_HS_GC_PAGES_REMOVED 1235 /*! history: history pages visited for garbage collection */ -#define WT_STAT_CONN_HS_GC_PAGES_VISITED 1234 +#define WT_STAT_CONN_HS_GC_PAGES_VISITED 1236 /*! lock: checkpoint lock acquisitions */ -#define WT_STAT_CONN_LOCK_CHECKPOINT_COUNT 1235 +#define WT_STAT_CONN_LOCK_CHECKPOINT_COUNT 1237 /*! lock: checkpoint lock application thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_APPLICATION 1236 +#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_APPLICATION 1238 /*! lock: checkpoint lock internal thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_INTERNAL 1237 +#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_INTERNAL 1239 /*! lock: dhandle lock application thread time waiting (usecs) */ -#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_APPLICATION 1238 +#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_APPLICATION 1240 /*! lock: dhandle lock internal thread time waiting (usecs) */ -#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_INTERNAL 1239 +#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_INTERNAL 1241 /*! lock: dhandle read lock acquisitions */ -#define WT_STAT_CONN_LOCK_DHANDLE_READ_COUNT 1240 +#define WT_STAT_CONN_LOCK_DHANDLE_READ_COUNT 1242 /*! lock: dhandle write lock acquisitions */ -#define WT_STAT_CONN_LOCK_DHANDLE_WRITE_COUNT 1241 +#define WT_STAT_CONN_LOCK_DHANDLE_WRITE_COUNT 1243 /*! * lock: durable timestamp queue lock application thread time waiting * (usecs) */ -#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_APPLICATION 1242 +#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_APPLICATION 1244 /*! * lock: durable timestamp queue lock internal thread time waiting * (usecs) */ -#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_INTERNAL 1243 +#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_INTERNAL 1245 /*! lock: durable timestamp queue read lock acquisitions */ -#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_READ_COUNT 1244 +#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_READ_COUNT 1246 /*! lock: durable timestamp queue write lock acquisitions */ -#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WRITE_COUNT 1245 +#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WRITE_COUNT 1247 /*! lock: metadata lock acquisitions */ -#define WT_STAT_CONN_LOCK_METADATA_COUNT 1246 +#define WT_STAT_CONN_LOCK_METADATA_COUNT 1248 /*! lock: metadata lock application thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_METADATA_WAIT_APPLICATION 1247 +#define WT_STAT_CONN_LOCK_METADATA_WAIT_APPLICATION 1249 /*! lock: metadata lock internal thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_METADATA_WAIT_INTERNAL 1248 +#define WT_STAT_CONN_LOCK_METADATA_WAIT_INTERNAL 1250 /*! * lock: read timestamp queue lock application thread time waiting * (usecs) */ -#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_APPLICATION 1249 +#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_APPLICATION 1251 /*! lock: read timestamp queue lock internal thread time waiting (usecs) */ -#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_INTERNAL 1250 +#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_INTERNAL 1252 /*! lock: read timestamp queue read lock acquisitions */ -#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_READ_COUNT 1251 +#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_READ_COUNT 1253 /*! lock: read timestamp queue write lock acquisitions */ -#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WRITE_COUNT 1252 +#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WRITE_COUNT 1254 /*! lock: schema lock acquisitions */ -#define WT_STAT_CONN_LOCK_SCHEMA_COUNT 1253 +#define WT_STAT_CONN_LOCK_SCHEMA_COUNT 1255 /*! lock: schema lock application thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_APPLICATION 1254 +#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_APPLICATION 1256 /*! lock: schema lock internal thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_INTERNAL 1255 +#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_INTERNAL 1257 /*! * lock: table lock application thread time waiting for the table lock * (usecs) */ -#define WT_STAT_CONN_LOCK_TABLE_WAIT_APPLICATION 1256 +#define WT_STAT_CONN_LOCK_TABLE_WAIT_APPLICATION 1258 /*! * lock: table lock internal thread time waiting for the table lock * (usecs) */ -#define WT_STAT_CONN_LOCK_TABLE_WAIT_INTERNAL 1257 +#define WT_STAT_CONN_LOCK_TABLE_WAIT_INTERNAL 1259 /*! lock: table read lock acquisitions */ -#define WT_STAT_CONN_LOCK_TABLE_READ_COUNT 1258 +#define WT_STAT_CONN_LOCK_TABLE_READ_COUNT 1260 /*! lock: table write lock acquisitions */ -#define WT_STAT_CONN_LOCK_TABLE_WRITE_COUNT 1259 +#define WT_STAT_CONN_LOCK_TABLE_WRITE_COUNT 1261 /*! lock: txn global lock application thread time waiting (usecs) */ -#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_APPLICATION 1260 +#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_APPLICATION 1262 /*! lock: txn global lock internal thread time waiting (usecs) */ -#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_INTERNAL 1261 +#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_INTERNAL 1263 /*! lock: txn global read lock acquisitions */ -#define WT_STAT_CONN_LOCK_TXN_GLOBAL_READ_COUNT 1262 +#define WT_STAT_CONN_LOCK_TXN_GLOBAL_READ_COUNT 1264 /*! lock: txn global write lock acquisitions */ -#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WRITE_COUNT 1263 +#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WRITE_COUNT 1265 /*! log: busy returns attempting to switch slots */ -#define WT_STAT_CONN_LOG_SLOT_SWITCH_BUSY 1264 +#define WT_STAT_CONN_LOG_SLOT_SWITCH_BUSY 1266 /*! log: force archive time sleeping (usecs) */ -#define WT_STAT_CONN_LOG_FORCE_ARCHIVE_SLEEP 1265 +#define WT_STAT_CONN_LOG_FORCE_ARCHIVE_SLEEP 1267 /*! log: log bytes of payload data */ -#define WT_STAT_CONN_LOG_BYTES_PAYLOAD 1266 +#define WT_STAT_CONN_LOG_BYTES_PAYLOAD 1268 /*! log: log bytes written */ -#define WT_STAT_CONN_LOG_BYTES_WRITTEN 1267 +#define WT_STAT_CONN_LOG_BYTES_WRITTEN 1269 /*! log: log files manually zero-filled */ -#define WT_STAT_CONN_LOG_ZERO_FILLS 1268 +#define WT_STAT_CONN_LOG_ZERO_FILLS 1270 /*! log: log flush operations */ -#define WT_STAT_CONN_LOG_FLUSH 1269 +#define WT_STAT_CONN_LOG_FLUSH 1271 /*! log: log force write operations */ -#define WT_STAT_CONN_LOG_FORCE_WRITE 1270 +#define WT_STAT_CONN_LOG_FORCE_WRITE 1272 /*! log: log force write operations skipped */ -#define WT_STAT_CONN_LOG_FORCE_WRITE_SKIP 1271 +#define WT_STAT_CONN_LOG_FORCE_WRITE_SKIP 1273 /*! log: log records compressed */ -#define WT_STAT_CONN_LOG_COMPRESS_WRITES 1272 +#define WT_STAT_CONN_LOG_COMPRESS_WRITES 1274 /*! log: log records not compressed */ -#define WT_STAT_CONN_LOG_COMPRESS_WRITE_FAILS 1273 +#define WT_STAT_CONN_LOG_COMPRESS_WRITE_FAILS 1275 /*! log: log records too small to compress */ -#define WT_STAT_CONN_LOG_COMPRESS_SMALL 1274 +#define WT_STAT_CONN_LOG_COMPRESS_SMALL 1276 /*! log: log release advances write LSN */ -#define WT_STAT_CONN_LOG_RELEASE_WRITE_LSN 1275 +#define WT_STAT_CONN_LOG_RELEASE_WRITE_LSN 1277 /*! log: log scan operations */ -#define WT_STAT_CONN_LOG_SCANS 1276 +#define WT_STAT_CONN_LOG_SCANS 1278 /*! log: log scan records requiring two reads */ -#define WT_STAT_CONN_LOG_SCAN_REREADS 1277 +#define WT_STAT_CONN_LOG_SCAN_REREADS 1279 /*! log: log server thread advances write LSN */ -#define WT_STAT_CONN_LOG_WRITE_LSN 1278 +#define WT_STAT_CONN_LOG_WRITE_LSN 1280 /*! log: log server thread write LSN walk skipped */ -#define WT_STAT_CONN_LOG_WRITE_LSN_SKIP 1279 +#define WT_STAT_CONN_LOG_WRITE_LSN_SKIP 1281 /*! log: log sync operations */ -#define WT_STAT_CONN_LOG_SYNC 1280 +#define WT_STAT_CONN_LOG_SYNC 1282 /*! log: log sync time duration (usecs) */ -#define WT_STAT_CONN_LOG_SYNC_DURATION 1281 +#define WT_STAT_CONN_LOG_SYNC_DURATION 1283 /*! log: log sync_dir operations */ -#define WT_STAT_CONN_LOG_SYNC_DIR 1282 +#define WT_STAT_CONN_LOG_SYNC_DIR 1284 /*! log: log sync_dir time duration (usecs) */ -#define WT_STAT_CONN_LOG_SYNC_DIR_DURATION 1283 +#define WT_STAT_CONN_LOG_SYNC_DIR_DURATION 1285 /*! log: log write operations */ -#define WT_STAT_CONN_LOG_WRITES 1284 +#define WT_STAT_CONN_LOG_WRITES 1286 /*! log: logging bytes consolidated */ -#define WT_STAT_CONN_LOG_SLOT_CONSOLIDATED 1285 +#define WT_STAT_CONN_LOG_SLOT_CONSOLIDATED 1287 /*! log: maximum log file size */ -#define WT_STAT_CONN_LOG_MAX_FILESIZE 1286 +#define WT_STAT_CONN_LOG_MAX_FILESIZE 1288 /*! log: number of pre-allocated log files to create */ -#define WT_STAT_CONN_LOG_PREALLOC_MAX 1287 +#define WT_STAT_CONN_LOG_PREALLOC_MAX 1289 /*! log: pre-allocated log files not ready and missed */ -#define WT_STAT_CONN_LOG_PREALLOC_MISSED 1288 +#define WT_STAT_CONN_LOG_PREALLOC_MISSED 1290 /*! log: pre-allocated log files prepared */ -#define WT_STAT_CONN_LOG_PREALLOC_FILES 1289 +#define WT_STAT_CONN_LOG_PREALLOC_FILES 1291 /*! log: pre-allocated log files used */ -#define WT_STAT_CONN_LOG_PREALLOC_USED 1290 +#define WT_STAT_CONN_LOG_PREALLOC_USED 1292 /*! log: records processed by log scan */ -#define WT_STAT_CONN_LOG_SCAN_RECORDS 1291 +#define WT_STAT_CONN_LOG_SCAN_RECORDS 1293 /*! log: slot close lost race */ -#define WT_STAT_CONN_LOG_SLOT_CLOSE_RACE 1292 +#define WT_STAT_CONN_LOG_SLOT_CLOSE_RACE 1294 /*! log: slot close unbuffered waits */ -#define WT_STAT_CONN_LOG_SLOT_CLOSE_UNBUF 1293 +#define WT_STAT_CONN_LOG_SLOT_CLOSE_UNBUF 1295 /*! log: slot closures */ -#define WT_STAT_CONN_LOG_SLOT_CLOSES 1294 +#define WT_STAT_CONN_LOG_SLOT_CLOSES 1296 /*! log: slot join atomic update races */ -#define WT_STAT_CONN_LOG_SLOT_RACES 1295 +#define WT_STAT_CONN_LOG_SLOT_RACES 1297 /*! log: slot join calls atomic updates raced */ -#define WT_STAT_CONN_LOG_SLOT_YIELD_RACE 1296 +#define WT_STAT_CONN_LOG_SLOT_YIELD_RACE 1298 /*! log: slot join calls did not yield */ -#define WT_STAT_CONN_LOG_SLOT_IMMEDIATE 1297 +#define WT_STAT_CONN_LOG_SLOT_IMMEDIATE 1299 /*! log: slot join calls found active slot closed */ -#define WT_STAT_CONN_LOG_SLOT_YIELD_CLOSE 1298 +#define WT_STAT_CONN_LOG_SLOT_YIELD_CLOSE 1300 /*! log: slot join calls slept */ -#define WT_STAT_CONN_LOG_SLOT_YIELD_SLEEP 1299 +#define WT_STAT_CONN_LOG_SLOT_YIELD_SLEEP 1301 /*! log: slot join calls yielded */ -#define WT_STAT_CONN_LOG_SLOT_YIELD 1300 +#define WT_STAT_CONN_LOG_SLOT_YIELD 1302 /*! log: slot join found active slot closed */ -#define WT_STAT_CONN_LOG_SLOT_ACTIVE_CLOSED 1301 +#define WT_STAT_CONN_LOG_SLOT_ACTIVE_CLOSED 1303 /*! log: slot joins yield time (usecs) */ -#define WT_STAT_CONN_LOG_SLOT_YIELD_DURATION 1302 +#define WT_STAT_CONN_LOG_SLOT_YIELD_DURATION 1304 /*! log: slot transitions unable to find free slot */ -#define WT_STAT_CONN_LOG_SLOT_NO_FREE_SLOTS 1303 +#define WT_STAT_CONN_LOG_SLOT_NO_FREE_SLOTS 1305 /*! log: slot unbuffered writes */ -#define WT_STAT_CONN_LOG_SLOT_UNBUFFERED 1304 +#define WT_STAT_CONN_LOG_SLOT_UNBUFFERED 1306 /*! log: total in-memory size of compressed records */ -#define WT_STAT_CONN_LOG_COMPRESS_MEM 1305 +#define WT_STAT_CONN_LOG_COMPRESS_MEM 1307 /*! log: total log buffer size */ -#define WT_STAT_CONN_LOG_BUFFER_SIZE 1306 +#define WT_STAT_CONN_LOG_BUFFER_SIZE 1308 /*! log: total size of compressed records */ -#define WT_STAT_CONN_LOG_COMPRESS_LEN 1307 +#define WT_STAT_CONN_LOG_COMPRESS_LEN 1309 /*! log: written slots coalesced */ -#define WT_STAT_CONN_LOG_SLOT_COALESCED 1308 +#define WT_STAT_CONN_LOG_SLOT_COALESCED 1310 /*! log: yields waiting for previous log file close */ -#define WT_STAT_CONN_LOG_CLOSE_YIELDS 1309 +#define WT_STAT_CONN_LOG_CLOSE_YIELDS 1311 /*! perf: file system read latency histogram (bucket 1) - 10-49ms */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT50 1310 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT50 1312 /*! perf: file system read latency histogram (bucket 2) - 50-99ms */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT100 1311 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT100 1313 /*! perf: file system read latency histogram (bucket 3) - 100-249ms */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT250 1312 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT250 1314 /*! perf: file system read latency histogram (bucket 4) - 250-499ms */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT500 1313 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT500 1315 /*! perf: file system read latency histogram (bucket 5) - 500-999ms */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT1000 1314 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT1000 1316 /*! perf: file system read latency histogram (bucket 6) - 1000ms+ */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_GT1000 1315 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_GT1000 1317 /*! perf: file system write latency histogram (bucket 1) - 10-49ms */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT50 1316 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT50 1318 /*! perf: file system write latency histogram (bucket 2) - 50-99ms */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT100 1317 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT100 1319 /*! perf: file system write latency histogram (bucket 3) - 100-249ms */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT250 1318 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT250 1320 /*! perf: file system write latency histogram (bucket 4) - 250-499ms */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT500 1319 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT500 1321 /*! perf: file system write latency histogram (bucket 5) - 500-999ms */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT1000 1320 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT1000 1322 /*! perf: file system write latency histogram (bucket 6) - 1000ms+ */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_GT1000 1321 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_GT1000 1323 /*! perf: operation read latency histogram (bucket 1) - 100-249us */ -#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT250 1322 +#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT250 1324 /*! perf: operation read latency histogram (bucket 2) - 250-499us */ -#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT500 1323 +#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT500 1325 /*! perf: operation read latency histogram (bucket 3) - 500-999us */ -#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT1000 1324 +#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT1000 1326 /*! perf: operation read latency histogram (bucket 4) - 1000-9999us */ -#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT10000 1325 +#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT10000 1327 /*! perf: operation read latency histogram (bucket 5) - 10000us+ */ -#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_GT10000 1326 +#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_GT10000 1328 /*! perf: operation write latency histogram (bucket 1) - 100-249us */ -#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT250 1327 +#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT250 1329 /*! perf: operation write latency histogram (bucket 2) - 250-499us */ -#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT500 1328 +#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT500 1330 /*! perf: operation write latency histogram (bucket 3) - 500-999us */ -#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT1000 1329 +#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT1000 1331 /*! perf: operation write latency histogram (bucket 4) - 1000-9999us */ -#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT10000 1330 +#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT10000 1332 /*! perf: operation write latency histogram (bucket 5) - 10000us+ */ -#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_GT10000 1331 +#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_GT10000 1333 /*! reconciliation: approximate byte size of timestamps in pages written */ -#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TS 1332 +#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TS 1334 /*! * reconciliation: approximate byte size of transaction IDs in pages * written */ -#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TXN 1333 +#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TXN 1335 /*! reconciliation: fast-path pages deleted */ -#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1334 +#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1336 /*! reconciliation: maximum seconds spent in a reconciliation call */ -#define WT_STAT_CONN_REC_MAXIMUM_SECONDS 1335 +#define WT_STAT_CONN_REC_MAXIMUM_SECONDS 1337 /*! reconciliation: page reconciliation calls */ -#define WT_STAT_CONN_REC_PAGES 1336 +#define WT_STAT_CONN_REC_PAGES 1338 /*! reconciliation: page reconciliation calls for eviction */ -#define WT_STAT_CONN_REC_PAGES_EVICTION 1337 +#define WT_STAT_CONN_REC_PAGES_EVICTION 1339 /*! * reconciliation: page reconciliation calls that resulted in values with * prepared transaction metadata */ -#define WT_STAT_CONN_REC_PAGES_WITH_PREPARE 1338 +#define WT_STAT_CONN_REC_PAGES_WITH_PREPARE 1340 /*! * reconciliation: page reconciliation calls that resulted in values with * timestamps */ -#define WT_STAT_CONN_REC_PAGES_WITH_TS 1339 +#define WT_STAT_CONN_REC_PAGES_WITH_TS 1341 /*! * reconciliation: page reconciliation calls that resulted in values with * transaction ids */ -#define WT_STAT_CONN_REC_PAGES_WITH_TXN 1340 +#define WT_STAT_CONN_REC_PAGES_WITH_TXN 1342 /*! reconciliation: pages deleted */ -#define WT_STAT_CONN_REC_PAGE_DELETE 1341 +#define WT_STAT_CONN_REC_PAGE_DELETE 1343 /*! * reconciliation: pages written including an aggregated newest start * durable timestamp */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 1342 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 1344 /*! * reconciliation: pages written including an aggregated newest stop * durable timestamp */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 1343 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 1345 /*! * reconciliation: pages written including an aggregated newest stop * timestamp */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TS 1344 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TS 1346 /*! * reconciliation: pages written including an aggregated newest stop * transaction ID */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TXN 1345 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TXN 1347 /*! * reconciliation: pages written including an aggregated oldest start * timestamp */ -#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TS 1346 +#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TS 1348 /*! * reconciliation: pages written including an aggregated oldest start * transaction ID */ -#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TXN 1347 +#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TXN 1349 /*! reconciliation: pages written including an aggregated prepare */ -#define WT_STAT_CONN_REC_TIME_AGGR_PREPARED 1348 +#define WT_STAT_CONN_REC_TIME_AGGR_PREPARED 1350 /*! reconciliation: pages written including at least one prepare state */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_PREPARED 1349 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_PREPARED 1351 /*! * reconciliation: pages written including at least one start durable * timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 1350 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 1352 /*! reconciliation: pages written including at least one start timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TS 1351 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TS 1353 /*! * reconciliation: pages written including at least one start transaction * ID */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TXN 1352 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TXN 1354 /*! * reconciliation: pages written including at least one stop durable * timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 1353 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 1355 /*! reconciliation: pages written including at least one stop timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TS 1354 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TS 1356 /*! * reconciliation: pages written including at least one stop transaction * ID */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TXN 1355 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TXN 1357 /*! reconciliation: records written including a prepare state */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PREPARED 1356 +#define WT_STAT_CONN_REC_TIME_WINDOW_PREPARED 1358 /*! reconciliation: records written including a start durable timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_START_TS 1357 +#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_START_TS 1359 /*! reconciliation: records written including a start timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_START_TS 1358 +#define WT_STAT_CONN_REC_TIME_WINDOW_START_TS 1360 /*! reconciliation: records written including a start transaction ID */ -#define WT_STAT_CONN_REC_TIME_WINDOW_START_TXN 1359 +#define WT_STAT_CONN_REC_TIME_WINDOW_START_TXN 1361 /*! reconciliation: records written including a stop durable timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_STOP_TS 1360 +#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_STOP_TS 1362 /*! reconciliation: records written including a stop timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TS 1361 +#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TS 1363 /*! reconciliation: records written including a stop transaction ID */ -#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TXN 1362 +#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TXN 1364 /*! reconciliation: split bytes currently awaiting free */ -#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1363 +#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1365 /*! reconciliation: split objects currently awaiting free */ -#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1364 +#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1366 /*! session: open session count */ -#define WT_STAT_CONN_SESSION_OPEN 1365 +#define WT_STAT_CONN_SESSION_OPEN 1367 /*! session: session query timestamp calls */ -#define WT_STAT_CONN_SESSION_QUERY_TS 1366 +#define WT_STAT_CONN_SESSION_QUERY_TS 1368 /*! session: table alter failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1367 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1369 /*! session: table alter successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1368 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1370 /*! session: table alter unchanged and skipped */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1369 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1371 /*! session: table compact failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1370 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1372 /*! session: table compact successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1371 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1373 /*! session: table create failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1372 +#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1374 /*! session: table create successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1373 +#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1375 /*! session: table drop failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1374 +#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1376 /*! session: table drop successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1375 +#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1377 /*! session: table import failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_IMPORT_FAIL 1376 +#define WT_STAT_CONN_SESSION_TABLE_IMPORT_FAIL 1378 /*! session: table import successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_IMPORT_SUCCESS 1377 +#define WT_STAT_CONN_SESSION_TABLE_IMPORT_SUCCESS 1379 /*! session: table rebalance failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_FAIL 1378 +#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_FAIL 1380 /*! session: table rebalance successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_SUCCESS 1379 +#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_SUCCESS 1381 /*! session: table rename failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1380 +#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1382 /*! session: table rename successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1381 +#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1383 /*! session: table salvage failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1382 +#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1384 /*! session: table salvage successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1383 +#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1385 /*! session: table truncate failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1384 +#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1386 /*! session: table truncate successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1385 +#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1387 /*! session: table verify failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1386 +#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1388 /*! session: table verify successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1387 +#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1389 /*! thread-state: active filesystem fsync calls */ -#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1388 +#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1390 /*! thread-state: active filesystem read calls */ -#define WT_STAT_CONN_THREAD_READ_ACTIVE 1389 +#define WT_STAT_CONN_THREAD_READ_ACTIVE 1391 /*! thread-state: active filesystem write calls */ -#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1390 +#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1392 /*! thread-yield: application thread time evicting (usecs) */ -#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1391 +#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1393 /*! thread-yield: application thread time waiting for cache (usecs) */ -#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1392 +#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1394 /*! * thread-yield: connection close blocked waiting for transaction state * stabilization */ -#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1393 +#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1395 /*! thread-yield: connection close yielded for lsm manager shutdown */ -#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1394 +#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1396 /*! thread-yield: data handle lock yielded */ -#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1395 +#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1397 /*! * thread-yield: get reference for page index and slot time sleeping * (usecs) */ -#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1396 +#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1398 /*! thread-yield: log server sync yielded for log write */ -#define WT_STAT_CONN_LOG_SERVER_SYNC_BLOCKED 1397 +#define WT_STAT_CONN_LOG_SERVER_SYNC_BLOCKED 1399 /*! thread-yield: page access yielded due to prepare state change */ -#define WT_STAT_CONN_PREPARED_TRANSITION_BLOCKED_PAGE 1398 +#define WT_STAT_CONN_PREPARED_TRANSITION_BLOCKED_PAGE 1400 /*! thread-yield: page acquire busy blocked */ -#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1399 +#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1401 /*! thread-yield: page acquire eviction blocked */ -#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1400 +#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1402 /*! thread-yield: page acquire locked blocked */ -#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1401 +#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1403 /*! thread-yield: page acquire read blocked */ -#define WT_STAT_CONN_PAGE_READ_BLOCKED 1402 +#define WT_STAT_CONN_PAGE_READ_BLOCKED 1404 /*! thread-yield: page acquire time sleeping (usecs) */ -#define WT_STAT_CONN_PAGE_SLEEP 1403 +#define WT_STAT_CONN_PAGE_SLEEP 1405 /*! * thread-yield: page delete rollback time sleeping for state change * (usecs) */ -#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1404 +#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1406 /*! thread-yield: page reconciliation yielded due to child modification */ -#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1405 +#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1407 /*! transaction: Number of prepared updates */ -#define WT_STAT_CONN_TXN_PREPARED_UPDATES_COUNT 1406 +#define WT_STAT_CONN_TXN_PREPARED_UPDATES_COUNT 1408 /*! transaction: durable timestamp queue entries walked */ -#define WT_STAT_CONN_TXN_DURABLE_QUEUE_WALKED 1407 +#define WT_STAT_CONN_TXN_DURABLE_QUEUE_WALKED 1409 /*! transaction: durable timestamp queue insert to empty */ -#define WT_STAT_CONN_TXN_DURABLE_QUEUE_EMPTY 1408 +#define WT_STAT_CONN_TXN_DURABLE_QUEUE_EMPTY 1410 /*! transaction: durable timestamp queue inserts to head */ -#define WT_STAT_CONN_TXN_DURABLE_QUEUE_HEAD 1409 +#define WT_STAT_CONN_TXN_DURABLE_QUEUE_HEAD 1411 /*! transaction: durable timestamp queue inserts total */ -#define WT_STAT_CONN_TXN_DURABLE_QUEUE_INSERTS 1410 +#define WT_STAT_CONN_TXN_DURABLE_QUEUE_INSERTS 1412 /*! transaction: durable timestamp queue length */ -#define WT_STAT_CONN_TXN_DURABLE_QUEUE_LEN 1411 +#define WT_STAT_CONN_TXN_DURABLE_QUEUE_LEN 1413 /*! transaction: prepared transactions */ -#define WT_STAT_CONN_TXN_PREPARE 1412 +#define WT_STAT_CONN_TXN_PREPARE 1414 /*! transaction: prepared transactions committed */ -#define WT_STAT_CONN_TXN_PREPARE_COMMIT 1413 +#define WT_STAT_CONN_TXN_PREPARE_COMMIT 1415 /*! transaction: prepared transactions currently active */ -#define WT_STAT_CONN_TXN_PREPARE_ACTIVE 1414 +#define WT_STAT_CONN_TXN_PREPARE_ACTIVE 1416 /*! transaction: prepared transactions rolled back */ -#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK 1415 +#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK 1417 /*! transaction: query timestamp calls */ -#define WT_STAT_CONN_TXN_QUERY_TS 1416 +#define WT_STAT_CONN_TXN_QUERY_TS 1418 /*! transaction: read timestamp queue entries walked */ -#define WT_STAT_CONN_TXN_READ_QUEUE_WALKED 1417 +#define WT_STAT_CONN_TXN_READ_QUEUE_WALKED 1419 /*! transaction: read timestamp queue insert to empty */ -#define WT_STAT_CONN_TXN_READ_QUEUE_EMPTY 1418 +#define WT_STAT_CONN_TXN_READ_QUEUE_EMPTY 1420 /*! transaction: read timestamp queue inserts to head */ -#define WT_STAT_CONN_TXN_READ_QUEUE_HEAD 1419 +#define WT_STAT_CONN_TXN_READ_QUEUE_HEAD 1421 /*! transaction: read timestamp queue inserts total */ -#define WT_STAT_CONN_TXN_READ_QUEUE_INSERTS 1420 +#define WT_STAT_CONN_TXN_READ_QUEUE_INSERTS 1422 /*! transaction: read timestamp queue length */ -#define WT_STAT_CONN_TXN_READ_QUEUE_LEN 1421 +#define WT_STAT_CONN_TXN_READ_QUEUE_LEN 1423 /*! transaction: rollback to stable calls */ -#define WT_STAT_CONN_TXN_RTS 1422 +#define WT_STAT_CONN_TXN_RTS 1424 /*! * transaction: rollback to stable hs records with stop timestamps older * than newer records */ -#define WT_STAT_CONN_TXN_RTS_HS_STOP_OLDER_THAN_NEWER_START 1423 +#define WT_STAT_CONN_TXN_RTS_HS_STOP_OLDER_THAN_NEWER_START 1425 /*! transaction: rollback to stable keys removed */ -#define WT_STAT_CONN_TXN_RTS_KEYS_REMOVED 1424 +#define WT_STAT_CONN_TXN_RTS_KEYS_REMOVED 1426 /*! transaction: rollback to stable keys restored */ -#define WT_STAT_CONN_TXN_RTS_KEYS_RESTORED 1425 +#define WT_STAT_CONN_TXN_RTS_KEYS_RESTORED 1427 /*! transaction: rollback to stable pages visited */ -#define WT_STAT_CONN_TXN_RTS_PAGES_VISITED 1426 +#define WT_STAT_CONN_TXN_RTS_PAGES_VISITED 1428 /*! transaction: rollback to stable restored tombstones from history store */ -#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_TOMBSTONES 1427 +#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_TOMBSTONES 1429 /*! transaction: rollback to stable sweeping history store keys */ -#define WT_STAT_CONN_TXN_RTS_SWEEP_HS_KEYS 1428 +#define WT_STAT_CONN_TXN_RTS_SWEEP_HS_KEYS 1430 /*! transaction: rollback to stable tree walk skipping pages */ -#define WT_STAT_CONN_TXN_RTS_TREE_WALK_SKIP_PAGES 1429 +#define WT_STAT_CONN_TXN_RTS_TREE_WALK_SKIP_PAGES 1431 /*! transaction: rollback to stable updates aborted */ -#define WT_STAT_CONN_TXN_RTS_UPD_ABORTED 1430 +#define WT_STAT_CONN_TXN_RTS_UPD_ABORTED 1432 /*! transaction: rollback to stable updates removed from history store */ -#define WT_STAT_CONN_TXN_RTS_HS_REMOVED 1431 +#define WT_STAT_CONN_TXN_RTS_HS_REMOVED 1433 /*! transaction: set timestamp calls */ -#define WT_STAT_CONN_TXN_SET_TS 1432 +#define WT_STAT_CONN_TXN_SET_TS 1434 /*! transaction: set timestamp durable calls */ -#define WT_STAT_CONN_TXN_SET_TS_DURABLE 1433 +#define WT_STAT_CONN_TXN_SET_TS_DURABLE 1435 /*! transaction: set timestamp durable updates */ -#define WT_STAT_CONN_TXN_SET_TS_DURABLE_UPD 1434 +#define WT_STAT_CONN_TXN_SET_TS_DURABLE_UPD 1436 /*! transaction: set timestamp oldest calls */ -#define WT_STAT_CONN_TXN_SET_TS_OLDEST 1435 +#define WT_STAT_CONN_TXN_SET_TS_OLDEST 1437 /*! transaction: set timestamp oldest updates */ -#define WT_STAT_CONN_TXN_SET_TS_OLDEST_UPD 1436 +#define WT_STAT_CONN_TXN_SET_TS_OLDEST_UPD 1438 /*! transaction: set timestamp stable calls */ -#define WT_STAT_CONN_TXN_SET_TS_STABLE 1437 +#define WT_STAT_CONN_TXN_SET_TS_STABLE 1439 /*! transaction: set timestamp stable updates */ -#define WT_STAT_CONN_TXN_SET_TS_STABLE_UPD 1438 +#define WT_STAT_CONN_TXN_SET_TS_STABLE_UPD 1440 /*! transaction: transaction begins */ -#define WT_STAT_CONN_TXN_BEGIN 1439 +#define WT_STAT_CONN_TXN_BEGIN 1441 /*! transaction: transaction checkpoint currently running */ -#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1440 +#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1442 /*! transaction: transaction checkpoint generation */ -#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1441 +#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1443 /*! * transaction: transaction checkpoint history store file duration * (usecs) */ -#define WT_STAT_CONN_TXN_HS_CKPT_DURATION 1442 +#define WT_STAT_CONN_TXN_HS_CKPT_DURATION 1444 /*! transaction: transaction checkpoint max time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1443 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1445 /*! transaction: transaction checkpoint min time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1444 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1446 /*! transaction: transaction checkpoint most recent time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1445 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1447 /*! transaction: transaction checkpoint prepare currently running */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RUNNING 1446 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RUNNING 1448 /*! transaction: transaction checkpoint prepare max time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MAX 1447 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MAX 1449 /*! transaction: transaction checkpoint prepare min time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MIN 1448 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MIN 1450 /*! transaction: transaction checkpoint prepare most recent time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RECENT 1449 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RECENT 1451 /*! transaction: transaction checkpoint prepare total time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_TOTAL 1450 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_TOTAL 1452 /*! transaction: transaction checkpoint scrub dirty target */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1451 +#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1453 /*! transaction: transaction checkpoint scrub time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1452 +#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1454 /*! transaction: transaction checkpoint total time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1453 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1455 /*! transaction: transaction checkpoints */ -#define WT_STAT_CONN_TXN_CHECKPOINT 1454 +#define WT_STAT_CONN_TXN_CHECKPOINT 1456 /*! * transaction: transaction checkpoints skipped because database was * clean */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1455 +#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1457 /*! transaction: transaction failures due to history store */ -#define WT_STAT_CONN_TXN_FAIL_CACHE 1456 +#define WT_STAT_CONN_TXN_FAIL_CACHE 1458 /*! * transaction: transaction fsync calls for checkpoint after allocating * the transaction ID */ -#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1457 +#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1459 /*! * transaction: transaction fsync duration for checkpoint after * allocating the transaction ID (usecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1458 +#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1460 /*! transaction: transaction range of IDs currently pinned */ -#define WT_STAT_CONN_TXN_PINNED_RANGE 1459 +#define WT_STAT_CONN_TXN_PINNED_RANGE 1461 /*! transaction: transaction range of IDs currently pinned by a checkpoint */ -#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1460 +#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1462 /*! transaction: transaction range of timestamps currently pinned */ -#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP 1461 +#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP 1463 /*! transaction: transaction range of timestamps pinned by a checkpoint */ -#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_CHECKPOINT 1462 +#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_CHECKPOINT 1464 /*! * transaction: transaction range of timestamps pinned by the oldest * active read timestamp */ -#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_READER 1463 +#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_READER 1465 /*! * transaction: transaction range of timestamps pinned by the oldest * timestamp */ -#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST 1464 +#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST 1466 /*! transaction: transaction read timestamp of the oldest active reader */ -#define WT_STAT_CONN_TXN_TIMESTAMP_OLDEST_ACTIVE_READ 1465 +#define WT_STAT_CONN_TXN_TIMESTAMP_OLDEST_ACTIVE_READ 1467 /*! transaction: transaction sync calls */ -#define WT_STAT_CONN_TXN_SYNC 1466 +#define WT_STAT_CONN_TXN_SYNC 1468 /*! transaction: transactions committed */ -#define WT_STAT_CONN_TXN_COMMIT 1467 +#define WT_STAT_CONN_TXN_COMMIT 1469 /*! transaction: transactions rolled back */ -#define WT_STAT_CONN_TXN_ROLLBACK 1468 +#define WT_STAT_CONN_TXN_ROLLBACK 1470 /*! transaction: update conflicts */ -#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1469 +#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1471 /*! * @} diff --git a/src/third_party/wiredtiger/src/support/stat.c b/src/third_party/wiredtiger/src/support/stat.c index 6ba51a94cab..dc0a07d1242 100644 --- a/src/third_party/wiredtiger/src/support/stat.c +++ b/src/third_party/wiredtiger/src/support/stat.c @@ -905,6 +905,9 @@ static const char *const __stats_connection_desc[] = { "cursor: cursor next calls that skip greater than or equal to 100 entries", "cursor: cursor next calls that skip less than 100 entries", "cursor: cursor operation restarted", "cursor: cursor prev calls", + "cursor: cursor prev calls that skip due to a globally visible history store tombstone", + "cursor: cursor prev calls that skip due to a globally visible history store tombstone in " + "rollback to stable", "cursor: cursor prev calls that skip greater than or equal to 100 entries", "cursor: cursor prev calls that skip less than 100 entries", "cursor: cursor remove calls", "cursor: cursor remove key bytes removed", "cursor: cursor reserve calls", @@ -1349,6 +1352,8 @@ __wt_stat_connection_clear_single(WT_CONNECTION_STATS *stats) stats->cursor_next_skip_lt_100 = 0; stats->cursor_restart = 0; stats->cursor_prev = 0; + stats->cursor_prev_hs_tombstone = 0; + stats->cursor_prev_hs_tombstone_rts = 0; stats->cursor_prev_skip_ge_100 = 0; stats->cursor_prev_skip_lt_100 = 0; stats->cursor_remove = 0; @@ -1855,6 +1860,8 @@ __wt_stat_connection_aggregate(WT_CONNECTION_STATS **from, WT_CONNECTION_STATS * to->cursor_next_skip_lt_100 += WT_STAT_READ(from, cursor_next_skip_lt_100); to->cursor_restart += WT_STAT_READ(from, cursor_restart); to->cursor_prev += WT_STAT_READ(from, cursor_prev); + to->cursor_prev_hs_tombstone += WT_STAT_READ(from, cursor_prev_hs_tombstone); + to->cursor_prev_hs_tombstone_rts += WT_STAT_READ(from, cursor_prev_hs_tombstone_rts); to->cursor_prev_skip_ge_100 += WT_STAT_READ(from, cursor_prev_skip_ge_100); to->cursor_prev_skip_lt_100 += WT_STAT_READ(from, cursor_prev_skip_lt_100); to->cursor_remove += WT_STAT_READ(from, cursor_remove); diff --git a/src/third_party/wiredtiger/src/txn/txn.c b/src/third_party/wiredtiger/src/txn/txn.c index 571ec8fd6bc..ac0fc58fab1 100644 --- a/src/third_party/wiredtiger/src/txn/txn.c +++ b/src/third_party/wiredtiger/src/txn/txn.c @@ -680,6 +680,8 @@ __txn_append_hs_record(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, WT_ITEM * if (!__wt_txn_visible_all( session, hs_cbt->upd_value->tw.stop_txn, hs_cbt->upd_value->tw.durable_stop_ts)) break; + else + WT_STAT_CONN_INCR(session, cursor_prev_hs_tombstone); } /* We walked off the top of the history store. */ diff --git a/src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c b/src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c index 55a455c96f7..852aaad1169 100644 --- a/src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c +++ b/src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c @@ -232,8 +232,10 @@ __rollback_row_ondisk_fixup_key(WT_SESSION_IMPL *session, WT_PAGE *page, WT_ROW * we can skip it. */ if (__wt_txn_visible_all( - session, cbt->upd_value->tw.stop_txn, cbt->upd_value->tw.durable_stop_ts)) + session, cbt->upd_value->tw.stop_txn, cbt->upd_value->tw.durable_stop_ts)) { + WT_STAT_CONN_INCR(session, cursor_prev_hs_tombstone_rts); continue; + } /* * As part of the history store search, we never get an exact match based on our search @@ -1030,8 +1032,10 @@ __rollback_to_stable_btree_hs_truncate(WT_SESSION_IMPL *session, uint32_t btree_ * we can skip it. */ if (__wt_txn_visible_all( - session, cbt->upd_value->tw.stop_txn, cbt->upd_value->tw.durable_stop_ts)) + session, cbt->upd_value->tw.stop_txn, cbt->upd_value->tw.durable_stop_ts)) { + WT_STAT_CONN_INCR(session, cursor_prev_hs_tombstone_rts); continue; + } /* Set this comparison as exact match of the search for later use. */ cbt->compare = 0; diff --git a/src/third_party/wiredtiger/test/format/format.sh b/src/third_party/wiredtiger/test/format/format.sh index e607fd1e942..5cffe3a2274 100755 --- a/src/third_party/wiredtiger/test/format/format.sh +++ b/src/third_party/wiredtiger/test/format/format.sh @@ -17,7 +17,7 @@ onintr() trap 'onintr' 2 usage() { - echo "usage: $0 [-aEFSv] [-b format-binary] [-c config] [-e env-var]" + echo "usage: $0 [-aEFRSv] [-b format-binary] [-c config] [-e env-var]" echo " [-h home] [-j parallel-jobs] [-n total-jobs] [-t minutes] [format-configuration]" echo echo " -a abort/recovery testing (defaults to off)" @@ -225,7 +225,7 @@ skip_known_errors() # skip_error_list is a list of errors to skip. Each array entry can have multiple signatures # for finger-grained matching. For example: # - # err_1=("heap-buffer-overflow" "__split_parent") + # err_1=("heap-buffer-overflow" "__split_parent") skip_error_list=( err_1[@] ) # Loop through the skip list and search in the log file. @@ -250,6 +250,7 @@ skip_known_errors() # $1 directory name report_failure() { + # Note the directory may not yet exist, only the log file. dir=$1 log="$dir.log" @@ -257,45 +258,54 @@ report_failure() #skip_known_errors $log #skip_ret=$? - echo "$name: failure status reported" > $dir/$status failure=$(($failure + 1)) # Forcibly quit if first-failure configured. [[ $first_failure -ne 0 ]] && force_quit=1 echo "$name: job in $dir failed" - echo "$name: $dir log:" sed 's/^/ /' < $log + + # Note the directory may not yet exist, only the log file. If the directory doesn't exist, + # quit, we don't have any way to track that we've already reported this failure and it's + # not worth the effort to try and figure one out, in all likelihood the configuration is + # invalid. + [[ -d "$dir" ]] || { + echo "$name: $dir does not exist, $name unable to continue" + force_quit=1 + return + } echo "$name: $dir/CONFIG:" sed 's/^/ /' < $dir/CONFIG + + echo "$name: failure status reported" > $dir/$status } # Resolve/cleanup completed jobs. resolve() { running=0 - list=$(ls $home | grep '^RUNDIR.[0-9]*$') + list=$(ls $home | grep '^RUNDIR.[0-9]*.log') for i in $list; do - dir="$home/$i" - log="$dir.log" - - # Skip directories that aren't ours. - [[ -f "$log" ]] || continue + # Note the directory may not yet exist, only the log file. + dir="$home/${i%.*}" + log="$home/$i" # Skip failures we've already reported. [[ -f "$dir/$status" ]] && continue - # Get the process ID, ignore any jobs that aren't yet running. - pid=`grep -E 'process.*running' $log | awk '{print $3}'` - [[ "$pid" =~ ^[1-9][0-9]*$ ]] || continue - # Leave any process waiting for a gdb attach running, but report it as a failure. grep -E 'waiting for debugger' $log > /dev/null && { report_failure $dir continue } - # If the job is still running, ignore it unless we're forcibly quitting. + # Get the process ID. There is a window where the PID might not yet be written, in + # which case we ignore the log file. If the job is still running, ignore it unless + # we're forcibly quitting. If it's not still running, wait for it and get an exit + # status. + pid=`awk '/process.*running/{print $3}' $log` + [[ "$pid" =~ ^[1-9][0-9]*$ ]] || continue kill -s 0 $pid > /dev/null 2>&1 && { [[ $force_quit -eq 0 ]] && { running=$((running + 1)) @@ -311,8 +321,6 @@ resolve() verbose "$name: job in $dir killed" continue } - - # Wait for the job and get an exit status. wait $pid eret=$? @@ -410,7 +418,6 @@ resolve() # a problem in this script. echo "$name: job in $dir exited with status $eret for an unknown reason" echo "$name: reporting job in $dir as a failure" - echo "$name: $name needs to be updated" report_failure $dir done return 0 @@ -449,7 +456,7 @@ format() # Disassociate the command from the shell script so we can exit and let the command # continue to run. - # Run format in its own session so child processes are in their own process gorups + # Run format in its own session so child processes are in their own process groups # and we can individually terminate (and clean up) running jobs and their children. nohup setsid $cmd > $log 2>&1 & @@ -479,30 +486,23 @@ while :; do } } - # Start more jobs. - while :; do - # Check if we're only running the smoke-tests and we're done. - [[ $smoke_test -ne 0 ]] && [[ $smoke_next -ge ${#smoke_list[@]} ]] && quit=1 + # Check if we're only running the smoke-tests and we're done. + [[ $smoke_test -ne 0 ]] && [[ $smoke_next -ge ${#smoke_list[@]} ]] && quit=1 - # Check if the total number of jobs has been reached. - [[ $total_jobs -ne 0 ]] && [[ $count_jobs -ge $total_jobs ]] && quit=1 - - # Check if less than 60 seconds left on any timer. The goal is to avoid killing - # jobs that haven't yet configured signal handlers, because we rely on handler - # output to determine their final status. - [[ $seconds -ne 0 ]] && [[ $(($seconds - $elapsed)) -lt 60 ]] && quit=1 + # Check if the total number of jobs has been reached. + [[ $total_jobs -ne 0 ]] && [[ $count_jobs -ge $total_jobs ]] && quit=1 - # Don't create more jobs if we're quitting for any reason. - [[ $force_quit -ne 0 ]] || [[ $quit -ne 0 ]] && break; + # Check if less than 60 seconds left on any timer. The goal is to avoid killing jobs that + # haven't yet configured signal handlers, because we rely on handler output to determine + # their final status. + [[ $seconds -ne 0 ]] && [[ $(($seconds - $elapsed)) -lt 60 ]] && quit=1 - # Check if the maximum number of jobs in parallel has been reached. - [[ $running -ge $parallel_jobs ]] && break + # Start another job if we're not quitting for any reason and the maximum number of jobs + # in parallel has not yet been reached. + [[ $force_quit -eq 0 ]] && [[ $quit -eq 0 ]] && [[ $running -lt $parallel_jobs ]] && { running=$(($running + 1)) - - # Start another job, but don't pound on the system. format - sleep 2 - done + } # Clean up and update status. success_save=$success @@ -514,8 +514,10 @@ while :; do # Quit if we're done and there aren't any jobs left to wait for. [[ $quit -ne 0 ]] || [[ $force_quit -ne 0 ]] && [[ $running -eq 0 ]] && break - # Wait for awhile, unless we're killing everything or there are jobs to start. - [[ $force_quit -eq 0 ]] && [[ $running -ge $parallel_jobs ]] && sleep 10 + # Wait for awhile, unless we're killing everything or there are jobs to start. Always wait + # for a short period so we don't pound the system creating new jobs. + [[ $force_quit -eq 0 ]] && [[ $running -ge $parallel_jobs ]] && sleep 8 + sleep 2 done echo "$name: $success successful jobs, $failure failed jobs" diff --git a/src/third_party/wiredtiger/test/format/t.c b/src/third_party/wiredtiger/test/format/t.c index 47748d3efd2..11d3d48db32 100644 --- a/src/third_party/wiredtiger/test/format/t.c +++ b/src/third_party/wiredtiger/test/format/t.c @@ -159,6 +159,10 @@ main(int argc, char *argv[]) (void)testutil_set_progname(argv); + /* The monitoring program looks for this line in the log file, push it out quickly. */ + printf("%s: process %" PRIdMAX " running\n", progname, (intmax_t)getpid()); + fflush(stdout); + format_process_env(); /* Set values from the command line. */ @@ -256,8 +260,6 @@ main(int argc, char *argv[]) testutil_check(__wt_thread_str(g.tidbuf, sizeof(g.tidbuf))); - printf("%s: process %" PRIdMAX " running\n", progname, (intmax_t)getpid()); - fflush(stdout); while (++g.run_cnt <= g.c_runs || g.c_runs == 0) { __wt_seconds(NULL, &start); track("starting up", 0ULL, NULL); diff --git a/src/third_party/wiredtiger/test/utility/misc.c b/src/third_party/wiredtiger/test/utility/misc.c index ed54bed74b3..299df0a5118 100644 --- a/src/third_party/wiredtiger/test/utility/misc.c +++ b/src/third_party/wiredtiger/test/utility/misc.c @@ -61,7 +61,7 @@ testutil_die(int e, const char *fmt, ...) if (e != 0) fprintf(stderr, ": %s", wiredtiger_strerror(e)); fprintf(stderr, "\n"); - fprintf(stderr, "process aborting\n"); + fprintf(stderr, "%s: process aborting\n", progname); abort(); } -- cgit v1.2.1