2011-03-18 23:37:00 +01:00
|
|
|
# Copyright (c) 2011 The LevelDB Authors. All rights reserved.
|
|
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
|
|
# found in the LICENSE file. See the AUTHORS file for names of contributors.
|
|
|
|
|
2012-03-30 22:15:49 +02:00
|
|
|
# Inherit some settings from environment variables, if available
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2011-06-02 02:00:37 +02:00
|
|
|
#-----------------------------------------------
|
2014-02-07 01:11:35 +01:00
|
|
|
|
2016-12-08 07:06:59 +01:00
|
|
|
BASH_EXISTS := $(shell which bash)
|
|
|
|
SHELL := $(shell which bash)
|
|
|
|
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
CLEAN_FILES = # deliberately empty, so we can append below.
|
2014-11-26 15:48:03 +01:00
|
|
|
CFLAGS += ${EXTRA_CFLAGS}
|
|
|
|
CXXFLAGS += ${EXTRA_CXXFLAGS}
|
|
|
|
LDFLAGS += $(EXTRA_LDFLAGS)
|
|
|
|
MACHINE ?= $(shell uname -m)
|
2017-04-22 05:41:37 +02:00
|
|
|
ARFLAGS = ${EXTRA_ARFLAGS} rs
|
|
|
|
STRIPFLAGS = -S -x
|
2014-11-26 15:48:03 +01:00
|
|
|
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
# Transform parallel LOG output into something more readable.
|
|
|
|
perl_command = perl -n \
|
2016-04-16 01:21:03 +02:00
|
|
|
-e '@a=split("\t",$$_,-1); $$t=$$a[8];' \
|
|
|
|
-e '$$t =~ /.*if\s\[\[\s"(.*?\.[\w\/]+)/ and $$t=$$1;' \
|
|
|
|
-e '$$t =~ s,^\./,,;' \
|
2015-07-21 01:40:41 +02:00
|
|
|
-e '$$t =~ s, >.*,,; chomp $$t;' \
|
|
|
|
-e '$$t =~ /.*--gtest_filter=(.*?\.[\w\/]+)/ and $$t=$$1;' \
|
|
|
|
-e 'printf "%7.3f %s %s\n", $$a[3], $$a[6] == 0 ? "PASS" : "FAIL", $$t'
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
quoted_perl_command = $(subst ','\'',$(perl_command))
|
|
|
|
|
2015-05-05 20:54:13 +02:00
|
|
|
# DEBUG_LEVEL can have three values:
|
|
|
|
# * DEBUG_LEVEL=2; this is the ultimate debug mode. It will compile rocksdb
|
|
|
|
# without any optimizations. To compile with level 2, issue `make dbg`
|
|
|
|
# * DEBUG_LEVEL=1; debug level 1 enables all assertions and debug code, but
|
|
|
|
# compiles rocksdb with -O2 optimizations. this is the default debug level.
|
|
|
|
# `make all` or `make <binary_target>` compile RocksDB with debug level 1.
|
|
|
|
# We use this debug level when developing RocksDB.
|
|
|
|
# * DEBUG_LEVEL=0; this is the debug level we use for release. If you're
|
|
|
|
# running rocksdb in production you most definitely want to compile RocksDB
|
2015-05-29 23:36:35 +02:00
|
|
|
# with debug level 0. To compile with level 0, run `make shared_lib`,
|
2015-05-05 20:54:13 +02:00
|
|
|
# `make install-shared`, `make static_lib`, `make install-static` or
|
|
|
|
# `make install`
|
2015-10-19 20:26:12 +02:00
|
|
|
|
|
|
|
# Set the default DEBUG_LEVEL to 1
|
|
|
|
DEBUG_LEVEL?=1
|
2015-05-05 20:54:13 +02:00
|
|
|
|
|
|
|
ifeq ($(MAKECMDGOALS),dbg)
|
2015-07-21 01:40:41 +02:00
|
|
|
DEBUG_LEVEL=2
|
2014-02-07 01:11:35 +01:00
|
|
|
endif
|
2014-02-28 07:15:30 +01:00
|
|
|
|
2015-10-21 02:09:09 +02:00
|
|
|
ifeq ($(MAKECMDGOALS),clean)
|
|
|
|
DEBUG_LEVEL=0
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(MAKECMDGOALS),release)
|
|
|
|
DEBUG_LEVEL=0
|
|
|
|
endif
|
|
|
|
|
2014-02-28 07:15:30 +01:00
|
|
|
ifeq ($(MAKECMDGOALS),shared_lib)
|
2015-07-21 01:40:41 +02:00
|
|
|
DEBUG_LEVEL=0
|
2014-04-15 22:39:26 +02:00
|
|
|
endif
|
2014-04-17 19:49:58 +02:00
|
|
|
|
2015-04-21 04:39:51 +02:00
|
|
|
ifeq ($(MAKECMDGOALS),install-shared)
|
2015-07-21 01:40:41 +02:00
|
|
|
DEBUG_LEVEL=0
|
2015-04-21 04:39:51 +02:00
|
|
|
endif
|
|
|
|
|
2014-04-15 22:39:26 +02:00
|
|
|
ifeq ($(MAKECMDGOALS),static_lib)
|
2015-07-21 01:40:41 +02:00
|
|
|
DEBUG_LEVEL=0
|
2014-02-28 07:15:30 +01:00
|
|
|
endif
|
2014-04-15 22:39:26 +02:00
|
|
|
|
2015-04-21 04:39:51 +02:00
|
|
|
ifeq ($(MAKECMDGOALS),install-static)
|
2015-07-21 01:40:41 +02:00
|
|
|
DEBUG_LEVEL=0
|
2015-04-21 04:39:51 +02:00
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(MAKECMDGOALS),install)
|
2015-07-21 01:40:41 +02:00
|
|
|
DEBUG_LEVEL=0
|
2015-05-05 20:54:13 +02:00
|
|
|
endif
|
|
|
|
|
2015-05-08 20:02:47 +02:00
|
|
|
ifeq ($(MAKECMDGOALS),rocksdbjavastatic)
|
2018-03-29 01:18:21 +02:00
|
|
|
ifneq ($(DEBUG_LEVEL),2)
|
|
|
|
DEBUG_LEVEL=0
|
|
|
|
endif
|
2015-05-08 20:02:47 +02:00
|
|
|
endif
|
|
|
|
|
2015-11-17 22:50:54 +01:00
|
|
|
ifeq ($(MAKECMDGOALS),rocksdbjavastaticrelease)
|
|
|
|
DEBUG_LEVEL=0
|
|
|
|
endif
|
|
|
|
|
2018-06-22 19:49:11 +02:00
|
|
|
ifeq ($(MAKECMDGOALS),rocksdbjavastaticreleasedocker)
|
|
|
|
DEBUG_LEVEL=0
|
|
|
|
endif
|
|
|
|
|
2015-11-17 22:50:54 +01:00
|
|
|
ifeq ($(MAKECMDGOALS),rocksdbjavastaticpublish)
|
|
|
|
DEBUG_LEVEL=0
|
|
|
|
endif
|
|
|
|
|
2015-05-05 20:54:13 +02:00
|
|
|
# compile with -O2 if debug level is not 2
|
|
|
|
ifneq ($(DEBUG_LEVEL), 2)
|
|
|
|
OPT += -O2 -fno-omit-frame-pointer
|
2016-02-29 10:03:24 +01:00
|
|
|
# Skip for archs that don't support -momit-leaf-frame-pointer
|
|
|
|
ifeq (,$(shell $(CXX) -fsyntax-only -momit-leaf-frame-pointer -xc /dev/null 2>&1))
|
2015-05-05 20:54:13 +02:00
|
|
|
OPT += -momit-leaf-frame-pointer
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2018-06-26 07:42:35 +02:00
|
|
|
ifeq (,$(shell $(CXX) -fsyntax-only -faligned-new -xc++ /dev/null 2>&1))
|
|
|
|
CXXFLAGS += -faligned-new -DHAVE_ALIGNED_NEW
|
|
|
|
endif
|
|
|
|
|
2017-08-31 23:02:06 +02:00
|
|
|
ifeq (,$(shell $(CXX) -fsyntax-only -maltivec -xc /dev/null 2>&1))
|
|
|
|
CXXFLAGS += -DHAS_ALTIVEC
|
|
|
|
CFLAGS += -DHAS_ALTIVEC
|
|
|
|
HAS_ALTIVEC=1
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (,$(shell $(CXX) -fsyntax-only -mcpu=power8 -xc /dev/null 2>&1))
|
|
|
|
CXXFLAGS += -DHAVE_POWER8
|
|
|
|
CFLAGS += -DHAVE_POWER8
|
|
|
|
HAVE_POWER8=1
|
|
|
|
endif
|
|
|
|
|
2017-10-05 21:32:55 +02:00
|
|
|
# if we're compiling for release, compile without debug code (-DNDEBUG)
|
2015-05-05 20:54:13 +02:00
|
|
|
ifeq ($(DEBUG_LEVEL),0)
|
2015-04-21 04:39:51 +02:00
|
|
|
OPT += -DNDEBUG
|
2017-07-29 01:23:50 +02:00
|
|
|
|
|
|
|
ifneq ($(USE_RTTI), 1)
|
|
|
|
CXXFLAGS += -fno-rtti
|
|
|
|
else
|
|
|
|
CXXFLAGS += -DROCKSDB_USE_RTTI
|
|
|
|
endif
|
2015-10-08 23:11:32 +02:00
|
|
|
else
|
2017-07-29 01:23:50 +02:00
|
|
|
ifneq ($(USE_RTTI), 0)
|
|
|
|
CXXFLAGS += -DROCKSDB_USE_RTTI
|
|
|
|
else
|
|
|
|
CXXFLAGS += -fno-rtti
|
|
|
|
endif
|
|
|
|
|
2015-10-08 23:11:32 +02:00
|
|
|
$(warning Warning: Compiling in debug mode. Don't use the resulting binary in production)
|
2015-04-21 04:39:51 +02:00
|
|
|
endif
|
|
|
|
|
2011-06-02 02:00:37 +02:00
|
|
|
#-----------------------------------------------
|
build: fix missing dependency problems
Summary:
Any time one would modify a dependent of any *test*.cc file,
"make" would fail to rebuild the affected test binaries,
e.g., db_test. That was due to the fact that we deliberately
excluded those test-related files from the definition of SOURCES
and only $(SOURCES) was used to create the automatically-generated
.d dependency files. The fix is to generate a .d file for every
source file.
* src.mk: New file. Defines LIB_SOURCES, MOCK_SOURCES
and TEST_BENCH_SOURCES.
* Makefile: Include src.mk.
Reflect s/SOURCES/LIB_SOURCES/ renaming.
* build_tools/build_detect_platform: Remove the code
that was used to generate SOURCES= and MOCK_SOURCES=
definitions in make_config.mk. Those lists of files
are now hard-coded in src.mk. Hard-coding this list of
sources is desirable, because without that, one risks
including stray .cc files in a build. Not reproducible.
Test Plan:
Touch a file used by db_test's dependent .o files and ensure that
they are all recompiled. Before, none would be:
$ touch db/db_impl.h && make db_test
CC db/db_test.o
CC db/column_family.o
CC db/db_filesnapshot.o
CC db/db_impl.o
CC db/db_impl_debug.o
CC db/db_impl_readonly.o
CC db/forward_iterator.o
CC db/internal_stats.o
CC db/managed_iterator.o
CC db/repair.o
CC db/write_batch.o
CC utilities/compacted_db/compacted_db_impl.o
CC utilities/ttl/db_ttl_impl.o
CC util/ldb_cmd.o
CC util/ldb_tool.o
CC util/sst_dump_tool.o
CC util/xfunc.o
CCLD db_test
Reviewers: ljin, igor.sugak, igor, rven, sdong
Reviewed By: sdong
Subscribers: yhchiang, adamretter, fyrz, dhruba
Differential Revision: https://reviews.facebook.net/D33849
2015-02-21 02:42:16 +01:00
|
|
|
include src.mk
|
2011-06-02 02:00:37 +02:00
|
|
|
|
build: make "make" output readable by default
Summary:
With this change, make now prints a summary line for each
compiler and linker invocation, e.g.,:
CC db/builder.o
CC db/c.o
CC db/column_family.o
To see full commands, insert "V=1" into your make command.
E.g., run "make V=1 all" if you want it to print each command
in its full glory.
$^ is GNU make's abbreviation for the prerequisites of the current target.
These AM_V_... variables expand to some very short string like "CC" or
"LD", by default, so that the output of "make" is readable. If/when you
want more details, just build with "make V=1 ...", and make will print
each full command as it is executed. If you prefer to see the noise
all the time, and only want to optionally see the abbreviated output,
set AM_DEFAULT_VERBOSITY=1 in your environment, and then build with
V=0 to see the abbreviated command indicators.
Test Plan:
invoke make a few different ways and observe:
make clean; make # abbreviated
make clean; make V=0 # also abbreviated
make clean; make V=1 # full detail
Reviewers: sdong, ljin, igor
Reviewed By: igor
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D33579
2015-02-18 20:42:54 +01:00
|
|
|
AM_DEFAULT_VERBOSITY = 0
|
|
|
|
|
|
|
|
AM_V_GEN = $(am__v_GEN_$(V))
|
|
|
|
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
|
|
|
|
am__v_GEN_0 = @echo " GEN " $@;
|
|
|
|
am__v_GEN_1 =
|
2015-02-19 20:48:09 +01:00
|
|
|
AM_V_at = $(am__v_at_$(V))
|
|
|
|
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
|
|
|
|
am__v_at_0 = @
|
|
|
|
am__v_at_1 =
|
build: make "make" output readable by default
Summary:
With this change, make now prints a summary line for each
compiler and linker invocation, e.g.,:
CC db/builder.o
CC db/c.o
CC db/column_family.o
To see full commands, insert "V=1" into your make command.
E.g., run "make V=1 all" if you want it to print each command
in its full glory.
$^ is GNU make's abbreviation for the prerequisites of the current target.
These AM_V_... variables expand to some very short string like "CC" or
"LD", by default, so that the output of "make" is readable. If/when you
want more details, just build with "make V=1 ...", and make will print
each full command as it is executed. If you prefer to see the noise
all the time, and only want to optionally see the abbreviated output,
set AM_DEFAULT_VERBOSITY=1 in your environment, and then build with
V=0 to see the abbreviated command indicators.
Test Plan:
invoke make a few different ways and observe:
make clean; make # abbreviated
make clean; make V=0 # also abbreviated
make clean; make V=1 # full detail
Reviewers: sdong, ljin, igor
Reviewed By: igor
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D33579
2015-02-18 20:42:54 +01:00
|
|
|
|
|
|
|
AM_V_CC = $(am__v_CC_$(V))
|
|
|
|
am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
|
|
|
|
am__v_CC_0 = @echo " CC " $@;
|
|
|
|
am__v_CC_1 =
|
|
|
|
CCLD = $(CC)
|
|
|
|
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
|
|
|
AM_V_CCLD = $(am__v_CCLD_$(V))
|
|
|
|
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
|
|
|
|
am__v_CCLD_0 = @echo " CCLD " $@;
|
|
|
|
am__v_CCLD_1 =
|
2015-02-19 20:48:09 +01:00
|
|
|
AM_V_AR = $(am__v_AR_$(V))
|
|
|
|
am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY))
|
|
|
|
am__v_AR_0 = @echo " AR " $@;
|
|
|
|
am__v_AR_1 =
|
build: make "make" output readable by default
Summary:
With this change, make now prints a summary line for each
compiler and linker invocation, e.g.,:
CC db/builder.o
CC db/c.o
CC db/column_family.o
To see full commands, insert "V=1" into your make command.
E.g., run "make V=1 all" if you want it to print each command
in its full glory.
$^ is GNU make's abbreviation for the prerequisites of the current target.
These AM_V_... variables expand to some very short string like "CC" or
"LD", by default, so that the output of "make" is readable. If/when you
want more details, just build with "make V=1 ...", and make will print
each full command as it is executed. If you prefer to see the noise
all the time, and only want to optionally see the abbreviated output,
set AM_DEFAULT_VERBOSITY=1 in your environment, and then build with
V=0 to see the abbreviated command indicators.
Test Plan:
invoke make a few different ways and observe:
make clean; make # abbreviated
make clean; make V=0 # also abbreviated
make clean; make V=1 # full detail
Reviewers: sdong, ljin, igor
Reviewed By: igor
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D33579
2015-02-18 20:42:54 +01:00
|
|
|
|
Add EnvLibrados - RocksDB Env of RADOS (#1222)
EnvLibrados is a customized RocksDB Env to use RADOS as the backend file system of RocksDB. It overrides all file system related API of default Env. The easiest way to use it is just like following:
std::string db_name = "test_db";
std::string config_path = "path/to/ceph/config";
DB* db;
Options options;
options.env = EnvLibrados(db_name, config_path);
Status s = DB::Open(options, kDBPath, &db);
Then EnvLibrados will forward all file read/write operation to the RADOS cluster assigned by config_path. Default pool is db_name+"_pool".
There are some options that users could set for EnvLibrados.
- write_buffer_size. This variable is the max buffer size for WritableFile. After reaching the buffer_max_size, EnvLibrados will sync buffer content to RADOS, then clear buffer.
- db_pool. Rather than using default pool, users could set their own db pool name
- wal_dir. The dir for WAL files. Because RocksDB only has 2-level structure (dir_name/file_name), the format of wal_dir is "/dir_name"(CAN'T be "/dir1/dir2"). Default wal_dir is "/wal".
- wal_pool. Corresponding pool name for WAL files. Default value is db_name+"_wal_pool"
The example of setting options looks like following:
db_name = "test_db";
db_pool = db_name+"_pool";
wal_dir = "/wal";
wal_pool = db_name+"_wal_pool";
write_buffer_size = 1 << 20;
env_ = new EnvLibrados(db_name, config, db_pool, wal_dir, wal_pool, write_buffer_size);
DB* db;
Options options;
options.env = env_;
// The last level dir name should match the dir name in prefix_pool_map
options.wal_dir = "/tmp/wal";
// open DB
Status s = DB::Open(options, kDBPath, &db);
Librados is required to compile EnvLibrados. Then use "$make LIBRADOS=1" to compile RocksDB. If you want to only compile EnvLibrados test, just run "$ make env_librados_test LIBRADOS=1". To run env_librados_test, you need to have a running RADOS cluster with the configure file located in "../ceph/src/ceph.conf" related to "rocksdb/".
2016-07-21 20:16:34 +02:00
|
|
|
ifdef ROCKSDB_USE_LIBRADOS
|
|
|
|
LIB_SOURCES += utilities/env_librados.cc
|
|
|
|
LDFLAGS += -lrados
|
|
|
|
endif
|
2015-02-18 20:43:30 +01:00
|
|
|
|
Add EnvLibrados - RocksDB Env of RADOS (#1222)
EnvLibrados is a customized RocksDB Env to use RADOS as the backend file system of RocksDB. It overrides all file system related API of default Env. The easiest way to use it is just like following:
std::string db_name = "test_db";
std::string config_path = "path/to/ceph/config";
DB* db;
Options options;
options.env = EnvLibrados(db_name, config_path);
Status s = DB::Open(options, kDBPath, &db);
Then EnvLibrados will forward all file read/write operation to the RADOS cluster assigned by config_path. Default pool is db_name+"_pool".
There are some options that users could set for EnvLibrados.
- write_buffer_size. This variable is the max buffer size for WritableFile. After reaching the buffer_max_size, EnvLibrados will sync buffer content to RADOS, then clear buffer.
- db_pool. Rather than using default pool, users could set their own db pool name
- wal_dir. The dir for WAL files. Because RocksDB only has 2-level structure (dir_name/file_name), the format of wal_dir is "/dir_name"(CAN'T be "/dir1/dir2"). Default wal_dir is "/wal".
- wal_pool. Corresponding pool name for WAL files. Default value is db_name+"_wal_pool"
The example of setting options looks like following:
db_name = "test_db";
db_pool = db_name+"_pool";
wal_dir = "/wal";
wal_pool = db_name+"_wal_pool";
write_buffer_size = 1 << 20;
env_ = new EnvLibrados(db_name, config, db_pool, wal_dir, wal_pool, write_buffer_size);
DB* db;
Options options;
options.env = env_;
// The last level dir name should match the dir name in prefix_pool_map
options.wal_dir = "/tmp/wal";
// open DB
Status s = DB::Open(options, kDBPath, &db);
Librados is required to compile EnvLibrados. Then use "$make LIBRADOS=1" to compile RocksDB. If you want to only compile EnvLibrados test, just run "$ make env_librados_test LIBRADOS=1". To run env_librados_test, you need to have a running RADOS cluster with the configure file located in "../ceph/src/ceph.conf" related to "rocksdb/".
2016-07-21 20:16:34 +02:00
|
|
|
AM_LINK = $(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
|
2011-06-29 02:30:50 +02:00
|
|
|
# detect what platform we're building on
|
2016-12-13 23:20:17 +01:00
|
|
|
dummy := $(shell (export ROCKSDB_ROOT="$(CURDIR)"; export PORTABLE="$(PORTABLE)"; "$(CURDIR)/build_tools/build_detect_platform" "$(CURDIR)/make_config.mk"))
|
2012-04-17 17:36:46 +02:00
|
|
|
# this file is generated by the previous line to set build flags and sources
|
2015-01-08 02:26:24 +01:00
|
|
|
include make_config.mk
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
CLEAN_FILES += make_config.mk
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2016-06-21 19:47:57 +02:00
|
|
|
missing_make_config_paths := $(shell \
|
|
|
|
grep "\/\S*" -o $(CURDIR)/make_config.mk | \
|
|
|
|
while read path; \
|
|
|
|
do [ -e $$path ] || echo $$path; \
|
|
|
|
done | sort | uniq)
|
|
|
|
|
|
|
|
$(foreach path, $(missing_make_config_paths), \
|
|
|
|
$(warning Warning: $(path) dont exist))
|
|
|
|
|
2017-04-22 05:41:37 +02:00
|
|
|
ifeq ($(PLATFORM), OS_AIX)
|
|
|
|
# no debug info
|
|
|
|
else ifneq ($(PLATFORM), IOS)
|
2014-04-04 22:11:44 +02:00
|
|
|
CFLAGS += -g
|
|
|
|
CXXFLAGS += -g
|
|
|
|
else
|
|
|
|
# no debug info for IOS, that will make our library big
|
|
|
|
OPT += -DNDEBUG
|
|
|
|
endif
|
|
|
|
|
2017-04-22 05:41:37 +02:00
|
|
|
ifeq ($(PLATFORM), OS_AIX)
|
|
|
|
ARFLAGS = -X64 rs
|
|
|
|
STRIPFLAGS = -X64 -x
|
|
|
|
endif
|
|
|
|
|
2016-01-19 05:45:21 +01:00
|
|
|
ifeq ($(PLATFORM), OS_SOLARIS)
|
|
|
|
PLATFORM_CXXFLAGS += -D _GLIBCXX_USE_C99
|
|
|
|
endif
|
2015-01-15 19:28:10 +01:00
|
|
|
ifneq ($(filter -DROCKSDB_LITE,$(OPT)),)
|
2015-07-21 01:40:41 +02:00
|
|
|
# found
|
|
|
|
CFLAGS += -fno-exceptions
|
|
|
|
CXXFLAGS += -fno-exceptions
|
2016-11-17 00:27:02 +01:00
|
|
|
# LUA is not supported under ROCKSDB_LITE
|
|
|
|
LUA_PATH =
|
2014-12-06 06:34:20 +01:00
|
|
|
endif
|
|
|
|
|
2013-11-20 01:33:24 +01:00
|
|
|
# ASAN doesn't work well with jemalloc. If we're compiling with ASAN, we should use regular malloc.
|
|
|
|
ifdef COMPILE_WITH_ASAN
|
2015-07-21 01:40:41 +02:00
|
|
|
DISABLE_JEMALLOC=1
|
|
|
|
EXEC_LDFLAGS += -fsanitize=address
|
|
|
|
PLATFORM_CCFLAGS += -fsanitize=address
|
|
|
|
PLATFORM_CXXFLAGS += -fsanitize=address
|
2015-01-23 20:22:20 +01:00
|
|
|
endif
|
|
|
|
|
|
|
|
# TSAN doesn't work well with jemalloc. If we're compiling with TSAN, we should use regular malloc.
|
|
|
|
ifdef COMPILE_WITH_TSAN
|
2015-07-21 01:40:41 +02:00
|
|
|
DISABLE_JEMALLOC=1
|
2017-05-18 00:49:06 +02:00
|
|
|
EXEC_LDFLAGS += -fsanitize=thread
|
2017-05-30 20:05:28 +02:00
|
|
|
PLATFORM_CCFLAGS += -fsanitize=thread -fPIC
|
|
|
|
PLATFORM_CXXFLAGS += -fsanitize=thread -fPIC
|
2015-11-09 20:27:44 +01:00
|
|
|
# Turn off -pg when enabling TSAN testing, because that induces
|
|
|
|
# a link failure. TODO: find the root cause
|
2016-04-23 01:49:12 +02:00
|
|
|
PROFILING_FLAGS =
|
2016-11-17 00:27:02 +01:00
|
|
|
# LUA is not supported under TSAN
|
|
|
|
LUA_PATH =
|
2018-05-04 22:40:58 +02:00
|
|
|
# Limit keys for crash test under TSAN to avoid error:
|
|
|
|
# "ThreadSanitizer: DenseSlabAllocator overflow. Dying."
|
|
|
|
CRASH_TEST_EXT_ARGS += --max_key=1000000
|
2015-01-23 20:22:20 +01:00
|
|
|
endif
|
|
|
|
|
2017-04-22 05:41:37 +02:00
|
|
|
# AIX doesn't work with -pg
|
|
|
|
ifeq ($(PLATFORM), OS_AIX)
|
|
|
|
PROFILING_FLAGS =
|
|
|
|
endif
|
|
|
|
|
2016-03-31 00:59:24 +02:00
|
|
|
# USAN doesn't work well with jemalloc. If we're compiling with USAN, we should use regular malloc.
|
|
|
|
ifdef COMPILE_WITH_UBSAN
|
|
|
|
DISABLE_JEMALLOC=1
|
2018-02-07 19:45:46 +01:00
|
|
|
# Suppress alignment warning because murmurhash relies on casting unaligned
|
|
|
|
# memory to integer. Fixing it may cause performance regression. 3-way crc32
|
|
|
|
# relies on it too, although it can be rewritten to eliminate with minimal
|
|
|
|
# performance regression.
|
2018-02-13 21:05:36 +01:00
|
|
|
EXEC_LDFLAGS += -fsanitize=undefined -fno-sanitize-recover=all
|
|
|
|
PLATFORM_CCFLAGS += -fsanitize=undefined -fno-sanitize-recover=all -DROCKSDB_UBSAN_RUN
|
|
|
|
PLATFORM_CXXFLAGS += -fsanitize=undefined -fno-sanitize-recover=all -DROCKSDB_UBSAN_RUN
|
2016-03-31 00:59:24 +02:00
|
|
|
endif
|
|
|
|
|
2017-11-15 23:13:03 +01:00
|
|
|
ifdef ROCKSDB_VALGRIND_RUN
|
|
|
|
PLATFORM_CCFLAGS += -DROCKSDB_VALGRIND_RUN
|
|
|
|
PLATFORM_CXXFLAGS += -DROCKSDB_VALGRIND_RUN
|
|
|
|
endif
|
|
|
|
|
2015-01-23 20:22:20 +01:00
|
|
|
ifndef DISABLE_JEMALLOC
|
2016-04-28 01:23:33 +02:00
|
|
|
ifdef JEMALLOC
|
2017-04-06 22:54:49 +02:00
|
|
|
PLATFORM_CXXFLAGS += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
|
|
|
|
PLATFORM_CCFLAGS += -DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE
|
2016-04-28 01:23:33 +02:00
|
|
|
endif
|
2017-08-04 19:27:39 +02:00
|
|
|
ifdef WITH_JEMALLOC_FLAG
|
|
|
|
PLATFORM_LDFLAGS += -ljemalloc
|
|
|
|
JAVA_LDFLAGS += -ljemalloc
|
|
|
|
endif
|
2015-07-21 01:40:41 +02:00
|
|
|
EXEC_LDFLAGS := $(JEMALLOC_LIB) $(EXEC_LDFLAGS)
|
|
|
|
PLATFORM_CXXFLAGS += $(JEMALLOC_INCLUDE)
|
|
|
|
PLATFORM_CCFLAGS += $(JEMALLOC_INCLUDE)
|
2013-11-20 01:33:24 +01:00
|
|
|
endif
|
|
|
|
|
2017-04-06 22:54:49 +02:00
|
|
|
export GTEST_THROW_ON_FAILURE=1
|
|
|
|
export GTEST_HAS_EXCEPTIONS=1
|
2015-03-17 02:27:30 +01:00
|
|
|
GTEST_DIR = ./third-party/gtest-1.7.0/fused-src
|
2017-04-22 05:41:37 +02:00
|
|
|
# AIX: pre-defined system headers are surrounded by an extern "C" block
|
|
|
|
ifeq ($(PLATFORM), OS_AIX)
|
|
|
|
PLATFORM_CCFLAGS += -I$(GTEST_DIR)
|
|
|
|
PLATFORM_CXXFLAGS += -I$(GTEST_DIR)
|
|
|
|
else
|
|
|
|
PLATFORM_CCFLAGS += -isystem $(GTEST_DIR)
|
|
|
|
PLATFORM_CXXFLAGS += -isystem $(GTEST_DIR)
|
|
|
|
endif
|
2015-03-17 02:27:30 +01:00
|
|
|
|
2015-02-17 20:17:44 +01:00
|
|
|
# This (the first rule) must depend on "all".
|
|
|
|
default: all
|
|
|
|
|
2015-02-24 18:52:28 +01:00
|
|
|
WARNING_FLAGS = -W -Wextra -Wall -Wsign-compare -Wshadow \
|
2018-04-13 02:55:14 +02:00
|
|
|
-Wunused-parameter
|
2015-02-20 01:45:32 +01:00
|
|
|
|
2018-03-19 20:11:58 +01:00
|
|
|
ifeq ($(PLATFORM), OS_OPENBSD)
|
|
|
|
WARNING_FLAGS += -Wno-unused-lambda-capture
|
|
|
|
endif
|
|
|
|
|
2015-02-24 18:52:28 +01:00
|
|
|
ifndef DISABLE_WARNING_AS_ERROR
|
2015-07-21 01:40:41 +02:00
|
|
|
WARNING_FLAGS += -Werror
|
2015-02-24 18:52:28 +01:00
|
|
|
endif
|
|
|
|
|
2016-11-17 00:27:02 +01:00
|
|
|
|
|
|
|
ifdef LUA_PATH
|
|
|
|
|
|
|
|
ifndef LUA_INCLUDE
|
|
|
|
LUA_INCLUDE=$(LUA_PATH)/include
|
|
|
|
endif
|
|
|
|
|
|
|
|
LUA_INCLUDE_FILE=$(LUA_INCLUDE)/lualib.h
|
|
|
|
|
|
|
|
ifeq ("$(wildcard $(LUA_INCLUDE_FILE))", "")
|
|
|
|
# LUA_INCLUDE_FILE does not exist
|
|
|
|
$(error Cannot find lualib.h under $(LUA_INCLUDE). Try to specify both LUA_PATH and LUA_INCLUDE manually)
|
|
|
|
endif
|
|
|
|
LUA_FLAGS = -I$(LUA_INCLUDE) -DLUA -DLUA_COMPAT_ALL
|
|
|
|
CFLAGS += $(LUA_FLAGS)
|
|
|
|
CXXFLAGS += $(LUA_FLAGS)
|
|
|
|
|
|
|
|
ifndef LUA_LIB
|
|
|
|
LUA_LIB = $(LUA_PATH)/lib/liblua.a
|
|
|
|
endif
|
|
|
|
ifeq ("$(wildcard $(LUA_LIB))", "") # LUA_LIB does not exist
|
|
|
|
$(error $(LUA_LIB) does not exist. Try to specify both LUA_PATH and LUA_LIB manually)
|
|
|
|
endif
|
|
|
|
LDFLAGS += $(LUA_LIB)
|
|
|
|
|
|
|
|
endif
|
|
|
|
|
Port 3 way SSE4.2 crc32c implementation from Folly
Summary:
**# Summary**
RocksDB uses SSE crc32 intrinsics to calculate the crc32 values but it does it in single way fashion (not pipelined on single CPU core). Intel's whitepaper () published an algorithm that uses 3-way pipelining for the crc32 intrinsics, then use pclmulqdq intrinsic to combine the values. Because pclmulqdq has overhead on its own, this algorithm will show perf gains on buffers larger than 216 bytes, which makes RocksDB a perfect user, since most of the buffers RocksDB call crc32c on is over 4KB. Initial db_bench show tremendous CPU gain.
This change uses the 3-way SSE algorithm by default. The old SSE algorithm is now behind a compiler tag NO_THREEWAY_CRC32C. If user compiles the code with NO_THREEWAY_CRC32C=1 then the old SSE Crc32c algorithm would be used. If the server does not have SSE4.2 at the run time the slow way (Non SSE) will be used.
**# Performance Test Results**
We ran the FillRandom and ReadRandom benchmarks in db_bench. ReadRandom is the point of interest here since it calculates the CRC32 for the in-mem buffers. We did 3 runs for each algorithm.
Before this change the CRC32 value computation takes about 11.5% of total CPU cost, and with the new 3-way algorithm it reduced to around 4.5%. The overall throughput also improved from 25.53MB/s to 27.63MB/s.
1) ReadRandom in db_bench overall metrics
PER RUN
Algorithm | run | micros/op | ops/sec |Throughput (MB/s)
3-way | 1 | 4.143 | 241387 | 26.7
3-way | 2 | 3.775 | 264872 | 29.3
3-way | 3 | 4.116 | 242929 | 26.9
FastCrc32c|1 | 4.037 | 247727 | 27.4
FastCrc32c|2 | 4.648 | 215166 | 23.8
FastCrc32c|3 | 4.352 | 229799 | 25.4
AVG
Algorithm | Average of micros/op | Average of ops/sec | Average of Throughput (MB/s)
3-way | 4.01 | 249,729 | 27.63
FastCrc32c | 4.35 | 230,897 | 25.53
2) Crc32c computation CPU cost (inclusive samples percentage)
PER RUN
Implementation | run | TotalSamples | Crc32c percentage
3-way  | 1  | 4,572,250,000 | 4.37%
3-way  | 2  | 3,779,250,000 | 4.62%
3-way  | 3  | 4,129,500,000 | 4.48%
FastCrc32c   | 1  | 4,663,500,000 | 11.24%
FastCrc32c   | 2  | 4,047,500,000 | 12.34%
FastCrc32c   | 3  | 4,366,750,000 | 11.68%
**# Test Plan**
make -j64 corruption_test && ./corruption_test
By default it uses 3-way SSE algorithm
NO_THREEWAY_CRC32C=1 make -j64 corruption_test && ./corruption_test
make clean && DEBUG_LEVEL=0 make -j64 db_bench
make clean && DEBUG_LEVEL=0 NO_THREEWAY_CRC32C=1 make -j64 db_bench
Closes https://github.com/facebook/rocksdb/pull/3173
Differential Revision: D6330882
Pulled By: yingsu00
fbshipit-source-id: 8ec3d89719533b63b536a736663ca6f0dd4482e9
2017-12-20 03:20:50 +01:00
|
|
|
ifeq ($(NO_THREEWAY_CRC32C), 1)
|
|
|
|
CXXFLAGS += -DNO_THREEWAY_CRC32C
|
|
|
|
endif
|
2016-11-17 00:27:02 +01:00
|
|
|
|
2014-04-04 22:11:44 +02:00
|
|
|
CFLAGS += $(WARNING_FLAGS) -I. -I./include $(PLATFORM_CCFLAGS) $(OPT)
|
2015-12-31 00:43:52 +01:00
|
|
|
CXXFLAGS += $(WARNING_FLAGS) -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT) -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers
|
2011-06-29 02:30:50 +02:00
|
|
|
|
2012-03-21 18:28:03 +01:00
|
|
|
LDFLAGS += $(PLATFORM_LDFLAGS)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2017-05-10 20:22:44 +02:00
|
|
|
# If NO_UPDATE_BUILD_VERSION is set we don't update util/build_version.cc, but
|
|
|
|
# the file needs to already exist or else the build will fail
|
|
|
|
ifndef NO_UPDATE_BUILD_VERSION
|
build: do not relink every single binary just for a timestamp
Summary:
Prior to this change, "make check" would always waste a lot of
time relinking 60+ binaries. With this change, it does that
only when the generated file, util/build_version.cc, changes,
and that happens only when the date changes or when the
current git SHA changes.
This change makes some other improvements: before, there was no
rule to build a deleted util/build_version.cc. If it was somehow
removed, any attempt to link a program would fail.
There is no longer any need for the separate file,
build_tools/build_detect_version. Its functionality is
now in the Makefile.
* Makefile (DEPFILES): Don't filter-out util/build_version.cc.
No need, and besides, removing that dependency was wrong.
(date, git_sha, gen_build_version): New helper variables.
(util/build_version.cc): New rule, to create this file
and update it only if it would contain new information.
* build_tools/build_detect_platform: Remove file.
* db/db_impl.cc: Now, print only date (not the time).
* util/build_version.h (rocksdb_build_compile_time): Remove
declaration. No longer used.
Test Plan:
- Run "make check" twice, and note that the second time no linking is performed.
- Remove util/build_version.cc and ensure that any "make"
command regenerates it before doing anything else.
- Run this: strings librocksdb.a|grep _build_.
That prints output including the following:
rocksdb_build_git_date:2015-02-19
rocksdb_build_git_sha:2.8.fb-1792-g3cb6cc0
Reviewers: ljin, sdong, igor
Reviewed By: igor
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D33591
2015-02-19 22:11:10 +01:00
|
|
|
date := $(shell date +%F)
|
2015-05-19 20:45:01 +02:00
|
|
|
ifdef FORCE_GIT_SHA
|
2015-07-21 01:40:41 +02:00
|
|
|
git_sha := $(FORCE_GIT_SHA)
|
2015-05-19 20:45:01 +02:00
|
|
|
else
|
2015-07-21 01:40:41 +02:00
|
|
|
git_sha := $(shell git rev-parse HEAD 2>/dev/null)
|
2015-05-19 20:45:01 +02:00
|
|
|
endif
|
2016-10-25 20:31:39 +02:00
|
|
|
gen_build_version = sed -e s/@@GIT_SHA@@/$(git_sha)/ -e s/@@GIT_DATE_TIME@@/$(date)/ util/build_version.cc.in
|
build: do not relink every single binary just for a timestamp
Summary:
Prior to this change, "make check" would always waste a lot of
time relinking 60+ binaries. With this change, it does that
only when the generated file, util/build_version.cc, changes,
and that happens only when the date changes or when the
current git SHA changes.
This change makes some other improvements: before, there was no
rule to build a deleted util/build_version.cc. If it was somehow
removed, any attempt to link a program would fail.
There is no longer any need for the separate file,
build_tools/build_detect_version. Its functionality is
now in the Makefile.
* Makefile (DEPFILES): Don't filter-out util/build_version.cc.
No need, and besides, removing that dependency was wrong.
(date, git_sha, gen_build_version): New helper variables.
(util/build_version.cc): New rule, to create this file
and update it only if it would contain new information.
* build_tools/build_detect_platform: Remove file.
* db/db_impl.cc: Now, print only date (not the time).
* util/build_version.h (rocksdb_build_compile_time): Remove
declaration. No longer used.
Test Plan:
- Run "make check" twice, and note that the second time no linking is performed.
- Remove util/build_version.cc and ensure that any "make"
command regenerates it before doing anything else.
- Run this: strings librocksdb.a|grep _build_.
That prints output including the following:
rocksdb_build_git_date:2015-02-19
rocksdb_build_git_sha:2.8.fb-1792-g3cb6cc0
Reviewers: ljin, sdong, igor
Reviewed By: igor
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D33591
2015-02-19 22:11:10 +01:00
|
|
|
|
|
|
|
# Record the version of the source that we are compiling.
|
|
|
|
# We keep a record of the git revision in this file. It is then built
|
|
|
|
# as a regular source file as part of the compilation process.
|
|
|
|
# One can run "strings executable_filename | grep _build_" to find
|
|
|
|
# the version of the source that we used to build the executable file.
|
build: always attempt to update util/build_version.cc
Summary:
This fixes two bugs: "make clean" would never remove the generated
file, util/build_version.cc, and since D33591, would be regenerated
only if it were absent.
* Makefile (clean): Remove the generated file.
(util/build_version.cc): Depend on the no-prereq FORCE target,
so that this target's rules are always run.
Since this is a generated file, make it read-only.
Also, be sure to remove the temporary file when it is the same
as the original.
Test Plan:
Ensure that we attempt regeneration every time.
Make it empty with an up-to-date time stamp and demonstrate
that it is rebuilt with the expected content:
$ : > util/build_version.cc
$ make util/build_version.o
GEN util/build_version.cc
GEN util/build_version.d
GEN util/build_version.cc
CC util/build_version.o
$ cat util/build_version.cc
#include "build_version.h"
const char* rocksdb_build_git_sha = "rocksdb_build_git_sha:v3.10-2-gb30e72a";
const char* rocksdb_build_git_date = "rocksdb_build_git_date:2015-03-27";
const char* rocksdb_build_compile_date = __DATE__;
Reviewers: igor.sugak, sdong, ljin, igor, rven
Reviewed By: rven
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D36087
2015-03-28 03:21:50 +01:00
|
|
|
FORCE:
|
|
|
|
util/build_version.cc: FORCE
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_V_GEN)rm -f $@-t
|
|
|
|
$(AM_V_at)$(gen_build_version) > $@-t
|
|
|
|
$(AM_V_at)if test -f $@; then \
|
|
|
|
cmp -s $@-t $@ && rm -f $@-t || mv -f $@-t $@; \
|
|
|
|
else mv -f $@-t $@; fi
|
2017-05-10 20:22:44 +02:00
|
|
|
endif
|
build: do not relink every single binary just for a timestamp
Summary:
Prior to this change, "make check" would always waste a lot of
time relinking 60+ binaries. With this change, it does that
only when the generated file, util/build_version.cc, changes,
and that happens only when the date changes or when the
current git SHA changes.
This change makes some other improvements: before, there was no
rule to build a deleted util/build_version.cc. If it was somehow
removed, any attempt to link a program would fail.
There is no longer any need for the separate file,
build_tools/build_detect_version. Its functionality is
now in the Makefile.
* Makefile (DEPFILES): Don't filter-out util/build_version.cc.
No need, and besides, removing that dependency was wrong.
(date, git_sha, gen_build_version): New helper variables.
(util/build_version.cc): New rule, to create this file
and update it only if it would contain new information.
* build_tools/build_detect_platform: Remove file.
* db/db_impl.cc: Now, print only date (not the time).
* util/build_version.h (rocksdb_build_compile_time): Remove
declaration. No longer used.
Test Plan:
- Run "make check" twice, and note that the second time no linking is performed.
- Remove util/build_version.cc and ensure that any "make"
command regenerates it before doing anything else.
- Run this: strings librocksdb.a|grep _build_.
That prints output including the following:
rocksdb_build_git_date:2015-02-19
rocksdb_build_git_sha:2.8.fb-1792-g3cb6cc0
Reviewers: ljin, sdong, igor
Reviewed By: igor
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D33591
2015-02-19 22:11:10 +01:00
|
|
|
|
2017-07-27 04:00:42 +02:00
|
|
|
LIBOBJECTS = $(LIB_SOURCES:.cc=.o)
|
2017-08-31 23:02:06 +02:00
|
|
|
ifeq ($(HAVE_POWER8),1)
|
|
|
|
LIB_CC_OBJECTS = $(LIB_SOURCES:.cc=.o)
|
|
|
|
LIBOBJECTS += $(LIB_SOURCES_C:.c=.o)
|
|
|
|
LIBOBJECTS += $(LIB_SOURCES_ASM:.S=.o)
|
2018-01-03 21:37:07 +01:00
|
|
|
else
|
|
|
|
LIB_CC_OBJECTS = $(LIB_SOURCES:.cc=.o)
|
2017-08-31 23:02:06 +02:00
|
|
|
endif
|
|
|
|
|
2017-07-27 04:00:42 +02:00
|
|
|
LIBOBJECTS += $(TOOL_LIB_SOURCES:.cc=.o)
|
|
|
|
MOCKOBJECTS = $(MOCK_LIB_SOURCES:.cc=.o)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2015-03-17 02:27:30 +01:00
|
|
|
GTEST = $(GTEST_DIR)/gtest/gtest-all.o
|
2011-03-18 23:37:00 +01:00
|
|
|
TESTUTIL = ./util/testutil.o
|
2015-03-17 02:27:30 +01:00
|
|
|
TESTHARNESS = ./util/testharness.o $(TESTUTIL) $(MOCKOBJECTS) $(GTEST)
|
2013-02-25 20:17:26 +01:00
|
|
|
VALGRIND_ERROR = 2
|
2013-03-07 20:11:30 +01:00
|
|
|
VALGRIND_VER := $(join $(VALGRIND_VER),valgrind)
|
2015-01-26 22:59:38 +01:00
|
|
|
|
2013-02-25 20:17:26 +01:00
|
|
|
VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full
|
2012-08-14 23:52:48 +02:00
|
|
|
|
2016-07-11 22:55:46 +02:00
|
|
|
BENCHTOOLOBJECTS = $(BENCH_LIB_SOURCES:.cc=.o) $(LIBOBJECTS) $(TESTUTIL)
|
2016-02-16 15:17:31 +01:00
|
|
|
|
2018-08-21 19:39:41 +02:00
|
|
|
ANALYZETOOLOBJECTS = $(ANALYZER_LIB_SOURCES:.cc=.o)
|
|
|
|
|
2016-08-01 23:50:19 +02:00
|
|
|
EXPOBJECTS = $(EXP_LIB_SOURCES:.cc=.o) $(LIBOBJECTS) $(TESTUTIL)
|
|
|
|
|
2011-03-18 23:37:00 +01:00
|
|
|
TESTS = \
|
2017-02-27 21:19:23 +01:00
|
|
|
db_basic_test \
|
2017-06-27 01:52:06 +02:00
|
|
|
db_encryption_test \
|
2016-03-01 03:38:03 +01:00
|
|
|
db_test2 \
|
2017-02-28 23:11:01 +01:00
|
|
|
external_sst_file_basic_test \
|
2017-02-27 20:04:27 +01:00
|
|
|
auto_roll_logger_test \
|
|
|
|
bloom_test \
|
|
|
|
dynamic_bloom_test \
|
|
|
|
c_test \
|
|
|
|
checkpoint_test \
|
|
|
|
crc32c_test \
|
|
|
|
coding_test \
|
|
|
|
inlineskiplist_test \
|
|
|
|
env_basic_test \
|
|
|
|
env_test \
|
2017-07-10 21:22:26 +02:00
|
|
|
hash_test \
|
2017-02-27 20:04:27 +01:00
|
|
|
thread_local_test \
|
|
|
|
rate_limiter_test \
|
|
|
|
perf_context_test \
|
|
|
|
iostats_context_test \
|
|
|
|
db_wal_test \
|
2016-03-11 02:35:19 +01:00
|
|
|
db_block_cache_test \
|
2017-03-06 18:25:58 +01:00
|
|
|
db_test \
|
2017-10-03 18:08:07 +02:00
|
|
|
db_blob_index_test \
|
2016-04-18 18:42:50 +02:00
|
|
|
db_bloom_filter_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
db_iter_test \
|
Change and clarify the relationship between Valid(), status() and Seek*() for all iterators. Also fix some bugs
Summary:
Before this PR, Iterator/InternalIterator may simultaneously have non-ok status() and Valid() = true. That state means that the last operation failed, but the iterator is nevertheless positioned on some unspecified record. Likely intended uses of that are:
* If some sst files are corrupted, a normal iterator can be used to read the data from files that are not corrupted.
* When using read_tier = kBlockCacheTier, read the data that's in block cache, skipping over the data that is not.
However, this behavior wasn't documented well (and until recently the wiki on github had misleading incorrect information). In the code there's a lot of confusion about the relationship between status() and Valid(), and about whether Seek()/SeekToLast()/etc reset the status or not. There were a number of bugs caused by this confusion, both inside rocksdb and in the code that uses rocksdb (including ours).
This PR changes the convention to:
* If status() is not ok, Valid() always returns false.
* Any seek operation resets status. (Before the PR, it depended on iterator type and on particular error.)
This does sacrifice the two use cases listed above, but siying said it's ok.
Overview of the changes:
* A commit that adds missing status checks in MergingIterator. This fixes a bug that actually affects us, and we need it fixed. `DBIteratorTest.NonBlockingIterationBugRepro` explains the scenario.
* Changes to lots of iterator types to make all of them conform to the new convention. Some bug fixes along the way. By far the biggest changes are in DBIter, which is a big messy piece of code; I tried to make it less big and messy but mostly failed.
* A stress-test for DBIter, to gain some confidence that I didn't break it. It does a few million random operations on the iterator, while occasionally modifying the underlying data (like ForwardIterator does) and occasionally returning non-ok status from internal iterator.
To find the iterator types that needed changes I searched for "public .*Iterator" in the code. Here's an overview of all 27 iterator types:
Iterators that didn't need changes:
* status() is always ok(), or Valid() is always false: MemTableIterator, ModelIter, TestIterator, KVIter (2 classes with this name anonymous namespaces), LoggingForwardVectorIterator, VectorIterator, MockTableIterator, EmptyIterator, EmptyInternalIterator.
* Thin wrappers that always pass through Valid() and status(): ArenaWrappedDBIter, TtlIterator, InternalIteratorFromIterator.
Iterators with changes (see inline comments for details):
* DBIter - an overhaul:
- It used to silently skip corrupted keys (`FindParseableKey()`), which seems dangerous. This PR makes it just stop immediately after encountering a corrupted key, just like it would for other kinds of corruption. Let me know if there was actually some deeper meaning in this behavior and I should put it back.
- It had a few code paths silently discarding subiterator's status. The stress test caught a few.
- The backwards iteration code path was expecting the internal iterator's set of keys to be immutable. It's probably always true in practice at the moment, since ForwardIterator doesn't support backwards iteration, but this PR fixes it anyway. See added DBIteratorTest.ReverseToForwardBug for an example.
- Some parts of backwards iteration code path even did things like `assert(iter_->Valid())` after a seek, which is never a safe assumption.
- It used to not reset status on seek for some types of errors.
- Some simplifications and better comments.
- Some things got more complicated from the added error handling. I'm open to ideas for how to make it nicer.
* MergingIterator - check status after every operation on every subiterator, and in some places assert that valid subiterators have ok status.
* ForwardIterator - changed to the new convention, also slightly simplified.
* ForwardLevelIterator - fixed some bugs and simplified.
* LevelIterator - simplified.
* TwoLevelIterator - changed to the new convention. Also fixed a bug that would make SeekForPrev() sometimes silently ignore errors from first_level_iter_.
* BlockBasedTableIterator - minor changes.
* BlockIter - replaced `SetStatus()` with `Invalidate()` to make sure non-ok BlockIter is always invalid.
* PlainTableIterator - some seeks used to not reset status.
* CuckooTableIterator - tiny code cleanup.
* ManagedIterator - fixed some bugs.
* BaseDeltaIterator - changed to the new convention and fixed a bug.
* BlobDBIterator - seeks used to not reset status.
* KeyConvertingIterator - some small change.
Closes https://github.com/facebook/rocksdb/pull/3810
Differential Revision: D7888019
Pulled By: al13n321
fbshipit-source-id: 4aaf6d3421c545d16722a815b2fa2e7912bc851d
2018-05-17 11:44:14 +02:00
|
|
|
db_iter_stress_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
db_log_iter_test \
|
|
|
|
db_compaction_filter_test \
|
2015-07-21 12:05:57 +02:00
|
|
|
db_compaction_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
db_dynamic_level_test \
|
Fix flush not being commit while writing manifest
Summary:
Fix flush not being commit while writing manifest, which is a recent bug introduced by D60075.
The issue:
# Options.max_background_flushes > 1
# Background thread A pick up a flush job, flush, then commit to manifest. (Note that mutex is released before writing manifest.)
# Background thread B pick up another flush job, flush. When it gets to `MemTableList::InstallMemtableFlushResults`, it notices another thread is commiting, so it quit.
# After the first commit, thread A doesn't double check if there are more flush result need to commit, leaving the second flush uncommitted.
Test Plan: run the test. Also verify the new test hit deadlock without the fix.
Reviewers: sdong, igor, lightmark
Reviewed By: lightmark
Subscribers: andrewkr, omegaga, dhruba, leveldb
Differential Revision: https://reviews.facebook.net/D60969
2016-07-21 19:10:41 +02:00
|
|
|
db_flush_test \
|
2015-07-21 02:19:37 +02:00
|
|
|
db_inplace_update_test \
|
2016-04-18 18:42:50 +02:00
|
|
|
db_iterator_test \
|
2016-11-14 03:58:17 +01:00
|
|
|
db_memtable_test \
|
2016-12-16 20:00:03 +01:00
|
|
|
db_merge_operator_test \
|
Fix flush not being commit while writing manifest
Summary:
Fix flush not being commit while writing manifest, which is a recent bug introduced by D60075.
The issue:
# Options.max_background_flushes > 1
# Background thread A pick up a flush job, flush, then commit to manifest. (Note that mutex is released before writing manifest.)
# Background thread B pick up another flush job, flush. When it gets to `MemTableList::InstallMemtableFlushResults`, it notices another thread is commiting, so it quit.
# After the first commit, thread A doesn't double check if there are more flush result need to commit, leaving the second flush uncommitted.
Test Plan: run the test. Also verify the new test hit deadlock without the fix.
Reviewers: sdong, igor, lightmark
Reviewed By: lightmark
Subscribers: andrewkr, omegaga, dhruba, leveldb
Differential Revision: https://reviews.facebook.net/D60969
2016-07-21 19:10:41 +02:00
|
|
|
db_options_test \
|
2016-11-29 19:56:05 +01:00
|
|
|
db_range_del_test \
|
2016-04-18 18:42:50 +02:00
|
|
|
db_sst_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
db_tailing_iter_test \
|
2016-05-19 02:09:20 +02:00
|
|
|
db_io_failure_test \
|
2016-01-21 00:17:52 +01:00
|
|
|
db_properties_test \
|
2015-10-13 23:24:45 +02:00
|
|
|
db_table_properties_test \
|
2017-04-26 23:18:58 +02:00
|
|
|
db_statistics_test \
|
2017-05-31 19:45:47 +02:00
|
|
|
db_write_test \
|
2018-06-28 21:23:57 +02:00
|
|
|
error_handler_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
autovector_test \
|
2017-06-27 23:01:14 +02:00
|
|
|
blob_db_test \
|
2016-12-30 00:48:24 +01:00
|
|
|
cleanable_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
column_family_test \
|
|
|
|
table_properties_collector_test \
|
|
|
|
arena_test \
|
|
|
|
block_test \
|
2018-07-24 20:42:19 +02:00
|
|
|
data_block_hash_index_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
cache_test \
|
|
|
|
corruption_test \
|
|
|
|
slice_transform_test \
|
|
|
|
dbformat_test \
|
|
|
|
fault_injection_test \
|
|
|
|
filelock_test \
|
|
|
|
filename_test \
|
RangeSync not to sync last 1MB of the file
Summary:
From other ones' investigation:
"sync_file_range() behavior highly depends on kernel version and filesystem.
xfs does neighbor page flushing outside of the specified ranges. For example, sync_file_range(fd, 8192, 16384) does not only trigger flushing page #3 to #4, but also flushing many more dirty pages (i.e. up to page#16)... Ranges of the sync_file_range() should be far enough from write() offset (at least 1MB)."
Test Plan: make all check
Reviewers: igor, rven, kradhakrishnan, yhchiang, IslamAbdelRahman, anthony
Reviewed By: anthony
Subscribers: yoshinorim, MarkCallaghan, sumeet, domas, dhruba, leveldb, ljin
Differential Revision: https://reviews.facebook.net/D15807
2015-07-20 23:46:15 +02:00
|
|
|
file_reader_writer_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
block_based_filter_block_test \
|
|
|
|
full_filter_block_test \
|
2017-03-22 17:11:23 +01:00
|
|
|
partitioned_filter_block_test \
|
2016-03-18 23:50:34 +01:00
|
|
|
hash_table_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
histogram_test \
|
|
|
|
log_test \
|
|
|
|
manual_compaction_test \
|
|
|
|
mock_env_test \
|
|
|
|
memtable_list_test \
|
|
|
|
merge_helper_test \
|
2015-11-04 02:52:17 +01:00
|
|
|
memory_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
merge_test \
|
|
|
|
merger_test \
|
2016-05-20 00:51:29 +02:00
|
|
|
util_merge_operators_test \
|
2015-11-11 07:58:01 +01:00
|
|
|
options_file_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
redis_test \
|
|
|
|
reduce_levels_test \
|
|
|
|
plain_table_db_test \
|
|
|
|
comparator_db_test \
|
2017-03-06 18:25:58 +01:00
|
|
|
external_sst_file_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
prefix_test \
|
|
|
|
skiplist_test \
|
2017-06-02 23:13:59 +02:00
|
|
|
write_buffer_manager_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
stringappend_test \
|
2017-06-16 23:12:52 +02:00
|
|
|
cassandra_format_test \
|
2017-07-21 23:42:32 +02:00
|
|
|
cassandra_functional_test \
|
2017-06-16 23:12:52 +02:00
|
|
|
cassandra_row_merge_test \
|
|
|
|
cassandra_serialize_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
ttl_test \
|
2016-08-06 00:56:22 +02:00
|
|
|
date_tiered_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
backupable_db_test \
|
|
|
|
document_db_test \
|
|
|
|
json_document_test \
|
2016-05-24 08:35:23 +02:00
|
|
|
sim_cache_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
spatial_db_test \
|
|
|
|
version_edit_test \
|
|
|
|
version_set_test \
|
|
|
|
compaction_picker_test \
|
|
|
|
version_builder_test \
|
|
|
|
file_indexer_test \
|
|
|
|
write_batch_test \
|
|
|
|
write_batch_with_index_test \
|
|
|
|
write_controller_test\
|
|
|
|
deletefile_test \
|
2018-03-28 19:23:31 +02:00
|
|
|
obsolete_files_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
table_test \
|
|
|
|
geodb_test \
|
2015-08-05 05:45:27 +02:00
|
|
|
delete_scheduler_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
options_test \
|
2016-04-11 20:39:51 +02:00
|
|
|
options_settable_test \
|
Add OptionsUtil::LoadOptionsFromFile() API
Summary:
This patch adds OptionsUtil::LoadOptionsFromFile() and
OptionsUtil::LoadLatestOptionsFromDB(), which allow developers
to construct DBOptions and ColumnFamilyOptions from a RocksDB
options file. Note that most pointer-typed options such as
merge_operator will not be constructed.
With this API, developers no longer need to remember all the
options in order to reopen an existing rocksdb instance like
the following:
DBOptions db_options;
std::vector<std::string> cf_names;
std::vector<ColumnFamilyOptions> cf_opts;
// Load primitive-typed options from an existing DB
OptionsUtil::LoadLatestOptionsFromDB(
dbname, &db_options, &cf_names, &cf_opts);
// Initialize necessary pointer-typed options
cf_opts[0].merge_operator.reset(new MyMergeOperator());
...
// Construct the vector of ColumnFamilyDescriptor
std::vector<ColumnFamilyDescriptor> cf_descs;
for (size_t i = 0; i < cf_opts.size(); ++i) {
cf_descs.emplace_back(cf_names[i], cf_opts[i]);
}
// Open the DB
DB* db = nullptr;
std::vector<ColumnFamilyHandle*> cf_handles;
auto s = DB::Open(db_options, dbname, cf_descs,
&handles, &db);
Test Plan:
Augment existing tests in column_family_test
options_test
db_test
Reviewers: igor, IslamAbdelRahman, sdong, anthony
Reviewed By: anthony
Subscribers: dhruba, leveldb
Differential Revision: https://reviews.facebook.net/D49095
2015-11-12 15:52:43 +01:00
|
|
|
options_util_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
event_logger_test \
|
2017-05-10 23:54:35 +02:00
|
|
|
timer_queue_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
cuckoo_table_builder_test \
|
|
|
|
cuckoo_table_reader_test \
|
|
|
|
cuckoo_table_db_test \
|
|
|
|
flush_job_test \
|
|
|
|
wal_manager_test \
|
|
|
|
listener_test \
|
Support for SingleDelete()
Summary:
This patch fixes #7460559. It introduces SingleDelete as a new database
operation. This operation can be used to delete keys that were never
overwritten (no put following another put of the same key). If an overwritten
key is single deleted the behavior is undefined. Single deletion of a
non-existent key has no effect but multiple consecutive single deletions are
not allowed (see limitations).
In contrast to the conventional Delete() operation, the deletion entry is
removed along with the value when the two are lined up in a compaction. Note:
The semantics are similar to @igor's prototype that allowed to have this
behavior on the granularity of a column family (
https://reviews.facebook.net/D42093 ). This new patch, however, is more
aggressive when it comes to removing tombstones: It removes the SingleDelete
together with the value whenever there is no snapshot between them while the
older patch only did this when the sequence number of the deletion was older
than the earliest snapshot.
Most of the complex additions are in the Compaction Iterator, all other changes
should be relatively straightforward. The patch also includes basic support for
single deletions in db_stress and db_bench.
Limitations:
- Not compatible with cuckoo hash tables
- Single deletions cannot be used in combination with merges and normal
deletions on the same key (other keys are not affected by this)
- Consecutive single deletions are currently not allowed (and older version of
this patch supported this so it could be resurrected if needed)
Test Plan: make all check
Reviewers: yhchiang, sdong, rven, anthony, yoshinorim, igor
Reviewed By: igor
Subscribers: maykov, dhruba, leveldb
Differential Revision: https://reviews.facebook.net/D43179
2015-09-17 20:42:56 +02:00
|
|
|
compaction_iterator_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
compaction_job_test \
|
|
|
|
thread_list_test \
|
|
|
|
sst_dump_test \
|
2016-08-01 23:50:19 +02:00
|
|
|
column_aware_encoding_test \
|
2015-07-21 01:18:35 +02:00
|
|
|
compact_files_test \
|
|
|
|
optimistic_transaction_test \
|
|
|
|
write_callback_test \
|
2015-08-04 05:42:55 +02:00
|
|
|
heap_test \
|
|
|
|
compact_on_deletion_collector_test \
|
Pessimistic Transactions
Summary:
Initial implementation of Pessimistic Transactions. This diff contains the api changes discussed in D38913. This diff is pretty large, so let me know if people would prefer to meet up to discuss it.
MyRocks folks: please take a look at the API in include/rocksdb/utilities/transaction[_db].h and let me know if you have any issues.
Also, you'll notice a couple of TODOs in the implementation of RollbackToSavePoint(). After chatting with Siying, I'm going to send out a separate diff for an alternate implementation of this feature that implements the rollback inside of WriteBatch/WriteBatchWithIndex. We can then decide which route is preferable.
Next, I'm planning on doing some perf testing and then integrating this diff into MongoRocks for further testing.
Test Plan: Unit tests, db_bench parallel testing.
Reviewers: igor, rven, sdong, yhchiang, yoshinorim
Reviewed By: sdong
Subscribers: hermanlee4, maykov, spetrunia, leveldb, dhruba
Differential Revision: https://reviews.facebook.net/D40869
2015-05-26 02:37:33 +02:00
|
|
|
compaction_job_stats_test \
|
2016-07-14 06:08:15 +02:00
|
|
|
option_change_migration_test \
|
Remove ldb HexToString method's usage of sscanf
Summary:
Fix hex2String performance issues by removing sscanf dependency.
Also fixed some edge case handling (odd length, bad input).
Test Plan: Created a test file which called old and new implementation, and validated results are the same. I'll paste results in the phabricator diff.
Reviewers: igor, rven, anthony, IslamAbdelRahman, kradhakrishnan, yhchiang, sdong
Reviewed By: sdong
Subscribers: thatsafunnyname, leveldb, dhruba
Differential Revision: https://reviews.facebook.net/D46785
2015-09-23 23:25:46 +02:00
|
|
|
transaction_test \
|
2016-02-23 19:26:24 +01:00
|
|
|
ldb_cmd_test \
|
2016-04-22 00:59:17 +02:00
|
|
|
persistent_cache_test \
|
2016-07-26 01:05:50 +02:00
|
|
|
statistics_test \
|
2016-11-17 00:27:02 +01:00
|
|
|
lua_test \
|
2016-12-20 01:44:30 +01:00
|
|
|
range_del_aggregator_test \
|
2016-08-20 01:43:31 +02:00
|
|
|
lru_cache_test \
|
2017-01-26 00:54:09 +01:00
|
|
|
object_registry_test \
|
2017-02-11 03:04:05 +01:00
|
|
|
repair_test \
|
2017-04-04 20:12:47 +02:00
|
|
|
env_timed_test \
|
2017-08-31 18:27:14 +02:00
|
|
|
write_prepared_transaction_test \
|
2018-06-01 23:57:55 +02:00
|
|
|
write_unprepared_transaction_test \
|
2018-03-14 02:47:38 +01:00
|
|
|
db_universal_compaction_test \
|
RocksDB Trace Analyzer (#4091)
Summary:
A framework of trace analyzing for RocksDB
After collecting the trace by using the tool of [PR #3837](https://github.com/facebook/rocksdb/pull/3837). User can use the Trace Analyzer to interpret, analyze, and characterize the collected workload.
**Input:**
1. trace file
2. Whole keys space file
**Statistics:**
1. Access count of each operation (Get, Put, Delete, SingleDelete, DeleteRange, Merge) in each column family.
2. Key hotness (access count) of each one
3. Key space separation based on given prefix
4. Key size distribution
5. Value size distribution if appliable
6. Top K accessed keys
7. QPS statistics including the average QPS and peak QPS
8. Top K accessed prefix
9. The query correlation analyzing, output the number of X after Y and the corresponding average time
intervals
**Output:**
1. key access heat map (either in the accessed key space or whole key space)
2. trace sequence file (interpret the raw trace file to line base text file for future use)
3. Time serial (The key space ID and its access time)
4. Key access count distritbution
5. Key size distribution
6. Value size distribution (in each intervals)
7. whole key space separation by the prefix
8. Accessed key space separation by the prefix
9. QPS of each operation and each column family
10. Top K QPS and their accessed prefix range
**Test:**
1. Added the unit test of analyzing Get, Put, Delete, SingleDelete, DeleteRange, Merge
2. Generated the trace and analyze the trace
**Implemented but not tested (due to the limitation of trace_replay):**
1. Analyzing Iterator, supporting Seek() and SeekForPrev() analyzing
2. Analyzing the number of Key found by Get
**Future Work:**
1. Support execution time analyzing of each requests
2. Support cache hit situation and block read situation of Get
Pull Request resolved: https://github.com/facebook/rocksdb/pull/4091
Differential Revision: D9256157
Pulled By: zhichao-cao
fbshipit-source-id: f0ceacb7eedbc43a3eee6e85b76087d7832a8fe6
2018-08-13 20:32:04 +02:00
|
|
|
trace_analyzer_test \
|
2018-09-28 00:25:47 +02:00
|
|
|
repeatable_thread_test \
|
2013-02-19 09:09:16 +01:00
|
|
|
|
2016-04-18 07:34:56 +02:00
|
|
|
PARALLEL_TEST = \
|
|
|
|
backupable_db_test \
|
|
|
|
db_compaction_filter_test \
|
|
|
|
db_compaction_test \
|
2017-12-18 23:39:49 +01:00
|
|
|
db_merge_operator_test \
|
2016-07-20 00:12:46 +02:00
|
|
|
db_sst_test \
|
2016-04-18 07:34:56 +02:00
|
|
|
db_test \
|
|
|
|
db_universal_compaction_test \
|
2016-09-24 01:15:14 +02:00
|
|
|
db_wal_test \
|
|
|
|
external_sst_file_test \
|
2016-04-18 07:34:56 +02:00
|
|
|
fault_injection_test \
|
|
|
|
inlineskiplist_test \
|
|
|
|
manual_compaction_test \
|
2016-11-15 04:54:17 +01:00
|
|
|
persistent_cache_test \
|
|
|
|
table_test \
|
2017-08-31 18:27:14 +02:00
|
|
|
transaction_test \
|
2017-12-18 23:39:49 +01:00
|
|
|
write_prepared_transaction_test \
|
2018-06-01 23:57:55 +02:00
|
|
|
write_unprepared_transaction_test \
|
2016-04-18 07:34:56 +02:00
|
|
|
|
2018-02-07 23:28:50 +01:00
|
|
|
# options_settable_test doesn't pass with UBSAN as we use hack in the test
|
|
|
|
ifdef COMPILE_WITH_UBSAN
|
|
|
|
TESTS := $(shell echo $(TESTS) | sed 's/\boptions_settable_test\b//g')
|
|
|
|
endif
|
2016-04-13 23:22:29 +02:00
|
|
|
SUBSET := $(TESTS)
|
|
|
|
ifdef ROCKSDBTESTS_START
|
|
|
|
SUBSET := $(shell echo $(SUBSET) | sed 's/^.*$(ROCKSDBTESTS_START)/$(ROCKSDBTESTS_START)/')
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef ROCKSDBTESTS_END
|
|
|
|
SUBSET := $(shell echo $(SUBSET) | sed 's/$(ROCKSDBTESTS_END).*//')
|
|
|
|
endif
|
2014-12-06 01:16:56 +01:00
|
|
|
|
2012-08-17 19:48:40 +02:00
|
|
|
TOOLS = \
|
2015-07-21 01:40:41 +02:00
|
|
|
sst_dump \
|
|
|
|
db_sanity_test \
|
|
|
|
db_stress \
|
Write stress test
Summary:
The goal of this diff is to create a simple stress test with focus on catching:
* bugs in compaction/flush processes, especially the ones that cause assertion errors
* bugs in the code that deletes obsolete files
There are two parts of the test:
* write_stress, a binary that writes to the database
* write_stress_runner.py, a script that invokes and kills write_stress
Here are some interesting parts of write_stress:
* Runs with very high concurrency of compactions and flushes (32 threads total) and tries to create a huge amount of small files
* The keys written to the database are not uniformly distributed -- there is a 3-character prefix that mutates occasionally (in prefix mutator thread), in such a way that the first character mutates slower than second, which mutates slower than third character. That way, the compaction stress tests some interesting compaction features like trivial moves and bottommost level calculation
* There is a thread that creates an iterator, holds it for couple of seconds and then iterates over all keys. This is supposed to test RocksDB's abilities to keep the files alive when there are references to them.
* Some writes trigger WAL sync. This is stress testing our WAL sync code.
* At the end of the run, we make sure that we didn't leak any of the sst files
write_stress_runner.py changes the mode in which we run write_stress and also kills and restarts it. There are some interesting characteristics:
* At the beginning we divide the full test runtime into smaller parts -- shorter runtimes (couple of seconds) and longer runtimes (100, 1000) seconds
* The first time we run write_stress, we destroy the old DB. Every next time during the test, we use the same DB.
* We can run in kill mode or clean-restart mode. Kill mode kills the write_stress violently.
* We can run in mode where delete_obsolete_files_with_fullscan is true or false
* We can run with low_open_files mode turned on or off. When it's turned on, we configure table cache to only hold a couple of files -- that way we need to reopen files every time we access them.
Another goal was to create a stress test without a lot of parameters. So tools/write_stress_runner.py should only take one parameter -- runtime_sec and it should figure out everything else on its own.
In a separate diff, I'll add this new test to our nightly legocastle runs.
Test Plan:
The goal of this test was to retroactively catch the following bugs: D33045, D48201, D46899, D42399. I failed to reproduce D48201, but all others have been caught!
When i reverted https://reviews.facebook.net/D33045:
./write_stress --runtime_sec=200 --low_open_files_mode=true
Iterator statuts not OK: IO error: /fast-rocksdb-tmp/rocksdb_test/write_stress/089166.sst: No such file or directory
When i reverted https://reviews.facebook.net/D42399:
python tools/write_stress_runner.py --runtime_sec=5000
Running write_stress, will kill after 5 seconds: ./write_stress --runtime_sec=-1
Running write_stress, will kill after 2 seconds: ./write_stress --runtime_sec=-1 --destroy_db=false --delete_obsolete_files_with_fullscan=true
Running write_stress, will kill after 7 seconds: ./write_stress --runtime_sec=-1 --destroy_db=false
Running write_stress, will kill after 5 seconds: ./write_stress --runtime_sec=-1 --destroy_db=false
Running write_stress, will kill after 8 seconds: ./write_stress --runtime_sec=-1 --destroy_db=false --low_open_files_mode=true
Write to DB failed: IO error: /fast-rocksdb-tmp/rocksdb_test/write_stress/019250.sst: No such file or directory
ERROR: write_stress died with exitcode=-6
When i reverted https://reviews.facebook.net/D46899:
python tools/write_stress_runner.py --runtime_sec=1000
runtime: 1000
Going to execute write stress for [3, 3, 100, 3, 2, 100, 1, 788]
Running write_stress for 3 seconds: ./write_stress --runtime_sec=3 --low_open_files_mode=true
Running write_stress for 3 seconds: ./write_stress --runtime_sec=3 --destroy_db=false --delete_obsolete_files_with_fullscan=true
Running write_stress, will kill after 100 seconds: ./write_stress --runtime_sec=-1 --destroy_db=false --delete_obsolete_files_with_fullscan=true
write_stress: db/db_impl.cc:2070: void rocksdb::DBImpl::MarkLogsSynced(uint64_t, bool, const rocksdb::Status&): Assertion `log.getting_synced' failed.
ERROR: write_stress died with exitcode=-6
Reviewers: IslamAbdelRahman, yhchiang, rven, kradhakrishnan, sdong, anthony
Reviewed By: anthony
Subscribers: leveldb, dhruba
Differential Revision: https://reviews.facebook.net/D49533
2015-10-29 00:15:07 +01:00
|
|
|
write_stress \
|
2015-07-21 01:40:41 +02:00
|
|
|
ldb \
|
|
|
|
db_repl_stress \
|
|
|
|
rocksdb_dump \
|
2017-05-23 19:30:04 +02:00
|
|
|
rocksdb_undump \
|
|
|
|
blob_dump \
|
RocksDB Trace Analyzer (#4091)
Summary:
A framework of trace analyzing for RocksDB
After collecting the trace by using the tool of [PR #3837](https://github.com/facebook/rocksdb/pull/3837). User can use the Trace Analyzer to interpret, analyze, and characterize the collected workload.
**Input:**
1. trace file
2. Whole keys space file
**Statistics:**
1. Access count of each operation (Get, Put, Delete, SingleDelete, DeleteRange, Merge) in each column family.
2. Key hotness (access count) of each one
3. Key space separation based on given prefix
4. Key size distribution
5. Value size distribution if appliable
6. Top K accessed keys
7. QPS statistics including the average QPS and peak QPS
8. Top K accessed prefix
9. The query correlation analyzing, output the number of X after Y and the corresponding average time
intervals
**Output:**
1. key access heat map (either in the accessed key space or whole key space)
2. trace sequence file (interpret the raw trace file to line base text file for future use)
3. Time serial (The key space ID and its access time)
4. Key access count distritbution
5. Key size distribution
6. Value size distribution (in each intervals)
7. whole key space separation by the prefix
8. Accessed key space separation by the prefix
9. QPS of each operation and each column family
10. Top K QPS and their accessed prefix range
**Test:**
1. Added the unit test of analyzing Get, Put, Delete, SingleDelete, DeleteRange, Merge
2. Generated the trace and analyze the trace
**Implemented but not tested (due to the limitation of trace_replay):**
1. Analyzing Iterator, supporting Seek() and SeekForPrev() analyzing
2. Analyzing the number of Key found by Get
**Future Work:**
1. Support execution time analyzing of each requests
2. Support cache hit situation and block read situation of Get
Pull Request resolved: https://github.com/facebook/rocksdb/pull/4091
Differential Revision: D9256157
Pulled By: zhichao-cao
fbshipit-source-id: f0ceacb7eedbc43a3eee6e85b76087d7832a8fe6
2018-08-13 20:32:04 +02:00
|
|
|
trace_analyzer \
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2016-06-04 03:44:22 +02:00
|
|
|
TEST_LIBS = \
|
|
|
|
librocksdb_env_basic_test.a
|
|
|
|
|
2015-11-19 00:24:28 +01:00
|
|
|
# TODO: add back forward_iterator_bench, after making it build in all environemnts.
|
2018-09-17 23:44:04 +02:00
|
|
|
BENCHMARKS = db_bench table_reader_bench cache_bench memtablerep_bench column_aware_encoding_exp persistent_cache_bench range_del_aggregator_bench
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2015-10-08 23:11:32 +02:00
|
|
|
# if user didn't config LIBNAME, set the default
|
2014-01-29 20:35:05 +01:00
|
|
|
ifeq ($(LIBNAME),)
|
2015-10-08 23:11:32 +02:00
|
|
|
# we should only run rocksdb in production with DEBUG_LEVEL 0
|
|
|
|
ifeq ($(DEBUG_LEVEL),0)
|
2015-07-21 01:40:41 +02:00
|
|
|
LIBNAME=librocksdb
|
2015-10-08 23:11:32 +02:00
|
|
|
else
|
|
|
|
LIBNAME=librocksdb_debug
|
|
|
|
endif
|
2014-01-29 20:35:05 +01:00
|
|
|
endif
|
2013-08-16 05:53:21 +02:00
|
|
|
LIBRARY = ${LIBNAME}.a
|
2016-05-28 02:25:02 +02:00
|
|
|
TOOLS_LIBRARY = ${LIBNAME}_tools.a
|
2011-05-28 02:53:58 +02:00
|
|
|
|
2014-10-02 20:07:45 +02:00
|
|
|
ROCKSDB_MAJOR = $(shell egrep "ROCKSDB_MAJOR.[0-9]" include/rocksdb/version.h | cut -d ' ' -f 3)
|
|
|
|
ROCKSDB_MINOR = $(shell egrep "ROCKSDB_MINOR.[0-9]" include/rocksdb/version.h | cut -d ' ' -f 3)
|
|
|
|
ROCKSDB_PATCH = $(shell egrep "ROCKSDB_PATCH.[0-9]" include/rocksdb/version.h | cut -d ' ' -f 3)
|
Package generation for Ubuntu and CentOS
Summary:
I put together a script to assist in the generation of deb's and
rpm's. I've tested that this works on ubuntu via vagrant. I've included the
Vagrantfile here, but I can remove it if it's not useful. The package.sh
script should work on any ubuntu or centos machine, I just added a bit of
logic in there to allow a base Ubuntu or Centos machine to be able to build
RocksDB from scratch.
Example output on Ubuntu 14.04:
```
root@vagrant-ubuntu-trusty-64:/vagrant# ./tools/package.sh
[+] g++-4.7 is already installed. skipping.
[+] libgflags-dev is already installed. skipping.
[+] ruby-all-dev is already installed. skipping.
[+] fpm is already installed. skipping.
Created package {:path=>"rocksdb_3.5_amd64.deb"}
root@vagrant-ubuntu-trusty-64:/vagrant# dpkg --info rocksdb_3.5_amd64.deb
new debian package, version 2.0.
size 17392022 bytes: control archive=1518 bytes.
275 bytes, 11 lines control
2911 bytes, 38 lines md5sums
Package: rocksdb
Version: 3.5
License: BSD
Vendor: Facebook
Architecture: amd64
Maintainer: rocksdb@fb.com
Installed-Size: 83358
Section: default
Priority: extra
Homepage: http://rocksdb.org/
Description: RocksDB is an embeddable persistent key-value store for fast storage.
```
Example output on CentOS 6.5:
```
[root@localhost vagrant]# rpm -qip rocksdb-3.5-1.x86_64.rpm
Name : rocksdb Relocations: /usr
Version : 3.5 Vendor: Facebook
Release : 1 Build Date: Mon 29 Sep 2014 01:26:11 AM UTC
Install Date: (not installed) Build Host: localhost
Group : default Source RPM: rocksdb-3.5-1.src.rpm
Size : 96231106 License: BSD
Signature : (none)
Packager : rocksdb@fb.com
URL : http://rocksdb.org/
Summary : RocksDB is an embeddable persistent key-value store for fast storage.
Description :
RocksDB is an embeddable persistent key-value store for fast storage.
```
Test Plan:
How this gets used is really up to the RocksDB core team. If you
want to actually get this into mainline, you might have to change `make
install` such that it install the RocksDB shared object file as well, which
would require you to link against gflags (maybe?) and that would require some
potential modifications to the script here (basically add a depends on that
package).
Currently, this will install the headers and a pre-compiled statically linked
object file. If that's what you want out of life, than this requires no
modifications.
Reviewers: ljin, yhchiang, igor
Reviewed By: igor
Differential Revision: https://reviews.facebook.net/D24141
2014-09-30 01:09:46 +02:00
|
|
|
|
2012-03-30 22:15:49 +02:00
|
|
|
default: all
|
|
|
|
|
2013-10-23 07:38:49 +02:00
|
|
|
#-----------------------------------------------
|
|
|
|
# Create platform independent shared libraries.
|
|
|
|
#-----------------------------------------------
|
2012-03-30 22:15:49 +02:00
|
|
|
ifneq ($(PLATFORM_SHARED_EXT),)
|
2012-08-27 08:45:35 +02:00
|
|
|
|
|
|
|
ifneq ($(PLATFORM_SHARED_VERSIONED),true)
|
2013-08-16 05:53:21 +02:00
|
|
|
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
|
2012-08-27 08:45:35 +02:00
|
|
|
SHARED2 = $(SHARED1)
|
|
|
|
SHARED3 = $(SHARED1)
|
2014-10-02 20:59:22 +02:00
|
|
|
SHARED4 = $(SHARED1)
|
2012-08-27 08:45:35 +02:00
|
|
|
SHARED = $(SHARED1)
|
|
|
|
else
|
Package generation for Ubuntu and CentOS
Summary:
I put together a script to assist in the generation of deb's and
rpm's. I've tested that this works on ubuntu via vagrant. I've included the
Vagrantfile here, but I can remove it if it's not useful. The package.sh
script should work on any ubuntu or centos machine, I just added a bit of
logic in there to allow a base Ubuntu or Centos machine to be able to build
RocksDB from scratch.
Example output on Ubuntu 14.04:
```
root@vagrant-ubuntu-trusty-64:/vagrant# ./tools/package.sh
[+] g++-4.7 is already installed. skipping.
[+] libgflags-dev is already installed. skipping.
[+] ruby-all-dev is already installed. skipping.
[+] fpm is already installed. skipping.
Created package {:path=>"rocksdb_3.5_amd64.deb"}
root@vagrant-ubuntu-trusty-64:/vagrant# dpkg --info rocksdb_3.5_amd64.deb
new debian package, version 2.0.
size 17392022 bytes: control archive=1518 bytes.
275 bytes, 11 lines control
2911 bytes, 38 lines md5sums
Package: rocksdb
Version: 3.5
License: BSD
Vendor: Facebook
Architecture: amd64
Maintainer: rocksdb@fb.com
Installed-Size: 83358
Section: default
Priority: extra
Homepage: http://rocksdb.org/
Description: RocksDB is an embeddable persistent key-value store for fast storage.
```
Example output on CentOS 6.5:
```
[root@localhost vagrant]# rpm -qip rocksdb-3.5-1.x86_64.rpm
Name : rocksdb Relocations: /usr
Version : 3.5 Vendor: Facebook
Release : 1 Build Date: Mon 29 Sep 2014 01:26:11 AM UTC
Install Date: (not installed) Build Host: localhost
Group : default Source RPM: rocksdb-3.5-1.src.rpm
Size : 96231106 License: BSD
Signature : (none)
Packager : rocksdb@fb.com
URL : http://rocksdb.org/
Summary : RocksDB is an embeddable persistent key-value store for fast storage.
Description :
RocksDB is an embeddable persistent key-value store for fast storage.
```
Test Plan:
How this gets used is really up to the RocksDB core team. If you
want to actually get this into mainline, you might have to change `make
install` such that it install the RocksDB shared object file as well, which
would require you to link against gflags (maybe?) and that would require some
potential modifications to the script here (basically add a depends on that
package).
Currently, this will install the headers and a pre-compiled statically linked
object file. If that's what you want out of life, than this requires no
modifications.
Reviewers: ljin, yhchiang, igor
Reviewed By: igor
Differential Revision: https://reviews.facebook.net/D24141
2014-09-30 01:09:46 +02:00
|
|
|
SHARED_MAJOR = $(ROCKSDB_MAJOR)
|
|
|
|
SHARED_MINOR = $(ROCKSDB_MINOR)
|
2014-10-02 20:59:22 +02:00
|
|
|
SHARED_PATCH = $(ROCKSDB_PATCH)
|
2013-08-16 05:53:21 +02:00
|
|
|
SHARED1 = ${LIBNAME}.$(PLATFORM_SHARED_EXT)
|
2015-07-23 15:08:24 +02:00
|
|
|
ifeq ($(PLATFORM), OS_MACOSX)
|
|
|
|
SHARED_OSX = $(LIBNAME).$(SHARED_MAJOR)
|
|
|
|
SHARED2 = $(SHARED_OSX).$(PLATFORM_SHARED_EXT)
|
|
|
|
SHARED3 = $(SHARED_OSX).$(SHARED_MINOR).$(PLATFORM_SHARED_EXT)
|
|
|
|
SHARED4 = $(SHARED_OSX).$(SHARED_MINOR).$(SHARED_PATCH).$(PLATFORM_SHARED_EXT)
|
|
|
|
else
|
2012-03-30 22:15:49 +02:00
|
|
|
SHARED2 = $(SHARED1).$(SHARED_MAJOR)
|
|
|
|
SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR)
|
2014-10-02 20:59:22 +02:00
|
|
|
SHARED4 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR).$(SHARED_PATCH)
|
2015-07-23 15:08:24 +02:00
|
|
|
endif
|
2014-10-02 20:59:22 +02:00
|
|
|
SHARED = $(SHARED1) $(SHARED2) $(SHARED3) $(SHARED4)
|
|
|
|
$(SHARED1): $(SHARED4)
|
2015-07-21 01:40:41 +02:00
|
|
|
ln -fs $(SHARED4) $(SHARED1)
|
2014-10-02 20:59:22 +02:00
|
|
|
$(SHARED2): $(SHARED4)
|
2015-07-21 01:40:41 +02:00
|
|
|
ln -fs $(SHARED4) $(SHARED2)
|
2014-10-02 20:59:22 +02:00
|
|
|
$(SHARED3): $(SHARED4)
|
2015-07-21 01:40:41 +02:00
|
|
|
ln -fs $(SHARED4) $(SHARED3)
|
2012-03-30 22:15:49 +02:00
|
|
|
endif
|
2017-08-31 23:02:06 +02:00
|
|
|
ifeq ($(HAVE_POWER8),1)
|
|
|
|
SHARED_C_OBJECTS = $(LIB_SOURCES_C:.c=.o)
|
|
|
|
SHARED_ASM_OBJECTS = $(LIB_SOURCES_ASM:.S=.o)
|
|
|
|
SHARED_C_LIBOBJECTS = $(patsubst %.o,shared-objects/%.o,$(SHARED_C_OBJECTS))
|
|
|
|
SHARED_ASM_LIBOBJECTS = $(patsubst %.o,shared-objects/%.o,$(SHARED_ASM_OBJECTS))
|
|
|
|
shared_libobjects = $(patsubst %,shared-objects/%,$(LIB_CC_OBJECTS))
|
|
|
|
else
|
2017-07-27 04:00:42 +02:00
|
|
|
shared_libobjects = $(patsubst %,shared-objects/%,$(LIBOBJECTS))
|
2017-08-31 23:02:06 +02:00
|
|
|
endif
|
|
|
|
|
2017-04-16 19:37:07 +02:00
|
|
|
CLEAN_FILES += shared-objects
|
2017-08-31 23:02:06 +02:00
|
|
|
shared_all_libobjects = $(shared_libobjects)
|
2017-04-16 19:37:07 +02:00
|
|
|
|
2017-08-31 23:02:06 +02:00
|
|
|
ifeq ($(HAVE_POWER8),1)
|
|
|
|
shared-ppc-objects = $(SHARED_C_LIBOBJECTS) $(SHARED_ASM_LIBOBJECTS)
|
|
|
|
|
|
|
|
shared-objects/util/crc32c_ppc.o: util/crc32c_ppc.c
|
|
|
|
$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
|
|
|
|
shared-objects/util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
|
|
|
|
$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
endif
|
2017-07-27 04:00:42 +02:00
|
|
|
$(shared_libobjects): shared-objects/%.o: %.cc
|
2017-04-16 19:37:07 +02:00
|
|
|
$(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) -c $< -o $@
|
|
|
|
|
2017-08-31 23:02:06 +02:00
|
|
|
ifeq ($(HAVE_POWER8),1)
|
|
|
|
shared_all_libobjects = $(shared_libobjects) $(shared-ppc-objects)
|
|
|
|
endif
|
|
|
|
$(SHARED4): $(shared_all_libobjects)
|
2018-04-06 04:52:02 +02:00
|
|
|
$(CXX) $(PLATFORM_SHARED_LDFLAGS)$(SHARED3) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(shared_all_libobjects) $(LDFLAGS) -o $@
|
2012-08-27 08:45:35 +02:00
|
|
|
|
|
|
|
endif # PLATFORM_SHARED_EXT
|
|
|
|
|
Package generation for Ubuntu and CentOS
Summary:
I put together a script to assist in the generation of deb's and
rpm's. I've tested that this works on ubuntu via vagrant. I've included the
Vagrantfile here, but I can remove it if it's not useful. The package.sh
script should work on any ubuntu or centos machine, I just added a bit of
logic in there to allow a base Ubuntu or Centos machine to be able to build
RocksDB from scratch.
Example output on Ubuntu 14.04:
```
root@vagrant-ubuntu-trusty-64:/vagrant# ./tools/package.sh
[+] g++-4.7 is already installed. skipping.
[+] libgflags-dev is already installed. skipping.
[+] ruby-all-dev is already installed. skipping.
[+] fpm is already installed. skipping.
Created package {:path=>"rocksdb_3.5_amd64.deb"}
root@vagrant-ubuntu-trusty-64:/vagrant# dpkg --info rocksdb_3.5_amd64.deb
new debian package, version 2.0.
size 17392022 bytes: control archive=1518 bytes.
275 bytes, 11 lines control
2911 bytes, 38 lines md5sums
Package: rocksdb
Version: 3.5
License: BSD
Vendor: Facebook
Architecture: amd64
Maintainer: rocksdb@fb.com
Installed-Size: 83358
Section: default
Priority: extra
Homepage: http://rocksdb.org/
Description: RocksDB is an embeddable persistent key-value store for fast storage.
```
Example output on CentOS 6.5:
```
[root@localhost vagrant]# rpm -qip rocksdb-3.5-1.x86_64.rpm
Name : rocksdb Relocations: /usr
Version : 3.5 Vendor: Facebook
Release : 1 Build Date: Mon 29 Sep 2014 01:26:11 AM UTC
Install Date: (not installed) Build Host: localhost
Group : default Source RPM: rocksdb-3.5-1.src.rpm
Size : 96231106 License: BSD
Signature : (none)
Packager : rocksdb@fb.com
URL : http://rocksdb.org/
Summary : RocksDB is an embeddable persistent key-value store for fast storage.
Description :
RocksDB is an embeddable persistent key-value store for fast storage.
```
Test Plan:
How this gets used is really up to the RocksDB core team. If you
want to actually get this into mainline, you might have to change `make
install` such that it install the RocksDB shared object file as well, which
would require you to link against gflags (maybe?) and that would require some
potential modifications to the script here (basically add a depends on that
package).
Currently, this will install the headers and a pre-compiled statically linked
object file. If that's what you want out of life, than this requires no
modifications.
Reviewers: ljin, yhchiang, igor
Reviewed By: igor
Differential Revision: https://reviews.facebook.net/D24141
2014-09-30 01:09:46 +02:00
|
|
|
.PHONY: blackbox_crash_test check clean coverage crash_test ldb_tests package \
|
2018-07-26 20:11:02 +02:00
|
|
|
release tags tags0 valgrind_check whitebox_crash_test format static_lib shared_lib all \
|
2015-07-21 01:40:41 +02:00
|
|
|
dbg rocksdbjavastatic rocksdbjava install install-static install-shared uninstall \
|
2016-05-28 02:25:02 +02:00
|
|
|
analyze tools tools_lib
|
2014-02-07 01:11:35 +01:00
|
|
|
|
2015-08-13 19:13:43 +02:00
|
|
|
|
2016-06-04 03:44:22 +02:00
|
|
|
all: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(TESTS)
|
2013-01-24 20:45:11 +01:00
|
|
|
|
2017-07-28 02:15:48 +02:00
|
|
|
all_but_some_tests: $(LIBRARY) $(BENCHMARKS) tools tools_lib test_libs $(SUBSET)
|
|
|
|
|
2014-04-04 22:11:44 +02:00
|
|
|
static_lib: $(LIBRARY)
|
|
|
|
|
|
|
|
shared_lib: $(SHARED)
|
|
|
|
|
2015-08-13 19:13:43 +02:00
|
|
|
tools: $(TOOLS)
|
|
|
|
|
2016-05-28 02:25:02 +02:00
|
|
|
tools_lib: $(TOOLS_LIBRARY)
|
|
|
|
|
2016-06-04 03:44:22 +02:00
|
|
|
test_libs: $(TEST_LIBS)
|
|
|
|
|
2015-08-13 19:13:43 +02:00
|
|
|
dbg: $(LIBRARY) $(BENCHMARKS) tools $(TESTS)
|
2013-08-01 22:59:01 +02:00
|
|
|
|
2014-04-16 00:59:34 +02:00
|
|
|
# creates static library and programs
|
2013-01-24 20:45:11 +01:00
|
|
|
release:
|
2015-07-21 01:40:41 +02:00
|
|
|
$(MAKE) clean
|
2015-10-21 02:09:09 +02:00
|
|
|
DEBUG_LEVEL=0 $(MAKE) static_lib tools db_bench
|
2013-08-01 22:59:01 +02:00
|
|
|
|
|
|
|
coverage:
|
2015-07-21 01:40:41 +02:00
|
|
|
$(MAKE) clean
|
|
|
|
COVERAGEFLAGS="-fprofile-arcs -ftest-coverage" LDFLAGS+="-lgcov" $(MAKE) J=1 all check
|
|
|
|
cd coverage && ./coverage_test.sh
|
|
|
|
# Delete intermediate files
|
2018-03-19 20:11:58 +01:00
|
|
|
$(FIND) . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \;
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2016-04-18 07:34:56 +02:00
|
|
|
ifneq (,$(filter check parallel_check,$(MAKECMDGOALS)),)
|
|
|
|
# Use /dev/shm if it has the sticky bit set (otherwise, /tmp),
|
|
|
|
# and create a randomly-named rocksdb.XXXX directory therein.
|
|
|
|
# We'll use that directory in the "make check" rules.
|
|
|
|
ifeq ($(TMPD),)
|
2017-04-22 05:41:37 +02:00
|
|
|
TMPDIR := $(shell echo $${TMPDIR:-/tmp})
|
|
|
|
TMPD := $(shell f=/dev/shm; test -k $$f || f=$(TMPDIR); \
|
2016-04-18 07:34:56 +02:00
|
|
|
perl -le 'use File::Temp "tempdir";' \
|
|
|
|
-e 'print tempdir("'$$f'/rocksdb.XXXX", CLEANUP => 0)')
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Run all tests in parallel, accumulating per-test logs in t/log-*.
|
|
|
|
#
|
|
|
|
# Each t/run-* file is a tiny generated bourne shell script that invokes one of
|
|
|
|
# sub-tests. Why use a file for this? Because that makes the invocation of
|
|
|
|
# parallel below simpler, which in turn makes the parsing of parallel's
|
|
|
|
# LOG simpler (the latter is for live monitoring as parallel
|
|
|
|
# tests run).
|
|
|
|
#
|
|
|
|
# Test names are extracted by running tests with --gtest_list_tests.
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
# This filter removes the "#"-introduced comments, and expands to
|
|
|
|
# fully-qualified names by changing input like this:
|
|
|
|
#
|
|
|
|
# DBTest.
|
|
|
|
# Empty
|
|
|
|
# WriteEmptyBatch
|
|
|
|
# MultiThreaded/MultiThreadedDBTest.
|
|
|
|
# MultiThreaded/0 # GetParam() = 0
|
|
|
|
# MultiThreaded/1 # GetParam() = 1
|
|
|
|
#
|
|
|
|
# into this:
|
|
|
|
#
|
|
|
|
# DBTest.Empty
|
|
|
|
# DBTest.WriteEmptyBatch
|
|
|
|
# MultiThreaded/MultiThreadedDBTest.MultiThreaded/0
|
|
|
|
# MultiThreaded/MultiThreadedDBTest.MultiThreaded/1
|
|
|
|
#
|
|
|
|
|
2016-04-18 07:34:56 +02:00
|
|
|
parallel_tests = $(patsubst %,parallel_%,$(PARALLEL_TEST))
|
|
|
|
.PHONY: gen_parallel_tests $(parallel_tests)
|
|
|
|
$(parallel_tests): $(PARALLEL_TEST)
|
|
|
|
$(AM_V_at)TEST_BINARY=$(patsubst parallel_%,%,$@); \
|
|
|
|
TEST_NAMES=` \
|
|
|
|
./$$TEST_BINARY --gtest_list_tests \
|
|
|
|
| perl -n \
|
|
|
|
-e 's/ *\#.*//;' \
|
|
|
|
-e '/^(\s*)(\S+)/; !$$1 and do {$$p=$$2; break};' \
|
|
|
|
-e 'print qq! $$p$$2!'`; \
|
|
|
|
for TEST_NAME in $$TEST_NAMES; do \
|
2016-07-22 19:42:56 +02:00
|
|
|
TEST_SCRIPT=t/run-$$TEST_BINARY-$${TEST_NAME//\//-}; \
|
2016-04-18 07:34:56 +02:00
|
|
|
echo " GEN " $$TEST_SCRIPT; \
|
|
|
|
printf '%s\n' \
|
|
|
|
'#!/bin/sh' \
|
|
|
|
"d=\$(TMPD)$$TEST_SCRIPT" \
|
|
|
|
'mkdir -p $$d' \
|
2016-08-25 20:02:39 +02:00
|
|
|
"TEST_TMPDIR=\$$d $(DRIVER) ./$$TEST_BINARY --gtest_filter=$$TEST_NAME" \
|
2016-04-18 07:34:56 +02:00
|
|
|
> $$TEST_SCRIPT; \
|
|
|
|
chmod a=rx $$TEST_SCRIPT; \
|
|
|
|
done
|
|
|
|
|
|
|
|
gen_parallel_tests:
|
|
|
|
$(AM_V_at)mkdir -p t
|
|
|
|
$(AM_V_at)rm -f t/run-*
|
|
|
|
$(MAKE) $(parallel_tests)
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
|
|
|
|
# Reorder input lines (which are one per test) so that the
|
|
|
|
# longest-running tests appear first in the output.
|
|
|
|
# Do this by prefixing each selected name with its duration,
|
|
|
|
# sort the resulting names, and remove the leading numbers.
|
|
|
|
# FIXME: the "100" we prepend is a fake time, for now.
|
|
|
|
# FIXME: squirrel away timings from each run and use them
|
|
|
|
# (when present) on subsequent runs to order these tests.
|
|
|
|
#
|
|
|
|
# Without this reordering, these two tests would happen to start only
|
|
|
|
# after almost all other tests had completed, thus adding 100 seconds
|
|
|
|
# to the duration of parallel "make check". That's the difference
|
|
|
|
# between 4 minutes (old) and 2m20s (new).
|
|
|
|
#
|
|
|
|
# 152.120 PASS t/DBTest.FileCreationRandomFailure
|
|
|
|
# 107.816 PASS t/DBTest.EncodeDecompressedBlockSizeTest
|
|
|
|
#
|
|
|
|
slow_test_regexp = \
|
2017-10-03 20:08:11 +02:00
|
|
|
^.*SnapshotConcurrentAccessTest.*$$|^t/run-table_test-HarnessTest.Randomized$$|^t/run-db_test-.*(?:FileCreationRandomFailure|EncodeDecompressedBlockSizeTest)$$|^.*RecoverFromCorruptedWALWithoutFlush$$
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
prioritize_long_running_tests = \
|
2015-07-21 01:40:41 +02:00
|
|
|
perl -pe 's,($(slow_test_regexp)),100 $$1,' \
|
|
|
|
| sort -k1,1gr \
|
|
|
|
| sed 's/^[.0-9]* //'
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
|
|
|
|
# "make check" uses
|
|
|
|
# Run with "make J=1 check" to disable parallelism in "make check".
|
|
|
|
# Run with "make J=200% check" to run two parallel jobs per core.
|
|
|
|
# The default is to run one job per core (J=100%).
|
|
|
|
# See "man parallel" for its "-j ..." option.
|
2016-04-18 07:34:56 +02:00
|
|
|
J ?= 100%
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
|
2015-04-13 23:21:32 +02:00
|
|
|
# Use this regexp to select the subset of tests whose names match.
|
|
|
|
tests-regexp = .
|
|
|
|
|
2016-04-18 07:34:56 +02:00
|
|
|
t_run = $(wildcard t/run-*)
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
.PHONY: check_0
|
2016-04-18 07:34:56 +02:00
|
|
|
check_0:
|
|
|
|
$(AM_V_GEN)export TEST_TMPDIR=$(TMPD); \
|
2015-07-21 01:40:41 +02:00
|
|
|
printf '%s\n' '' \
|
|
|
|
'To monitor subtest <duration,pass/fail,name>,' \
|
|
|
|
' run "make watch-log" in a separate window' ''; \
|
2016-04-18 07:34:56 +02:00
|
|
|
test -t 1 && eta=--eta || eta=; \
|
|
|
|
{ \
|
|
|
|
printf './%s\n' $(filter-out $(PARALLEL_TEST),$(TESTS)); \
|
|
|
|
printf '%s\n' $(t_run); \
|
|
|
|
} \
|
2015-07-21 01:40:41 +02:00
|
|
|
| $(prioritize_long_running_tests) \
|
|
|
|
| grep -E '$(tests-regexp)' \
|
2016-08-02 02:22:07 +02:00
|
|
|
| build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu '{} >& t/log-{/}'
|
2016-04-14 04:27:52 +02:00
|
|
|
|
2018-07-13 22:55:13 +02:00
|
|
|
valgrind-blacklist-regexp = InlineSkipTest.ConcurrentInsert|TransactionStressTest.DeadlockStress|DBCompactionTest.SuggestCompactRangeNoTwoLevel0Compactions|BackupableDBTest.RateLimiting|DBTest.CloseSpeedup|DBTest.ThreadStatusFlush|DBTest.RateLimitingTest|DBTest.EncodeDecompressedBlockSizeTest|FaultInjectionTest.UninstalledCompaction|HarnessTest.Randomized|ExternalSSTFileTest.CompactDuringAddFileRandom|ExternalSSTFileTest.IngestFileWithGlobalSeqnoRandomized|MySQLStyleTransactionTest.TransactionStressTest
|
2017-02-24 00:54:47 +01:00
|
|
|
|
2016-04-14 04:27:52 +02:00
|
|
|
.PHONY: valgrind_check_0
|
2016-04-18 07:34:56 +02:00
|
|
|
valgrind_check_0:
|
2016-04-14 04:27:52 +02:00
|
|
|
$(AM_V_GEN)export TEST_TMPDIR=$(TMPD); \
|
|
|
|
printf '%s\n' '' \
|
|
|
|
'To monitor subtest <duration,pass/fail,name>,' \
|
|
|
|
' run "make watch-log" in a separate window' ''; \
|
|
|
|
test -t 1 && eta=--eta || eta=; \
|
|
|
|
{ \
|
2016-04-18 07:34:56 +02:00
|
|
|
printf './%s\n' $(filter-out $(PARALLEL_TEST) %skiplist_test options_settable_test, $(TESTS)); \
|
2016-04-14 04:27:52 +02:00
|
|
|
printf '%s\n' $(t_run); \
|
|
|
|
} \
|
|
|
|
| $(prioritize_long_running_tests) \
|
|
|
|
| grep -E '$(tests-regexp)' \
|
2017-02-24 00:54:47 +01:00
|
|
|
| grep -E -v '$(valgrind-blacklist-regexp)' \
|
2016-08-02 02:22:07 +02:00
|
|
|
| build_tools/gnu_parallel -j$(J) --plain --joblog=LOG $$eta --gnu \
|
2016-08-25 20:02:39 +02:00
|
|
|
'(if [[ "{}" == "./"* ]] ; then $(DRIVER) {}; else {}; fi) ' \
|
|
|
|
'>& t/valgrind_log-{/}'
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
|
|
|
|
CLEAN_FILES += t LOG $(TMPD)
|
2014-12-06 01:16:56 +01:00
|
|
|
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
# When running parallel "make check", you can monitor its progress
|
|
|
|
# from another window.
|
|
|
|
# Run "make watch_LOG" to show the duration,PASS/FAIL,name of parallel
|
|
|
|
# tests as they are being run. We sort them so that longer-running ones
|
|
|
|
# appear at the top of the list and any failing tests remain at the top
|
|
|
|
# regardless of their duration. As with any use of "watch", hit ^C to
|
|
|
|
# interrupt.
|
|
|
|
watch-log:
|
2018-03-19 20:11:58 +01:00
|
|
|
$(WATCH) --interval=0 'sort -k7,7nr -k4,4gr LOG|$(quoted_perl_command)'
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
|
2015-05-22 18:11:29 +02:00
|
|
|
# If J != 1 and GNU parallel is installed, run the tests in parallel,
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
# via the check_0 rule above. Otherwise, run them sequentially.
|
|
|
|
check: all
|
2016-04-18 07:34:56 +02:00
|
|
|
$(MAKE) gen_parallel_tests
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_V_GEN)if test "$(J)" != 1 \
|
2016-07-27 20:58:57 +02:00
|
|
|
&& (build_tools/gnu_parallel --gnu --help 2>/dev/null) | \
|
2015-07-21 01:40:41 +02:00
|
|
|
grep -q 'GNU Parallel'; \
|
|
|
|
then \
|
|
|
|
$(MAKE) T="$$t" TMPD=$(TMPD) check_0; \
|
|
|
|
else \
|
|
|
|
for t in $(TESTS); do \
|
|
|
|
echo "===== Running $$t"; ./$$t || exit 1; done; \
|
|
|
|
fi
|
|
|
|
rm -rf $(TMPD)
|
2017-04-22 05:41:37 +02:00
|
|
|
ifneq ($(PLATFORM), OS_AIX)
|
2015-10-15 19:59:31 +02:00
|
|
|
ifeq ($(filter -DROCKSDB_LITE,$(OPT)),)
|
2015-07-21 01:40:41 +02:00
|
|
|
python tools/ldb_test.py
|
|
|
|
sh tools/rocksdb_dump_test.sh
|
2015-10-15 19:59:31 +02:00
|
|
|
endif
|
2017-04-22 05:41:37 +02:00
|
|
|
endif
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
|
2016-11-19 04:20:15 +01:00
|
|
|
# TODO add ldb_tests
|
|
|
|
check_some: $(SUBSET)
|
2015-07-21 01:40:41 +02:00
|
|
|
for t in $(SUBSET); do echo "===== Running $$t"; ./$$t || exit 1; done
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
|
|
|
|
.PHONY: ldb_tests
|
2014-05-08 01:51:30 +02:00
|
|
|
ldb_tests: ldb
|
2015-07-21 01:40:41 +02:00
|
|
|
python tools/ldb_test.py
|
2013-01-11 20:09:23 +01:00
|
|
|
|
2014-04-24 18:28:11 +02:00
|
|
|
crash_test: whitebox_crash_test blackbox_crash_test
|
2013-05-24 04:10:13 +02:00
|
|
|
|
|
|
|
blackbox_crash_test: db_stress
|
2017-08-11 02:53:54 +02:00
|
|
|
python -u tools/db_crashtest.py --simple blackbox $(CRASH_TEST_EXT_ARGS)
|
|
|
|
python -u tools/db_crashtest.py blackbox $(CRASH_TEST_EXT_ARGS)
|
2013-05-24 04:10:13 +02:00
|
|
|
|
2016-07-22 20:46:13 +02:00
|
|
|
ifeq ($(CRASH_TEST_KILL_ODD),)
|
|
|
|
CRASH_TEST_KILL_ODD=888887
|
|
|
|
endif
|
|
|
|
|
2013-05-24 04:10:13 +02:00
|
|
|
whitebox_crash_test: db_stress
|
2016-07-22 20:46:13 +02:00
|
|
|
python -u tools/db_crashtest.py --simple whitebox --random_kill_odd \
|
2017-08-11 02:53:54 +02:00
|
|
|
$(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
|
2016-07-22 20:46:13 +02:00
|
|
|
python -u tools/db_crashtest.py whitebox --random_kill_odd \
|
2017-08-11 02:53:54 +02:00
|
|
|
$(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
|
2013-04-05 22:44:59 +02:00
|
|
|
|
2013-11-20 01:33:24 +01:00
|
|
|
asan_check:
|
2015-07-21 01:40:41 +02:00
|
|
|
$(MAKE) clean
|
|
|
|
COMPILE_WITH_ASAN=1 $(MAKE) check -j32
|
|
|
|
$(MAKE) clean
|
2013-11-20 01:44:40 +01:00
|
|
|
|
|
|
|
asan_crash_test:
|
2015-07-21 01:40:41 +02:00
|
|
|
$(MAKE) clean
|
|
|
|
COMPILE_WITH_ASAN=1 $(MAKE) crash_test
|
|
|
|
$(MAKE) clean
|
2013-11-20 01:33:24 +01:00
|
|
|
|
2016-03-31 00:59:24 +02:00
|
|
|
ubsan_check:
|
|
|
|
$(MAKE) clean
|
|
|
|
COMPILE_WITH_UBSAN=1 $(MAKE) check -j32
|
|
|
|
$(MAKE) clean
|
|
|
|
|
|
|
|
ubsan_crash_test:
|
|
|
|
$(MAKE) clean
|
|
|
|
COMPILE_WITH_UBSAN=1 $(MAKE) crash_test
|
|
|
|
$(MAKE) clean
|
|
|
|
|
2016-10-21 23:57:44 +02:00
|
|
|
valgrind_test:
|
2017-11-15 23:13:03 +01:00
|
|
|
ROCKSDB_VALGRIND_RUN=1 DISABLE_JEMALLOC=1 $(MAKE) valgrind_check
|
2016-10-21 23:57:44 +02:00
|
|
|
|
2015-03-30 22:05:35 +02:00
|
|
|
valgrind_check: $(TESTS)
|
2016-08-25 20:02:39 +02:00
|
|
|
$(MAKE) DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" gen_parallel_tests
|
2016-04-14 04:27:52 +02:00
|
|
|
$(AM_V_GEN)if test "$(J)" != 1 \
|
2016-07-27 20:58:57 +02:00
|
|
|
&& (build_tools/gnu_parallel --gnu --help 2>/dev/null) | \
|
2016-04-14 04:27:52 +02:00
|
|
|
grep -q 'GNU Parallel'; \
|
|
|
|
then \
|
2016-04-18 07:34:56 +02:00
|
|
|
$(MAKE) TMPD=$(TMPD) \
|
2016-04-14 04:27:52 +02:00
|
|
|
DRIVER="$(VALGRIND_VER) $(VALGRIND_OPTS)" valgrind_check_0; \
|
|
|
|
else \
|
|
|
|
for t in $(filter-out %skiplist_test options_settable_test,$(TESTS)); do \
|
|
|
|
$(VALGRIND_VER) $(VALGRIND_OPTS) ./$$t; \
|
|
|
|
ret_code=$$?; \
|
|
|
|
if [ $$ret_code -ne 0 ]; then \
|
|
|
|
exit $$ret_code; \
|
|
|
|
fi; \
|
|
|
|
done; \
|
|
|
|
fi
|
2013-02-22 02:10:33 +01:00
|
|
|
|
2016-01-25 23:04:27 +01:00
|
|
|
|
|
|
|
ifneq ($(PAR_TEST),)
|
|
|
|
parloop:
|
|
|
|
ret_bad=0; \
|
|
|
|
for t in $(PAR_TEST); do \
|
|
|
|
echo "===== Running $$t in parallel $(NUM_PAR)";\
|
|
|
|
if [ $(db_test) -eq 1 ]; then \
|
2016-08-02 02:22:07 +02:00
|
|
|
seq $(J) | v="$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{}; export TEST_TMPDIR=$$s;' \
|
2016-01-25 23:04:27 +01:00
|
|
|
'timeout 2m ./db_test --gtest_filter=$$v >> $$s/log-{} 2>1'; \
|
|
|
|
else\
|
2016-08-02 02:22:07 +02:00
|
|
|
seq $(J) | v="./$$t" build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{};' \
|
2016-01-25 23:04:27 +01:00
|
|
|
'export TEST_TMPDIR=$$s; timeout 10m $$v >> $$s/log-{} 2>1'; \
|
|
|
|
fi; \
|
|
|
|
ret_code=$$?; \
|
|
|
|
if [ $$ret_code -ne 0 ]; then \
|
|
|
|
ret_bad=$$ret_code; \
|
|
|
|
echo $$t exited with $$ret_code; \
|
|
|
|
fi; \
|
|
|
|
done; \
|
|
|
|
exit $$ret_bad;
|
|
|
|
endif
|
|
|
|
|
2016-04-18 07:34:56 +02:00
|
|
|
test_names = \
|
|
|
|
./db_test --gtest_list_tests \
|
|
|
|
| perl -n \
|
|
|
|
-e 's/ *\#.*//;' \
|
|
|
|
-e '/^(\s*)(\S+)/; !$$1 and do {$$p=$$2; break};' \
|
|
|
|
-e 'print qq! $$p$$2!'
|
|
|
|
|
2016-01-25 23:04:27 +01:00
|
|
|
parallel_check: $(TESTS)
|
|
|
|
$(AM_V_GEN)if test "$(J)" > 1 \
|
2016-07-27 20:58:57 +02:00
|
|
|
&& (build_tools/gnu_parallel --gnu --help 2>/dev/null) | \
|
2016-01-25 23:04:27 +01:00
|
|
|
grep -q 'GNU Parallel'; \
|
|
|
|
then \
|
|
|
|
echo Running in parallel $(J); \
|
|
|
|
else \
|
|
|
|
echo "Need to have GNU Parallel and J > 1"; exit 1; \
|
|
|
|
fi; \
|
|
|
|
ret_bad=0; \
|
|
|
|
echo $(J);\
|
|
|
|
echo Test Dir: $(TMPD); \
|
2016-08-02 02:22:07 +02:00
|
|
|
seq $(J) | build_tools/gnu_parallel --gnu --plain 's=$(TMPD)/rdb-{}; rm -rf $$s; mkdir $$s'; \
|
2016-02-12 19:49:35 +01:00
|
|
|
$(MAKE) PAR_TEST="$(shell $(test_names))" TMPD=$(TMPD) \
|
2016-01-25 23:04:27 +01:00
|
|
|
J=$(J) db_test=1 parloop; \
|
|
|
|
$(MAKE) PAR_TEST="$(filter-out db_test, $(TESTS))" \
|
|
|
|
TMPD=$(TMPD) J=$(J) db_test=0 parloop;
|
|
|
|
|
2015-02-24 02:45:25 +01:00
|
|
|
analyze: clean
|
2015-07-21 01:40:41 +02:00
|
|
|
$(CLANG_SCAN_BUILD) --use-analyzer=$(CLANG_ANALYZER) \
|
|
|
|
--use-c++=$(CXX) --use-cc=$(CC) --status-bugs \
|
|
|
|
-o $(CURDIR)/scan_build_report \
|
|
|
|
$(MAKE) dbg
|
2015-02-04 06:43:06 +01:00
|
|
|
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
CLEAN_FILES += unity.cc
|
|
|
|
unity.cc: Makefile
|
2015-07-21 01:40:41 +02:00
|
|
|
rm -f $@ $@-t
|
|
|
|
for source_file in $(LIB_SOURCES); do \
|
2015-09-25 00:29:05 +02:00
|
|
|
echo "#include \"$$source_file\"" >> $@-t; \
|
2015-07-21 01:40:41 +02:00
|
|
|
done
|
|
|
|
chmod a=r $@-t
|
|
|
|
mv $@-t $@
|
2014-08-07 19:05:04 +02:00
|
|
|
|
2015-09-25 00:29:05 +02:00
|
|
|
unity.a: unity.o
|
|
|
|
$(AM_V_AR)rm -f $@
|
|
|
|
$(AM_V_at)$(AR) $(ARFLAGS) $@ unity.o
|
|
|
|
|
2018-08-31 03:28:47 +02:00
|
|
|
|
|
|
|
TOOLLIBOBJECTS = $(TOOL_LIB_SOURCES:.cc=.o)
|
2015-10-07 23:46:18 +02:00
|
|
|
# try compiling db_test with unity
|
2018-08-31 03:28:47 +02:00
|
|
|
unity_test: db/db_test.o db/db_test_util.o $(TESTHARNESS) $(TOOLLIBOBJECTS) unity.a
|
2015-10-07 23:46:18 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
./unity_test
|
|
|
|
|
2015-09-25 00:29:05 +02:00
|
|
|
rocksdb.h rocksdb.cc: build_tools/amalgamate.py Makefile $(LIB_SOURCES) unity.cc
|
|
|
|
build_tools/amalgamate.py -I. -i./include unity.cc -x include/rocksdb/c.h -H rocksdb.h -o rocksdb.cc
|
2014-08-07 19:05:04 +02:00
|
|
|
|
2011-03-18 23:37:00 +01:00
|
|
|
clean:
|
2015-07-21 01:40:41 +02:00
|
|
|
rm -f $(BENCHMARKS) $(TOOLS) $(TESTS) $(LIBRARY) $(SHARED)
|
|
|
|
rm -rf $(CLEAN_FILES) ios-x86 ios-arm scan_build_report
|
2018-03-19 20:11:58 +01:00
|
|
|
$(FIND) . -name "*.[oda]" -exec rm -f {} \;
|
|
|
|
$(FIND) . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \;
|
2017-05-26 18:50:45 +02:00
|
|
|
rm -rf bzip2* snappy* zlib* lz4* zstd*
|
2016-09-16 19:54:31 +02:00
|
|
|
cd java; $(MAKE) clean
|
2015-02-24 02:45:25 +01:00
|
|
|
|
2013-08-14 22:29:05 +02:00
|
|
|
tags:
|
2018-03-19 06:39:18 +01:00
|
|
|
ctags -R .
|
2018-03-19 20:11:58 +01:00
|
|
|
cscope -b `$(FIND) . -name '*.cc'` `$(FIND) . -name '*.h'` `$(FIND) . -name '*.c'`
|
2017-05-18 16:50:40 +02:00
|
|
|
ctags -e -R -o etags *
|
2011-05-28 02:53:58 +02:00
|
|
|
|
2018-07-26 20:11:02 +02:00
|
|
|
tags0:
|
|
|
|
ctags -R .
|
|
|
|
cscope -b `$(FIND) . -name '*.cc' -and ! -name '*_test.cc'` \
|
|
|
|
`$(FIND) . -name '*.c' -and ! -name '*_test.c'` \
|
|
|
|
`$(FIND) . -name '*.h' -and ! -name '*_test.h'`
|
|
|
|
ctags -e -R -o etags *
|
|
|
|
|
2014-01-14 09:39:42 +01:00
|
|
|
format:
|
2015-07-21 01:40:41 +02:00
|
|
|
build_tools/format-diff.sh
|
2014-01-14 09:39:42 +01:00
|
|
|
|
Package generation for Ubuntu and CentOS
Summary:
I put together a script to assist in the generation of deb's and
rpm's. I've tested that this works on ubuntu via vagrant. I've included the
Vagrantfile here, but I can remove it if it's not useful. The package.sh
script should work on any ubuntu or centos machine, I just added a bit of
logic in there to allow a base Ubuntu or Centos machine to be able to build
RocksDB from scratch.
Example output on Ubuntu 14.04:
```
root@vagrant-ubuntu-trusty-64:/vagrant# ./tools/package.sh
[+] g++-4.7 is already installed. skipping.
[+] libgflags-dev is already installed. skipping.
[+] ruby-all-dev is already installed. skipping.
[+] fpm is already installed. skipping.
Created package {:path=>"rocksdb_3.5_amd64.deb"}
root@vagrant-ubuntu-trusty-64:/vagrant# dpkg --info rocksdb_3.5_amd64.deb
new debian package, version 2.0.
size 17392022 bytes: control archive=1518 bytes.
275 bytes, 11 lines control
2911 bytes, 38 lines md5sums
Package: rocksdb
Version: 3.5
License: BSD
Vendor: Facebook
Architecture: amd64
Maintainer: rocksdb@fb.com
Installed-Size: 83358
Section: default
Priority: extra
Homepage: http://rocksdb.org/
Description: RocksDB is an embeddable persistent key-value store for fast storage.
```
Example output on CentOS 6.5:
```
[root@localhost vagrant]# rpm -qip rocksdb-3.5-1.x86_64.rpm
Name : rocksdb Relocations: /usr
Version : 3.5 Vendor: Facebook
Release : 1 Build Date: Mon 29 Sep 2014 01:26:11 AM UTC
Install Date: (not installed) Build Host: localhost
Group : default Source RPM: rocksdb-3.5-1.src.rpm
Size : 96231106 License: BSD
Signature : (none)
Packager : rocksdb@fb.com
URL : http://rocksdb.org/
Summary : RocksDB is an embeddable persistent key-value store for fast storage.
Description :
RocksDB is an embeddable persistent key-value store for fast storage.
```
Test Plan:
How this gets used is really up to the RocksDB core team. If you
want to actually get this into mainline, you might have to change `make
install` such that it install the RocksDB shared object file as well, which
would require you to link against gflags (maybe?) and that would require some
potential modifications to the script here (basically add a depends on that
package).
Currently, this will install the headers and a pre-compiled statically linked
object file. If that's what you want out of life, than this requires no
modifications.
Reviewers: ljin, yhchiang, igor
Reviewed By: igor
Differential Revision: https://reviews.facebook.net/D24141
2014-09-30 01:09:46 +02:00
|
|
|
package:
|
2015-07-21 01:40:41 +02:00
|
|
|
bash build_tools/make_package.sh $(SHARED_MAJOR).$(SHARED_MINOR)
|
Package generation for Ubuntu and CentOS
Summary:
I put together a script to assist in the generation of deb's and
rpm's. I've tested that this works on ubuntu via vagrant. I've included the
Vagrantfile here, but I can remove it if it's not useful. The package.sh
script should work on any ubuntu or centos machine, I just added a bit of
logic in there to allow a base Ubuntu or Centos machine to be able to build
RocksDB from scratch.
Example output on Ubuntu 14.04:
```
root@vagrant-ubuntu-trusty-64:/vagrant# ./tools/package.sh
[+] g++-4.7 is already installed. skipping.
[+] libgflags-dev is already installed. skipping.
[+] ruby-all-dev is already installed. skipping.
[+] fpm is already installed. skipping.
Created package {:path=>"rocksdb_3.5_amd64.deb"}
root@vagrant-ubuntu-trusty-64:/vagrant# dpkg --info rocksdb_3.5_amd64.deb
new debian package, version 2.0.
size 17392022 bytes: control archive=1518 bytes.
275 bytes, 11 lines control
2911 bytes, 38 lines md5sums
Package: rocksdb
Version: 3.5
License: BSD
Vendor: Facebook
Architecture: amd64
Maintainer: rocksdb@fb.com
Installed-Size: 83358
Section: default
Priority: extra
Homepage: http://rocksdb.org/
Description: RocksDB is an embeddable persistent key-value store for fast storage.
```
Example output on CentOS 6.5:
```
[root@localhost vagrant]# rpm -qip rocksdb-3.5-1.x86_64.rpm
Name : rocksdb Relocations: /usr
Version : 3.5 Vendor: Facebook
Release : 1 Build Date: Mon 29 Sep 2014 01:26:11 AM UTC
Install Date: (not installed) Build Host: localhost
Group : default Source RPM: rocksdb-3.5-1.src.rpm
Size : 96231106 License: BSD
Signature : (none)
Packager : rocksdb@fb.com
URL : http://rocksdb.org/
Summary : RocksDB is an embeddable persistent key-value store for fast storage.
Description :
RocksDB is an embeddable persistent key-value store for fast storage.
```
Test Plan:
How this gets used is really up to the RocksDB core team. If you
want to actually get this into mainline, you might have to change `make
install` such that it install the RocksDB shared object file as well, which
would require you to link against gflags (maybe?) and that would require some
potential modifications to the script here (basically add a depends on that
package).
Currently, this will install the headers and a pre-compiled statically linked
object file. If that's what you want out of life, than this requires no
modifications.
Reviewers: ljin, yhchiang, igor
Reviewed By: igor
Differential Revision: https://reviews.facebook.net/D24141
2014-09-30 01:09:46 +02:00
|
|
|
|
2013-08-14 22:29:05 +02:00
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Unit tests and tools
|
|
|
|
# ---------------------------------------------------------------------------
|
2011-05-28 02:53:58 +02:00
|
|
|
$(LIBRARY): $(LIBOBJECTS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_V_AR)rm -f $@
|
|
|
|
$(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIBOBJECTS)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2018-08-21 19:39:41 +02:00
|
|
|
$(TOOLS_LIBRARY): $(BENCH_LIB_SOURCES:.cc=.o) $(TOOL_LIB_SOURCES:.cc=.o) $(LIB_SOURCES:.cc=.o) $(TESTUTIL) $(ANALYZER_LIB_SOURCES:.cc=.o)
|
2016-05-28 02:25:02 +02:00
|
|
|
$(AM_V_AR)rm -f $@
|
|
|
|
$(AM_V_at)$(AR) $(ARFLAGS) $@ $^
|
|
|
|
|
2017-04-06 04:02:00 +02:00
|
|
|
librocksdb_env_basic_test.a: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2016-06-04 03:44:22 +02:00
|
|
|
$(AM_V_AR)rm -f $@
|
|
|
|
$(AM_V_at)$(AR) $(ARFLAGS) $@ $^
|
|
|
|
|
2016-02-16 15:17:31 +01:00
|
|
|
db_bench: tools/db_bench.o $(BENCHTOOLOBJECTS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2018-08-21 19:39:41 +02:00
|
|
|
trace_analyzer: tools/trace_analyzer.o $(ANALYZETOOLOBJECTS) $(LIBOBJECTS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-04-06 04:02:00 +02:00
|
|
|
cache_bench: cache/cache_bench.o $(LIBOBJECTS) $(TESTUTIL)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2016-05-05 20:50:30 +02:00
|
|
|
persistent_cache_bench: utilities/persistent_cache/persistent_cache_bench.o $(LIBOBJECTS) $(TESTUTIL)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-04-06 22:59:31 +02:00
|
|
|
memtablerep_bench: memtable/memtablerep_bench.o $(LIBOBJECTS) $(TESTUTIL)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
Memtablerep Benchmark
Summary:
Create a benchmark for testing memtablereps. This diff is a bit rough, but it should do the trick until other bootcampers can clean it up.
Addressing comments
Removed the mutexes
Changed ReadWriteBenchmark to fix number of reads and count the number of writes we can perform in that time.
Test Plan:
Run it.
Below runs pass
./memtablerep_bench --benchmarks fillrandom,readrandom --memtablerep skiplist
./memtablerep_bench --benchmarks fillseq,readseq --memtablerep skiplist
./memtablerep_bench --benchmarks readwrite,seqreadwrite --memtablerep skiplist --num_operations 200 --num_threads 5
./memtablerep_bench --benchmarks fillrandom,readrandom --memtablerep hashskiplist
./memtablerep_bench --benchmarks fillseq,readseq --memtablerep hashskiplist
--num_scans 2
./memtablerep_bench --benchmarks fillseq,readseq --memtablerep vector
Reviewers: jpaton, ikabiljo, sdong
Reviewed By: sdong
Subscribers: dhruba, ameyag
Differential Revision: https://reviews.facebook.net/D22683
2015-01-08 00:15:30 +01:00
|
|
|
|
2012-10-03 18:58:45 +02:00
|
|
|
db_stress: tools/db_stress.o $(LIBOBJECTS) $(TESTUTIL)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2012-10-03 18:58:45 +02:00
|
|
|
|
Write stress test
Summary:
The goal of this diff is to create a simple stress test with focus on catching:
* bugs in compaction/flush processes, especially the ones that cause assertion errors
* bugs in the code that deletes obsolete files
There are two parts of the test:
* write_stress, a binary that writes to the database
* write_stress_runner.py, a script that invokes and kills write_stress
Here are some interesting parts of write_stress:
* Runs with very high concurrency of compactions and flushes (32 threads total) and tries to create a huge amount of small files
* The keys written to the database are not uniformly distributed -- there is a 3-character prefix that mutates occasionally (in prefix mutator thread), in such a way that the first character mutates slower than second, which mutates slower than third character. That way, the compaction stress tests some interesting compaction features like trivial moves and bottommost level calculation
* There is a thread that creates an iterator, holds it for couple of seconds and then iterates over all keys. This is supposed to test RocksDB's abilities to keep the files alive when there are references to them.
* Some writes trigger WAL sync. This is stress testing our WAL sync code.
* At the end of the run, we make sure that we didn't leak any of the sst files
write_stress_runner.py changes the mode in which we run write_stress and also kills and restarts it. There are some interesting characteristics:
* At the beginning we divide the full test runtime into smaller parts -- shorter runtimes (couple of seconds) and longer runtimes (100, 1000) seconds
* The first time we run write_stress, we destroy the old DB. Every next time during the test, we use the same DB.
* We can run in kill mode or clean-restart mode. Kill mode kills the write_stress violently.
* We can run in mode where delete_obsolete_files_with_fullscan is true or false
* We can run with low_open_files mode turned on or off. When it's turned on, we configure table cache to only hold a couple of files -- that way we need to reopen files every time we access them.
Another goal was to create a stress test without a lot of parameters. So tools/write_stress_runner.py should only take one parameter -- runtime_sec and it should figure out everything else on its own.
In a separate diff, I'll add this new test to our nightly legocastle runs.
Test Plan:
The goal of this test was to retroactively catch the following bugs: D33045, D48201, D46899, D42399. I failed to reproduce D48201, but all others have been caught!
When i reverted https://reviews.facebook.net/D33045:
./write_stress --runtime_sec=200 --low_open_files_mode=true
Iterator statuts not OK: IO error: /fast-rocksdb-tmp/rocksdb_test/write_stress/089166.sst: No such file or directory
When i reverted https://reviews.facebook.net/D42399:
python tools/write_stress_runner.py --runtime_sec=5000
Running write_stress, will kill after 5 seconds: ./write_stress --runtime_sec=-1
Running write_stress, will kill after 2 seconds: ./write_stress --runtime_sec=-1 --destroy_db=false --delete_obsolete_files_with_fullscan=true
Running write_stress, will kill after 7 seconds: ./write_stress --runtime_sec=-1 --destroy_db=false
Running write_stress, will kill after 5 seconds: ./write_stress --runtime_sec=-1 --destroy_db=false
Running write_stress, will kill after 8 seconds: ./write_stress --runtime_sec=-1 --destroy_db=false --low_open_files_mode=true
Write to DB failed: IO error: /fast-rocksdb-tmp/rocksdb_test/write_stress/019250.sst: No such file or directory
ERROR: write_stress died with exitcode=-6
When i reverted https://reviews.facebook.net/D46899:
python tools/write_stress_runner.py --runtime_sec=1000
runtime: 1000
Going to execute write stress for [3, 3, 100, 3, 2, 100, 1, 788]
Running write_stress for 3 seconds: ./write_stress --runtime_sec=3 --low_open_files_mode=true
Running write_stress for 3 seconds: ./write_stress --runtime_sec=3 --destroy_db=false --delete_obsolete_files_with_fullscan=true
Running write_stress, will kill after 100 seconds: ./write_stress --runtime_sec=-1 --destroy_db=false --delete_obsolete_files_with_fullscan=true
write_stress: db/db_impl.cc:2070: void rocksdb::DBImpl::MarkLogsSynced(uint64_t, bool, const rocksdb::Status&): Assertion `log.getting_synced' failed.
ERROR: write_stress died with exitcode=-6
Reviewers: IslamAbdelRahman, yhchiang, rven, kradhakrishnan, sdong, anthony
Reviewed By: anthony
Subscribers: leveldb, dhruba
Differential Revision: https://reviews.facebook.net/D49533
2015-10-29 00:15:07 +01:00
|
|
|
write_stress: tools/write_stress.o $(LIBOBJECTS) $(TESTUTIL)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2014-03-06 20:36:39 +01:00
|
|
|
db_sanity_test: tools/db_sanity_test.o $(LIBOBJECTS) $(TESTUTIL)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2012-10-03 18:58:45 +02:00
|
|
|
|
2012-12-11 20:57:35 +01:00
|
|
|
db_repl_stress: tools/db_repl_stress.o $(LIBOBJECTS) $(TESTUTIL)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2012-12-11 20:57:35 +01:00
|
|
|
|
2011-03-18 23:37:00 +01:00
|
|
|
arena_test: util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2013-12-13 00:32:56 +01:00
|
|
|
autovector_test: util/autovector_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2013-12-13 00:32:56 +01:00
|
|
|
|
2016-08-04 02:42:06 +02:00
|
|
|
column_family_test: db/column_family_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2014-01-02 18:08:12 +01:00
|
|
|
|
2013-11-20 01:29:42 +01:00
|
|
|
table_properties_collector_test: db/table_properties_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2013-10-16 20:50:50 +02:00
|
|
|
|
2012-04-17 17:36:46 +02:00
|
|
|
bloom_test: util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2012-04-17 17:36:46 +02:00
|
|
|
|
2013-11-27 23:27:02 +01:00
|
|
|
dynamic_bloom_test: util/dynamic_bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2013-11-27 23:27:02 +01:00
|
|
|
|
2011-08-05 22:40:49 +02:00
|
|
|
c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2011-08-05 22:40:49 +02:00
|
|
|
|
2017-04-06 04:02:00 +02:00
|
|
|
cache_test: cache/cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
|
|
|
coding_test: util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2017-07-10 21:22:26 +02:00
|
|
|
hash_test: util/hash_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2016-07-14 06:08:15 +02:00
|
|
|
option_change_migration_test: utilities/option_change_migration/option_change_migration_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2013-05-10 19:40:10 +02:00
|
|
|
stringappend_test: utilities/merge_operators/string_append/stringappend_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2013-05-10 19:40:10 +02:00
|
|
|
|
2017-07-21 23:42:32 +02:00
|
|
|
cassandra_format_test: utilities/cassandra/cassandra_format_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
|
2017-06-16 23:12:52 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-07-21 23:42:32 +02:00
|
|
|
cassandra_functional_test: utilities/cassandra/cassandra_functional_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
|
2017-06-16 23:12:52 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-07-21 23:42:32 +02:00
|
|
|
cassandra_row_merge_test: utilities/cassandra/cassandra_row_merge_test.o utilities/cassandra/test_utils.o $(LIBOBJECTS) $(TESTHARNESS)
|
2017-06-16 23:12:52 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-07-21 23:42:32 +02:00
|
|
|
cassandra_serialize_test: utilities/cassandra/cassandra_serialize_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2017-06-16 23:12:52 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2013-06-11 20:19:49 +02:00
|
|
|
redis_test: utilities/redis/redis_lists_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2013-06-11 20:19:49 +02:00
|
|
|
|
2016-03-18 23:50:34 +01:00
|
|
|
hash_table_test: utilities/persistent_cache/hash_table_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-04-06 04:02:00 +02:00
|
|
|
histogram_test: monitoring/histogram_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2013-01-29 21:23:31 +01:00
|
|
|
|
2014-02-26 02:47:37 +01:00
|
|
|
thread_local_test: util/thread_local_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2014-02-26 02:47:37 +01:00
|
|
|
|
2011-03-18 23:37:00 +01:00
|
|
|
corruption_test: db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
|
|
|
crc32c_test: util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2015-01-21 20:09:56 +01:00
|
|
|
slice_transform_test: util/slice_transform_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2015-01-21 20:09:56 +01:00
|
|
|
|
2017-02-27 21:19:23 +01:00
|
|
|
db_basic_test: db/db_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
2017-06-27 01:52:06 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
|
|
|
db_encryption_test: db/db_encryption_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
2017-02-27 21:19:23 +01:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-10-12 22:05:42 +02:00
|
|
|
db_test: db/db_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:40:41 +02:00
|
|
|
$(AM_LINK)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2016-03-01 03:38:03 +01:00
|
|
|
db_test2: db/db_test2.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-10-03 18:08:07 +02:00
|
|
|
db_blob_index_test: db/db_blob_index_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2016-03-11 02:35:19 +01:00
|
|
|
db_block_cache_test: db/db_block_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2016-04-18 18:42:50 +02:00
|
|
|
db_bloom_filter_test: db/db_bloom_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-10-12 22:05:42 +02:00
|
|
|
db_log_iter_test: db/db_log_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 01:18:35 +02:00
|
|
|
$(AM_LINK)
|
2015-07-21 01:05:28 +02:00
|
|
|
|
2015-10-12 22:05:42 +02:00
|
|
|
db_compaction_filter_test: db/db_compaction_filter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-14 04:00:30 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-10-12 22:05:42 +02:00
|
|
|
db_compaction_test: db/db_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 12:05:57 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-10-12 22:05:42 +02:00
|
|
|
db_dynamic_level_test: db/db_dynamic_level_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 00:51:33 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
Fix flush not being commit while writing manifest
Summary:
Fix flush not being commit while writing manifest, which is a recent bug introduced by D60075.
The issue:
# Options.max_background_flushes > 1
# Background thread A pick up a flush job, flush, then commit to manifest. (Note that mutex is released before writing manifest.)
# Background thread B pick up another flush job, flush. When it gets to `MemTableList::InstallMemtableFlushResults`, it notices another thread is commiting, so it quit.
# After the first commit, thread A doesn't double check if there are more flush result need to commit, leaving the second flush uncommitted.
Test Plan: run the test. Also verify the new test hit deadlock without the fix.
Reviewers: sdong, igor, lightmark
Reviewed By: lightmark
Subscribers: andrewkr, omegaga, dhruba, leveldb
Differential Revision: https://reviews.facebook.net/D60969
2016-07-21 19:10:41 +02:00
|
|
|
db_flush_test: db/db_flush_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-10-12 22:05:42 +02:00
|
|
|
db_inplace_update_test: db/db_inplace_update_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-21 02:19:37 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2016-04-18 18:42:50 +02:00
|
|
|
db_iterator_test: db/db_iterator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2016-11-14 03:58:17 +01:00
|
|
|
db_memtable_test: db/db_memtable_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2016-12-16 20:00:03 +01:00
|
|
|
db_merge_operator_test: db/db_merge_operator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2016-07-13 00:30:38 +02:00
|
|
|
db_options_test: db/db_options_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2016-11-29 19:56:05 +01:00
|
|
|
db_range_del_test: db/db_range_del_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2016-04-18 18:42:50 +02:00
|
|
|
db_sst_test: db/db_sst_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-04-26 23:18:58 +02:00
|
|
|
db_statistics_test: db/db_statistics_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-05-31 19:45:47 +02:00
|
|
|
db_write_test: db/db_write_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2018-06-28 21:23:57 +02:00
|
|
|
error_handler_test: db/error_handler_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-02-28 23:11:01 +01:00
|
|
|
external_sst_file_basic_test: db/external_sst_file_basic_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2016-09-08 00:41:54 +02:00
|
|
|
external_sst_file_test: db/external_sst_file_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-10-12 22:05:42 +02:00
|
|
|
db_tailing_iter_test: db/db_tailing_iter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-15 01:41:08 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2014-07-16 23:51:43 +02:00
|
|
|
db_iter_test: db/db_iter_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-07-16 23:51:43 +02:00
|
|
|
|
Change and clarify the relationship between Valid(), status() and Seek*() for all iterators. Also fix some bugs
Summary:
Before this PR, Iterator/InternalIterator may simultaneously have non-ok status() and Valid() = true. That state means that the last operation failed, but the iterator is nevertheless positioned on some unspecified record. Likely intended uses of that are:
* If some sst files are corrupted, a normal iterator can be used to read the data from files that are not corrupted.
* When using read_tier = kBlockCacheTier, read the data that's in block cache, skipping over the data that is not.
However, this behavior wasn't documented well (and until recently the wiki on github had misleading incorrect information). In the code there's a lot of confusion about the relationship between status() and Valid(), and about whether Seek()/SeekToLast()/etc reset the status or not. There were a number of bugs caused by this confusion, both inside rocksdb and in the code that uses rocksdb (including ours).
This PR changes the convention to:
* If status() is not ok, Valid() always returns false.
* Any seek operation resets status. (Before the PR, it depended on iterator type and on particular error.)
This does sacrifice the two use cases listed above, but siying said it's ok.
Overview of the changes:
* A commit that adds missing status checks in MergingIterator. This fixes a bug that actually affects us, and we need it fixed. `DBIteratorTest.NonBlockingIterationBugRepro` explains the scenario.
* Changes to lots of iterator types to make all of them conform to the new convention. Some bug fixes along the way. By far the biggest changes are in DBIter, which is a big messy piece of code; I tried to make it less big and messy but mostly failed.
* A stress-test for DBIter, to gain some confidence that I didn't break it. It does a few million random operations on the iterator, while occasionally modifying the underlying data (like ForwardIterator does) and occasionally returning non-ok status from internal iterator.
To find the iterator types that needed changes I searched for "public .*Iterator" in the code. Here's an overview of all 27 iterator types:
Iterators that didn't need changes:
* status() is always ok(), or Valid() is always false: MemTableIterator, ModelIter, TestIterator, KVIter (2 classes with this name anonymous namespaces), LoggingForwardVectorIterator, VectorIterator, MockTableIterator, EmptyIterator, EmptyInternalIterator.
* Thin wrappers that always pass through Valid() and status(): ArenaWrappedDBIter, TtlIterator, InternalIteratorFromIterator.
Iterators with changes (see inline comments for details):
* DBIter - an overhaul:
- It used to silently skip corrupted keys (`FindParseableKey()`), which seems dangerous. This PR makes it just stop immediately after encountering a corrupted key, just like it would for other kinds of corruption. Let me know if there was actually some deeper meaning in this behavior and I should put it back.
- It had a few code paths silently discarding subiterator's status. The stress test caught a few.
- The backwards iteration code path was expecting the internal iterator's set of keys to be immutable. It's probably always true in practice at the moment, since ForwardIterator doesn't support backwards iteration, but this PR fixes it anyway. See added DBIteratorTest.ReverseToForwardBug for an example.
- Some parts of backwards iteration code path even did things like `assert(iter_->Valid())` after a seek, which is never a safe assumption.
- It used to not reset status on seek for some types of errors.
- Some simplifications and better comments.
- Some things got more complicated from the added error handling. I'm open to ideas for how to make it nicer.
* MergingIterator - check status after every operation on every subiterator, and in some places assert that valid subiterators have ok status.
* ForwardIterator - changed to the new convention, also slightly simplified.
* ForwardLevelIterator - fixed some bugs and simplified.
* LevelIterator - simplified.
* TwoLevelIterator - changed to the new convention. Also fixed a bug that would make SeekForPrev() sometimes silently ignore errors from first_level_iter_.
* BlockBasedTableIterator - minor changes.
* BlockIter - replaced `SetStatus()` with `Invalidate()` to make sure non-ok BlockIter is always invalid.
* PlainTableIterator - some seeks used to not reset status.
* CuckooTableIterator - tiny code cleanup.
* ManagedIterator - fixed some bugs.
* BaseDeltaIterator - changed to the new convention and fixed a bug.
* BlobDBIterator - seeks used to not reset status.
* KeyConvertingIterator - some small change.
Closes https://github.com/facebook/rocksdb/pull/3810
Differential Revision: D7888019
Pulled By: al13n321
fbshipit-source-id: 4aaf6d3421c545d16722a815b2fa2e7912bc851d
2018-05-17 11:44:14 +02:00
|
|
|
db_iter_stress_test: db/db_iter_stress_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-10-12 22:05:42 +02:00
|
|
|
db_universal_compaction_test: db/db_universal_compaction_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-07-15 03:24:45 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-10-12 22:05:42 +02:00
|
|
|
db_wal_test: db/db_wal_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-08-05 20:56:19 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2016-05-19 02:09:20 +02:00
|
|
|
db_io_failure_test: db/db_io_failure_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2016-01-21 00:17:52 +01:00
|
|
|
db_properties_test: db/db_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-10-13 23:24:45 +02:00
|
|
|
db_table_properties_test: db/db_table_properties_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2014-04-21 22:01:50 +02:00
|
|
|
log_write_bench: util/log_write_bench.o $(LIBOBJECTS) $(TESTHARNESS)
|
2016-04-23 01:49:12 +02:00
|
|
|
$(AM_LINK) $(PROFILING_FLAGS)
|
2014-02-19 23:55:34 +01:00
|
|
|
|
2013-10-29 04:34:02 +01:00
|
|
|
plain_table_db_test: db/plain_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2013-10-29 04:34:02 +01:00
|
|
|
|
2014-10-29 21:49:45 +01:00
|
|
|
comparator_db_test: db/comparator_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-10-29 21:49:45 +01:00
|
|
|
|
2014-04-21 22:01:50 +02:00
|
|
|
table_reader_bench: table/table_reader_bench.o $(LIBOBJECTS) $(TESTHARNESS)
|
2016-04-23 01:49:12 +02:00
|
|
|
$(AM_LINK) $(PROFILING_FLAGS)
|
2013-10-31 21:38:54 +01:00
|
|
|
|
2013-08-13 08:59:04 +02:00
|
|
|
perf_context_test: db/perf_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
build: make "make" output readable by default
Summary:
With this change, make now prints a summary line for each
compiler and linker invocation, e.g.,:
CC db/builder.o
CC db/c.o
CC db/column_family.o
To see full commands, insert "V=1" into your make command.
E.g., run "make V=1 all" if you want it to print each command
in its full glory.
$^ is GNU make's abbreviation for the prerequisites of the current target.
These AM_V_... variables expand to some very short string like "CC" or
"LD", by default, so that the output of "make" is readable. If/when you
want more details, just build with "make V=1 ...", and make will print
each full command as it is executed. If you prefer to see the noise
all the time, and only want to optionally see the abbreviated output,
set AM_DEFAULT_VERBOSITY=1 in your environment, and then build with
V=0 to see the abbreviated command indicators.
Test Plan:
invoke make a few different ways and observe:
make clean; make # abbreviated
make clean; make V=0 # also abbreviated
make clean; make V=1 # full detail
Reviewers: sdong, ljin, igor
Reviewed By: igor
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D33579
2015-02-18 20:42:54 +01:00
|
|
|
$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
|
2013-08-13 08:59:04 +02:00
|
|
|
|
2013-10-23 06:59:44 +02:00
|
|
|
prefix_test: db/prefix_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
build: make "make" output readable by default
Summary:
With this change, make now prints a summary line for each
compiler and linker invocation, e.g.,:
CC db/builder.o
CC db/c.o
CC db/column_family.o
To see full commands, insert "V=1" into your make command.
E.g., run "make V=1 all" if you want it to print each command
in its full glory.
$^ is GNU make's abbreviation for the prerequisites of the current target.
These AM_V_... variables expand to some very short string like "CC" or
"LD", by default, so that the output of "make" is readable. If/when you
want more details, just build with "make V=1 ...", and make will print
each full command as it is executed. If you prefer to see the noise
all the time, and only want to optionally see the abbreviated output,
set AM_DEFAULT_VERBOSITY=1 in your environment, and then build with
V=0 to see the abbreviated command indicators.
Test Plan:
invoke make a few different ways and observe:
make clean; make # abbreviated
make clean; make V=0 # also abbreviated
make clean; make V=1 # full detail
Reviewers: sdong, ljin, igor
Reviewed By: igor
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D33579
2015-02-18 20:42:54 +01:00
|
|
|
$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
|
2013-10-23 06:59:44 +02:00
|
|
|
|
[RocksDB] BackupableDB
Summary:
In this diff I present you BackupableDB v1. You can easily use it to backup your DB and it will do incremental snapshots for you.
Let's first describe how you would use BackupableDB. It's inheriting StackableDB interface so you can easily construct it with your DB object -- it will add a method RollTheSnapshot() to the DB object. When you call RollTheSnapshot(), current snapshot of the DB will be stored in the backup dir. To restore, you can just call RestoreDBFromBackup() on a BackupableDB (which is a static method) and it will restore all files from the backup dir. In the next version, it will even support automatic backuping every X minutes.
There are multiple things you can configure:
1. backup_env and db_env can be different, which is awesome because then you can easily backup to HDFS or wherever you feel like.
2. sync - if true, it *guarantees* backup consistency on machine reboot
3. number of snapshots to keep - this will keep last N snapshots around if you want, for some reason, be able to restore from an earlier snapshot. All the backuping is done in incremental fashion - if we already have 00010.sst, we will not copy it again. *IMPORTANT* -- This is based on assumption that 00010.sst never changes - two files named 00010.sst from the same DB will always be exactly the same. Is this true? I always copy manifest, current and log files.
4. You can decide if you want to flush the memtables before you backup, or you're fine with backing up the log files -- either way, you get a complete and consistent view of the database at a time of backup.
5. More things you can find in BackupableDBOptions
Here is the directory structure I use:
backup_dir/CURRENT_SNAPSHOT - just 4 bytes holding the latest snapshot
0, 1, 2, ... - files containing serialized version of each snapshot - containing a list of files
files/*.sst - sst files shared between snapshots - if one snapshot references 00010.sst and another one needs to backup it from the DB, it will just reference the same file
files/ 0/, 1/, 2/, ... - snapshot directories containing private snapshot files - current, manifest and log files
All the files are ref counted and deleted immediatelly when they get out of scope.
Some other stuff in this diff:
1. Added GetEnv() method to the DB. Discussed with @haobo and we agreed that it seems right thing to do.
2. Fixed StackableDB interface. The way it was set up before, I was not able to implement BackupableDB.
Test Plan:
I have a unittest, but please don't look at this yet. I just hacked it up to help me with debugging. I will write a lot of good tests and update the diff.
Also, `make asan_check`
Reviewers: dhruba, haobo, emayanke
Reviewed By: dhruba
CC: leveldb, haobo
Differential Revision: https://reviews.facebook.net/D14295
2013-12-09 23:06:52 +01:00
|
|
|
backupable_db_test: utilities/backupable/backupable_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
[RocksDB] BackupableDB
Summary:
In this diff I present you BackupableDB v1. You can easily use it to backup your DB and it will do incremental snapshots for you.
Let's first describe how you would use BackupableDB. It's inheriting StackableDB interface so you can easily construct it with your DB object -- it will add a method RollTheSnapshot() to the DB object. When you call RollTheSnapshot(), current snapshot of the DB will be stored in the backup dir. To restore, you can just call RestoreDBFromBackup() on a BackupableDB (which is a static method) and it will restore all files from the backup dir. In the next version, it will even support automatic backuping every X minutes.
There are multiple things you can configure:
1. backup_env and db_env can be different, which is awesome because then you can easily backup to HDFS or wherever you feel like.
2. sync - if true, it *guarantees* backup consistency on machine reboot
3. number of snapshots to keep - this will keep last N snapshots around if you want, for some reason, be able to restore from an earlier snapshot. All the backuping is done in incremental fashion - if we already have 00010.sst, we will not copy it again. *IMPORTANT* -- This is based on assumption that 00010.sst never changes - two files named 00010.sst from the same DB will always be exactly the same. Is this true? I always copy manifest, current and log files.
4. You can decide if you want to flush the memtables before you backup, or you're fine with backing up the log files -- either way, you get a complete and consistent view of the database at a time of backup.
5. More things you can find in BackupableDBOptions
Here is the directory structure I use:
backup_dir/CURRENT_SNAPSHOT - just 4 bytes holding the latest snapshot
0, 1, 2, ... - files containing serialized version of each snapshot - containing a list of files
files/*.sst - sst files shared between snapshots - if one snapshot references 00010.sst and another one needs to backup it from the DB, it will just reference the same file
files/ 0/, 1/, 2/, ... - snapshot directories containing private snapshot files - current, manifest and log files
All the files are ref counted and deleted immediatelly when they get out of scope.
Some other stuff in this diff:
1. Added GetEnv() method to the DB. Discussed with @haobo and we agreed that it seems right thing to do.
2. Fixed StackableDB interface. The way it was set up before, I was not able to implement BackupableDB.
Test Plan:
I have a unittest, but please don't look at this yet. I just hacked it up to help me with debugging. I will write a lot of good tests and update the diff.
Also, `make asan_check`
Reviewers: dhruba, haobo, emayanke
Reviewed By: dhruba
CC: leveldb, haobo
Differential Revision: https://reviews.facebook.net/D14295
2013-12-09 23:06:52 +01:00
|
|
|
|
2015-06-20 01:08:31 +02:00
|
|
|
checkpoint_test: utilities/checkpoint/checkpoint_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2014-07-10 18:31:42 +02:00
|
|
|
document_db_test: utilities/document/document_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-07-10 18:31:42 +02:00
|
|
|
|
2014-06-20 11:14:14 +02:00
|
|
|
json_document_test: utilities/document/json_document_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-06-20 11:14:14 +02:00
|
|
|
|
2016-05-24 08:35:23 +02:00
|
|
|
sim_cache_test: utilities/simulator_cache/sim_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
SpatialDB
Summary:
This diff is adding spatial index support to RocksDB.
When creating the DB user specifies a list of spatial indexes. Spatial indexes can cover different areas and have different resolution (i.e. number of tiles). This is useful for supporting different zoom levels.
Each element inserted into SpatialDB has:
* a bounding box, which determines how will the element be indexed
* string blob, which will usually be WKB representation of the polygon (http://en.wikipedia.org/wiki/Well-known_text)
* feature set, which is a map of key-value pairs, where value can be int, double, bool, null or a string. FeatureSet will be a set of tags associated with geo elements (for example, 'road': 'highway' and similar)
* a list of indexes to insert the element in. For example, small river element will be inserted in index for high zoom level, while country border will be inserted in all indexes (including the index for low zoom level).
Each query is executed on single spatial index. Query guarantees that it will return all elements intersecting the specified bounding box, but it might also return some extra non-intersecting elements.
Test Plan: Added bunch of unit tests in spatial_db_test
Reviewers: dhruba, yinwang
Reviewed By: yinwang
Subscribers: leveldb
Differential Revision: https://reviews.facebook.net/D20361
2014-07-23 20:22:58 +02:00
|
|
|
spatial_db_test: utilities/spatialdb/spatial_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
SpatialDB
Summary:
This diff is adding spatial index support to RocksDB.
When creating the DB user specifies a list of spatial indexes. Spatial indexes can cover different areas and have different resolution (i.e. number of tiles). This is useful for supporting different zoom levels.
Each element inserted into SpatialDB has:
* a bounding box, which determines how will the element be indexed
* string blob, which will usually be WKB representation of the polygon (http://en.wikipedia.org/wiki/Well-known_text)
* feature set, which is a map of key-value pairs, where value can be int, double, bool, null or a string. FeatureSet will be a set of tags associated with geo elements (for example, 'road': 'highway' and similar)
* a list of indexes to insert the element in. For example, small river element will be inserted in index for high zoom level, while country border will be inserted in all indexes (including the index for low zoom level).
Each query is executed on single spatial index. Query guarantees that it will return all elements intersecting the specified bounding box, but it might also return some extra non-intersecting elements.
Test Plan: Added bunch of unit tests in spatial_db_test
Reviewers: dhruba, yinwang
Reviewed By: yinwang
Subscribers: leveldb
Differential Revision: https://reviews.facebook.net/D20361
2014-07-23 20:22:58 +02:00
|
|
|
|
2015-12-11 03:32:45 +01:00
|
|
|
env_mirror_test: utilities/env_mirror_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-04-04 20:12:47 +02:00
|
|
|
env_timed_test: utilities/env_timed_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
Add EnvLibrados - RocksDB Env of RADOS (#1222)
EnvLibrados is a customized RocksDB Env to use RADOS as the backend file system of RocksDB. It overrides all file system related API of default Env. The easiest way to use it is just like following:
std::string db_name = "test_db";
std::string config_path = "path/to/ceph/config";
DB* db;
Options options;
options.env = EnvLibrados(db_name, config_path);
Status s = DB::Open(options, kDBPath, &db);
Then EnvLibrados will forward all file read/write operation to the RADOS cluster assigned by config_path. Default pool is db_name+"_pool".
There are some options that users could set for EnvLibrados.
- write_buffer_size. This variable is the max buffer size for WritableFile. After reaching the buffer_max_size, EnvLibrados will sync buffer content to RADOS, then clear buffer.
- db_pool. Rather than using default pool, users could set their own db pool name
- wal_dir. The dir for WAL files. Because RocksDB only has 2-level structure (dir_name/file_name), the format of wal_dir is "/dir_name"(CAN'T be "/dir1/dir2"). Default wal_dir is "/wal".
- wal_pool. Corresponding pool name for WAL files. Default value is db_name+"_wal_pool"
The example of setting options looks like following:
db_name = "test_db";
db_pool = db_name+"_pool";
wal_dir = "/wal";
wal_pool = db_name+"_wal_pool";
write_buffer_size = 1 << 20;
env_ = new EnvLibrados(db_name, config, db_pool, wal_dir, wal_pool, write_buffer_size);
DB* db;
Options options;
options.env = env_;
// The last level dir name should match the dir name in prefix_pool_map
options.wal_dir = "/tmp/wal";
// open DB
Status s = DB::Open(options, kDBPath, &db);
Librados is required to compile EnvLibrados. Then use "$make LIBRADOS=1" to compile RocksDB. If you want to only compile EnvLibrados test, just run "$ make env_librados_test LIBRADOS=1". To run env_librados_test, you need to have a running RADOS cluster with the configure file located in "../ceph/src/ceph.conf" related to "rocksdb/".
2016-07-21 20:16:34 +02:00
|
|
|
ifdef ROCKSDB_USE_LIBRADOS
|
|
|
|
env_librados_test: utilities/env_librados_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS) $(COVERAGEFLAGS)
|
|
|
|
endif
|
|
|
|
|
2017-01-26 00:54:09 +01:00
|
|
|
object_registry_test: utilities/object_registry_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2016-06-03 17:15:16 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
Timestamp and TTL Wrapper for rocksdb
Summary:
When opened with DBTimestamp::Open call, timestamps are prepended to and stripped from the value during subsequent Put and Get calls respectively. The Timestamp is used to discard values in Get and custom compaction filter which have exceeded their TTL which is specified during Open.
Have made a temporary change to Makefile to let us test with the temporary file TestTime.cc. Have also changed the private members of db_impl.h to protected to let them be inherited by the new class DBTimestamp
Test Plan: make db_timestamp; TestTime.cc(will not check it in) shows how to use the apis currently, but I will write unit-tests shortly
Reviewers: dhruba, vamsi, haobo, sheki, heyongqiang, vkrest
Reviewed By: vamsi
CC: zshao, xjin, vkrest, MarkCallaghan
Differential Revision: https://reviews.facebook.net/D10311
2013-04-15 22:33:13 +02:00
|
|
|
ttl_test: utilities/ttl/ttl_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
Timestamp and TTL Wrapper for rocksdb
Summary:
When opened with DBTimestamp::Open call, timestamps are prepended to and stripped from the value during subsequent Put and Get calls respectively. The Timestamp is used to discard values in Get and custom compaction filter which have exceeded their TTL which is specified during Open.
Have made a temporary change to Makefile to let us test with the temporary file TestTime.cc. Have also changed the private members of db_impl.h to protected to let them be inherited by the new class DBTimestamp
Test Plan: make db_timestamp; TestTime.cc(will not check it in) shows how to use the apis currently, but I will write unit-tests shortly
Reviewers: dhruba, vamsi, haobo, sheki, heyongqiang, vkrest
Reviewed By: vamsi
CC: zshao, xjin, vkrest, MarkCallaghan
Differential Revision: https://reviews.facebook.net/D10311
2013-04-15 22:33:13 +02:00
|
|
|
|
2016-08-06 00:56:22 +02:00
|
|
|
date_tiered_test: utilities/date_tiered/date_tiered_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2014-08-19 00:19:17 +02:00
|
|
|
write_batch_with_index_test: utilities/write_batch_with_index/write_batch_with_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
Timestamp and TTL Wrapper for rocksdb
Summary:
When opened with DBTimestamp::Open call, timestamps are prepended to and stripped from the value during subsequent Put and Get calls respectively. The Timestamp is used to discard values in Get and custom compaction filter which have exceeded their TTL which is specified during Open.
Have made a temporary change to Makefile to let us test with the temporary file TestTime.cc. Have also changed the private members of db_impl.h to protected to let them be inherited by the new class DBTimestamp
Test Plan: make db_timestamp; TestTime.cc(will not check it in) shows how to use the apis currently, but I will write unit-tests shortly
Reviewers: dhruba, vamsi, haobo, sheki, heyongqiang, vkrest
Reviewed By: vamsi
CC: zshao, xjin, vkrest, MarkCallaghan
Differential Revision: https://reviews.facebook.net/D10311
2013-04-15 22:33:13 +02:00
|
|
|
|
2014-10-28 19:54:33 +01:00
|
|
|
flush_job_test: db/flush_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
Support for SingleDelete()
Summary:
This patch fixes #7460559. It introduces SingleDelete as a new database
operation. This operation can be used to delete keys that were never
overwritten (no put following another put of the same key). If an overwritten
key is single deleted the behavior is undefined. Single deletion of a
non-existent key has no effect but multiple consecutive single deletions are
not allowed (see limitations).
In contrast to the conventional Delete() operation, the deletion entry is
removed along with the value when the two are lined up in a compaction. Note:
The semantics are similar to @igor's prototype that allowed to have this
behavior on the granularity of a column family (
https://reviews.facebook.net/D42093 ). This new patch, however, is more
aggressive when it comes to removing tombstones: It removes the SingleDelete
together with the value whenever there is no snapshot between them while the
older patch only did this when the sequence number of the deletion was older
than the earliest snapshot.
Most of the complex additions are in the Compaction Iterator, all other changes
should be relatively straightforward. The patch also includes basic support for
single deletions in db_stress and db_bench.
Limitations:
- Not compatible with cuckoo hash tables
- Single deletions cannot be used in combination with merges and normal
deletions on the same key (other keys are not affected by this)
- Consecutive single deletions are currently not allowed (and older version of
this patch supported this so it could be resurrected if needed)
Test Plan: make all check
Reviewers: yhchiang, sdong, rven, anthony, yoshinorim, igor
Reviewed By: igor
Subscribers: maykov, dhruba, leveldb
Differential Revision: https://reviews.facebook.net/D43179
2015-09-17 20:42:56 +02:00
|
|
|
|
|
|
|
compaction_iterator_test: db/compaction_iterator_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
2014-10-28 19:54:33 +01:00
|
|
|
|
2014-11-14 20:35:48 +01:00
|
|
|
compaction_job_test: db/compaction_job_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-11-14 20:35:48 +01:00
|
|
|
|
2015-06-03 02:07:16 +02:00
|
|
|
compaction_job_stats_test: db/compaction_job_stats_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-08-04 05:42:55 +02:00
|
|
|
compact_on_deletion_collector_test: utilities/table_properties_collectors/compact_on_deletion_collector_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2014-10-30 01:43:37 +01:00
|
|
|
wal_manager_test: db/wal_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-10-30 01:43:37 +01:00
|
|
|
|
2011-03-18 23:37:00 +01:00
|
|
|
dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2017-04-06 04:02:00 +02:00
|
|
|
env_basic_test: env/env_basic_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2016-06-04 00:13:03 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-04-06 04:02:00 +02:00
|
|
|
env_test: env/env_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2015-01-15 19:28:10 +01:00
|
|
|
fault_injection_test: db/fault_injection_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2015-01-15 19:28:10 +01:00
|
|
|
|
2017-10-05 04:02:22 +02:00
|
|
|
rate_limiter_test: util/rate_limiter_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
generic rate limiter
Summary:
A generic rate limiter that can be shared by threads and rocksdb
instances. Will use this to smooth out write traffic generated by
compaction and flush. This will help us get better p99 behavior on flash
storage.
Test Plan:
unit test output
==== Test RateLimiterTest.Rate
request size [1 - 1023], limit 10 KB/sec, actual rate: 10.374969 KB/sec, elapsed 2002265
request size [1 - 2047], limit 20 KB/sec, actual rate: 20.771242 KB/sec, elapsed 2002139
request size [1 - 4095], limit 40 KB/sec, actual rate: 41.285299 KB/sec, elapsed 2202424
request size [1 - 8191], limit 80 KB/sec, actual rate: 81.371605 KB/sec, elapsed 2402558
request size [1 - 16383], limit 160 KB/sec, actual rate: 162.541268 KB/sec, elapsed 3303500
Reviewers: yhchiang, igor, sdong
Reviewed By: sdong
Subscribers: leveldb
Differential Revision: https://reviews.facebook.net/D19359
2014-07-08 20:41:57 +02:00
|
|
|
|
2015-08-05 05:45:27 +02:00
|
|
|
delete_scheduler_test: util/delete_scheduler_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2011-03-18 23:37:00 +01:00
|
|
|
filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
RangeSync not to sync last 1MB of the file
Summary:
From other ones' investigation:
"sync_file_range() behavior highly depends on kernel version and filesystem.
xfs does neighbor page flushing outside of the specified ranges. For example, sync_file_range(fd, 8192, 16384) does not only trigger flushing page #3 to #4, but also flushing many more dirty pages (i.e. up to page#16)... Ranges of the sync_file_range() should be far enough from write() offset (at least 1MB)."
Test Plan: make all check
Reviewers: igor, rven, kradhakrishnan, yhchiang, IslamAbdelRahman, anthony
Reviewed By: anthony
Subscribers: yoshinorim, MarkCallaghan, sumeet, domas, dhruba, leveldb, ljin
Differential Revision: https://reviews.facebook.net/D15807
2015-07-20 23:46:15 +02:00
|
|
|
file_reader_writer_test: util/file_reader_writer_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2014-09-08 19:37:05 +02:00
|
|
|
block_based_filter_block_test: table/block_based_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-09-08 19:37:05 +02:00
|
|
|
|
|
|
|
full_filter_block_test: table/full_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2012-04-17 17:36:46 +02:00
|
|
|
|
2017-03-22 17:11:23 +01:00
|
|
|
partitioned_filter_block_test: table/partitioned_filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2011-03-18 23:37:00 +01:00
|
|
|
log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2016-12-30 00:48:24 +01:00
|
|
|
$(AM_LINK)
|
|
|
|
|
|
|
|
cleanable_test: table/cleanable_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
|
|
|
table_test: table/table_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2012-12-20 20:05:41 +01:00
|
|
|
block_test: table/block_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2012-12-20 20:05:41 +01:00
|
|
|
|
2018-07-24 20:42:19 +02:00
|
|
|
data_block_hash_index_test: table/data_block_hash_index_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-04-06 22:59:31 +02:00
|
|
|
inlineskiplist_test: memtable/inlineskiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-11-24 22:01:09 +01:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-04-06 22:59:31 +02:00
|
|
|
skiplist_test: memtable/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2017-06-02 23:13:59 +02:00
|
|
|
write_buffer_manager_test: memtable/write_buffer_manager_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2011-03-18 23:37:00 +01:00
|
|
|
version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2011-06-22 04:36:45 +02:00
|
|
|
version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2011-06-22 04:36:45 +02:00
|
|
|
|
2014-10-27 23:49:46 +01:00
|
|
|
compaction_picker_test: db/compaction_picker_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-10-27 23:49:46 +01:00
|
|
|
|
2014-10-31 16:48:19 +01:00
|
|
|
version_builder_test: db/version_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-10-31 16:48:19 +01:00
|
|
|
|
build: make "make" output readable by default
Summary:
With this change, make now prints a summary line for each
compiler and linker invocation, e.g.,:
CC db/builder.o
CC db/c.o
CC db/column_family.o
To see full commands, insert "V=1" into your make command.
E.g., run "make V=1 all" if you want it to print each command
in its full glory.
$^ is GNU make's abbreviation for the prerequisites of the current target.
These AM_V_... variables expand to some very short string like "CC" or
"LD", by default, so that the output of "make" is readable. If/when you
want more details, just build with "make V=1 ...", and make will print
each full command as it is executed. If you prefer to see the noise
all the time, and only want to optionally see the abbreviated output,
set AM_DEFAULT_VERBOSITY=1 in your environment, and then build with
V=0 to see the abbreviated command indicators.
Test Plan:
invoke make a few different ways and observe:
make clean; make # abbreviated
make clean; make V=0 # also abbreviated
make clean; make V=1 # full detail
Reviewers: sdong, ljin, igor
Reviewed By: igor
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D33579
2015-02-18 20:42:54 +01:00
|
|
|
file_indexer_test: db/file_indexer_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
hints for narrowing down FindFile range and avoiding checking unrelevant L0 files
Summary:
The file tree structure in Version is prebuilt and the range of each file is known.
On the Get() code path, we do binary search in FindFile() by comparing
target key with each file's largest key and also check the range for each L0 file.
With some pre-calculated knowledge, each key comparision that has been done can serve
as a hint to narrow down further searches:
(1) If a key falls within a L0 file's range, we can safely skip the next
file if its range does not overlap with the current one.
(2) If a key falls within a file's range in level L0 - Ln-1, we should only
need to binary search in the next level for files that overlap with the current one.
(1) will be able to skip some files depending one the key distribution.
(2) can greatly reduce the range of binary search, especially for bottom
levels, given that one file most likely only overlaps with N files from
the level below (where N is max_bytes_for_level_multiplier). So on level
L, we will only look at ~N files instead of N^L files.
Some inital results: measured with 500M key DB, when write is light (10k/s = 1.2M/s), this
improves QPS ~7% on top of blocked bloom. When write is heavier (80k/s =
9.6M/s), it gives us ~13% improvement.
Test Plan: make all check
Reviewers: haobo, igor, dhruba, sdong, yhchiang
Reviewed By: haobo
CC: leveldb
Differential Revision: https://reviews.facebook.net/D17205
2014-04-21 18:10:12 +02:00
|
|
|
|
2014-04-15 20:28:52 +02:00
|
|
|
reduce_levels_test: tools/reduce_levels_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2012-10-31 19:47:18 +01:00
|
|
|
|
2011-03-18 23:37:00 +01:00
|
|
|
write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2013-03-21 23:59:47 +01:00
|
|
|
|
Push- instead of pull-model for managing Write stalls
Summary:
Introducing WriteController, which is a source of truth about per-DB write delays. Let's define an DB epoch as a period where there are no flushes and compactions (i.e. new epoch is started when flush or compaction finishes). Each epoch can either:
* proceed with all writes without delay
* delay all writes by fixed time
* stop all writes
The three modes are recomputed at each epoch change (flush, compaction), rather than on every write (which is currently the case).
When we have a lot of column families, our current pull behavior adds a big overhead, since we need to loop over every column family for every write. With new push model, overhead on Write code-path is minimal.
This is just the start. Next step is to also take care of stalls introduced by slow memtable flushes. The final goal is to eliminate function MakeRoomForWrite(), which currently needs to be called for every column family by every write.
Test Plan: make check for now. I'll add some unit tests later. Also, perf test.
Reviewers: dhruba, yhchiang, MarkCallaghan, sdong, ljin
Reviewed By: ljin
Subscribers: leveldb
Differential Revision: https://reviews.facebook.net/D22791
2014-09-08 20:20:25 +02:00
|
|
|
write_controller_test: db/write_controller_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
Push- instead of pull-model for managing Write stalls
Summary:
Introducing WriteController, which is a source of truth about per-DB write delays. Let's define an DB epoch as a period where there are no flushes and compactions (i.e. new epoch is started when flush or compaction finishes). Each epoch can either:
* proceed with all writes without delay
* delay all writes by fixed time
* stop all writes
The three modes are recomputed at each epoch change (flush, compaction), rather than on every write (which is currently the case).
When we have a lot of column families, our current pull behavior adds a big overhead, since we need to loop over every column family for every write. With new push model, overhead on Write code-path is minimal.
This is just the start. Next step is to also take care of stalls introduced by slow memtable flushes. The final goal is to eliminate function MakeRoomForWrite(), which currently needs to be called for every column family by every write.
Test Plan: make check for now. I'll add some unit tests later. Also, perf test.
Reviewers: dhruba, yhchiang, MarkCallaghan, sdong, ljin
Reviewed By: ljin
Subscribers: leveldb
Differential Revision: https://reviews.facebook.net/D22791
2014-09-08 20:20:25 +02:00
|
|
|
|
2015-07-17 18:27:24 +02:00
|
|
|
merge_helper_test: db/merge_helper_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-11-04 02:52:17 +01:00
|
|
|
memory_test: utilities/memory/memory_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2013-07-29 22:26:38 +02:00
|
|
|
merge_test: db/merge_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2011-03-18 23:37:00 +01:00
|
|
|
|
2014-09-09 07:24:40 +02:00
|
|
|
merger_test: table/merger_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-09-09 07:24:40 +02:00
|
|
|
|
2016-05-20 00:51:29 +02:00
|
|
|
util_merge_operators_test: utilities/util_merge_operators_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-11-11 07:58:01 +01:00
|
|
|
options_file_test: db/options_file_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2013-08-22 23:32:53 +02:00
|
|
|
deletefile_test: db/deletefile_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2013-08-22 23:32:53 +02:00
|
|
|
|
2018-03-28 19:23:31 +02:00
|
|
|
obsolete_files_test: db/obsolete_files_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2013-12-21 02:17:00 +01:00
|
|
|
geodb_test: utilities/geodb/geodb_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2013-12-21 02:17:00 +01:00
|
|
|
|
2015-06-20 01:24:36 +02:00
|
|
|
rocksdb_dump: tools/dump/rocksdb_dump.o $(LIBOBJECTS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
|
|
|
rocksdb_undump: tools/dump/rocksdb_undump.o $(LIBOBJECTS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2014-07-21 22:26:09 +02:00
|
|
|
cuckoo_table_builder_test: table/cuckoo_table_builder_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-07-21 22:26:09 +02:00
|
|
|
|
2015-04-13 19:17:42 +02:00
|
|
|
cuckoo_table_reader_test: table/cuckoo_table_reader_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-07-26 01:37:32 +02:00
|
|
|
|
2014-08-12 05:21:07 +02:00
|
|
|
cuckoo_table_db_test: db/cuckoo_table_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-08-12 05:21:07 +02:00
|
|
|
|
2015-12-14 22:36:32 +01:00
|
|
|
listener_test: db/listener_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
CompactFiles, EventListener and GetDatabaseMetaData
Summary:
This diff adds three sets of APIs to RocksDB.
= GetColumnFamilyMetaData =
* This APIs allow users to obtain the current state of a RocksDB instance on one column family.
* See GetColumnFamilyMetaData in include/rocksdb/db.h
= EventListener =
* A virtual class that allows users to implement a set of
call-back functions which will be called when specific
events of a RocksDB instance happens.
* To register EventListener, simply insert an EventListener to ColumnFamilyOptions::listeners
= CompactFiles =
* CompactFiles API inputs a set of file numbers and an output level, and RocksDB
will try to compact those files into the specified level.
= Example =
* Example code can be found in example/compact_files_example.cc, which implements
a simple external compactor using EventListener, GetColumnFamilyMetaData, and
CompactFiles API.
Test Plan:
listener_test
compactor_test
example/compact_files_example
export ROCKSDB_TESTS=CompactFiles
db_test
export ROCKSDB_TESTS=MetaData
db_test
Reviewers: ljin, igor, rven, sdong
Reviewed By: sdong
Subscribers: MarkCallaghan, dhruba, leveldb
Differential Revision: https://reviews.facebook.net/D24705
2014-11-07 23:45:18 +01:00
|
|
|
|
2014-11-20 19:49:32 +01:00
|
|
|
thread_list_test: util/thread_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-11-20 19:49:32 +01:00
|
|
|
|
2015-03-11 21:06:59 +01:00
|
|
|
compact_files_test: db/compact_files_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-04-06 04:02:00 +02:00
|
|
|
options_test: options/options_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2016-04-11 20:39:51 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-04-06 04:02:00 +02:00
|
|
|
options_settable_test: options/options_settable_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-05-16 19:35:41 +02:00
|
|
|
|
Add OptionsUtil::LoadOptionsFromFile() API
Summary:
This patch adds OptionsUtil::LoadOptionsFromFile() and
OptionsUtil::LoadLatestOptionsFromDB(), which allow developers
to construct DBOptions and ColumnFamilyOptions from a RocksDB
options file. Note that most pointer-typed options such as
merge_operator will not be constructed.
With this API, developers no longer need to remember all the
options in order to reopen an existing rocksdb instance like
the following:
DBOptions db_options;
std::vector<std::string> cf_names;
std::vector<ColumnFamilyOptions> cf_opts;
// Load primitive-typed options from an existing DB
OptionsUtil::LoadLatestOptionsFromDB(
dbname, &db_options, &cf_names, &cf_opts);
// Initialize necessary pointer-typed options
cf_opts[0].merge_operator.reset(new MyMergeOperator());
...
// Construct the vector of ColumnFamilyDescriptor
std::vector<ColumnFamilyDescriptor> cf_descs;
for (size_t i = 0; i < cf_opts.size(); ++i) {
cf_descs.emplace_back(cf_names[i], cf_opts[i]);
}
// Open the DB
DB* db = nullptr;
std::vector<ColumnFamilyHandle*> cf_handles;
auto s = DB::Open(db_options, dbname, cf_descs,
&handles, &db);
Test Plan:
Augment existing tests in column_family_test
options_test
db_test
Reviewers: igor, IslamAbdelRahman, sdong, anthony
Reviewed By: anthony
Subscribers: dhruba, leveldb
Differential Revision: https://reviews.facebook.net/D49095
2015-11-12 15:52:43 +01:00
|
|
|
options_util_test: utilities/options/options_util_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2016-06-03 01:24:14 +02:00
|
|
|
db_bench_tool_test: tools/db_bench_tool_test.o $(BENCHTOOLOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2018-08-21 19:39:41 +02:00
|
|
|
trace_analyzer_test: tools/trace_analyzer_test.o $(LIBOBJECTS) $(ANALYZETOOLOBJECTS) $(TESTHARNESS)
|
RocksDB Trace Analyzer (#4091)
Summary:
A framework of trace analyzing for RocksDB
After collecting the trace by using the tool of [PR #3837](https://github.com/facebook/rocksdb/pull/3837). User can use the Trace Analyzer to interpret, analyze, and characterize the collected workload.
**Input:**
1. trace file
2. Whole keys space file
**Statistics:**
1. Access count of each operation (Get, Put, Delete, SingleDelete, DeleteRange, Merge) in each column family.
2. Key hotness (access count) of each one
3. Key space separation based on given prefix
4. Key size distribution
5. Value size distribution if appliable
6. Top K accessed keys
7. QPS statistics including the average QPS and peak QPS
8. Top K accessed prefix
9. The query correlation analyzing, output the number of X after Y and the corresponding average time
intervals
**Output:**
1. key access heat map (either in the accessed key space or whole key space)
2. trace sequence file (interpret the raw trace file to line base text file for future use)
3. Time serial (The key space ID and its access time)
4. Key access count distritbution
5. Key size distribution
6. Value size distribution (in each intervals)
7. whole key space separation by the prefix
8. Accessed key space separation by the prefix
9. QPS of each operation and each column family
10. Top K QPS and their accessed prefix range
**Test:**
1. Added the unit test of analyzing Get, Put, Delete, SingleDelete, DeleteRange, Merge
2. Generated the trace and analyze the trace
**Implemented but not tested (due to the limitation of trace_replay):**
1. Analyzing Iterator, supporting Seek() and SeekForPrev() analyzing
2. Analyzing the number of Key found by Get
**Future Work:**
1. Support execution time analyzing of each requests
2. Support cache hit situation and block read situation of Get
Pull Request resolved: https://github.com/facebook/rocksdb/pull/4091
Differential Revision: D9256157
Pulled By: zhichao-cao
fbshipit-source-id: f0ceacb7eedbc43a3eee6e85b76087d7832a8fe6
2018-08-13 20:32:04 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
EventLogger
Summary:
Here's my proposal for making our LOGs easier to read by machines.
The idea is to dump all events as JSON objects. JSON is easy to read by humans, but more importantly, it's easy to read by machines. That way, we can parse this, load into SQLite/mongo and then query or visualize.
I started with table_create and table_delete events, but if everybody agrees, I'll continue by adding more events (flush/compaction/etc etc)
Test Plan:
Ran db_bench. Observed:
2015/01/15-14:13:25.788019 1105ef000 EVENT_LOG_v1 {"time_micros": 1421360005788015, "event": "table_file_creation", "file_number": 12, "file_size": 1909699}
2015/01/15-14:13:25.956500 110740000 EVENT_LOG_v1 {"time_micros": 1421360005956498, "event": "table_file_deletion", "file_number": 12}
Reviewers: yhchiang, rven, dhruba, MarkCallaghan, lgalanis, sdong
Reviewed By: sdong
Subscribers: dhruba, leveldb
Differential Revision: https://reviews.facebook.net/D31647
2015-03-13 18:15:54 +01:00
|
|
|
event_logger_test: util/event_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-05-10 23:54:35 +02:00
|
|
|
timer_queue_test: util/timer_queue_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-10-15 02:08:28 +02:00
|
|
|
sst_dump_test: tools/sst_dump_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-12-23 22:24:07 +01:00
|
|
|
|
2016-08-01 23:50:19 +02:00
|
|
|
column_aware_encoding_test: utilities/column_aware_encoding_test.o $(TESTHARNESS) $(EXPOBJECTS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-05-29 23:36:35 +02:00
|
|
|
optimistic_transaction_test: utilities/transactions/optimistic_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-04-06 04:02:00 +02:00
|
|
|
mock_env_test : env/mock_env_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2014-10-31 23:08:10 +01:00
|
|
|
|
2015-10-14 20:06:27 +02:00
|
|
|
manual_compaction_test: db/manual_compaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2013-06-17 22:58:17 +02:00
|
|
|
|
2012-08-18 09:26:50 +02:00
|
|
|
filelock_test: util/filelock_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2013-02-05 04:42:40 +01:00
|
|
|
|
2017-04-04 03:27:24 +02:00
|
|
|
auto_roll_logger_test: util/auto_roll_logger_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2012-08-18 09:26:50 +02:00
|
|
|
|
2015-04-10 03:01:11 +02:00
|
|
|
memtable_list_test: db/memtable_list_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-05-29 23:36:35 +02:00
|
|
|
write_callback_test: db/write_callback_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-07-06 13:24:09 +02:00
|
|
|
heap_test: util/heap_test.o $(GTEST)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
Pessimistic Transactions
Summary:
Initial implementation of Pessimistic Transactions. This diff contains the api changes discussed in D38913. This diff is pretty large, so let me know if people would prefer to meet up to discuss it.
MyRocks folks: please take a look at the API in include/rocksdb/utilities/transaction[_db].h and let me know if you have any issues.
Also, you'll notice a couple of TODOs in the implementation of RollbackToSavePoint(). After chatting with Siying, I'm going to send out a separate diff for an alternate implementation of this feature that implements the rollback inside of WriteBatch/WriteBatchWithIndex. We can then decide which route is preferable.
Next, I'm planning on doing some perf testing and then integrating this diff into MongoRocks for further testing.
Test Plan: Unit tests, db_bench parallel testing.
Reviewers: igor, rven, sdong, yhchiang, yoshinorim
Reviewed By: sdong
Subscribers: hermanlee4, maykov, spetrunia, leveldb, dhruba
Differential Revision: https://reviews.facebook.net/D40869
2015-05-26 02:37:33 +02:00
|
|
|
transaction_test: utilities/transactions/transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-08-31 18:27:14 +02:00
|
|
|
write_prepared_transaction_test: utilities/transactions/write_prepared_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2018-06-01 23:57:55 +02:00
|
|
|
write_unprepared_transaction_test: utilities/transactions/write_unprepared_transaction_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2014-04-15 20:28:52 +02:00
|
|
|
sst_dump: tools/sst_dump.o $(LIBOBJECTS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2012-08-17 19:48:40 +02:00
|
|
|
|
2017-05-23 19:30:04 +02:00
|
|
|
blob_dump: tools/blob_dump.o $(LIBOBJECTS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2016-08-01 23:50:19 +02:00
|
|
|
column_aware_encoding_exp: utilities/column_aware_encoding_exp.o $(EXPOBJECTS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2016-03-18 23:18:42 +01:00
|
|
|
repair_test: db/repair_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-10-15 02:08:28 +02:00
|
|
|
ldb_cmd_test: tools/ldb_cmd_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
Remove ldb HexToString method's usage of sscanf
Summary:
Fix hex2String performance issues by removing sscanf dependency.
Also fixed some edge case handling (odd length, bad input).
Test Plan: Created a test file which called old and new implementation, and validated results are the same. I'll paste results in the phabricator diff.
Reviewers: igor, rven, anthony, IslamAbdelRahman, kradhakrishnan, yhchiang, sdong
Reviewed By: sdong
Subscribers: thatsafunnyname, leveldb, dhruba
Differential Revision: https://reviews.facebook.net/D46785
2015-09-23 23:25:46 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2014-04-15 20:29:02 +02:00
|
|
|
ldb: tools/ldb.o $(LIBOBJECTS)
|
2015-02-18 20:43:30 +01:00
|
|
|
$(AM_LINK)
|
2012-08-18 09:26:50 +02:00
|
|
|
|
2017-04-06 04:02:00 +02:00
|
|
|
iostats_context_test: monitoring/iostats_context_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2016-02-23 19:26:24 +01:00
|
|
|
$(AM_V_CCLD)$(CXX) $^ $(EXEC_LDFLAGS) -o $@ $(LDFLAGS)
|
|
|
|
|
2016-04-22 00:59:17 +02:00
|
|
|
persistent_cache_test: utilities/persistent_cache/persistent_cache_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-04-06 04:02:00 +02:00
|
|
|
statistics_test: monitoring/statistics_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2016-07-26 01:05:50 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-04-06 04:02:00 +02:00
|
|
|
lru_cache_test: cache/lru_cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
2016-08-20 01:43:31 +02:00
|
|
|
$(AM_LINK)
|
|
|
|
|
2016-11-17 00:27:02 +01:00
|
|
|
lua_test: utilities/lua/rocks_lua_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
2016-08-20 01:43:31 +02:00
|
|
|
|
2016-12-20 01:44:30 +01:00
|
|
|
range_del_aggregator_test: db/range_del_aggregator_test.o db/db_test_util.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2018-09-17 23:44:04 +02:00
|
|
|
range_del_aggregator_bench: db/range_del_aggregator_bench.o $(LIBOBJECTS) $(TESTUTIL)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2017-05-31 07:16:32 +02:00
|
|
|
blob_db_test: utilities/blob_db/blob_db_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2018-09-28 00:25:47 +02:00
|
|
|
repeatable_thread_test: util/repeatable_thread_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
|
|
|
$(AM_LINK)
|
|
|
|
|
2015-04-21 04:39:51 +02:00
|
|
|
#-------------------------------------------------
|
|
|
|
# make install related stuff
|
|
|
|
INSTALL_PATH ?= /usr/local
|
|
|
|
|
|
|
|
uninstall:
|
|
|
|
rm -rf $(INSTALL_PATH)/include/rocksdb \
|
|
|
|
$(INSTALL_PATH)/lib/$(LIBRARY) \
|
|
|
|
$(INSTALL_PATH)/lib/$(SHARED4) \
|
|
|
|
$(INSTALL_PATH)/lib/$(SHARED3) \
|
|
|
|
$(INSTALL_PATH)/lib/$(SHARED2) \
|
|
|
|
$(INSTALL_PATH)/lib/$(SHARED1)
|
|
|
|
|
|
|
|
install-headers:
|
|
|
|
install -d $(INSTALL_PATH)/lib
|
2018-03-19 20:11:58 +01:00
|
|
|
for header_dir in `$(FIND) "include/rocksdb" -type d`; do \
|
2015-04-21 04:39:51 +02:00
|
|
|
install -d $(INSTALL_PATH)/$$header_dir; \
|
|
|
|
done
|
2018-03-19 20:11:58 +01:00
|
|
|
for header in `$(FIND) "include/rocksdb" -type f -name *.h`; do \
|
2015-04-21 04:39:51 +02:00
|
|
|
install -C -m 644 $$header $(INSTALL_PATH)/$$header; \
|
|
|
|
done
|
|
|
|
|
|
|
|
install-static: install-headers $(LIBRARY)
|
|
|
|
install -C -m 755 $(LIBRARY) $(INSTALL_PATH)/lib
|
|
|
|
|
|
|
|
install-shared: install-headers $(SHARED4)
|
|
|
|
install -C -m 755 $(SHARED4) $(INSTALL_PATH)/lib && \
|
|
|
|
ln -fs $(SHARED4) $(INSTALL_PATH)/lib/$(SHARED3) && \
|
|
|
|
ln -fs $(SHARED4) $(INSTALL_PATH)/lib/$(SHARED2) && \
|
|
|
|
ln -fs $(SHARED4) $(INSTALL_PATH)/lib/$(SHARED1)
|
|
|
|
|
|
|
|
# install static by default + install shared if it exists
|
|
|
|
install: install-static
|
2015-04-21 05:45:25 +02:00
|
|
|
[ -e $(SHARED4) ] && $(MAKE) install-shared || :
|
2015-04-21 04:39:51 +02:00
|
|
|
|
|
|
|
#-------------------------------------------------
|
|
|
|
|
|
|
|
|
Add a jni library for rocksdb which supports Open, Get, Put, and Close.
Summary:
This diff contains a simple jni library for rocksdb which supports open, get,
put and closeusing default options (including Options, ReadOptions, and
WriteOptions.) In the usual case, Java developers can use the c++ rocksdb
library in the way similar to the following:
RocksDB db = RocksDB.open(path_to_db);
...
db.put("hello".getBytes(), "world".getBytes();
byte[] value = db.get("hello".getBytes());
...
db.close();
Specifically, this diff has the following major classes:
* RocksDB: a Java wrapper class which forwards the operations
from the java side to c++ rocksdb library.
* RocksDBException: ncapsulates the error of an operation.
This exception type is used to describe an internal error from
the c++ rocksdb library.
This diff also include a simple java sample code calling c++ rocksdb library.
To build the rocksdb jni library, simply run make jni, and make jtest will try to
build and run the sample code.
Note that if the rocksdb is not built with the default glibc that Java uses,
java will try to load the wrong glibc during the run time. As a result,
the sample code might not work properly during the run time.
Test Plan:
* make jni
* make jtest
Reviewers: haobo, dhruba, sdong, igor, ljin
Reviewed By: dhruba
CC: leveldb, xjin
Differential Revision: https://reviews.facebook.net/D17109
2014-03-28 22:19:21 +01:00
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Jni stuff
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
2014-05-04 22:15:33 +02:00
|
|
|
JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux
|
2016-01-19 05:45:21 +01:00
|
|
|
ifeq ($(PLATFORM), OS_SOLARIS)
|
|
|
|
ARCH := $(shell isainfo -b)
|
2018-03-19 20:11:58 +01:00
|
|
|
else ifeq ($(PLATFORM), OS_OPENBSD)
|
|
|
|
ifneq (,$(filter $(MACHINE), amd64 arm64 sparc64))
|
|
|
|
ARCH := 64
|
|
|
|
else
|
|
|
|
ARCH := 32
|
|
|
|
endif
|
2016-01-19 05:45:21 +01:00
|
|
|
else
|
|
|
|
ARCH := $(shell getconf LONG_BIT)
|
|
|
|
endif
|
2017-03-27 22:57:07 +02:00
|
|
|
|
|
|
|
ifeq (,$(findstring ppc,$(MACHINE)))
|
|
|
|
ROCKSDBJNILIB = librocksdbjni-linux$(ARCH).so
|
|
|
|
else
|
|
|
|
ROCKSDBJNILIB = librocksdbjni-linux-$(MACHINE).so
|
|
|
|
endif
|
2014-10-02 20:07:45 +02:00
|
|
|
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux$(ARCH).jar
|
2014-10-02 22:46:43 +02:00
|
|
|
ROCKSDB_JAR_ALL = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH).jar
|
2014-10-02 23:13:09 +02:00
|
|
|
ROCKSDB_JAVADOCS_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-javadoc.jar
|
2014-10-02 22:57:54 +02:00
|
|
|
ROCKSDB_SOURCES_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-sources.jar
|
2017-02-13 07:53:42 +01:00
|
|
|
SHA256_CMD = sha256sum
|
|
|
|
|
2017-04-22 05:41:37 +02:00
|
|
|
ZLIB_VER ?= 1.2.11
|
|
|
|
ZLIB_SHA256 ?= c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1
|
|
|
|
ZLIB_DOWNLOAD_BASE ?= http://zlib.net
|
|
|
|
BZIP2_VER ?= 1.0.6
|
|
|
|
BZIP2_SHA256 ?= a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd
|
2018-08-27 18:54:32 +02:00
|
|
|
BZIP2_DOWNLOAD_BASE ?= https://web.archive.org/web/20180624184835/http://www.bzip.org
|
2018-01-13 08:36:27 +01:00
|
|
|
SNAPPY_VER ?= 1.1.4
|
|
|
|
SNAPPY_SHA256 ?= 134bfe122fd25599bb807bb8130e7ba6d9bdb851e0b16efcb83ac4f5d0b70057
|
2017-04-22 05:41:37 +02:00
|
|
|
SNAPPY_DOWNLOAD_BASE ?= https://github.com/google/snappy/releases/download
|
2018-01-05 20:59:01 +01:00
|
|
|
LZ4_VER ?= 1.8.0
|
|
|
|
LZ4_SHA256 ?= 2ca482ea7a9bb103603108b5a7510b7592b90158c151ff50a28f1ca8389fccf6
|
2017-04-22 05:41:37 +02:00
|
|
|
LZ4_DOWNLOAD_BASE ?= https://github.com/lz4/lz4/archive
|
2018-01-05 20:59:01 +01:00
|
|
|
ZSTD_VER ?= 1.3.3
|
|
|
|
ZSTD_SHA256 ?= a77c47153ee7de02626c5b2a097005786b71688be61e9fb81806a011f90b297b
|
2017-05-12 00:17:26 +02:00
|
|
|
ZSTD_DOWNLOAD_BASE ?= https://github.com/facebook/zstd/archive
|
2018-03-05 20:54:59 +01:00
|
|
|
CURL_SSL_OPTS ?= --tlsv1
|
Add a jni library for rocksdb which supports Open, Get, Put, and Close.
Summary:
This diff contains a simple jni library for rocksdb which supports open, get,
put and closeusing default options (including Options, ReadOptions, and
WriteOptions.) In the usual case, Java developers can use the c++ rocksdb
library in the way similar to the following:
RocksDB db = RocksDB.open(path_to_db);
...
db.put("hello".getBytes(), "world".getBytes();
byte[] value = db.get("hello".getBytes());
...
db.close();
Specifically, this diff has the following major classes:
* RocksDB: a Java wrapper class which forwards the operations
from the java side to c++ rocksdb library.
* RocksDBException: ncapsulates the error of an operation.
This exception type is used to describe an internal error from
the c++ rocksdb library.
This diff also include a simple java sample code calling c++ rocksdb library.
To build the rocksdb jni library, simply run make jni, and make jtest will try to
build and run the sample code.
Note that if the rocksdb is not built with the default glibc that Java uses,
java will try to load the wrong glibc during the run time. As a result,
the sample code might not work properly during the run time.
Test Plan:
* make jni
* make jtest
Reviewers: haobo, dhruba, sdong, igor, ljin
Reviewed By: dhruba
CC: leveldb, xjin
Differential Revision: https://reviews.facebook.net/D17109
2014-03-28 22:19:21 +01:00
|
|
|
|
|
|
|
ifeq ($(PLATFORM), OS_MACOSX)
|
2016-01-19 05:45:21 +01:00
|
|
|
ROCKSDBJNILIB = librocksdbjni-osx.jnilib
|
|
|
|
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar
|
2017-02-13 07:53:42 +01:00
|
|
|
SHA256_CMD = openssl sha256 -r
|
2014-10-23 16:39:48 +02:00
|
|
|
ifneq ("$(wildcard $(JAVA_HOME)/include/darwin)","")
|
|
|
|
JAVA_INCLUDE = -I$(JAVA_HOME)/include -I $(JAVA_HOME)/include/darwin
|
|
|
|
else
|
|
|
|
JAVA_INCLUDE = -I/System/Library/Frameworks/JavaVM.framework/Headers/
|
|
|
|
endif
|
Add a jni library for rocksdb which supports Open, Get, Put, and Close.
Summary:
This diff contains a simple jni library for rocksdb which supports open, get,
put and closeusing default options (including Options, ReadOptions, and
WriteOptions.) In the usual case, Java developers can use the c++ rocksdb
library in the way similar to the following:
RocksDB db = RocksDB.open(path_to_db);
...
db.put("hello".getBytes(), "world".getBytes();
byte[] value = db.get("hello".getBytes());
...
db.close();
Specifically, this diff has the following major classes:
* RocksDB: a Java wrapper class which forwards the operations
from the java side to c++ rocksdb library.
* RocksDBException: ncapsulates the error of an operation.
This exception type is used to describe an internal error from
the c++ rocksdb library.
This diff also include a simple java sample code calling c++ rocksdb library.
To build the rocksdb jni library, simply run make jni, and make jtest will try to
build and run the sample code.
Note that if the rocksdb is not built with the default glibc that Java uses,
java will try to load the wrong glibc during the run time. As a result,
the sample code might not work properly during the run time.
Test Plan:
* make jni
* make jtest
Reviewers: haobo, dhruba, sdong, igor, ljin
Reviewed By: dhruba
CC: leveldb, xjin
Differential Revision: https://reviews.facebook.net/D17109
2014-03-28 22:19:21 +01:00
|
|
|
endif
|
2016-10-31 17:39:00 +01:00
|
|
|
ifeq ($(PLATFORM), OS_FREEBSD)
|
2018-01-11 22:21:35 +01:00
|
|
|
JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/freebsd
|
2016-10-31 17:39:00 +01:00
|
|
|
ROCKSDBJNILIB = librocksdbjni-freebsd$(ARCH).so
|
|
|
|
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-freebsd$(ARCH).jar
|
|
|
|
endif
|
2016-01-19 05:45:21 +01:00
|
|
|
ifeq ($(PLATFORM), OS_SOLARIS)
|
|
|
|
ROCKSDBJNILIB = librocksdbjni-solaris$(ARCH).so
|
|
|
|
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-solaris$(ARCH).jar
|
|
|
|
JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/solaris
|
2017-02-13 07:53:42 +01:00
|
|
|
SHA256_CMD = digest -a sha256
|
2016-01-19 05:45:21 +01:00
|
|
|
endif
|
2017-04-22 05:41:37 +02:00
|
|
|
ifeq ($(PLATFORM), OS_AIX)
|
|
|
|
JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/aix
|
|
|
|
ROCKSDBJNILIB = librocksdbjni-aix.so
|
|
|
|
EXTRACT_SOURCES = gunzip < TAR_GZ | tar xvf -
|
|
|
|
SNAPPY_MAKE_TARGET = libsnappy.la
|
|
|
|
endif
|
2018-03-19 20:11:58 +01:00
|
|
|
ifeq ($(PLATFORM), OS_OPENBSD)
|
|
|
|
JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/openbsd
|
|
|
|
ROCKSDBJNILIB = librocksdbjni-openbsd$(ARCH).so
|
|
|
|
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-openbsd$(ARCH).jar
|
|
|
|
endif
|
Add a jni library for rocksdb which supports Open, Get, Put, and Close.
Summary:
This diff contains a simple jni library for rocksdb which supports open, get,
put and closeusing default options (including Options, ReadOptions, and
WriteOptions.) In the usual case, Java developers can use the c++ rocksdb
library in the way similar to the following:
RocksDB db = RocksDB.open(path_to_db);
...
db.put("hello".getBytes(), "world".getBytes();
byte[] value = db.get("hello".getBytes());
...
db.close();
Specifically, this diff has the following major classes:
* RocksDB: a Java wrapper class which forwards the operations
from the java side to c++ rocksdb library.
* RocksDBException: ncapsulates the error of an operation.
This exception type is used to describe an internal error from
the c++ rocksdb library.
This diff also include a simple java sample code calling c++ rocksdb library.
To build the rocksdb jni library, simply run make jni, and make jtest will try to
build and run the sample code.
Note that if the rocksdb is not built with the default glibc that Java uses,
java will try to load the wrong glibc during the run time. As a result,
the sample code might not work properly during the run time.
Test Plan:
* make jni
* make jtest
Reviewers: haobo, dhruba, sdong, igor, ljin
Reviewed By: dhruba
CC: leveldb, xjin
Differential Revision: https://reviews.facebook.net/D17109
2014-03-28 22:19:21 +01:00
|
|
|
|
2014-09-09 02:44:52 +02:00
|
|
|
libz.a:
|
2017-02-13 07:53:42 +01:00
|
|
|
-rm -rf zlib-$(ZLIB_VER)
|
2017-04-22 05:41:37 +02:00
|
|
|
curl -O -L ${ZLIB_DOWNLOAD_BASE}/zlib-$(ZLIB_VER).tar.gz
|
2017-02-13 07:53:42 +01:00
|
|
|
ZLIB_SHA256_ACTUAL=`$(SHA256_CMD) zlib-$(ZLIB_VER).tar.gz | cut -d ' ' -f 1`; \
|
|
|
|
if [ "$(ZLIB_SHA256)" != "$$ZLIB_SHA256_ACTUAL" ]; then \
|
|
|
|
echo zlib-$(ZLIB_VER).tar.gz checksum mismatch, expected=\"$(ZLIB_SHA256)\" actual=\"$$ZLIB_SHA256_ACTUAL\"; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
tar xvzf zlib-$(ZLIB_VER).tar.gz
|
2018-01-11 22:21:35 +01:00
|
|
|
cd zlib-$(ZLIB_VER) && CFLAGS='-fPIC ${EXTRA_CFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --static && $(MAKE)
|
2017-02-13 07:53:42 +01:00
|
|
|
cp zlib-$(ZLIB_VER)/libz.a .
|
2014-09-09 02:44:52 +02:00
|
|
|
|
|
|
|
libbz2.a:
|
2017-02-13 07:53:42 +01:00
|
|
|
-rm -rf bzip2-$(BZIP2_VER)
|
2017-04-22 05:41:37 +02:00
|
|
|
curl -O -L ${BZIP2_DOWNLOAD_BASE}/$(BZIP2_VER)/bzip2-$(BZIP2_VER).tar.gz
|
2017-02-13 07:53:42 +01:00
|
|
|
BZIP2_SHA256_ACTUAL=`$(SHA256_CMD) bzip2-$(BZIP2_VER).tar.gz | cut -d ' ' -f 1`; \
|
|
|
|
if [ "$(BZIP2_SHA256)" != "$$BZIP2_SHA256_ACTUAL" ]; then \
|
|
|
|
echo bzip2-$(BZIP2_VER).tar.gz checksum mismatch, expected=\"$(BZIP2_SHA256)\" actual=\"$$BZIP2_SHA256_ACTUAL\"; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
tar xvzf bzip2-$(BZIP2_VER).tar.gz
|
2018-01-11 22:21:35 +01:00
|
|
|
cd bzip2-$(BZIP2_VER) && $(MAKE) CFLAGS='-fPIC -O2 -g -D_FILE_OFFSET_BITS=64 ${EXTRA_CFLAGS}' AR='ar ${EXTRA_ARFLAGS}'
|
2017-02-13 07:53:42 +01:00
|
|
|
cp bzip2-$(BZIP2_VER)/libbz2.a .
|
2014-08-18 23:03:46 +02:00
|
|
|
|
2014-09-09 02:44:52 +02:00
|
|
|
libsnappy.a:
|
2017-02-13 07:53:42 +01:00
|
|
|
-rm -rf snappy-$(SNAPPY_VER)
|
2018-03-05 20:54:59 +01:00
|
|
|
curl -O -L ${CURL_SSL_OPTS} ${SNAPPY_DOWNLOAD_BASE}/$(SNAPPY_VER)/snappy-$(SNAPPY_VER).tar.gz
|
2017-02-13 07:53:42 +01:00
|
|
|
SNAPPY_SHA256_ACTUAL=`$(SHA256_CMD) snappy-$(SNAPPY_VER).tar.gz | cut -d ' ' -f 1`; \
|
|
|
|
if [ "$(SNAPPY_SHA256)" != "$$SNAPPY_SHA256_ACTUAL" ]; then \
|
|
|
|
echo snappy-$(SNAPPY_VER).tar.gz checksum mismatch, expected=\"$(SNAPPY_SHA256)\" actual=\"$$SNAPPY_SHA256_ACTUAL\"; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
tar xvzf snappy-$(SNAPPY_VER).tar.gz
|
2017-04-22 05:41:37 +02:00
|
|
|
cd snappy-$(SNAPPY_VER) && CFLAGS='${EXTRA_CFLAGS}' CXXFLAGS='${EXTRA_CXXFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --with-pic --enable-static --disable-shared
|
2018-01-11 22:21:35 +01:00
|
|
|
cd snappy-$(SNAPPY_VER) && $(MAKE) ${SNAPPY_MAKE_TARGET}
|
2017-02-13 07:53:42 +01:00
|
|
|
cp snappy-$(SNAPPY_VER)/.libs/libsnappy.a .
|
2014-09-29 20:09:09 +02:00
|
|
|
|
2015-03-24 18:40:00 +01:00
|
|
|
liblz4.a:
|
2017-02-13 07:53:42 +01:00
|
|
|
-rm -rf lz4-$(LZ4_VER)
|
2018-03-05 20:54:59 +01:00
|
|
|
curl -O -L ${CURL_SSL_OPTS} ${LZ4_DOWNLOAD_BASE}/v$(LZ4_VER).tar.gz
|
2017-02-13 07:53:42 +01:00
|
|
|
mv v$(LZ4_VER).tar.gz lz4-$(LZ4_VER).tar.gz
|
|
|
|
LZ4_SHA256_ACTUAL=`$(SHA256_CMD) lz4-$(LZ4_VER).tar.gz | cut -d ' ' -f 1`; \
|
|
|
|
if [ "$(LZ4_SHA256)" != "$$LZ4_SHA256_ACTUAL" ]; then \
|
|
|
|
echo lz4-$(LZ4_VER).tar.gz checksum mismatch, expected=\"$(LZ4_SHA256)\" actual=\"$$LZ4_SHA256_ACTUAL\"; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
tar xvzf lz4-$(LZ4_VER).tar.gz
|
2018-01-11 22:21:35 +01:00
|
|
|
cd lz4-$(LZ4_VER)/lib && $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' all
|
2017-02-13 07:53:42 +01:00
|
|
|
cp lz4-$(LZ4_VER)/lib/liblz4.a .
|
2014-09-09 02:44:52 +02:00
|
|
|
|
2017-05-12 00:17:26 +02:00
|
|
|
libzstd.a:
|
|
|
|
-rm -rf zstd-$(ZSTD_VER)
|
2018-03-05 20:54:59 +01:00
|
|
|
curl -O -L ${CURL_SSL_OPTS} ${ZSTD_DOWNLOAD_BASE}/v$(ZSTD_VER).tar.gz
|
2017-05-12 00:17:26 +02:00
|
|
|
mv v$(ZSTD_VER).tar.gz zstd-$(ZSTD_VER).tar.gz
|
|
|
|
ZSTD_SHA256_ACTUAL=`$(SHA256_CMD) zstd-$(ZSTD_VER).tar.gz | cut -d ' ' -f 1`; \
|
|
|
|
if [ "$(ZSTD_SHA256)" != "$$ZSTD_SHA256_ACTUAL" ]; then \
|
|
|
|
echo zstd-$(ZSTD_VER).tar.gz checksum mismatch, expected=\"$(ZSTD_SHA256)\" actual=\"$$ZSTD_SHA256_ACTUAL\"; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
tar xvzf zstd-$(ZSTD_VER).tar.gz
|
2018-01-11 22:21:35 +01:00
|
|
|
cd zstd-$(ZSTD_VER)/lib && DESTDIR=. PREFIX= $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' install
|
2017-05-12 00:17:26 +02:00
|
|
|
cp zstd-$(ZSTD_VER)/lib/libzstd.a .
|
|
|
|
|
2015-10-11 06:12:25 +02:00
|
|
|
# A version of each $(LIBOBJECTS) compiled with -fPIC and a fixed set of static compression libraries
|
2018-01-03 21:37:07 +01:00
|
|
|
java_static_libobjects = $(patsubst %,jls/%,$(LIB_CC_OBJECTS))
|
2015-10-11 06:12:25 +02:00
|
|
|
CLEAN_FILES += jls
|
2018-01-03 21:37:07 +01:00
|
|
|
java_static_all_libobjects = $(java_static_libobjects)
|
2015-03-24 18:40:00 +01:00
|
|
|
|
2017-04-12 01:51:15 +02:00
|
|
|
ifneq ($(ROCKSDB_JAVA_NO_COMPRESSION), 1)
|
2017-05-12 00:17:26 +02:00
|
|
|
JAVA_COMPRESSIONS = libz.a libbz2.a libsnappy.a liblz4.a libzstd.a
|
2017-04-12 01:51:15 +02:00
|
|
|
endif
|
|
|
|
|
2017-05-15 19:45:14 +02:00
|
|
|
JAVA_STATIC_FLAGS = -DZLIB -DBZIP2 -DSNAPPY -DLZ4 -DZSTD
|
2018-01-06 00:30:12 +01:00
|
|
|
JAVA_STATIC_INCLUDES = -I./zlib-$(ZLIB_VER) -I./bzip2-$(BZIP2_VER) -I./snappy-$(SNAPPY_VER) -I./lz4-$(LZ4_VER)/lib -I./zstd-$(ZSTD_VER)/lib/include
|
2015-10-11 06:12:25 +02:00
|
|
|
|
2018-01-03 21:37:07 +01:00
|
|
|
ifeq ($(HAVE_POWER8),1)
|
|
|
|
JAVA_STATIC_C_LIBOBJECTS = $(patsubst %.c.o,jls/%.c.o,$(LIB_SOURCES_C:.c=.o))
|
|
|
|
JAVA_STATIC_ASM_LIBOBJECTS = $(patsubst %.S.o,jls/%.S.o,$(LIB_SOURCES_ASM:.S=.o))
|
|
|
|
|
|
|
|
java_static_ppc_libobjects = $(JAVA_STATIC_C_LIBOBJECTS) $(JAVA_STATIC_ASM_LIBOBJECTS)
|
|
|
|
|
|
|
|
jls/util/crc32c_ppc.o: util/crc32c_ppc.c
|
|
|
|
$(AM_V_CC)$(CC) $(CFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -c $< -o $@
|
|
|
|
|
|
|
|
jls/util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
|
|
|
|
$(AM_V_CC)$(CC) $(CFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -c $< -o $@
|
|
|
|
|
|
|
|
java_static_all_libobjects += $(java_static_ppc_libobjects)
|
|
|
|
endif
|
|
|
|
|
2017-04-12 01:51:15 +02:00
|
|
|
$(java_static_libobjects): jls/%.o: %.cc $(JAVA_COMPRESSIONS)
|
2015-10-11 06:12:25 +02:00
|
|
|
$(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) -fPIC -c $< -o $@ $(COVERAGEFLAGS)
|
2015-04-08 19:26:06 +02:00
|
|
|
|
2018-01-03 21:37:07 +01:00
|
|
|
rocksdbjavastatic: $(java_static_all_libobjects)
|
2014-11-19 21:21:21 +01:00
|
|
|
cd java;$(MAKE) javalib;
|
2015-01-31 23:23:59 +01:00
|
|
|
rm -f ./java/target/$(ROCKSDBJNILIB)
|
2015-04-08 19:26:06 +02:00
|
|
|
$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC \
|
|
|
|
-o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) \
|
2018-01-03 21:37:07 +01:00
|
|
|
$(java_static_all_libobjects) $(COVERAGEFLAGS) \
|
2017-04-12 01:51:15 +02:00
|
|
|
$(JAVA_COMPRESSIONS) $(JAVA_STATIC_LDFLAGS)
|
2018-03-29 01:18:21 +02:00
|
|
|
cd java/target;if [ "$(DEBUG_LEVEL)" == "0" ]; then \
|
|
|
|
strip $(STRIPFLAGS) $(ROCKSDBJNILIB); \
|
|
|
|
fi
|
2015-01-31 23:23:59 +01:00
|
|
|
cd java;jar -cf target/$(ROCKSDB_JAR) HISTORY*.md
|
|
|
|
cd java/target;jar -uf $(ROCKSDB_JAR) $(ROCKSDBJNILIB)
|
|
|
|
cd java/target/classes;jar -uf ../$(ROCKSDB_JAR) org/rocksdb/*.class org/rocksdb/util/*.class
|
|
|
|
cd java/target/apidocs;jar -cf ../$(ROCKSDB_JAVADOCS_JAR) *
|
|
|
|
cd java/src/main/java;jar -cf ../../../target/$(ROCKSDB_SOURCES_JAR) org
|
2014-08-18 23:03:46 +02:00
|
|
|
|
2014-09-26 22:57:12 +02:00
|
|
|
rocksdbjavastaticrelease: rocksdbjavastatic
|
2014-09-30 21:03:32 +02:00
|
|
|
cd java/crossbuild && vagrant destroy -f && vagrant up linux32 && vagrant halt linux32 && vagrant up linux64 && vagrant halt linux64
|
2015-01-31 23:23:59 +01:00
|
|
|
cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
|
2015-10-13 02:29:58 +02:00
|
|
|
cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
|
2015-01-31 23:23:59 +01:00
|
|
|
cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
|
2014-09-26 22:57:12 +02:00
|
|
|
|
2018-07-23 22:24:50 +02:00
|
|
|
rocksdbjavastaticreleasedocker: rocksdbjavastatic rocksdbjavastaticdockerx86 rocksdbjavastaticdockerx86_64
|
|
|
|
cd java;jar -cf target/$(ROCKSDB_JAR_ALL) HISTORY*.md
|
|
|
|
cd java/target;jar -uf $(ROCKSDB_JAR_ALL) librocksdbjni-*.so librocksdbjni-*.jnilib
|
|
|
|
cd java/target/classes;jar -uf ../$(ROCKSDB_JAR_ALL) org/rocksdb/*.class org/rocksdb/util/*.class
|
|
|
|
|
|
|
|
rocksdbjavastaticdockerx86:
|
|
|
|
mkdir -p java/target
|
2017-05-12 20:23:14 +02:00
|
|
|
DOCKER_LINUX_X86_CONTAINER=`docker ps -aqf name=rocksdb_linux_x86-be`; \
|
|
|
|
if [ -z "$$DOCKER_LINUX_X86_CONTAINER" ]; then \
|
2017-06-05 21:16:02 +02:00
|
|
|
docker container create --attach stdin --attach stdout --attach stderr --volume `pwd`:/rocksdb-host --name rocksdb_linux_x86-be evolvedbinary/rocksjava:centos6_x86-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh; \
|
2017-05-12 20:23:14 +02:00
|
|
|
fi
|
|
|
|
docker start -a rocksdb_linux_x86-be
|
2018-07-23 22:24:50 +02:00
|
|
|
|
|
|
|
rocksdbjavastaticdockerx86_64:
|
|
|
|
mkdir -p java/target
|
|
|
|
DOCKER_LINUX_X64_CONTAINER=`docker ps -aqf name=rocksdb_linux_x64-be`; \
|
|
|
|
if [ -z "$$DOCKER_LINUX_X64_CONTAINER" ]; then \
|
|
|
|
docker container create --attach stdin --attach stdout --attach stderr --volume `pwd`:/rocksdb-host --name rocksdb_linux_x64-be evolvedbinary/rocksjava:centos6_x64-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh; \
|
|
|
|
fi
|
|
|
|
docker start -a rocksdb_linux_x64-be
|
2017-05-12 20:23:14 +02:00
|
|
|
|
2017-10-02 20:06:26 +02:00
|
|
|
rocksdbjavastaticdockerppc64le:
|
|
|
|
mkdir -p java/target
|
|
|
|
DOCKER_LINUX_PPC64LE_CONTAINER=`docker ps -aqf name=rocksdb_linux_ppc64le-be`; \
|
|
|
|
if [ -z "$$DOCKER_LINUX_PPC64LE_CONTAINER" ]; then \
|
|
|
|
docker container create --attach stdin --attach stdout --attach stderr --volume `pwd`:/rocksdb-host --name rocksdb_linux_ppc64le-be evolvedbinary/rocksjava:centos7_ppc64le-be /rocksdb-host/java/crossbuild/docker-build-linux-centos.sh; \
|
|
|
|
fi
|
|
|
|
docker start -a rocksdb_linux_ppc64le-be
|
|
|
|
|
2016-10-03 20:58:08 +02:00
|
|
|
rocksdbjavastaticpublish: rocksdbjavastaticrelease rocksdbjavastaticpublishcentral
|
|
|
|
|
2017-05-12 20:23:14 +02:00
|
|
|
rocksdbjavastaticpublishdocker: rocksdbjavastaticreleasedocker rocksdbjavastaticpublishcentral
|
|
|
|
|
2016-10-03 20:58:08 +02:00
|
|
|
rocksdbjavastaticpublishcentral:
|
2015-01-31 23:23:59 +01:00
|
|
|
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-javadoc.jar -Dclassifier=javadoc
|
|
|
|
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-sources.jar -Dclassifier=sources
|
|
|
|
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux64.jar -Dclassifier=linux64
|
|
|
|
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-linux32.jar -Dclassifier=linux32
|
|
|
|
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-osx.jar -Dclassifier=osx
|
2016-10-03 20:58:08 +02:00
|
|
|
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-win64.jar -Dclassifier=win64
|
2015-01-31 23:23:59 +01:00
|
|
|
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=java/rocksjni.pom -Dfile=java/target/rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH).jar
|
2014-10-02 22:29:47 +02:00
|
|
|
|
2015-10-11 06:12:25 +02:00
|
|
|
# A version of each $(LIBOBJECTS) compiled with -fPIC
|
2017-08-31 23:02:06 +02:00
|
|
|
ifeq ($(HAVE_POWER8),1)
|
|
|
|
JAVA_CC_OBJECTS = $(SHARED_CC_OBJECTS)
|
|
|
|
JAVA_C_OBJECTS = $(SHARED_C_OBJECTS)
|
|
|
|
JAVA_ASM_OBJECTS = $(SHARED_ASM_OBJECTS)
|
|
|
|
|
|
|
|
JAVA_C_LIBOBJECTS = $(patsubst %.c.o,jl/%.c.o,$(JAVA_C_OBJECTS))
|
|
|
|
JAVA_ASM_LIBOBJECTS = $(patsubst %.S.o,jl/%.S.o,$(JAVA_ASM_OBJECTS))
|
|
|
|
endif
|
|
|
|
|
2018-01-12 19:53:43 +01:00
|
|
|
java_libobjects = $(patsubst %,jl/%,$(LIB_CC_OBJECTS))
|
2015-10-11 06:12:25 +02:00
|
|
|
CLEAN_FILES += jl
|
2017-08-31 23:02:06 +02:00
|
|
|
java_all_libobjects = $(java_libobjects)
|
|
|
|
|
|
|
|
ifeq ($(HAVE_POWER8),1)
|
|
|
|
java_ppc_libobjects = $(JAVA_C_LIBOBJECTS) $(JAVA_ASM_LIBOBJECTS)
|
|
|
|
|
|
|
|
jl/crc32c_ppc.o: util/crc32c_ppc.c
|
|
|
|
$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
|
|
|
|
jl/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
|
|
|
|
$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
java_all_libobjects += $(java_ppc_libobjects)
|
|
|
|
endif
|
2015-10-11 06:12:25 +02:00
|
|
|
|
2017-07-27 04:00:42 +02:00
|
|
|
$(java_libobjects): jl/%.o: %.cc
|
2015-10-11 06:12:25 +02:00
|
|
|
$(AM_V_CC)mkdir -p $(@D) && $(CXX) $(CXXFLAGS) -fPIC -c $< -o $@ $(COVERAGEFLAGS)
|
|
|
|
|
2017-08-31 23:02:06 +02:00
|
|
|
|
|
|
|
|
|
|
|
rocksdbjava: $(java_all_libobjects)
|
2015-09-16 21:38:17 +02:00
|
|
|
$(AM_V_GEN)cd java;$(MAKE) javalib;
|
|
|
|
$(AM_V_at)rm -f ./java/target/$(ROCKSDBJNILIB)
|
2018-09-12 01:20:14 +02:00
|
|
|
$(AM_V_at)$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC -o ./java/target/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) $(java_all_libobjects) $(JAVA_LDFLAGS) $(COVERAGEFLAGS)
|
2015-09-16 21:38:17 +02:00
|
|
|
$(AM_V_at)cd java;jar -cf target/$(ROCKSDB_JAR) HISTORY*.md
|
|
|
|
$(AM_V_at)cd java/target;jar -uf $(ROCKSDB_JAR) $(ROCKSDBJNILIB)
|
|
|
|
$(AM_V_at)cd java/target/classes;jar -uf ../$(ROCKSDB_JAR) org/rocksdb/*.class org/rocksdb/util/*.class
|
Add a jni library for rocksdb which supports Open, Get, Put, and Close.
Summary:
This diff contains a simple jni library for rocksdb which supports open, get,
put and closeusing default options (including Options, ReadOptions, and
WriteOptions.) In the usual case, Java developers can use the c++ rocksdb
library in the way similar to the following:
RocksDB db = RocksDB.open(path_to_db);
...
db.put("hello".getBytes(), "world".getBytes();
byte[] value = db.get("hello".getBytes());
...
db.close();
Specifically, this diff has the following major classes:
* RocksDB: a Java wrapper class which forwards the operations
from the java side to c++ rocksdb library.
* RocksDBException: ncapsulates the error of an operation.
This exception type is used to describe an internal error from
the c++ rocksdb library.
This diff also include a simple java sample code calling c++ rocksdb library.
To build the rocksdb jni library, simply run make jni, and make jtest will try to
build and run the sample code.
Note that if the rocksdb is not built with the default glibc that Java uses,
java will try to load the wrong glibc during the run time. As a result,
the sample code might not work properly during the run time.
Test Plan:
* make jni
* make jtest
Reviewers: haobo, dhruba, sdong, igor, ljin
Reviewed By: dhruba
CC: leveldb, xjin
Differential Revision: https://reviews.facebook.net/D17109
2014-03-28 22:19:21 +01:00
|
|
|
|
|
|
|
jclean:
|
|
|
|
cd java;$(MAKE) clean;
|
|
|
|
|
2016-07-29 21:55:54 +02:00
|
|
|
jtest_compile: rocksdbjava
|
|
|
|
cd java;$(MAKE) java_test
|
|
|
|
|
|
|
|
jtest_run:
|
|
|
|
cd java;$(MAKE) run_test
|
|
|
|
|
2015-07-25 02:07:19 +02:00
|
|
|
jtest: rocksdbjava
|
2014-04-02 22:14:55 +02:00
|
|
|
cd java;$(MAKE) sample;$(MAKE) test;
|
Add a jni library for rocksdb which supports Open, Get, Put, and Close.
Summary:
This diff contains a simple jni library for rocksdb which supports open, get,
put and closeusing default options (including Options, ReadOptions, and
WriteOptions.) In the usual case, Java developers can use the c++ rocksdb
library in the way similar to the following:
RocksDB db = RocksDB.open(path_to_db);
...
db.put("hello".getBytes(), "world".getBytes();
byte[] value = db.get("hello".getBytes());
...
db.close();
Specifically, this diff has the following major classes:
* RocksDB: a Java wrapper class which forwards the operations
from the java side to c++ rocksdb library.
* RocksDBException: ncapsulates the error of an operation.
This exception type is used to describe an internal error from
the c++ rocksdb library.
This diff also include a simple java sample code calling c++ rocksdb library.
To build the rocksdb jni library, simply run make jni, and make jtest will try to
build and run the sample code.
Note that if the rocksdb is not built with the default glibc that Java uses,
java will try to load the wrong glibc during the run time. As a result,
the sample code might not work properly during the run time.
Test Plan:
* make jni
* make jtest
Reviewers: haobo, dhruba, sdong, igor, ljin
Reviewed By: dhruba
CC: leveldb, xjin
Differential Revision: https://reviews.facebook.net/D17109
2014-03-28 22:19:21 +01:00
|
|
|
|
2014-04-09 09:48:20 +02:00
|
|
|
jdb_bench:
|
|
|
|
cd java;$(MAKE) db_bench;
|
|
|
|
|
2016-01-13 01:41:48 +01:00
|
|
|
commit_prereq: build_tools/rocksdb-lego-determinator \
|
|
|
|
build_tools/precommit_checker.py
|
2016-07-21 21:53:02 +02:00
|
|
|
J=$(J) build_tools/precommit_checker.py unit unit_481 clang_unit release release_481 clang_release tsan asan ubsan lite unit_non_shm
|
2015-08-05 20:15:54 +02:00
|
|
|
$(MAKE) clean && $(MAKE) jclean && $(MAKE) rocksdbjava;
|
A build option to run through all check-in requirements.
Summary: Make it easier for people to run all the tests.
Test Plan: Run it.
Reviewers: rven, yhchiang, igor, MarkCallaghan, IslamAbdelRahman, igor.sugak, anthony, kradhakrishnan, meyering
Reviewed By: meyering
Subscribers: meyering, leveldb, dhruba
Differential Revision: https://reviews.facebook.net/D35319
2015-03-19 01:26:29 +01:00
|
|
|
|
2013-08-14 22:29:05 +02:00
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Platform-specific compilation
|
|
|
|
# ---------------------------------------------------------------------------
|
2013-06-05 19:37:38 +02:00
|
|
|
|
2011-05-28 02:53:58 +02:00
|
|
|
ifeq ($(PLATFORM), IOS)
|
|
|
|
# For iOS, create universal object files to be used on both the simulator and
|
|
|
|
# a device.
|
2012-08-27 08:45:35 +02:00
|
|
|
PLATFORMSROOT=/Applications/Xcode.app/Contents/Developer/Platforms
|
|
|
|
SIMULATORROOT=$(PLATFORMSROOT)/iPhoneSimulator.platform/Developer
|
|
|
|
DEVICEROOT=$(PLATFORMSROOT)/iPhoneOS.platform/Developer
|
2014-04-04 22:11:44 +02:00
|
|
|
IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBundleShortVersionString)
|
2011-06-30 00:53:17 +02:00
|
|
|
|
2011-05-28 02:53:58 +02:00
|
|
|
.cc.o:
|
|
|
|
mkdir -p ios-x86/$(dir $@)
|
2014-04-04 22:11:44 +02:00
|
|
|
$(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
|
2011-05-28 02:53:58 +02:00
|
|
|
mkdir -p ios-arm/$(dir $@)
|
2014-04-04 22:11:44 +02:00
|
|
|
xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
|
2011-05-28 02:53:58 +02:00
|
|
|
lipo ios-x86/$@ ios-arm/$@ -create -output $@
|
2011-08-05 22:40:49 +02:00
|
|
|
|
|
|
|
.c.o:
|
|
|
|
mkdir -p ios-x86/$(dir $@)
|
2014-04-04 22:11:44 +02:00
|
|
|
$(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@
|
2011-08-05 22:40:49 +02:00
|
|
|
mkdir -p ios-arm/$(dir $@)
|
2014-04-04 22:11:44 +02:00
|
|
|
xcrun -sdk iphoneos $(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -arch armv7s -arch arm64 -c $< -o ios-arm/$@
|
2011-08-05 22:40:49 +02:00
|
|
|
lipo ios-x86/$@ ios-arm/$@ -create -output $@
|
|
|
|
|
2011-05-28 02:53:58 +02:00
|
|
|
else
|
2017-08-31 23:02:06 +02:00
|
|
|
ifeq ($(HAVE_POWER8),1)
|
|
|
|
util/crc32c_ppc.o: util/crc32c_ppc.c
|
|
|
|
$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
|
|
|
|
util/crc32c_ppc_asm.o: util/crc32c_ppc_asm.S
|
|
|
|
$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
endif
|
2017-07-27 04:00:42 +02:00
|
|
|
.cc.o:
|
build: make "make" output readable by default
Summary:
With this change, make now prints a summary line for each
compiler and linker invocation, e.g.,:
CC db/builder.o
CC db/c.o
CC db/column_family.o
To see full commands, insert "V=1" into your make command.
E.g., run "make V=1 all" if you want it to print each command
in its full glory.
$^ is GNU make's abbreviation for the prerequisites of the current target.
These AM_V_... variables expand to some very short string like "CC" or
"LD", by default, so that the output of "make" is readable. If/when you
want more details, just build with "make V=1 ...", and make will print
each full command as it is executed. If you prefer to see the noise
all the time, and only want to optionally see the abbreviated output,
set AM_DEFAULT_VERBOSITY=1 in your environment, and then build with
V=0 to see the abbreviated command indicators.
Test Plan:
invoke make a few different ways and observe:
make clean; make # abbreviated
make clean; make V=0 # also abbreviated
make clean; make V=1 # full detail
Reviewers: sdong, ljin, igor
Reviewed By: igor
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D33579
2015-02-18 20:42:54 +01:00
|
|
|
$(AM_V_CC)$(CXX) $(CXXFLAGS) -c $< -o $@ $(COVERAGEFLAGS)
|
2011-08-05 22:40:49 +02:00
|
|
|
|
2017-07-27 04:00:42 +02:00
|
|
|
.c.o:
|
build: make "make" output readable by default
Summary:
With this change, make now prints a summary line for each
compiler and linker invocation, e.g.,:
CC db/builder.o
CC db/c.o
CC db/column_family.o
To see full commands, insert "V=1" into your make command.
E.g., run "make V=1 all" if you want it to print each command
in its full glory.
$^ is GNU make's abbreviation for the prerequisites of the current target.
These AM_V_... variables expand to some very short string like "CC" or
"LD", by default, so that the output of "make" is readable. If/when you
want more details, just build with "make V=1 ...", and make will print
each full command as it is executed. If you prefer to see the noise
all the time, and only want to optionally see the abbreviated output,
set AM_DEFAULT_VERBOSITY=1 in your environment, and then build with
V=0 to see the abbreviated command indicators.
Test Plan:
invoke make a few different ways and observe:
make clean; make # abbreviated
make clean; make V=0 # also abbreviated
make clean; make V=1 # full detail
Reviewers: sdong, ljin, igor
Reviewed By: igor
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D33579
2015-02-18 20:42:54 +01:00
|
|
|
$(AM_V_CC)$(CC) $(CFLAGS) -c $< -o $@
|
2017-07-26 18:33:07 +02:00
|
|
|
endif
|
2013-08-14 22:29:05 +02:00
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Source files dependencies detection
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
2018-08-21 19:39:41 +02:00
|
|
|
all_sources = $(LIB_SOURCES) $(MAIN_SOURCES) $(MOCK_LIB_SOURCES) $(TOOL_LIB_SOURCES) $(BENCH_LIB_SOURCES) $(TEST_LIB_SOURCES) $(EXP_LIB_SOURCES) $(ANALYZER_LIB_SOURCES)
|
2017-08-31 23:02:06 +02:00
|
|
|
DEPFILES = $(all_sources:.cc=.cc.d)
|
run 'make check's rules (and even subtests) in parallel
Summary:
When GNU parallel is available, "make check" tests are now run in parallel.
When /dev/shm is usable, we tell those tests to create temporary files therein.
Now, the longest-running single test, db_test, (which is composed of hundreds of sub-tests)
is no longer run sequentially: instead, each of its sub-tests is run independently, and can
be parallelized along with all other tests. To make that process easier, this change
creates a temporary directory, "t/", in which it puts a small script for each of those
subtests. The output from each parallel-run test is now saved in t/log-TEST_NAME.
When GNU parallel is not available, we run the tests in sequence, just as before.
If GNU parallel is available and you don't like the default of running one subtest
per core, you can invoke "make J=1 check" to run only one test at a time.
Beware: this will take a long time, and it starts with the two longest-running tests, so you
will wait for a long time before seeing any results. Instead, if you want to use fewer resources
but still see useful progress, try "make J=60% check". That will attempt to ensure that 60% of
the cores are occupied by test runs.
To watch progress of individual tests (duration, success (PASS-or-FAIL), name), run "make watch-log"
in the same directory from another window. That will start with something like this:
and when complete should show numbers/names like this:
Every 0.1s: sort -k7,7nr -k4,4gr LOG|perl -n -e '@a=split("\t",$_,-1); $t=$a[8]; $t =~ s,^\./,,;' -e '$t =~ s, >.*,,; chomp $t;' -e '$t =~ /.*--gtest_filter=... Wed Apr 1 10:51:42 2015
152.221 PASS t/DBTest.FileCreationRandomFailure
109.280 PASS t/DBTest.EncodeDecompressedBlockSizeTest
82.315 PASS reduce_levels_test
77.812 PASS t/DBTest.CompactionFilterWithValueChange
73.236 PASS backupable_db_test
63.428 PASS deletefile_test
57.248 PASS table_test
55.665 PASS prefix_test
49.816 PASS t/DBTest.RateLimitingTest
...
Test Plan:
Timings (measured so as to exclude compile and link times):
With this change, all tests complete in 2m40s on a system for which nproc prints 32.
Prior to this this change, "make check" would take 24.5 minutes on that same system.
Here are durations (in seconds) of the longest-running subtests:
152.435 PASS t/DBTest.FileCreationRandomFailure
107.070 PASS t/DBTest.EncodeDecompressedBlockSizeTest
81.391 PASS ./reduce_levels_test
71.587 PASS ./backupable_db_test
61.746 PASS ./deletefile_test
57.960 PASS ./table_test
55.230 PASS ./prefix_test
54.060 PASS t/DBTest.CompactionFilterWithValueChange
48.873 PASS t/DBTest.RateLimitingTest
47.569 PASS ./fault_injection_test
46.593 PASS t/DBTest.Randomized
42.662 PASS t/DBTest.CompactionFilter
31.793 PASS t/DBTest.SparseMerge
30.612 PASS t/DBTest.CompactionFilterV2
25.891 PASS t/DBTest.GroupCommitTest
23.863 PASS t/DBTest.DynamicLevelMaxBytesBase
22.976 PASS ./rate_limiter_test
18.942 PASS t/DBTest.OptimizeFiltersForHits
16.851 PASS ./env_test
15.399 PASS t/DBTest.CompactionFilterV2WithValueChange
14.827 PASS t/DBTest.CompactionFilterV2NULLPrefix
Reviewers: igor, sdong, rven, yhchiang, igor.sugak
Reviewed By: igor.sugak
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D35379
2015-04-06 21:35:25 +02:00
|
|
|
|
2013-08-14 22:29:05 +02:00
|
|
|
# Add proper dependency support so changing a .h file forces a .cc file to
|
|
|
|
# rebuild.
|
|
|
|
|
|
|
|
# The .d file indicates .cc file's dependencies on .h files. We generate such
|
|
|
|
# dependency by g++'s -MM option, whose output is a make dependency rule.
|
2017-08-31 23:02:06 +02:00
|
|
|
%.cc.d: %.cc
|
build: make "make" output readable by default
Summary:
With this change, make now prints a summary line for each
compiler and linker invocation, e.g.,:
CC db/builder.o
CC db/c.o
CC db/column_family.o
To see full commands, insert "V=1" into your make command.
E.g., run "make V=1 all" if you want it to print each command
in its full glory.
$^ is GNU make's abbreviation for the prerequisites of the current target.
These AM_V_... variables expand to some very short string like "CC" or
"LD", by default, so that the output of "make" is readable. If/when you
want more details, just build with "make V=1 ...", and make will print
each full command as it is executed. If you prefer to see the noise
all the time, and only want to optionally see the abbreviated output,
set AM_DEFAULT_VERBOSITY=1 in your environment, and then build with
V=0 to see the abbreviated command indicators.
Test Plan:
invoke make a few different ways and observe:
make clean; make # abbreviated
make clean; make V=0 # also abbreviated
make clean; make V=1 # full detail
Reviewers: sdong, ljin, igor
Reviewed By: igor
Subscribers: dhruba
Differential Revision: https://reviews.facebook.net/D33579
2015-02-18 20:42:54 +01:00
|
|
|
@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
|
2015-02-13 20:40:23 +01:00
|
|
|
-MM -MT'$@' -MT'$(<:.cc=.o)' "$<" -o '$@'
|
2013-01-14 21:39:24 +01:00
|
|
|
|
2017-08-31 23:02:06 +02:00
|
|
|
ifeq ($(HAVE_POWER8),1)
|
|
|
|
DEPFILES_C = $(LIB_SOURCES_C:.c=.c.d)
|
|
|
|
DEPFILES_ASM = $(LIB_SOURCES_ASM:.S=.S.d)
|
|
|
|
|
|
|
|
%.c.d: %.c
|
|
|
|
@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
|
|
|
|
-MM -MT'$@' -MT'$(<:.c=.o)' "$<" -o '$@'
|
|
|
|
|
|
|
|
%.S.d: %.S
|
|
|
|
@$(CXX) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) \
|
|
|
|
-MM -MT'$@' -MT'$(<:.S=.o)' "$<" -o '$@'
|
|
|
|
|
|
|
|
$(DEPFILES_C): %.c.d
|
|
|
|
|
|
|
|
$(DEPFILES_ASM): %.S.d
|
|
|
|
depend: $(DEPFILES) $(DEPFILES_C) $(DEPFILES_ASM)
|
|
|
|
else
|
2017-07-27 04:00:42 +02:00
|
|
|
depend: $(DEPFILES)
|
2017-08-31 23:02:06 +02:00
|
|
|
endif
|
2013-01-14 21:39:24 +01:00
|
|
|
|
2014-01-14 09:39:42 +01:00
|
|
|
# if the make goal is either "clean" or "format", we shouldn't
|
|
|
|
# try to import the *.d files.
|
|
|
|
# TODO(kailiu) The unfamiliarity of Make's conditions leads to the ugly
|
|
|
|
# working solution.
|
2013-01-14 21:39:24 +01:00
|
|
|
ifneq ($(MAKECMDGOALS),clean)
|
2014-01-14 09:39:42 +01:00
|
|
|
ifneq ($(MAKECMDGOALS),format)
|
Add a jni library for rocksdb which supports Open, Get, Put, and Close.
Summary:
This diff contains a simple jni library for rocksdb which supports open, get,
put and closeusing default options (including Options, ReadOptions, and
WriteOptions.) In the usual case, Java developers can use the c++ rocksdb
library in the way similar to the following:
RocksDB db = RocksDB.open(path_to_db);
...
db.put("hello".getBytes(), "world".getBytes();
byte[] value = db.get("hello".getBytes());
...
db.close();
Specifically, this diff has the following major classes:
* RocksDB: a Java wrapper class which forwards the operations
from the java side to c++ rocksdb library.
* RocksDBException: ncapsulates the error of an operation.
This exception type is used to describe an internal error from
the c++ rocksdb library.
This diff also include a simple java sample code calling c++ rocksdb library.
To build the rocksdb jni library, simply run make jni, and make jtest will try to
build and run the sample code.
Note that if the rocksdb is not built with the default glibc that Java uses,
java will try to load the wrong glibc during the run time. As a result,
the sample code might not work properly during the run time.
Test Plan:
* make jni
* make jtest
Reviewers: haobo, dhruba, sdong, igor, ljin
Reviewed By: dhruba
CC: leveldb, xjin
Differential Revision: https://reviews.facebook.net/D17109
2014-03-28 22:19:21 +01:00
|
|
|
ifneq ($(MAKECMDGOALS),jclean)
|
|
|
|
ifneq ($(MAKECMDGOALS),jtest)
|
Package generation for Ubuntu and CentOS
Summary:
I put together a script to assist in the generation of deb's and
rpm's. I've tested that this works on ubuntu via vagrant. I've included the
Vagrantfile here, but I can remove it if it's not useful. The package.sh
script should work on any ubuntu or centos machine, I just added a bit of
logic in there to allow a base Ubuntu or Centos machine to be able to build
RocksDB from scratch.
Example output on Ubuntu 14.04:
```
root@vagrant-ubuntu-trusty-64:/vagrant# ./tools/package.sh
[+] g++-4.7 is already installed. skipping.
[+] libgflags-dev is already installed. skipping.
[+] ruby-all-dev is already installed. skipping.
[+] fpm is already installed. skipping.
Created package {:path=>"rocksdb_3.5_amd64.deb"}
root@vagrant-ubuntu-trusty-64:/vagrant# dpkg --info rocksdb_3.5_amd64.deb
new debian package, version 2.0.
size 17392022 bytes: control archive=1518 bytes.
275 bytes, 11 lines control
2911 bytes, 38 lines md5sums
Package: rocksdb
Version: 3.5
License: BSD
Vendor: Facebook
Architecture: amd64
Maintainer: rocksdb@fb.com
Installed-Size: 83358
Section: default
Priority: extra
Homepage: http://rocksdb.org/
Description: RocksDB is an embeddable persistent key-value store for fast storage.
```
Example output on CentOS 6.5:
```
[root@localhost vagrant]# rpm -qip rocksdb-3.5-1.x86_64.rpm
Name : rocksdb Relocations: /usr
Version : 3.5 Vendor: Facebook
Release : 1 Build Date: Mon 29 Sep 2014 01:26:11 AM UTC
Install Date: (not installed) Build Host: localhost
Group : default Source RPM: rocksdb-3.5-1.src.rpm
Size : 96231106 License: BSD
Signature : (none)
Packager : rocksdb@fb.com
URL : http://rocksdb.org/
Summary : RocksDB is an embeddable persistent key-value store for fast storage.
Description :
RocksDB is an embeddable persistent key-value store for fast storage.
```
Test Plan:
How this gets used is really up to the RocksDB core team. If you
want to actually get this into mainline, you might have to change `make
install` such that it install the RocksDB shared object file as well, which
would require you to link against gflags (maybe?) and that would require some
potential modifications to the script here (basically add a depends on that
package).
Currently, this will install the headers and a pre-compiled statically linked
object file. If that's what you want out of life, than this requires no
modifications.
Reviewers: ljin, yhchiang, igor
Reviewed By: igor
Differential Revision: https://reviews.facebook.net/D24141
2014-09-30 01:09:46 +02:00
|
|
|
ifneq ($(MAKECMDGOALS),package)
|
2015-02-04 06:43:06 +01:00
|
|
|
ifneq ($(MAKECMDGOALS),analyze)
|
2013-01-14 21:39:24 +01:00
|
|
|
-include $(DEPFILES)
|
|
|
|
endif
|
2014-01-14 09:39:42 +01:00
|
|
|
endif
|
Add a jni library for rocksdb which supports Open, Get, Put, and Close.
Summary:
This diff contains a simple jni library for rocksdb which supports open, get,
put and closeusing default options (including Options, ReadOptions, and
WriteOptions.) In the usual case, Java developers can use the c++ rocksdb
library in the way similar to the following:
RocksDB db = RocksDB.open(path_to_db);
...
db.put("hello".getBytes(), "world".getBytes();
byte[] value = db.get("hello".getBytes());
...
db.close();
Specifically, this diff has the following major classes:
* RocksDB: a Java wrapper class which forwards the operations
from the java side to c++ rocksdb library.
* RocksDBException: ncapsulates the error of an operation.
This exception type is used to describe an internal error from
the c++ rocksdb library.
This diff also include a simple java sample code calling c++ rocksdb library.
To build the rocksdb jni library, simply run make jni, and make jtest will try to
build and run the sample code.
Note that if the rocksdb is not built with the default glibc that Java uses,
java will try to load the wrong glibc during the run time. As a result,
the sample code might not work properly during the run time.
Test Plan:
* make jni
* make jtest
Reviewers: haobo, dhruba, sdong, igor, ljin
Reviewed By: dhruba
CC: leveldb, xjin
Differential Revision: https://reviews.facebook.net/D17109
2014-03-28 22:19:21 +01:00
|
|
|
endif
|
|
|
|
endif
|
Package generation for Ubuntu and CentOS
Summary:
I put together a script to assist in the generation of deb's and
rpm's. I've tested that this works on ubuntu via vagrant. I've included the
Vagrantfile here, but I can remove it if it's not useful. The package.sh
script should work on any ubuntu or centos machine, I just added a bit of
logic in there to allow a base Ubuntu or Centos machine to be able to build
RocksDB from scratch.
Example output on Ubuntu 14.04:
```
root@vagrant-ubuntu-trusty-64:/vagrant# ./tools/package.sh
[+] g++-4.7 is already installed. skipping.
[+] libgflags-dev is already installed. skipping.
[+] ruby-all-dev is already installed. skipping.
[+] fpm is already installed. skipping.
Created package {:path=>"rocksdb_3.5_amd64.deb"}
root@vagrant-ubuntu-trusty-64:/vagrant# dpkg --info rocksdb_3.5_amd64.deb
new debian package, version 2.0.
size 17392022 bytes: control archive=1518 bytes.
275 bytes, 11 lines control
2911 bytes, 38 lines md5sums
Package: rocksdb
Version: 3.5
License: BSD
Vendor: Facebook
Architecture: amd64
Maintainer: rocksdb@fb.com
Installed-Size: 83358
Section: default
Priority: extra
Homepage: http://rocksdb.org/
Description: RocksDB is an embeddable persistent key-value store for fast storage.
```
Example output on CentOS 6.5:
```
[root@localhost vagrant]# rpm -qip rocksdb-3.5-1.x86_64.rpm
Name : rocksdb Relocations: /usr
Version : 3.5 Vendor: Facebook
Release : 1 Build Date: Mon 29 Sep 2014 01:26:11 AM UTC
Install Date: (not installed) Build Host: localhost
Group : default Source RPM: rocksdb-3.5-1.src.rpm
Size : 96231106 License: BSD
Signature : (none)
Packager : rocksdb@fb.com
URL : http://rocksdb.org/
Summary : RocksDB is an embeddable persistent key-value store for fast storage.
Description :
RocksDB is an embeddable persistent key-value store for fast storage.
```
Test Plan:
How this gets used is really up to the RocksDB core team. If you
want to actually get this into mainline, you might have to change `make
install` such that it install the RocksDB shared object file as well, which
would require you to link against gflags (maybe?) and that would require some
potential modifications to the script here (basically add a depends on that
package).
Currently, this will install the headers and a pre-compiled statically linked
object file. If that's what you want out of life, than this requires no
modifications.
Reviewers: ljin, yhchiang, igor
Reviewed By: igor
Differential Revision: https://reviews.facebook.net/D24141
2014-09-30 01:09:46 +02:00
|
|
|
endif
|
2015-02-04 06:43:06 +01:00
|
|
|
endif
|