From 1601433b3ae915337d882d59ffdfcce92b96223a Mon Sep 17 00:00:00 2001 From: Peter Dillinger Date: Mon, 18 Apr 2022 20:26:37 -0700 Subject: [PATCH] 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 --- .circleci/config.yml | 34 +++++++++++++++++++++++++++++++- Makefile | 19 +++++++++--------- options/options_settable_test.cc | 2 ++ 3 files changed, 44 insertions(+), 11 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index acadd8e12b..b31a1e1762 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -113,6 +113,12 @@ commands: cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DBENCHMARK_ENABLE_GTEST_TESTS=0 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: steps: - run: @@ -314,7 +320,7 @@ jobs: - pre-steps - install-gflags - 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 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 - 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: machine: image: ubuntu-2004:202111-02 @@ -457,6 +474,19 @@ jobs: - run: CC=clang-13 CXX=clang++-13 USE_CLANG=1 make -j16 all microbench - 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. build-linux-run-microbench: machine: @@ -909,3 +939,5 @@ workflows: - build-linux-arm-test-full - build-linux-run-microbench - build-linux-non-shm + - build-linux-clang-13-asan-ubsan-with-folly + - build-linux-valgrind diff --git a/Makefile b/Makefile index 41b8a98d6b..c11b98ca7a 100644 --- a/Makefile +++ b/Makefile @@ -340,6 +340,8 @@ endif # ASAN doesn't work well with jemalloc. If we're compiling with ASAN, we should use regular malloc. ifdef COMPILE_WITH_ASAN DISABLE_JEMALLOC=1 + ASAN_OPTIONS?=detect_stack_use_after_return=1 + export ASAN_OPTIONS EXEC_LDFLAGS += -fsanitize=address PLATFORM_CCFLAGS += -fsanitize=address PLATFORM_CXXFLAGS += -fsanitize=address @@ -596,9 +598,6 @@ am__v_CCH_1 = check-headers: $(HEADER_OK_FILES) # 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 # TODO: finish fixing all tests to pass this check TESTS_FAILING_ASC = \ @@ -1046,31 +1045,31 @@ ldb_tests: ldb include crash_test.mk 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 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 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 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 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 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 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 ubsan_check: clean diff --git a/options/options_settable_test.cc b/options/options_settable_test.cc index d399947e70..f8575afb96 100644 --- a/options/options_settable_test.cc +++ b/options/options_settable_test.cc @@ -34,6 +34,7 @@ namespace ROCKSDB_NAMESPACE { #ifndef ROCKSDB_LITE #if defined OS_LINUX || defined OS_WIN #ifndef __clang__ +#ifndef ROCKSDB_UBSAN_RUN class OptionsSettableTest : public testing::Test { public: @@ -581,6 +582,7 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) { delete[] mcfo2_ptr; delete[] cfo_clean_ptr; } +#endif // !ROCKSDB_UBSAN_RUN #endif // !__clang__ #endif // OS_LINUX || OS_WIN #endif // !ROCKSDB_LITE