diff --git a/.travis.yml b/.travis.yml index 561fbff8a..47e0d6a3a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -287,6 +287,9 @@ script: mkdir build && cd build && cmake -DJNI=1 .. -DCMAKE_BUILD_TYPE=Release $OPT && make -j4 rocksdb rocksdbjni ;; + status_checked) + OPT=-DTRAVIS V=1 ASSERT_STATUS_CHECKED=1 make -j4 check_some + ;; esac notifications: email: diff --git a/Makefile b/Makefile index abe07c71d..c44c5ab66 100644 --- a/Makefile +++ b/Makefile @@ -626,10 +626,6 @@ TESTS = \ timer_test \ db_with_timestamp_compaction_test \ -ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1) - TESTS += folly_synchronization_distributed_mutex_test -endif - PARALLEL_TEST = \ backupable_db_test \ db_bloom_filter_test \ @@ -653,6 +649,11 @@ PARALLEL_TEST = \ write_prepared_transaction_test \ write_unprepared_transaction_test \ +ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1) + TESTS += folly_synchronization_distributed_mutex_test + PARALLEL_TEST += folly_synchronization_distributed_mutex_test +endif + # 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') @@ -972,9 +973,11 @@ check: all ifneq ($(PLATFORM), OS_AIX) $(PYTHON) tools/check_all_python.py ifeq ($(filter -DROCKSDB_LITE,$(OPT)),) +ifndef ASSERT_STATUS_CHECKED # not yet working with these tests $(PYTHON) tools/ldb_test.py sh tools/rocksdb_dump_test.sh endif +endif endif $(MAKE) check-format $(MAKE) check-buck-targets diff --git a/file/random_access_file_reader.h b/file/random_access_file_reader.h index 5dba52c58..4fee67c92 100644 --- a/file/random_access_file_reader.h +++ b/file/random_access_file_reader.h @@ -62,13 +62,13 @@ class RandomAccessFileReader { public: explicit RandomAccessFileReader( std::unique_ptr&& raf, const std::string& _file_name, - Env* env = nullptr, Statistics* stats = nullptr, uint32_t hist_type = 0, + Env* _env = nullptr, Statistics* stats = nullptr, uint32_t hist_type = 0, HistogramImpl* file_read_hist = nullptr, RateLimiter* rate_limiter = nullptr, const std::vector>& listeners = {}) : file_(std::move(raf)), file_name_(std::move(_file_name)), - env_(env), + env_(_env), stats_(stats), hist_type_(hist_type), file_read_hist_(file_read_hist), diff --git a/include/rocksdb/status.h b/include/rocksdb/status.h index ddddee949..add1f61fe 100644 --- a/include/rocksdb/status.h +++ b/include/rocksdb/status.h @@ -16,7 +16,17 @@ #pragma once +#ifdef ROCKSDB_ASSERT_STATUS_CHECKED +#include +#include +#endif + #include + +#ifdef ROCKSDB_ASSERT_STATUS_CHECKED +#include "port/stack_trace.h" +#endif + #include "rocksdb/slice.h" namespace ROCKSDB_NAMESPACE { @@ -25,7 +35,16 @@ class Status { public: // Create a success status. Status() : code_(kOk), subcode_(kNone), sev_(kNoError), state_(nullptr) {} - ~Status() { delete[] state_; } + ~Status() { +#ifdef ROCKSDB_ASSERT_STATUS_CHECKED + if (!checked_) { + fprintf(stderr, "Failed to check Status\n"); + port::PrintStack(); + abort(); + } +#endif // ROCKSDB_ASSERT_STATUS_CHECKED + delete[] state_; + } // Copy the specified status. Status(const Status& s); @@ -362,8 +381,6 @@ inline Status::Status(const Status& s, Severity sev) state_ = (s.state_ == nullptr) ? nullptr : CopyState(s.state_); } inline Status& Status::operator=(const Status& s) { - // The following condition catches both aliasing (when this == &s), - // and the common case where both s and *this are ok. if (this != &s) { code_ = s.code_; subcode_ = s.subcode_; diff --git a/third-party/folly/folly/lang/Align.h b/third-party/folly/folly/lang/Align.h index fd00b14ff..2a404b91d 100644 --- a/third-party/folly/folly/lang/Align.h +++ b/third-party/folly/folly/lang/Align.h @@ -22,6 +22,15 @@ #include #include +// Work around bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56019 +#ifdef __GNUC__ +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 9) +namespace std { +using ::max_align_t; +} +#endif +#endif + namespace folly { // has_extended_alignment