Make it harder for users to run debug builds in production

Summary:
I see a lot of users compiling RocksDB with `make` or `make all` and then using those binaries in production. They end up running debug builds :(

This diff makes it harder for them:
1. I added an explicit warning to INSTALL.md
2. When you compile with `make all`, your resulting library will be librocksdb_debug.a
3. I also print out a warning when you compile in debug mode.

Hopefully should be enough :)

Test Plan: none

Reviewers: rven, yhchiang, kradhakrishnan, anthony, sdong, dhruba, IslamAbdelRahman

Reviewed By: IslamAbdelRahman

Subscribers: dhruba, leveldb

Differential Revision: https://reviews.facebook.net/D48093
This commit is contained in:
Igor Canadi 2015-10-08 14:11:32 -07:00
parent 000836a880
commit 831101b5fa
2 changed files with 17 additions and 6 deletions

View File

@ -1,19 +1,24 @@
## Compilation ## Compilation
**Important**: If you plan to run RocksDB in production, don't compile using default
`make` or `make all`. That will compile RocksDB in debug mode, which is much slower
than release mode.
RocksDB's library should be able to compile without any dependency installed, RocksDB's library should be able to compile without any dependency installed,
although we recommend installing some compression libraries (see below). although we recommend installing some compression libraries (see below).
We do depend on newer gcc/clang with C++11 support. We do depend on newer gcc/clang with C++11 support.
There are few options when compiling RocksDB: There are few options when compiling RocksDB:
* [recommended] `make static_lib` will compile librocksdb.a, RocksDB static library. * [recommended] `make static_lib` will compile librocksdb.a, RocksDB static library. Compiles static library in release mode.
* `make shared_lib` will compile librocksdb.so, RocksDB shared library. * `make shared_lib` will compile librocksdb.so, RocksDB shared library. Compiles shared library in release mode.
* `make check` will compile and run all the unit tests * `make check` will compile and run all the unit tests. `make check` will compile RocksDB in debug mode.
* `make all` will compile our static library, and all our tools and unit tests. Our tools * `make all` will compile our static library, and all our tools and unit tests. Our tools
depend on gflags. You will need to have gflags installed to run `make all`. depend on gflags. You will need to have gflags installed to run `make all`. This will compile RocksDB in debug mode. Don't
use binaries compiled by `make all` in production.
* By default the binary we produce is optimized for the platform you're compiling on * By default the binary we produce is optimized for the platform you're compiling on
(-march=native). If you want to build a portable binary, add 'PORTABLE=1' before (-march=native). If you want to build a portable binary, add 'PORTABLE=1' before

View File

@ -76,6 +76,8 @@ endif
ifeq ($(DEBUG_LEVEL),0) ifeq ($(DEBUG_LEVEL),0)
OPT += -DNDEBUG OPT += -DNDEBUG
DISABLE_WARNING_AS_ERROR=1 DISABLE_WARNING_AS_ERROR=1
else
$(warning Warning: Compiling in debug mode. Don't use the resulting binary in production)
endif endif
#----------------------------------------------- #-----------------------------------------------
@ -322,10 +324,14 @@ TOOLS = \
BENCHMARKS = db_bench table_reader_bench cache_bench memtablerep_bench BENCHMARKS = db_bench table_reader_bench cache_bench memtablerep_bench
# The library name is configurable since we are maintaining libraries of both # if user didn't config LIBNAME, set the default
# debug/release mode.
ifeq ($(LIBNAME),) ifeq ($(LIBNAME),)
# we should only run rocksdb in production with DEBUG_LEVEL 0
ifeq ($(DEBUG_LEVEL),0)
LIBNAME=librocksdb LIBNAME=librocksdb
else
LIBNAME=librocksdb_debug
endif
endif endif
LIBRARY = ${LIBNAME}.a LIBRARY = ${LIBNAME}.a