summaryrefslogtreecommitdiff
path: root/dist
diff options
context:
space:
mode:
authorDavid Hows <david.hows@mongodb.com>2016-06-24 17:05:13 +1000
committerDavid Hows <david.hows@mongodb.com>2016-06-24 17:05:13 +1000
commitd8fb874fc40989cb9675e56ca80b3b64e6fa2ee3 (patch)
tree6f03ed5cde97aedc762215c14d23ee5305998a2b /dist
parentfb1663e6fc800be97c0ddc697b6f939dc610e08e (diff)
parent1f4aaa4490a82cf947afdabbb9214ee5b1850d13 (diff)
downloadmongo-d8fb874fc40989cb9675e56ca80b3b64e6fa2ee3.tar.gz
Merge branch 'develop' of github.com:wiredtiger/wiredtiger into mongodb-3.4mongodb-3.3.9mongodb-3.3.10mongodb-3.0.1
Diffstat (limited to 'dist')
-rw-r--r--dist/api_data.py11
-rw-r--r--dist/api_err.py2
-rw-r--r--dist/filelist4
-rw-r--r--dist/flags.py7
-rw-r--r--dist/log.py2
-rw-r--r--dist/s_copyright.list2
-rw-r--r--dist/s_define.list5
-rwxr-xr-xdist/s_label10
-rw-r--r--dist/s_label_loop.py28
-rwxr-xr-xdist/s_longlines2
-rwxr-xr-xdist/s_prototypes64
-rw-r--r--dist/s_string.ok21
-rwxr-xr-xdist/s_style24
-rw-r--r--dist/stat_data.py44
14 files changed, 182 insertions, 44 deletions
diff --git a/dist/api_data.py b/dist/api_data.py
index f7b4cd6e03b..90b1c8378a2 100644
--- a/dist/api_data.py
+++ b/dist/api_data.py
@@ -439,7 +439,7 @@ connection_runtime_config = [
Config('file_max', '100MB', r'''
the maximum size of log files''',
min='100KB', max='2GB'),
- Config('path', '', r'''
+ Config('path', '"."', r'''
the path to a directory into which the log files are written.
If the value is not an absolute path name, the files are created
relative to the database home'''),
@@ -959,6 +959,11 @@ methods = {
Display the contents of on-disk blocks as they are verified,
using the application's message handler, intended for debugging''',
type='boolean'),
+ Config('dump_layout', 'false', r'''
+ Display the layout of the files as they are verified, using the
+ application's message handler, intended for debugging; requires
+ optional support from the block manager''',
+ type='boolean'),
Config('dump_offsets', '', r'''
Display the contents of specific on-disk blocks,
using the application's message handler, intended for debugging''',
@@ -967,10 +972,6 @@ methods = {
Display the contents of in-memory pages as they are verified,
using the application's message handler, intended for debugging''',
type='boolean'),
- Config('dump_shape', 'false', r'''
- Display the shape of the tree after verification,
- using the application's message handler, intended for debugging''',
- type='boolean'),
Config('strict', 'false', r'''
Treat any verification problem as an error; by default, verify will
warn, but not fail, in the case of errors that won't affect future
diff --git a/dist/api_err.py b/dist/api_err.py
index af5f1c12b37..82f961a4ac9 100644
--- a/dist/api_err.py
+++ b/dist/api_err.py
@@ -58,8 +58,6 @@ errors = [
more than the configured cache size to complete. The operation
may be retried; if a transaction is in progress, it should be
rolled back and the operation retried in a new transaction.'''),
- Error('WT_PERM_DENIED', -31808,
- 'permission denied (internal)', undoc=True),
]
# Update the #defines in the wiredtiger.in file.
diff --git a/dist/filelist b/dist/filelist
index f3cb9514968..59624508cf0 100644
--- a/dist/filelist
+++ b/dist/filelist
@@ -107,6 +107,7 @@ src/meta/meta_turtle.c
src/os_common/filename.c
src/os_common/os_abort.c
src/os_common/os_alloc.c
+src/os_common/os_errno.c
src/os_common/os_fhandle.c
src/os_common/os_fs_inmemory.c
src/os_common/os_fstream.c
@@ -115,7 +116,6 @@ src/os_common/os_getopt.c
src/os_common/os_strtouq.c
src/os_posix/os_dir.c POSIX_HOST
src/os_posix/os_dlopen.c POSIX_HOST
-src/os_posix/os_errno.c POSIX_HOST
src/os_posix/os_fallocate.c POSIX_HOST
src/os_posix/os_fs.c POSIX_HOST
src/os_posix/os_getenv.c POSIX_HOST
@@ -132,7 +132,6 @@ src/os_posix/os_time.c POSIX_HOST
src/os_posix/os_yield.c POSIX_HOST
src/os_win/os_dir.c WINDOWS_HOST
src/os_win/os_dlopen.c WINDOWS_HOST
-src/os_win/os_errno.c WINDOWS_HOST
src/os_win/os_fs.c WINDOWS_HOST
src/os_win/os_getenv.c WINDOWS_HOST
src/os_win/os_map.c WINDOWS_HOST
@@ -147,6 +146,7 @@ src/os_win/os_snprintf.c WINDOWS_HOST
src/os_win/os_thread.c WINDOWS_HOST
src/os_win/os_time.c WINDOWS_HOST
src/os_win/os_vsnprintf.c WINDOWS_HOST
+src/os_win/os_winerr.c WINDOWS_HOST
src/os_win/os_yield.c WINDOWS_HOST
src/packing/pack_api.c
src/packing/pack_impl.c
diff --git a/dist/flags.py b/dist/flags.py
index 48b0a2452a9..b5f36fb707a 100644
--- a/dist/flags.py
+++ b/dist/flags.py
@@ -50,6 +50,10 @@ flags = {
'TXN_LOG_CKPT_STOP',
'TXN_LOG_CKPT_SYNC',
],
+ 'txn_update_oldest' : [
+ 'TXN_OLDEST_STRICT',
+ 'TXN_OLDEST_WAIT',
+ ],
'verbose' : [
'VERB_API',
'VERB_BLOCK',
@@ -94,6 +98,7 @@ flags = {
'CONN_LSM_MERGE',
'CONN_PANIC',
'CONN_READONLY',
+ 'CONN_RECOVERING',
'CONN_SERVER_ASYNC',
'CONN_SERVER_CHECKPOINT',
'CONN_SERVER_LSM',
@@ -104,12 +109,12 @@ flags = {
],
'session' : [
'SESSION_CAN_WAIT',
- 'SESSION_CLEAR_EVICT_WALK',
'SESSION_INTERNAL',
'SESSION_LOCK_NO_WAIT',
'SESSION_LOCKED_CHECKPOINT',
'SESSION_LOCKED_HANDLE_LIST',
'SESSION_LOCKED_METADATA',
+ 'SESSION_LOCKED_PASS',
'SESSION_LOCKED_SCHEMA',
'SESSION_LOCKED_SLOT',
'SESSION_LOCKED_TABLE',
diff --git a/dist/log.py b/dist/log.py
index 9201b20054b..8743dd3a71c 100644
--- a/dist/log.py
+++ b/dist/log.py
@@ -178,7 +178,7 @@ __wt_logop_read(WT_SESSION_IMPL *session,
}
static size_t
-__logrec_json_unpack_str(char *dest, size_t destlen, const char *src,
+__logrec_json_unpack_str(char *dest, size_t destlen, const u_char *src,
size_t srclen)
{
\tsize_t total;
diff --git a/dist/s_copyright.list b/dist/s_copyright.list
index c6a5910087b..4999d2a37a2 100644
--- a/dist/s_copyright.list
+++ b/dist/s_copyright.list
@@ -29,6 +29,8 @@ skip src/config/config_def.c
skip src/conn/api_strerror.c
skip src/docs/tools/doxypy.py
skip src/include/extern.h
+skip src/include/extern_posix.h
+skip src/include/extern_win.h
skip src/include/flags.h
skip src/include/queue.h
skip src/log/log_auto.c
diff --git a/dist/s_define.list b/dist/s_define.list
index c9777c86675..2cdda74e7d4 100644
--- a/dist/s_define.list
+++ b/dist/s_define.list
@@ -23,6 +23,7 @@ WT_CONN_CHECK_PANIC
WT_DEADLOCK
WT_DEBUG_BYTE
WT_ERR_ERROR_OK
+WT_EXT_FOREACH_OFF
WT_HANDLE_CLOSED
WT_HANDLE_NULLABLE
WT_LOG_SLOT_ACTIVE
@@ -42,13 +43,17 @@ WT_STATS_FIELD_TO_SLOT
WT_STATS_SLOT_ID
WT_STAT_DECR
WT_STAT_DECRV
+WT_STAT_DECRV_ATOMIC
WT_STAT_FAST_CONN_DECRV
WT_STAT_FAST_DATA_DECRV
WT_STAT_FAST_DECR
WT_STAT_FAST_DECRV
+WT_STAT_FAST_DECRV_ATOMIC
WT_STAT_FAST_INCR
WT_STAT_FAST_INCRV
+WT_STAT_FAST_INCRV_ATOMIC
WT_STAT_FAST_SET
+WT_STAT_INCRV_ATOMIC
WT_STAT_WRITE
WT_TIMEDIFF_US
WT_TRET_ERROR_OK
diff --git a/dist/s_label b/dist/s_label
index b7c5795234a..b56ecc6fc78 100755
--- a/dist/s_label
+++ b/dist/s_label
@@ -23,7 +23,7 @@ file_parse()
# where there's a jump to the error label after the error label.
for f in `find bench examples ext src test -name '*.[ci]'`; do
file_parse $f |
- egrep '(WT_ERR|WT_ILLEGAL_VALUE_ERR)\(.*(WT_ILLEGAL_VALUE|WT_RET)\(.*err:|[^a-z_]err:.*(WT_ERR|WT_ILLEGAL_VALUE_ERR)\(' |
+ egrep '(WT_ERR[_A-Z]*|WT_ILLEGAL_VALUE_ERR)\(.*(WT_ILLEGAL_VALUE|WT_RET[_A-Z]*)\(.*err:|[^a-z_]err:.*(WT_ERR|WT_ILLEGAL_VALUE_ERR)\(' |
sed 's/:.*//' > $t
test -s $t && {
@@ -32,6 +32,14 @@ for f in `find bench examples ext src test -name '*.[ci]'`; do
}
done
+# Returns before jumps to an error label within the same loop.
+# Jumps before returns have already been detected above.
+for f in `find bench examples ext src test -name '*.[ci]'`; do
+ file_parse $f | sed "s=^=$f:="
+done | python dist/s_label_loop.py |
+ egrep '\{@[^@]*(WT_ILLEGAL_VALUE|WT_RET[_A-Z]*)\([^@]*(WT_ERR[_A-Z]*|WT_ILLEGAL_VALUE_ERR)\(.*err:' |
+ sed -e 's/^\([^:]*\): *\([^:]*\):.*/\1:\2: mix of returns and jump to the error label within a loop/'
+
# Return of 0 in functions after a jump to the error label.
for f in `find bench examples ext src test -name '*.[ci]'`; do
file_parse $f |
diff --git a/dist/s_label_loop.py b/dist/s_label_loop.py
new file mode 100644
index 00000000000..5cc222a4250
--- /dev/null
+++ b/dist/s_label_loop.py
@@ -0,0 +1,28 @@
+# Mark outer loop boundaries with {@ and }@ . Nested loops are not marked.
+# Each input line is the content of a C function.
+import re, sys
+
+p = re.compile('((for |while |_FOREACH|FOREACH_BEGIN)\([^{)]*\)|do) {')
+for line in sys.stdin:
+ matched = 0
+ m = p.search(line)
+ while m != None:
+ matched = 1
+ pos = m.end()
+ out = line[:pos] + "@"
+ level = 1
+ length = len(line)
+ while level > 0 and pos < length:
+ c = line[pos:pos+1]
+ pos += 1
+ out += c
+ if c == "}":
+ level -= 1
+ elif c == "{":
+ level += 1
+ out += "@"
+ sys.stdout.write(out)
+ line = line[pos:]
+ m = p.search(line)
+ if matched != 0:
+ sys.stdout.write(line)
diff --git a/dist/s_longlines b/dist/s_longlines
index 2837d400f9e..91dada361f4 100755
--- a/dist/s_longlines
+++ b/dist/s_longlines
@@ -11,6 +11,8 @@ l=`(cd .. &&
sed -e '/checksum\/power8/d' \
-e '/dist\/stat_data\.py/d' \
-e '/include\/extern\.h/d' \
+ -e '/include\/extern_posix\.h/d' \
+ -e '/include\/extern_win\.h/d' \
-e '/support\/stat\.c/d'`
for f in $l ; do
diff --git a/dist/s_prototypes b/dist/s_prototypes
index 01d1e9bb4c3..73f7be371ea 100755
--- a/dist/s_prototypes
+++ b/dist/s_prototypes
@@ -28,36 +28,52 @@ proto()
-e 's/\* /\*/g' \
-e 's/ */ /g' \
-e 's/^/extern /' \
- -e 's/WT_GCC_FUNC_/WT_GCC_FUNC_DECL_/' \
- -e 's/$/;/p' < $1
+ -e 's/WT_GCC_FUNC_/WT_GCC_FUNC_DECL_/g' \
+ -e '# If a line ends in #endif, appending a semicolon will result' \
+ -e '# in an illegal expression, force an appended newline using' \
+ -e '# the H command because substitute may not allow newline in' \
+ -e '# the RHS of the expression.' \
+ -e '/#endif$/{' \
+ -e x \
+ -e 's/.*//' \
+ -e H \
+ -e x \
+ -e '}' \
+ -e 's/$/;/' \
+ -e p < $1
}
-(
-cat <<EOF
+# proto --
+# generate the list of prototypes given a file list
+externs()
+{
+(cat <<EOF
/* DO NOT EDIT: automatically built by dist/s_prototypes. */
EOF
+ for i in $l; do
+ proto ../$i
+ done) > $t
+ cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f)
+}
-# First, get prototypes for everything but the OS directories.
-# Second, get prototypes for the OS directories.
-# The reason for this is because the OS directories repeat names (that is, there
-# are common names in both os_posix and os_win), and so we sort the prototypes
-# to avoid repeating them in the output (which some compilers won't tolerate).
-# We'd sort everything and discard duplicates, but we can't sort when function
-# signatures are on multiple lines, that is, #ifdef'd function signatures. Since
-# the OS directories are the only places with repeated names, and they have no
-# #ifdef'd signatures, we do it this way.
-l=`sed -e '/^[a-z]/!d' -e '/src\/os/d' -e 's/[ ].*$//' filelist`
-for i in $l; do
- proto ../$i
-done
-l=`echo ../src\/os*/*.c`
+f=../src/include/extern_win.h
+l=`sed \
+ -e '/os_win/!d' \
+ -e 's/[ ].*$//' filelist`
+externs
-for i in $l; do
- proto $i
-done | env LC_ALL=C sort -u
-) > $t
+f=../src/include/extern_posix.h
+l=`sed \
+ -e '/os_posix/!d' \
+ -e 's/[ ].*$//' filelist`
+externs
f=../src/include/extern.h
-cmp $t $f > /dev/null 2>&1 ||
- (echo "Building $f" && rm -f $f && cp $t $f)
+l=`sed \
+ -e '/^[a-z]/!d' \
+ -e '/os_posix/d' \
+ -e '/os_win/d' \
+ -e 's/[ ].*$//' filelist`
+externs
diff --git a/dist/s_string.ok b/dist/s_string.ok
index d45cace728a..7966ff2cf2e 100644
--- a/dist/s_string.ok
+++ b/dist/s_string.ok
@@ -87,6 +87,7 @@ Decrement
Decrypt
DeleteFileA
EAGAIN
+EB
EBUSY
EEXIST
EINTR
@@ -117,6 +118,7 @@ FNV
FORALL
FOREACH
FULLFSYNC
+FindClose
FindFirstFile
Fixup
Fk
@@ -131,6 +133,7 @@ GIDs
Gcc
Geoff
GetEnvironmentVariableA
+GetFileAttributesA
GetFileAttributesEx
GetFileSizeEx
GetLastError
@@ -213,6 +216,7 @@ Mewhort
Mitzenmacher
MongoDB
MoveFile
+MoveFileA
Multi
Multithreaded
Mutex
@@ -471,6 +475,7 @@ ckptfrag
ckptlist
cksum
cloexec
+closedir
clsm
cmd
cmp
@@ -644,6 +649,7 @@ fmterr
fnv
foc
fopen
+formatmessage
fp
fprintf
free'd
@@ -695,6 +701,7 @@ ibackup
icount
idx
ifdef's
+iiu
ikey
im
impl
@@ -728,9 +735,20 @@ intrin
inuse
io
ip
+isalnum
+isalpha
+iscntrl
+isdigit
+isgraph
islocked
+islower
ispo
+isprint
+ispunct
isrc
+isspace
+isupper
+isxdigit
iter
iteratively
jnr
@@ -1057,7 +1075,9 @@ toklen
tokname
tokstart
toktype
+tolower
totalsec
+toupper
transactional
transactionally
trecno
@@ -1088,6 +1108,7 @@ unescaped
unicode
uninstantiated
unistd
+unlink
unlinked
unmap
unmarshall
diff --git a/dist/s_style b/dist/s_style
index 85220124971..a222c004cc3 100755
--- a/dist/s_style
+++ b/dist/s_style
@@ -60,11 +60,13 @@ else
echo "$f: use TAILQ for all lists"
fi
- if ! expr "$f" : 'src/os_common/.*' > /dev/null &&
+ if ! expr "$f" : 'src/include/extern.h' > /dev/null &&
+ ! expr "$f" : 'src/include/extern_posix.h' > /dev/null &&
+ ! expr "$f" : 'src/include/extern_win.h' > /dev/null &&
+ ! expr "$f" : 'src/include/os.h' > /dev/null &&
+ ! expr "$f" : 'src/os_common/.*' > /dev/null &&
! expr "$f" : 'src/os_posix/.*' > /dev/null &&
! expr "$f" : 'src/os_win/.*' > /dev/null &&
- ! expr "$f" : 'src/include/extern.h' > /dev/null &&
- ! expr "$f" : 'src/include/os.h' > /dev/null &&
grep '__wt_errno' $f > $t; then
echo "$f: upper-level code should not call __wt_errno"
cat $t
@@ -73,7 +75,7 @@ else
if ! expr "$f" : 'examples/c/.*' > /dev/null &&
! expr "$f" : 'ext/datasources/helium/helium.c' > /dev/null &&
! expr "$f" : 'src/include/os.h' > /dev/null &&
- grep "%zu" $f | grep -v 'SIZET_FMT' > $t; then
+ egrep "%[0-9]*zu" $f | grep -v 'SIZET_FMT' > $t; then
echo "$f: %zu needs to be fixed for Windows"
cat $t
fi
@@ -138,6 +140,20 @@ else
}
fi
+ # Use of ctype functions that sign extend their arguments.
+ if ! expr "$f" : 'bench/.*' > /dev/null &&
+ ! expr "$f" : 'test/csuite/.*' > /dev/null &&
+ ! expr "$f" : 'examples/.*' > /dev/null &&
+ ! expr "$f" : 'ext/.*' > /dev/null &&
+ ! expr "$f" : 'src/include/ctype.i' > /dev/null; then
+ if egrep '(#include.*["</]ctype.h[">]|\b(is(alnum|alpha|cntrl|digit|graph|lower|print|punct|space|upper|xdigit)|to(lower|toupper))\()' $f > $t; then
+ test -s $t && {
+ echo "$f: direct use of ctype.h functions, instead of ctype.i equivalents"
+ cat $t
+ }
+ fi
+ fi
+
tr -cd '[:alnum:][:space:][:punct:]' < $f |
unexpand |
sed -e 's/){/) {/' \
diff --git a/dist/stat_data.py b/dist/stat_data.py
index 48066c11700..694ffc86ee4 100644
--- a/dist/stat_data.py
+++ b/dist/stat_data.py
@@ -81,6 +81,10 @@ class SessionStat(Stat):
prefix = 'session'
def __init__(self, name, desc, flags=''):
Stat.__init__(self, name, SessionStat.prefix, desc, flags)
+class ThreadState(Stat):
+ prefix = 'thread-state'
+ def __init__(self, name, desc, flags=''):
+ Stat.__init__(self, name, ThreadState.prefix, desc, flags)
class TxnStat(Stat):
prefix = 'transaction'
def __init__(self, name, desc, flags=''):
@@ -97,10 +101,20 @@ class YieldStat(Stat):
##########################################
groups = {}
groups['cursor'] = [CursorStat.prefix, SessionStat.prefix]
-groups['evict'] = [CacheStat.prefix, ConnStat.prefix, BlockStat.prefix]
+groups['evict'] = [
+ BlockStat.prefix,
+ CacheStat.prefix,
+ ConnStat.prefix,
+ ThreadState.prefix
+]
groups['lsm'] = [LSMStat.prefix, TxnStat.prefix]
groups['memory'] = [CacheStat.prefix, ConnStat.prefix, RecStat.prefix]
-groups['system'] = [ConnStat.prefix, DhandleStat.prefix, SessionStat.prefix]
+groups['system'] = [
+ ConnStat.prefix,
+ DhandleStat.prefix,
+ SessionStat.prefix,
+ ThreadState.prefix
+]
##########################################
# CONNECTION statistics
@@ -113,6 +127,7 @@ connection_stats = [
ConnStat('cond_auto_wait_reset', 'auto adjusting condition resets'),
ConnStat('cond_wait', 'pthread mutex condition wait calls'),
ConnStat('file_open', 'files currently open', 'no_clear,no_scale'),
+ ConnStat('fsync_io', 'total fsync I/Os'),
ConnStat('memory_allocation', 'memory allocations'),
ConnStat('memory_free', 'memory frees'),
ConnStat('memory_grow', 'memory re-allocations'),
@@ -162,6 +177,7 @@ connection_stats = [
CacheStat('cache_bytes_write', 'bytes written from cache', 'size'),
CacheStat('cache_eviction_aggressive_set', 'eviction currently operating in aggressive mode', 'no_clear,no_scale'),
CacheStat('cache_eviction_app', 'pages evicted by application threads'),
+ CacheStat('cache_eviction_app_dirty', 'modified pages evicted by application threads'),
CacheStat('cache_eviction_checkpoint', 'checkpoint blocked page eviction'),
CacheStat('cache_eviction_clean', 'unmodified pages evicted'),
CacheStat('cache_eviction_deepen', 'page split during eviction deepened the tree'),
@@ -176,6 +192,9 @@ connection_stats = [
CacheStat('cache_eviction_hazard', 'hazard pointer blocked page eviction'),
CacheStat('cache_eviction_internal', 'internal pages evicted'),
CacheStat('cache_eviction_maximum_page_size', 'maximum page size at eviction', 'no_clear,no_scale,size'),
+ CacheStat('cache_eviction_pages_queued', 'pages queued for eviction'),
+ CacheStat('cache_eviction_pages_queued_oldest', 'pages queued for urgent eviction'),
+ CacheStat('cache_eviction_pages_seen', 'pages seen by eviction walk'),
CacheStat('cache_eviction_queue_empty', 'eviction server candidate queue empty when topping up'),
CacheStat('cache_eviction_queue_not_empty', 'eviction server candidate queue not empty when topping up'),
CacheStat('cache_eviction_server_evicting', 'eviction server evicting pages'),
@@ -186,6 +205,8 @@ connection_stats = [
CacheStat('cache_eviction_split_internal', 'internal pages split during eviction'),
CacheStat('cache_eviction_split_leaf', 'leaf pages split during eviction'),
CacheStat('cache_eviction_walk', 'pages walked for eviction'),
+ CacheStat('cache_eviction_walks_active', 'files with active eviction walks', 'no_clear,no_scale,size'),
+ CacheStat('cache_eviction_walks_started', 'files with new eviction walks started'),
CacheStat('cache_eviction_worker_evicting', 'eviction worker thread evicting pages'),
CacheStat('cache_hazard_checks', 'hazard pointer check calls'),
CacheStat('cache_hazard_max', 'hazard pointer maximum array length', 'max_aggregate,no_scale'),
@@ -250,6 +271,8 @@ connection_stats = [
LogStat('log_slot_unbuffered', 'consolidated slot unbuffered writes'),
LogStat('log_sync', 'log sync operations'),
LogStat('log_sync_dir', 'log sync_dir operations'),
+ LogStat('log_sync_dir_duration', 'log sync_dir time duration (usecs)'),
+ LogStat('log_sync_duration', 'log sync time duration (usecs)'),
LogStat('log_write_lsn', 'log server thread advances write LSN'),
LogStat('log_write_lsn_skip', 'log server thread write LSN walk skipped'),
LogStat('log_writes', 'log write operations'),
@@ -270,6 +293,10 @@ connection_stats = [
##########################################
TxnStat('txn_begin', 'transaction begins'),
TxnStat('txn_checkpoint', 'transaction checkpoints'),
+ TxnStat('txn_checkpoint_fsync_post', 'transaction fsync calls for checkpoint after allocating the transaction ID'),
+ TxnStat('txn_checkpoint_fsync_post_duration', 'transaction fsync duration for checkpoint after allocating the transaction ID (usecs)'),
+ TxnStat('txn_checkpoint_fsync_pre', 'transaction fsync calls for checkpoint before allocating the transaction ID'),
+ TxnStat('txn_checkpoint_fsync_pre_duration', 'transaction fsync duration for checkpoint before allocating the transaction ID (usecs)'),
TxnStat('txn_checkpoint_generation', 'transaction checkpoint generation', 'no_clear,no_scale'),
TxnStat('txn_checkpoint_running', 'transaction checkpoint currently running', 'no_clear,no_scale'),
TxnStat('txn_checkpoint_time_max', 'transaction checkpoint max time (msecs)', 'no_clear,no_scale'),
@@ -322,6 +349,13 @@ connection_stats = [
CursorStat('cursor_update', 'cursor update calls'),
##########################################
+ # Thread State statistics
+ ##########################################
+ ThreadState('fsync_active', 'active filesystem fsync calls','no_clear,no_scale'),
+ ThreadState('read_active', 'active filesystem read calls','no_clear,no_scale'),
+ ThreadState('write_active', 'active filesystem write calls','no_clear,no_scale'),
+
+ ##########################################
# Yield statistics
##########################################
YieldStat('page_busy_blocked', 'page acquire busy blocked'),
@@ -480,9 +514,11 @@ dsrc_stats = sorted(dsrc_stats, key=attrgetter('desc'))
# Cursor Join statistics
##########################################
join_stats = [
- JoinStat('accesses', 'accesses'),
- JoinStat('actual_count', 'actual count of items'),
JoinStat('bloom_false_positive', 'bloom filter false positives'),
+ JoinStat('bloom_insert', 'items inserted into a bloom filter'),
+ JoinStat('iterated', 'items iterated'),
+ JoinStat('main_access', 'accesses to the main table'),
+ JoinStat('membership_check', 'checks that conditions of membership are satisfied'),
]
join_stats = sorted(join_stats, key=attrgetter('desc'))