mirror of https://github.com/facebook/rocksdb.git
Misc CI improvements / additions (#9859)
Summary: * Add valgrind test to nightly CircleCI (in case it can catch something that ASAN/UBSAN does not) * Add clang13+asan+ubsan+folly test to nightly CircleCI, for broader testing * Consolidate many copies of ASAN_OPTIONS= while also allowing it to be inherited from parent environment rather than always overridden. * Move UBSAN exclusion from Makefile into options_settable_test.cc Pull Request resolved: https://github.com/facebook/rocksdb/pull/9859 Test Plan: CI Reviewed By: jay-zhuang Differential Revision: D35730903 Pulled By: pdillinger fbshipit-source-id: 6f5464034e8115f9a07f6f7aec1de9219ec2837c
This commit is contained in:
parent
e83c55439a
commit
1601433b3a
|
@ -113,6 +113,12 @@ commands:
|
||||||
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DBENCHMARK_ENABLE_GTEST_TESTS=0
|
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DBENCHMARK_ENABLE_GTEST_TESTS=0
|
||||||
ninja && sudo ninja install
|
ninja && sudo ninja install
|
||||||
|
|
||||||
|
install-valgrind:
|
||||||
|
steps:
|
||||||
|
- run:
|
||||||
|
name: Install valgrind
|
||||||
|
command: sudo apt-get update -y && sudo apt-get install -y valgrind
|
||||||
|
|
||||||
upgrade-cmake:
|
upgrade-cmake:
|
||||||
steps:
|
steps:
|
||||||
- run:
|
- run:
|
||||||
|
@ -314,7 +320,7 @@ jobs:
|
||||||
- pre-steps
|
- pre-steps
|
||||||
- install-gflags
|
- install-gflags
|
||||||
- install-clang-10
|
- install-clang-10
|
||||||
- run: ASAN_OPTIONS=detect_stack_use_after_return=1 COMPILE_WITH_ASAN=1 CC=clang-10 CXX=clang++-10 ROCKSDB_DISABLE_ALIGNED_NEW=1 USE_CLANG=1 make V=1 -j32 check # aligned new doesn't work for reason we haven't figured out
|
- run: COMPILE_WITH_ASAN=1 CC=clang-10 CXX=clang++-10 ROCKSDB_DISABLE_ALIGNED_NEW=1 USE_CLANG=1 make V=1 -j32 check # aligned new doesn't work for reason we haven't figured out
|
||||||
- post-steps
|
- post-steps
|
||||||
|
|
||||||
build-linux-clang10-mini-tsan:
|
build-linux-clang10-mini-tsan:
|
||||||
|
@ -358,6 +364,17 @@ jobs:
|
||||||
- run: COMPILE_WITH_UBSAN=1 OPT="-fsanitize-blacklist=.circleci/ubsan_suppression_list.txt" CC=clang-10 CXX=clang++-10 ROCKSDB_DISABLE_ALIGNED_NEW=1 USE_CLANG=1 make V=1 -j32 ubsan_check # aligned new doesn't work for reason we haven't figured out
|
- run: COMPILE_WITH_UBSAN=1 OPT="-fsanitize-blacklist=.circleci/ubsan_suppression_list.txt" CC=clang-10 CXX=clang++-10 ROCKSDB_DISABLE_ALIGNED_NEW=1 USE_CLANG=1 make V=1 -j32 ubsan_check # aligned new doesn't work for reason we haven't figured out
|
||||||
- post-steps
|
- post-steps
|
||||||
|
|
||||||
|
build-linux-valgrind:
|
||||||
|
machine:
|
||||||
|
image: ubuntu-2004:202111-02
|
||||||
|
resource_class: 2xlarge
|
||||||
|
steps:
|
||||||
|
- pre-steps
|
||||||
|
- install-gflags
|
||||||
|
- install-valgrind
|
||||||
|
- run: PORTABLE=1 make V=1 -j32 valgrind_test
|
||||||
|
- post-steps
|
||||||
|
|
||||||
build-linux-clang10-clang-analyze:
|
build-linux-clang10-clang-analyze:
|
||||||
machine:
|
machine:
|
||||||
image: ubuntu-2004:202111-02
|
image: ubuntu-2004:202111-02
|
||||||
|
@ -457,6 +474,19 @@ jobs:
|
||||||
- run: CC=clang-13 CXX=clang++-13 USE_CLANG=1 make -j16 all microbench
|
- run: CC=clang-13 CXX=clang++-13 USE_CLANG=1 make -j16 all microbench
|
||||||
- post-steps
|
- post-steps
|
||||||
|
|
||||||
|
# Ensure ASAN+UBSAN with folly, and full testsuite with clang 13
|
||||||
|
build-linux-clang-13-asan-ubsan-with-folly:
|
||||||
|
machine:
|
||||||
|
image: ubuntu-2004:202111-02
|
||||||
|
resource_class: 2xlarge
|
||||||
|
steps:
|
||||||
|
- pre-steps
|
||||||
|
- install-clang-13
|
||||||
|
- install-gflags
|
||||||
|
- run: make checkout_folly
|
||||||
|
- run: CC=clang-13 CXX=clang++-13 USE_CLANG=1 USE_FOLLY=1 COMPILE_WITH_UBSAN=1 COMPILE_WITH_ASAN=1 make -j32 check
|
||||||
|
- post-steps
|
||||||
|
|
||||||
# This job is only to make sure the microbench tests are able to run, the benchmark result is not meaningful as the CI host is changing.
|
# This job is only to make sure the microbench tests are able to run, the benchmark result is not meaningful as the CI host is changing.
|
||||||
build-linux-run-microbench:
|
build-linux-run-microbench:
|
||||||
machine:
|
machine:
|
||||||
|
@ -909,3 +939,5 @@ workflows:
|
||||||
- build-linux-arm-test-full
|
- build-linux-arm-test-full
|
||||||
- build-linux-run-microbench
|
- build-linux-run-microbench
|
||||||
- build-linux-non-shm
|
- build-linux-non-shm
|
||||||
|
- build-linux-clang-13-asan-ubsan-with-folly
|
||||||
|
- build-linux-valgrind
|
||||||
|
|
19
Makefile
19
Makefile
|
@ -340,6 +340,8 @@ endif
|
||||||
# ASAN doesn't work well with jemalloc. If we're compiling with ASAN, we should use regular malloc.
|
# ASAN doesn't work well with jemalloc. If we're compiling with ASAN, we should use regular malloc.
|
||||||
ifdef COMPILE_WITH_ASAN
|
ifdef COMPILE_WITH_ASAN
|
||||||
DISABLE_JEMALLOC=1
|
DISABLE_JEMALLOC=1
|
||||||
|
ASAN_OPTIONS?=detect_stack_use_after_return=1
|
||||||
|
export ASAN_OPTIONS
|
||||||
EXEC_LDFLAGS += -fsanitize=address
|
EXEC_LDFLAGS += -fsanitize=address
|
||||||
PLATFORM_CCFLAGS += -fsanitize=address
|
PLATFORM_CCFLAGS += -fsanitize=address
|
||||||
PLATFORM_CXXFLAGS += -fsanitize=address
|
PLATFORM_CXXFLAGS += -fsanitize=address
|
||||||
|
@ -596,9 +598,6 @@ am__v_CCH_1 =
|
||||||
check-headers: $(HEADER_OK_FILES)
|
check-headers: $(HEADER_OK_FILES)
|
||||||
|
|
||||||
# options_settable_test doesn't pass with UBSAN as we use hack in the test
|
# 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
|
|
||||||
ifdef ASSERT_STATUS_CHECKED
|
ifdef ASSERT_STATUS_CHECKED
|
||||||
# TODO: finish fixing all tests to pass this check
|
# TODO: finish fixing all tests to pass this check
|
||||||
TESTS_FAILING_ASC = \
|
TESTS_FAILING_ASC = \
|
||||||
|
@ -1046,31 +1045,31 @@ ldb_tests: ldb
|
||||||
include crash_test.mk
|
include crash_test.mk
|
||||||
|
|
||||||
asan_check: clean
|
asan_check: clean
|
||||||
ASAN_OPTIONS=detect_stack_use_after_return=1 COMPILE_WITH_ASAN=1 $(MAKE) check -j32
|
COMPILE_WITH_ASAN=1 $(MAKE) check -j32
|
||||||
$(MAKE) clean
|
$(MAKE) clean
|
||||||
|
|
||||||
asan_crash_test: clean
|
asan_crash_test: clean
|
||||||
ASAN_OPTIONS=detect_stack_use_after_return=1 COMPILE_WITH_ASAN=1 $(MAKE) crash_test
|
COMPILE_WITH_ASAN=1 $(MAKE) crash_test
|
||||||
$(MAKE) clean
|
$(MAKE) clean
|
||||||
|
|
||||||
whitebox_asan_crash_test: clean
|
whitebox_asan_crash_test: clean
|
||||||
ASAN_OPTIONS=detect_stack_use_after_return=1 COMPILE_WITH_ASAN=1 $(MAKE) whitebox_crash_test
|
COMPILE_WITH_ASAN=1 $(MAKE) whitebox_crash_test
|
||||||
$(MAKE) clean
|
$(MAKE) clean
|
||||||
|
|
||||||
blackbox_asan_crash_test: clean
|
blackbox_asan_crash_test: clean
|
||||||
ASAN_OPTIONS=detect_stack_use_after_return=1 COMPILE_WITH_ASAN=1 $(MAKE) blackbox_crash_test
|
COMPILE_WITH_ASAN=1 $(MAKE) blackbox_crash_test
|
||||||
$(MAKE) clean
|
$(MAKE) clean
|
||||||
|
|
||||||
asan_crash_test_with_atomic_flush: clean
|
asan_crash_test_with_atomic_flush: clean
|
||||||
ASAN_OPTIONS=detect_stack_use_after_return=1 COMPILE_WITH_ASAN=1 $(MAKE) crash_test_with_atomic_flush
|
COMPILE_WITH_ASAN=1 $(MAKE) crash_test_with_atomic_flush
|
||||||
$(MAKE) clean
|
$(MAKE) clean
|
||||||
|
|
||||||
asan_crash_test_with_txn: clean
|
asan_crash_test_with_txn: clean
|
||||||
ASAN_OPTIONS=detect_stack_use_after_return=1 COMPILE_WITH_ASAN=1 $(MAKE) crash_test_with_txn
|
COMPILE_WITH_ASAN=1 $(MAKE) crash_test_with_txn
|
||||||
$(MAKE) clean
|
$(MAKE) clean
|
||||||
|
|
||||||
asan_crash_test_with_best_efforts_recovery: clean
|
asan_crash_test_with_best_efforts_recovery: clean
|
||||||
ASAN_OPTIONS=detect_stack_use_after_return=1 COMPILE_WITH_ASAN=1 $(MAKE) crash_test_with_best_efforts_recovery
|
COMPILE_WITH_ASAN=1 $(MAKE) crash_test_with_best_efforts_recovery
|
||||||
$(MAKE) clean
|
$(MAKE) clean
|
||||||
|
|
||||||
ubsan_check: clean
|
ubsan_check: clean
|
||||||
|
|
|
@ -34,6 +34,7 @@ namespace ROCKSDB_NAMESPACE {
|
||||||
#ifndef ROCKSDB_LITE
|
#ifndef ROCKSDB_LITE
|
||||||
#if defined OS_LINUX || defined OS_WIN
|
#if defined OS_LINUX || defined OS_WIN
|
||||||
#ifndef __clang__
|
#ifndef __clang__
|
||||||
|
#ifndef ROCKSDB_UBSAN_RUN
|
||||||
|
|
||||||
class OptionsSettableTest : public testing::Test {
|
class OptionsSettableTest : public testing::Test {
|
||||||
public:
|
public:
|
||||||
|
@ -581,6 +582,7 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
|
||||||
delete[] mcfo2_ptr;
|
delete[] mcfo2_ptr;
|
||||||
delete[] cfo_clean_ptr;
|
delete[] cfo_clean_ptr;
|
||||||
}
|
}
|
||||||
|
#endif // !ROCKSDB_UBSAN_RUN
|
||||||
#endif // !__clang__
|
#endif // !__clang__
|
||||||
#endif // OS_LINUX || OS_WIN
|
#endif // OS_LINUX || OS_WIN
|
||||||
#endif // !ROCKSDB_LITE
|
#endif // !ROCKSDB_LITE
|
||||||
|
|
Loading…
Reference in New Issue