Merge branch 'develop' into mongodb-3.4
This commit is contained in:
26
SConstruct
26
SConstruct
@@ -240,12 +240,26 @@ wtheader = env.Substfile(
|
||||
#
|
||||
# WiredTiger library
|
||||
#
|
||||
filelistfile = r'build_win\filelist.win'
|
||||
filelist = open(filelistfile)
|
||||
wtsources = [line.strip()
|
||||
for line in filelist
|
||||
if not line.startswith("#") and len(line) > 1]
|
||||
filelist.close()
|
||||
# Map WiredTiger build conditions: any conditions that appear in WiredTiger's
|
||||
# dist/filelist must appear here, and if the value is true, those files will be
|
||||
# included.
|
||||
#
|
||||
condition_map = {
|
||||
'POSIX_HOST' : env['PLATFORM'] == 'posix',
|
||||
'POWERPC_HOST' : False,
|
||||
'WINDOWS_HOST' : env['PLATFORM'] == 'win32',
|
||||
}
|
||||
|
||||
def filtered_filelist(f):
|
||||
for line in f:
|
||||
file_cond = line.split()
|
||||
if line.startswith("#") or len(file_cond) == 0:
|
||||
continue
|
||||
if len(file_cond) == 1 or condition_map[file_cond[1]]:
|
||||
yield file_cond[0]
|
||||
|
||||
filelistfile = r'dist/filelist'
|
||||
wtsources = list(filtered_filelist(open(filelistfile)))
|
||||
|
||||
if useZlib:
|
||||
wtsources.append("ext/compressors/zlib/zlib_compress.c")
|
||||
|
||||
@@ -34,6 +34,16 @@ AC_PROG_CC(cc gcc)
|
||||
AC_PROG_CXX(c++ g++)
|
||||
AM_PROG_AS(as gas)
|
||||
|
||||
AM_CONDITIONAL([POSIX_HOST], [true])
|
||||
AM_CONDITIONAL([WINDOWS_HOST], [false])
|
||||
|
||||
AS_CASE([$host_cpu],
|
||||
[ppc64*], [wt_cv_powerpc="yes"],
|
||||
[elf64lppc], [wt_cv_powerpc="yes"],
|
||||
[powerpc*], [wt_cv_powerpc="yes"],
|
||||
[wt_cv_powerpc="no"])
|
||||
AM_CONDITIONAL([POWERPC_HOST], [test "$wt_cv_powerpc" = "yes"])
|
||||
|
||||
# This is a workaround as part of WT-2459. Currently, clang (v3.7) does not
|
||||
# support compiling the ASM code we have to perform the CRC checks on PowerPC.
|
||||
# To compile with clang we need to override the ASM compiler with CCAS to use
|
||||
@@ -41,12 +51,8 @@ AM_PROG_AS(as gas)
|
||||
# determine what tag to use for that one .S file. If we catch that we are using
|
||||
# two different compilers for CC and CCAS and we are on a PowerPC system we
|
||||
# overload the libtool flags to provide CC by default.
|
||||
if test "$CC" != "$CCAS"; then
|
||||
AS_CASE([$host_cpu],
|
||||
[ppc64*], [AM_LIBTOOLFLAGS+="--tag=CC"],
|
||||
[elf64lppc], [AM_LIBTOOLFLAGS+="--tag=CC"],
|
||||
[powerpc*], [AM_LIBTOOLFLAGS+="--tag=CC"],
|
||||
[])
|
||||
if test "$wt_cv_powerpc" = "yes" -a "$CC" != "$CCAS"; then
|
||||
[AM_LIBTOOLFLAGS+="--tag=CC"]
|
||||
fi
|
||||
AC_SUBST(AM_LIBTOOLFLAGS)
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
(sed -n '1,/BEGIN SUBDIRS/p' Make.base
|
||||
|
||||
echo "SUBDIRS ="
|
||||
sed -e 's/#.*$//' -e '/^$/d' Make.subdirs | (while read dir cond ; do
|
||||
sed -e 's/#.*$//' -e '/^$/d' Make.subdirs | while read dir cond ; do
|
||||
test -d ../$dir || continue
|
||||
if test -n "$cond" ; then
|
||||
cat <<END_CONDITIONAL
|
||||
@@ -18,17 +18,27 @@ END_CONDITIONAL
|
||||
else
|
||||
echo "SUBDIRS += $dir"
|
||||
fi
|
||||
done)
|
||||
done
|
||||
|
||||
# Write the rest of Make.base, up to SOURCES
|
||||
sed -n '/END SUBDIRS/,/BEGIN SOURCES/p' Make.base
|
||||
|
||||
# Write the list of sources.
|
||||
echo
|
||||
echo "libwiredtiger_la_LDFLAGS = -release @VERSION@"
|
||||
echo "libwiredtiger_la_SOURCES=\\"
|
||||
sed -e '/^[a-z]/!d' \
|
||||
-e 's/.*/ & \\/' \
|
||||
-e '$s/ \\$//' < ../dist/filelist
|
||||
echo "libwiredtiger_la_SOURCES ="
|
||||
sed -e '/^[a-z]/!d' < ../dist/filelist | while read file cond; do
|
||||
if test -n "$cond"; then
|
||||
cat <<END_CONDITIONAL
|
||||
# DO NOT indent the "libwiredtiger_la_SOURCES" lines, it breaks the build.
|
||||
if ${cond}
|
||||
libwiredtiger_la_SOURCES += $file
|
||||
endif
|
||||
END_CONDITIONAL
|
||||
else
|
||||
echo "libwiredtiger_la_SOURCES += $file"
|
||||
fi
|
||||
done
|
||||
|
||||
# Write the rest of Make.base
|
||||
sed -n '/END SOURCES/,$p' Make.base
|
||||
|
||||
@@ -1,171 +0,0 @@
|
||||
|
||||
# List of source files for WiredTiger library.
|
||||
# filelist --
|
||||
src/async/async_api.c
|
||||
src/async/async_op.c
|
||||
src/async/async_worker.c
|
||||
src/block/block_addr.c
|
||||
src/block/block_ckpt.c
|
||||
src/block/block_compact.c
|
||||
src/block/block_ext.c
|
||||
src/block/block_map.c
|
||||
src/block/block_mgr.c
|
||||
src/block/block_open.c
|
||||
src/block/block_read.c
|
||||
src/block/block_session.c
|
||||
src/block/block_slvg.c
|
||||
src/block/block_vrfy.c
|
||||
src/block/block_write.c
|
||||
src/bloom/bloom.c
|
||||
src/btree/bt_compact.c
|
||||
src/btree/bt_curnext.c
|
||||
src/btree/bt_curprev.c
|
||||
src/btree/bt_cursor.c
|
||||
src/btree/bt_debug.c
|
||||
src/btree/bt_delete.c
|
||||
src/btree/bt_discard.c
|
||||
src/btree/bt_handle.c
|
||||
src/btree/bt_huffman.c
|
||||
src/btree/bt_io.c
|
||||
src/btree/bt_misc.c
|
||||
src/btree/bt_ovfl.c
|
||||
src/btree/bt_page.c
|
||||
src/btree/bt_read.c
|
||||
src/btree/bt_rebalance.c
|
||||
src/btree/bt_ret.c
|
||||
src/btree/bt_slvg.c
|
||||
src/btree/bt_split.c
|
||||
src/btree/bt_stat.c
|
||||
src/btree/bt_sync.c
|
||||
src/btree/bt_upgrade.c
|
||||
src/btree/bt_vrfy.c
|
||||
src/btree/bt_vrfy_dsk.c
|
||||
src/btree/bt_walk.c
|
||||
src/btree/col_modify.c
|
||||
src/btree/col_srch.c
|
||||
src/btree/row_key.c
|
||||
src/btree/row_modify.c
|
||||
src/btree/row_srch.c
|
||||
src/cache/cache_las.c
|
||||
src/checksum/checksum.c
|
||||
src/config/config.c
|
||||
src/config/config_api.c
|
||||
src/config/config_check.c
|
||||
src/config/config_collapse.c
|
||||
src/config/config_def.c
|
||||
src/config/config_ext.c
|
||||
src/config/config_upgrade.c
|
||||
src/conn/api_strerror.c
|
||||
src/conn/api_version.c
|
||||
src/conn/conn_api.c
|
||||
src/conn/conn_cache.c
|
||||
src/conn/conn_cache_pool.c
|
||||
src/conn/conn_ckpt.c
|
||||
src/conn/conn_dhandle.c
|
||||
src/conn/conn_handle.c
|
||||
src/conn/conn_log.c
|
||||
src/conn/conn_open.c
|
||||
src/conn/conn_stat.c
|
||||
src/conn/conn_sweep.c
|
||||
src/cursor/cur_backup.c
|
||||
src/cursor/cur_bulk.c
|
||||
src/cursor/cur_config.c
|
||||
src/cursor/cur_ds.c
|
||||
src/cursor/cur_dump.c
|
||||
src/cursor/cur_file.c
|
||||
src/cursor/cur_index.c
|
||||
src/cursor/cur_join.c
|
||||
src/cursor/cur_json.c
|
||||
src/cursor/cur_log.c
|
||||
src/cursor/cur_metadata.c
|
||||
src/cursor/cur_stat.c
|
||||
src/cursor/cur_std.c
|
||||
src/cursor/cur_table.c
|
||||
src/evict/evict_file.c
|
||||
src/evict/evict_lru.c
|
||||
src/evict/evict_page.c
|
||||
src/log/log.c
|
||||
src/log/log_auto.c
|
||||
src/log/log_slot.c
|
||||
src/lsm/lsm_cursor.c
|
||||
src/lsm/lsm_cursor_bulk.c
|
||||
src/lsm/lsm_manager.c
|
||||
src/lsm/lsm_merge.c
|
||||
src/lsm/lsm_meta.c
|
||||
src/lsm/lsm_stat.c
|
||||
src/lsm/lsm_tree.c
|
||||
src/lsm/lsm_work_unit.c
|
||||
src/lsm/lsm_worker.c
|
||||
src/meta/meta_apply.c
|
||||
src/meta/meta_ckpt.c
|
||||
src/meta/meta_ext.c
|
||||
src/meta/meta_table.c
|
||||
src/meta/meta_track.c
|
||||
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_fhandle.c
|
||||
src/os_common/os_fs_inmemory.c
|
||||
src/os_common/os_fstream.c
|
||||
src/os_common/os_fstream_stdio.c
|
||||
src/os_common/os_getopt.c
|
||||
src/os_common/os_strtouq.c
|
||||
src/os_win/os_dir.c
|
||||
src/os_win/os_dlopen.c
|
||||
src/os_win/os_errno.c
|
||||
src/os_win/os_fs.c
|
||||
src/os_win/os_getenv.c
|
||||
src/os_win/os_map.c
|
||||
src/os_win/os_mtx_cond.c
|
||||
src/os_win/os_once.c
|
||||
src/os_win/os_pagesize.c
|
||||
src/os_win/os_path.c
|
||||
src/os_win/os_priv.c
|
||||
src/os_win/os_setvbuf.c
|
||||
src/os_win/os_sleep.c
|
||||
src/os_win/os_snprintf.c
|
||||
src/os_win/os_thread.c
|
||||
src/os_win/os_time.c
|
||||
src/os_win/os_vsnprintf.c
|
||||
src/os_win/os_yield.c
|
||||
src/packing/pack_api.c
|
||||
src/packing/pack_impl.c
|
||||
src/packing/pack_stream.c
|
||||
src/reconcile/rec_track.c
|
||||
src/reconcile/rec_write.c
|
||||
src/schema/schema_create.c
|
||||
src/schema/schema_drop.c
|
||||
src/schema/schema_list.c
|
||||
src/schema/schema_open.c
|
||||
src/schema/schema_plan.c
|
||||
src/schema/schema_project.c
|
||||
src/schema/schema_rename.c
|
||||
src/schema/schema_stat.c
|
||||
src/schema/schema_truncate.c
|
||||
src/schema/schema_util.c
|
||||
src/schema/schema_worker.c
|
||||
src/session/session_api.c
|
||||
src/session/session_compact.c
|
||||
src/session/session_dhandle.c
|
||||
src/session/session_salvage.c
|
||||
src/support/cond_auto.c
|
||||
src/support/crypto.c
|
||||
src/support/err.c
|
||||
src/support/global.c
|
||||
src/support/hash_city.c
|
||||
src/support/hash_fnv.c
|
||||
src/support/hazard.c
|
||||
src/support/hex.c
|
||||
src/support/huffman.c
|
||||
src/support/mtx_rw.c
|
||||
src/support/pow.c
|
||||
src/support/rand.c
|
||||
src/support/scratch.c
|
||||
src/support/stat.c
|
||||
src/txn/txn.c
|
||||
src/txn/txn_ckpt.c
|
||||
src/txn/txn_ext.c
|
||||
src/txn/txn_log.c
|
||||
src/txn/txn_nsnap.c
|
||||
src/txn/txn_recover.c
|
||||
15
dist/dist.py
vendored
15
dist/dist.py
vendored
@@ -2,21 +2,16 @@ import filecmp, glob, os, re, shutil
|
||||
|
||||
# source_files --
|
||||
# Return a list of the WiredTiger source file names.
|
||||
def source_files(skip_includes=False):
|
||||
if not skip_includes:
|
||||
for line in glob.iglob('../src/include/*.[hi]'):
|
||||
yield line
|
||||
def source_files():
|
||||
file_re = re.compile(r'^\w')
|
||||
for line in glob.iglob('../src/include/*.[hi]'):
|
||||
yield line
|
||||
for line in open('filelist', 'r'):
|
||||
if file_re.match(line):
|
||||
yield os.path.join('..', line.rstrip())
|
||||
# Return only the Windows-specific files in the Windows filelist
|
||||
for line in open('../build_win/filelist.win', 'r'):
|
||||
if 'os_win' in line and file_re.match(line):
|
||||
yield os.path.join('..', line.rstrip())
|
||||
yield os.path.join('..', line.split()[0])
|
||||
for line in open('extlist', 'r'):
|
||||
if file_re.match(line):
|
||||
yield os.path.join('..', line.rstrip())
|
||||
yield os.path.join('..', line.split()[0])
|
||||
|
||||
# source_dirs --
|
||||
# Return a list of the WiredTiger source directory names.
|
||||
|
||||
56
dist/filelist
vendored
56
dist/filelist
vendored
@@ -48,8 +48,8 @@ src/btree/row_modify.c
|
||||
src/btree/row_srch.c
|
||||
src/cache/cache_las.c
|
||||
src/checksum/checksum.c
|
||||
src/checksum/power8/crc32.S
|
||||
src/checksum/power8/crc32_wrapper.c
|
||||
src/checksum/power8/crc32.S POWERPC_HOST
|
||||
src/checksum/power8/crc32_wrapper.c POWERPC_HOST
|
||||
src/config/config.c
|
||||
src/config/config_api.c
|
||||
src/config/config_check.c
|
||||
@@ -113,23 +113,41 @@ src/os_common/os_fstream.c
|
||||
src/os_common/os_fstream_stdio.c
|
||||
src/os_common/os_getopt.c
|
||||
src/os_common/os_strtouq.c
|
||||
src/os_posix/os_dir.c
|
||||
src/os_posix/os_dlopen.c
|
||||
src/os_posix/os_errno.c
|
||||
src/os_posix/os_fallocate.c
|
||||
src/os_posix/os_fs.c
|
||||
src/os_posix/os_getenv.c
|
||||
src/os_posix/os_map.c
|
||||
src/os_posix/os_mtx_cond.c
|
||||
src/os_posix/os_once.c
|
||||
src/os_posix/os_pagesize.c
|
||||
src/os_posix/os_path.c
|
||||
src/os_posix/os_priv.c
|
||||
src/os_posix/os_setvbuf.c
|
||||
src/os_posix/os_sleep.c
|
||||
src/os_posix/os_thread.c
|
||||
src/os_posix/os_time.c
|
||||
src/os_posix/os_yield.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
|
||||
src/os_posix/os_map.c POSIX_HOST
|
||||
src/os_posix/os_mtx_cond.c POSIX_HOST
|
||||
src/os_posix/os_once.c POSIX_HOST
|
||||
src/os_posix/os_pagesize.c POSIX_HOST
|
||||
src/os_posix/os_path.c POSIX_HOST
|
||||
src/os_posix/os_priv.c POSIX_HOST
|
||||
src/os_posix/os_setvbuf.c POSIX_HOST
|
||||
src/os_posix/os_sleep.c POSIX_HOST
|
||||
src/os_posix/os_thread.c POSIX_HOST
|
||||
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
|
||||
src/os_win/os_mtx_cond.c WINDOWS_HOST
|
||||
src/os_win/os_once.c WINDOWS_HOST
|
||||
src/os_win/os_pagesize.c WINDOWS_HOST
|
||||
src/os_win/os_path.c WINDOWS_HOST
|
||||
src/os_win/os_priv.c WINDOWS_HOST
|
||||
src/os_win/os_setvbuf.c WINDOWS_HOST
|
||||
src/os_win/os_sleep.c WINDOWS_HOST
|
||||
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_yield.c WINDOWS_HOST
|
||||
src/packing/pack_api.c
|
||||
src/packing/pack_impl.c
|
||||
src/packing/pack_stream.c
|
||||
|
||||
2
dist/s_define
vendored
2
dist/s_define
vendored
@@ -5,7 +5,7 @@ t=__wt.$$
|
||||
trap 'rm -f $t; exit 0' 0 1 2 3 13 15
|
||||
|
||||
# List of source files to search.
|
||||
l=`sed -e 's,#.*,,' -e '/^$/d' -e 's,^,../,' filelist`
|
||||
l=`sed -e '/^[a-z]/!d' -e 's/[ ].*$//' -e 's,^,../,' filelist`
|
||||
l="$l `echo ../src/include/*.i ../src/utilities/*.c ../test/*/*.c`"
|
||||
|
||||
# List of include files for source #defines.
|
||||
|
||||
2
dist/s_funcs
vendored
2
dist/s_funcs
vendored
@@ -5,7 +5,7 @@ t=__wt.$$
|
||||
trap 'rm -f $t; exit 0' 0 1 2 3 13 15
|
||||
|
||||
# List of files to search.
|
||||
l=`sed -e 's,#.*,,' -e '/^$/d' -e 's,^,../,' filelist`
|
||||
l=`sed -e '/^[a-z]/!d' -e 's/[ ].*$//' -e 's,^,../,' filelist`
|
||||
l="$l `echo ../src/*/*.i ../src/utilities/*.c ../bench/wtperf/*.c`"
|
||||
|
||||
(
|
||||
|
||||
2
dist/s_prototypes
vendored
2
dist/s_prototypes
vendored
@@ -47,7 +47,7 @@ EOF
|
||||
# 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' filelist`
|
||||
l=`sed -e '/^[a-z]/!d' -e '/src\/os/d' -e 's/[ ].*$//' filelist`
|
||||
for i in $l; do
|
||||
proto ../$i
|
||||
done
|
||||
|
||||
4
dist/s_stat
vendored
4
dist/s_stat
vendored
@@ -8,8 +8,8 @@ trap 'rm -f $t; exit 0' 0 1 2 3 13 15
|
||||
# definition.
|
||||
l=`sed \
|
||||
-e '/src\/support\/stat.c/d' \
|
||||
-e 's,#.*,,' \
|
||||
-e '/^$/d' \
|
||||
-e '/^[a-z]/!d' \
|
||||
-e 's/[ ].*$//' \
|
||||
-e 's,^,../,' filelist`
|
||||
l="$l `echo ../src/include/*.i ../src/include/os.h`"
|
||||
|
||||
|
||||
1
dist/s_string.ok
vendored
1
dist/s_string.ok
vendored
@@ -442,6 +442,7 @@ bzDecompressInit
|
||||
bzalloc
|
||||
bzfree
|
||||
bzip
|
||||
call's
|
||||
calloc
|
||||
cas
|
||||
catfmt
|
||||
|
||||
2
dist/s_typedef
vendored
2
dist/s_typedef
vendored
@@ -44,7 +44,7 @@ build() {
|
||||
check() {
|
||||
# Complain about unused #typedefs.
|
||||
# List of files to search.
|
||||
l=`sed -e 's,#.*,,' -e '/^$/d' -e 's,^,../,' filelist`
|
||||
l=`sed -e '/^[a-z]/!d' -e 's/[ ].*$//' -e 's,^,../,' filelist`
|
||||
l="$l `echo ../src/utilities/*.c`"
|
||||
|
||||
(
|
||||
|
||||
35
dist/s_win
vendored
35
dist/s_win
vendored
@@ -39,42 +39,7 @@ win_export()
|
||||
(echo "Building $f" && rm -f $f && cp $t $f)
|
||||
}
|
||||
|
||||
win_filelist()
|
||||
{
|
||||
f='../build_win/filelist.win'
|
||||
|
||||
# Discard POSIX-only and PPC-only files, add in Windows-only files.
|
||||
(
|
||||
sed \
|
||||
-e '/\/os_posix\//d' \
|
||||
-e '/src\/checksum\/power8\/crc32.S/d' \
|
||||
-e '/src\/checksum\/power8\/crc32_wrapper.c/d'
|
||||
|
||||
echo 'src/os_win/os_dir.c'
|
||||
echo 'src/os_win/os_dlopen.c'
|
||||
echo 'src/os_win/os_errno.c'
|
||||
echo 'src/os_win/os_fs.c'
|
||||
echo 'src/os_win/os_getenv.c'
|
||||
echo 'src/os_win/os_map.c'
|
||||
echo 'src/os_win/os_mtx_cond.c'
|
||||
echo 'src/os_win/os_once.c'
|
||||
echo 'src/os_win/os_pagesize.c'
|
||||
echo 'src/os_win/os_path.c'
|
||||
echo 'src/os_win/os_priv.c'
|
||||
echo 'src/os_win/os_setvbuf.c'
|
||||
echo 'src/os_win/os_sleep.c'
|
||||
echo 'src/os_win/os_snprintf.c'
|
||||
echo 'src/os_win/os_thread.c'
|
||||
echo 'src/os_win/os_time.c'
|
||||
echo 'src/os_win/os_vsnprintf.c'
|
||||
echo 'src/os_win/os_yield.c') < filelist | sort > $t
|
||||
|
||||
cmp $t $f > /dev/null 2>&1 ||
|
||||
(echo "Building $f" && rm -f $f && cp $t $f)
|
||||
}
|
||||
|
||||
win_config
|
||||
win_export
|
||||
win_filelist
|
||||
|
||||
exit 0
|
||||
|
||||
@@ -96,8 +96,10 @@ __sync_file(WT_SESSION_IMPL *session, WT_CACHE_OP syncop)
|
||||
* snapshot now.
|
||||
*
|
||||
* All changes committed up to this point should be included.
|
||||
* We don't update the snapshot in between pages because (a)
|
||||
* the metadata shouldn't be that big, and (b) if we do ever
|
||||
* We don't update the snapshot in between pages because the
|
||||
* metadata shouldn't have many pages. Instead, read-committed
|
||||
* isolation ensures that all metadata updates completed before
|
||||
* the checkpoint are included.
|
||||
*/
|
||||
if (txn->isolation == WT_ISO_READ_COMMITTED)
|
||||
WT_ERR(__wt_txn_get_snapshot(session));
|
||||
|
||||
11
src/cache/cache_las.c
vendored
11
src/cache/cache_las.c
vendored
@@ -42,6 +42,17 @@ __wt_las_stats_update(WT_SESSION_IMPL *session)
|
||||
WT_STAT_SET(session, cstats, cache_lookaside_insert, v);
|
||||
v = WT_STAT_READ(dstats, cursor_remove);
|
||||
WT_STAT_SET(session, cstats, cache_lookaside_remove, v);
|
||||
/*
|
||||
* If we're clearing stats we need to clear the cursor values we just
|
||||
* read. This does not clear the rest of the statistics in the
|
||||
* lookaside data source stat cursor, but we own that namespace so we
|
||||
* don't have to worry about users seeing inconsistent data source
|
||||
* information.
|
||||
*/
|
||||
if (FLD_ISSET(conn->stat_flags, WT_CONN_STAT_CLEAR)) {
|
||||
WT_STAT_SET(session, dstats, cursor_insert, 0);
|
||||
WT_STAT_SET(session, dstats, cursor_remove, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -773,6 +773,6 @@ FUNC_END(__crc32_vpmsum)
|
||||
/*
|
||||
* Make sure the stack isn't executable with GCC (regardless of platform).
|
||||
*/
|
||||
#ifndef __clang__
|
||||
#ifdef __ELF__
|
||||
.section .note.GNU-stack,"",@progbits
|
||||
#endif
|
||||
|
||||
@@ -257,6 +257,7 @@ struct __wt_log {
|
||||
uint64_t write_calls; /* Calls to log_write */
|
||||
#endif
|
||||
|
||||
#define WT_LOG_NOT_VERIFIED 0x1 /* Log just started */
|
||||
uint32_t flags;
|
||||
};
|
||||
|
||||
|
||||
@@ -9,15 +9,26 @@
|
||||
#define WT_SYSCALL_RETRY(call, ret) do { \
|
||||
int __retry; \
|
||||
for (__retry = 0; __retry < 10; ++__retry) { \
|
||||
if ((call) == 0) { \
|
||||
(ret) = 0; \
|
||||
break; \
|
||||
} \
|
||||
switch ((ret) = __wt_errno()) { \
|
||||
case 0: \
|
||||
/* The call failed but didn't set errno. */ \
|
||||
(ret) = WT_ERROR; \
|
||||
/* \
|
||||
* A call returning 0 indicates success; any call where \
|
||||
* 0 is not the only successful return must provide an \
|
||||
* expression evaluating to 0 in all successful cases. \
|
||||
*/ \
|
||||
if (((ret) = (call)) == 0) \
|
||||
break; \
|
||||
/* \
|
||||
* The call's error was either returned by the call or \
|
||||
* is in errno, and there are cases where it depends on \
|
||||
* the software release as to which it is (for example, \
|
||||
* posix_fadvise on FreeBSD and OS X). Failing calls \
|
||||
* must either return a non-zero error value, or -1 if \
|
||||
* the error value is in errno. (The WiredTiger errno \
|
||||
* function returns WT_ERROR if errno is 0, which isn't \
|
||||
* ideal but won't discard the failure.) \
|
||||
*/ \
|
||||
if ((ret) == -1) \
|
||||
(ret) = __wt_errno(); \
|
||||
switch (ret) { \
|
||||
case EAGAIN: \
|
||||
case EBUSY: \
|
||||
case EINTR: \
|
||||
|
||||
@@ -1090,6 +1090,7 @@ __wt_log_open(WT_SESSION_IMPL *session)
|
||||
logcount = 0;
|
||||
lastlog = 0;
|
||||
firstlog = UINT32_MAX;
|
||||
F_SET(log, WT_LOG_NOT_VERIFIED);
|
||||
|
||||
/*
|
||||
* Open up a file handle to the log directory if we haven't.
|
||||
@@ -1744,6 +1745,22 @@ advance:
|
||||
&rd_lsn, WT_LOG_FILENAME, 0));
|
||||
|
||||
err: WT_STAT_FAST_CONN_INCR(session, log_scans);
|
||||
/*
|
||||
* If the first attempt to read a log record results in
|
||||
* an error recovery is likely going to fail. Try to provide
|
||||
* a helpful failure message.
|
||||
*/
|
||||
if (ret != 0 && F_ISSET(log, WT_LOG_NOT_VERIFIED)) {
|
||||
__wt_errx(session,
|
||||
"WiredTiger is unable to read the recovery log.");
|
||||
__wt_errx(session, "This may be due to the log"
|
||||
" files being encrypted, being from an older"
|
||||
" version or due to corruption on disk");
|
||||
__wt_errx(session, "You should confirm that you have"
|
||||
" opened the database with the correct options including"
|
||||
" all encryption and compression options");
|
||||
}
|
||||
F_CLR(log, WT_LOG_NOT_VERIFIED);
|
||||
|
||||
WT_TRET(__wt_fs_directory_list_free(session, &logfiles, logcount));
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ __wt_posix_directory_list(WT_FILE_SYSTEM *file_system,
|
||||
dirallocsz = 0;
|
||||
entries = NULL;
|
||||
|
||||
WT_SYSCALL_RETRY(((dirp = opendir(directory)) == NULL ? 1 : 0), ret);
|
||||
WT_SYSCALL_RETRY(((dirp = opendir(directory)) == NULL ? -1 : 0), ret);
|
||||
if (ret != 0)
|
||||
WT_RET_MSG(session, ret,
|
||||
"%s: directory-list: opendir", directory);
|
||||
|
||||
@@ -53,7 +53,7 @@ __posix_sync(
|
||||
* "This is currently implemented on HFS, MS-DOS (FAT), and Universal
|
||||
* Disk Format (UDF) file systems."
|
||||
*/
|
||||
WT_SYSCALL_RETRY(fcntl(fd, F_FULLFSYNC, 0), ret);
|
||||
WT_SYSCALL_RETRY(fcntl(fd, F_FULLFSYNC, 0) == -1 ? -1 : 0, ret);
|
||||
if (ret == 0)
|
||||
return (0);
|
||||
/*
|
||||
@@ -92,7 +92,7 @@ __posix_directory_sync(
|
||||
session = (WT_SESSION_IMPL *)wt_session;
|
||||
|
||||
WT_SYSCALL_RETRY((
|
||||
(fd = open(path, O_RDONLY, 0444)) == -1 ? 1 : 0), ret);
|
||||
(fd = open(path, O_RDONLY, 0444)) == -1 ? -1 : 0), ret);
|
||||
if (ret != 0)
|
||||
WT_RET_MSG(session, ret, "%s: directory-sync: open", path);
|
||||
|
||||
@@ -151,10 +151,17 @@ __posix_fs_remove(
|
||||
|
||||
session = (WT_SESSION_IMPL *)wt_session;
|
||||
|
||||
WT_SYSCALL_RETRY(remove(name), ret);
|
||||
/*
|
||||
* ISO C doesn't require remove return -1 on failure or set errno (note
|
||||
* POSIX 1003.1 extends C with those requirements). Regardless, use the
|
||||
* unlink system call, instead of remove, to simplify error handling;
|
||||
* where we're not doing any special checking for standards compliance,
|
||||
* using unlink may be marginally safer.
|
||||
*/
|
||||
WT_SYSCALL_RETRY(unlink(name), ret);
|
||||
if (ret == 0)
|
||||
return (0);
|
||||
WT_RET_MSG(session, ret, "%s: file-remove: remove", name);
|
||||
WT_RET_MSG(session, ret, "%s: file-remove: unlink", name);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -172,7 +179,14 @@ __posix_fs_rename(WT_FILE_SYSTEM *file_system,
|
||||
|
||||
session = (WT_SESSION_IMPL *)wt_session;
|
||||
|
||||
WT_SYSCALL_RETRY(rename(from, to), ret);
|
||||
/*
|
||||
* ISO C doesn't require rename return -1 on failure or set errno (note
|
||||
* POSIX 1003.1 extends C with those requirements). Be cautious, force
|
||||
* any non-zero return to -1 so we'll check errno. We can still end up
|
||||
* with the wrong errno (if errno is garbage), or the generic WT_ERROR
|
||||
* return (if errno is 0), but we've done the best we can.
|
||||
*/
|
||||
WT_SYSCALL_RETRY(rename(from, to) != 0 ? -1 : 0, ret);
|
||||
if (ret == 0)
|
||||
return (0);
|
||||
WT_RET_MSG(session, ret, "%s to %s: file-rename: rename", from, to);
|
||||
@@ -295,7 +309,7 @@ __posix_file_lock(
|
||||
fl.l_type = lock ? F_WRLCK : F_UNLCK;
|
||||
fl.l_whence = SEEK_SET;
|
||||
|
||||
WT_SYSCALL_RETRY(fcntl(pfh->fd, F_SETLK, &fl), ret);
|
||||
WT_SYSCALL_RETRY(fcntl(pfh->fd, F_SETLK, &fl) == -1 ? -1 : 0, ret);
|
||||
if (ret == 0)
|
||||
return (0);
|
||||
WT_RET_MSG(session, ret, "%s: handle-lock: fcntl", file_handle->name);
|
||||
@@ -533,7 +547,7 @@ __posix_open_file(WT_FILE_SYSTEM *file_system, WT_SESSION *wt_session,
|
||||
f |= O_CLOEXEC;
|
||||
#endif
|
||||
WT_SYSCALL_RETRY((
|
||||
(pfh->fd = open(name, f, 0444)) == -1 ? 1 : 0), ret);
|
||||
(pfh->fd = open(name, f, 0444)) == -1 ? -1 : 0), ret);
|
||||
if (ret != 0)
|
||||
WT_ERR_MSG(session, ret, "%s: handle-open: open", name);
|
||||
WT_ERR(__posix_open_file_cloexec(session, pfh->fd, name));
|
||||
@@ -587,7 +601,7 @@ __posix_open_file(WT_FILE_SYSTEM *file_system, WT_SESSION *wt_session,
|
||||
#endif
|
||||
}
|
||||
|
||||
WT_SYSCALL_RETRY(((pfh->fd = open(name, f, mode)) == -1 ? 1 : 0), ret);
|
||||
WT_SYSCALL_RETRY(((pfh->fd = open(name, f, mode)) == -1 ? -1 : 0), ret);
|
||||
if (ret != 0)
|
||||
WT_ERR_MSG(session, ret,
|
||||
pfh->direct_io ?
|
||||
|
||||
@@ -102,10 +102,13 @@ __wt_posix_map_preload(WT_FILE_HANDLE *fh,
|
||||
* size, so we will be conservative.
|
||||
*/
|
||||
length &= ~(size_t)(conn->page_size - 1);
|
||||
|
||||
if (length <= (size_t)conn->page_size ||
|
||||
(ret = posix_madvise(blk, length, POSIX_MADV_WILLNEED)) == 0)
|
||||
if (length <= (size_t)conn->page_size)
|
||||
return (0);
|
||||
|
||||
WT_SYSCALL_RETRY(posix_madvise(blk, length, POSIX_MADV_WILLNEED), ret);
|
||||
if (ret == 0)
|
||||
return (0);
|
||||
|
||||
WT_RET_MSG(session, ret,
|
||||
"%s: memory-map preload: posix_madvise: POSIX_MADV_WILLNEED",
|
||||
fh->name);
|
||||
@@ -135,8 +138,10 @@ __wt_posix_map_discard(WT_FILE_HANDLE *fh,
|
||||
blk = (void *)((uintptr_t)map & ~(uintptr_t)(conn->page_size - 1));
|
||||
length += WT_PTRDIFF(map, blk);
|
||||
|
||||
if ((ret = posix_madvise(blk, length, POSIX_MADV_DONTNEED)) == 0)
|
||||
WT_SYSCALL_RETRY(posix_madvise(blk, length, POSIX_MADV_DONTNEED), ret);
|
||||
if (ret == 0)
|
||||
return (0);
|
||||
|
||||
WT_RET_MSG(session, ret,
|
||||
"%s: memory-map discard: posix_madvise: POSIX_MADV_DONTNEED",
|
||||
fh->name);
|
||||
|
||||
@@ -169,11 +169,6 @@ __win_file_lock(
|
||||
* WiredTiger requires this function be able to acquire locks past
|
||||
* the end of file.
|
||||
*
|
||||
* Note we're using fcntl(2) locking: all fcntl locks associated with a
|
||||
* file for a given process are removed when any file descriptor for the
|
||||
* file is closed by the process, even if a lock was never requested for
|
||||
* that file descriptor.
|
||||
*
|
||||
* http://msdn.microsoft.com/
|
||||
* en-us/library/windows/desktop/aa365202%28v=vs.85%29.aspx
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user