Make tests "parallel" and "passing ASC" by default (#8146)

Summary:
New tests should by default be expected to be parallelizeable
and passing with ASSERT_STATUS_CHECKED. Thus, I'm changing those two
lists to exclusions rather than inclusions.

For the set of exclusions, I only listed things that currently failed
for me when attempting not to exclude, or had some other documented
reason. This marks many more tests as "parallel," which will potentially
cause some failures from self-interference, but we can address those as
they are discovered.

Also changed CircleCI ASC test to be parallelized; the easy way to do
that is to exclude building tests that don't pass ASC, which is now a
small set.

Pull Request resolved: https://github.com/facebook/rocksdb/pull/8146

Test Plan: Watch CI, etc.

Reviewed By: riversand963

Differential Revision: D27542782

Pulled By: pdillinger

fbshipit-source-id: bdd74bcd912a963ee33f3fc0d2cad2567dc7740f
main
Peter Dillinger 4 years ago committed by Facebook GitHub Bot
parent d0d2ab0b1a
commit bd7ddf58cb
  1. 2
      .circleci/config.yml
  2. 240
      Makefile
  3. 308
      TARGETS
  4. 22
      buckifier/buckify_rocksdb.py
  5. 1
      src.mk

@ -178,7 +178,7 @@ jobs:
steps: steps:
- pre-steps - pre-steps
- install-gflags - install-gflags
- run: ASSERT_STATUS_CHECKED=1 TEST_UINT128_COMPAT=1 ROCKSDB_MODIFY_NPHASH=1 LIB_MODE=shared OPT="-DROCKSDB_NAMESPACE=alternative_rocksdb_ns" make V=1 -j32 all check_some | .circleci/cat_ignore_eagain - run: ASSERT_STATUS_CHECKED=1 TEST_UINT128_COMPAT=1 ROCKSDB_MODIFY_NPHASH=1 LIB_MODE=shared OPT="-DROCKSDB_NAMESPACE=alternative_rocksdb_ns" make V=1 -j32 check | .circleci/cat_ignore_eagain
- post-steps - post-steps
build-linux-release: build-linux-release:

@ -536,236 +536,34 @@ ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1)
ALL_SOURCES += third-party/folly/folly/synchronization/test/DistributedMutexTest.cc ALL_SOURCES += third-party/folly/folly/synchronization/test/DistributedMutexTest.cc
endif endif
PARALLEL_TEST = \ # options_settable_test doesn't pass with UBSAN as we use hack in the test
backupable_db_test \ ifdef COMPILE_WITH_UBSAN
db_bloom_filter_test \ TESTS := $(shell echo $(TESTS) | sed 's/\boptions_settable_test\b//g')
db_compaction_filter_test \ endif
db_compaction_test \ ifdef ASSERT_STATUS_CHECKED
db_merge_operator_test \ # TODO: finish fixing all tests to pass this check
db_sst_test \ TESTS_FAILING_ASC = \
db_test \ db_test \
db_test2 \ db_test2 \
db_universal_compaction_test \
db_wal_test \
column_family_test \
external_sst_file_test \
import_column_family_test \
fault_injection_test \
file_reader_writer_test \
inlineskiplist_test \
manual_compaction_test \
persistent_cache_test \
table_test \
transaction_test \
point_lock_manager_test \
range_locking_test \ range_locking_test \
write_prepared_transaction_test \ testutil_test \
write_unprepared_transaction_test \
ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1) # Since we have very few ASC exclusions left, excluding them from
TESTS += folly_synchronization_distributed_mutex_test # the build is the most convenient way to exclude them from testing
PARALLEL_TEST += folly_synchronization_distributed_mutex_test TESTS := $(filter-out $(TESTS_FAILING_ASC),$(TESTS))
TESTS_PASSING_ASC = folly_synchronization_distributed_mutex_test
endif endif
# options_settable_test doesn't pass with UBSAN as we use hack in the test ROCKSDBTESTS_SUBSET ?= $(TESTS)
ifdef COMPILE_WITH_UBSAN
TESTS := $(shell echo $(TESTS) | sed 's/\boptions_settable_test\b//g') # env_test - suspicious use of test::TmpDir
endif # deletefile_test - serial because it generates giant temporary files in
ifdef ASSERT_STATUS_CHECKED # its various tests. Parallel can fill up your /dev/shm
# This is a new check for which we will add support incrementally. This NON_PARALLEL_TEST = \
# list can be removed once support is fully added.
TESTS_PASSING_ASC = \
arena_test \
autovector_test \
cache_test \
lru_cache_test \
blob_file_addition_test \
blob_file_builder_test \
blob_file_cache_test \
blob_file_garbage_test \
blob_file_reader_test \
bloom_test \
cassandra_format_test \
cassandra_functional_test \
cassandra_row_merge_test \
cassandra_serialize_test \
cleanable_test \
checkpoint_test \
coding_test \
crc32c_test \
dbformat_test \
db_basic_test \
compact_files_test \
compaction_picker_test \
comparator_db_test \
db_encryption_test \
db_iter_test \
db_iter_stress_test \
db_log_iter_test \
db_bloom_filter_test \
db_blob_basic_test \
db_blob_compaction_test \
db_blob_corruption_test \
db_blob_index_test \
db_block_cache_test \
db_compaction_test \
db_compaction_filter_test \
db_dynamic_level_test \
db_flush_test \
db_inplace_update_test \
db_io_failure_test \
db_iterator_test \
db_kv_checksum_test \
db_logical_block_size_cache_test \
db_memtable_test \
db_merge_operand_test \
db_merge_operator_test \
db_wal_test \
db_with_timestamp_basic_test \
db_with_timestamp_compaction_test \
db_write_test \
db_options_test \
db_properties_test \
db_range_del_test \
db_secondary_test \
deletefile_test \
external_sst_file_test \
options_file_test \
db_sst_test \
db_statistics_test \
db_table_properties_test \
db_tailing_iter_test \
fault_injection_test \
listener_test \
log_test \
manual_compaction_test \
obsolete_files_test \
perf_context_test \
periodic_work_scheduler_test \
perf_context_test \
version_set_test \
wal_manager_test \
defer_test \
filename_test \
dynamic_bloom_test \
env_basic_test \
env_test \ env_test \
env_logger_test \ deletefile_test \
event_logger_test \
error_handler_fs_test \
external_sst_file_basic_test \
auto_roll_logger_test \
file_indexer_test \
delete_scheduler_test \
flush_job_test \
hash_table_test \
hash_test \
heap_test \
histogram_test \
inlineskiplist_test \
io_posix_test \
iostats_context_test \
ldb_cmd_test \
memkind_kmem_allocator_test \
merge_test \
merger_test \
mock_env_test \
object_registry_test \
optimistic_transaction_test \
prefix_test \
plain_table_db_test \
repair_test \
configurable_test \
customizable_test \
options_settable_test \
options_test \
point_lock_manager_test \
random_access_file_reader_test \
random_test \
range_del_aggregator_test \
sst_file_reader_test \
range_tombstone_fragmenter_test \
repeatable_thread_test \
ribbon_test \
skiplist_test \
slice_test \
slice_transform_test \
sst_dump_test \
statistics_test \
stats_history_test \
stringappend_test \
thread_local_test \
trace_analyzer_test \
transaction_test \
env_timed_test \
filelock_test \
timer_queue_test \
timer_test \
options_util_test \
persistent_cache_test \
util_merge_operators_test \
block_cache_trace_analyzer_test \
block_cache_tracer_test \
cache_simulator_test \
sim_cache_test \
version_builder_test \
version_edit_test \
work_queue_test \
write_buffer_manager_test \
write_controller_test \
write_prepared_transaction_test \
write_unprepared_transaction_test \
compaction_iterator_test \
compaction_job_test \
compaction_job_stats_test \
io_tracer_test \
io_tracer_parser_test \
prefetch_test \
merge_helper_test \
memtable_list_test \
flush_job_test \
block_based_filter_block_test \
block_fetcher_test \
block_test \
data_block_hash_index_test \
full_filter_block_test \
partitioned_filter_block_test \
column_family_test \
file_reader_writer_test \
rate_limiter_test \
corruption_test \
reduce_levels_test \
thread_list_test \
compact_on_deletion_collector_test \
db_universal_compaction_test \
import_column_family_test \
option_change_migration_test \
cuckoo_table_builder_test \
cuckoo_table_db_test \
cuckoo_table_reader_test \
memory_test \
table_test \
backupable_db_test \
blob_db_test \
ttl_test \
write_batch_test \
write_batch_with_index_test \
ifeq ($(USE_FOLLY_DISTRIBUTED_MUTEX),1) PARALLEL_TEST = $(filter-out $(NON_PARALLEL_TEST), $(TESTS))
TESTS_PASSING_ASC += folly_synchronization_distributed_mutex_test
endif
# Enable building all unit tests, but use check_some to run only tests
# known to pass ASC (ASSERT_STATUS_CHECKED)
ROCKSDBTESTS_SUBSET ?= $(TESTS_PASSING_ASC)
# Alternate: only build unit tests known to pass ASC, and run them
# with make check
#TESTS := $(filter $(TESTS_PASSING_ASC),$(TESTS))
#PARALLEL_TEST := $(filter $(TESTS_PASSING_ASC),$(PARALLEL_TEST))
else
ROCKSDBTESTS_SUBSET ?= $(TESTS)
endif
# Not necessarily well thought out or up-to-date, but matches old list # Not necessarily well thought out or up-to-date, but matches old list
TESTS_PLATFORM_DEPENDENT := \ TESTS_PLATFORM_DEPENDENT := \
db_basic_test \ db_basic_test \

File diff suppressed because it is too large Load Diff

@ -69,25 +69,25 @@ def get_cc_files(repo_path):
return cc_files return cc_files
# Get parallel tests from Makefile # Get non_parallel tests from Makefile
def get_parallel_tests(repo_path): def get_non_parallel_tests(repo_path):
Makefile = repo_path + "/Makefile" Makefile = repo_path + "/Makefile"
s = set({}) s = set({})
found_parallel_tests = False found_non_parallel_tests = False
for line in open(Makefile): for line in open(Makefile):
line = line.strip() line = line.strip()
if line.startswith("PARALLEL_TEST ="): if line.startswith("NON_PARALLEL_TEST ="):
found_parallel_tests = True found_non_parallel_tests = True
elif found_parallel_tests: elif found_non_parallel_tests:
if line.endswith("\\"): if line.endswith("\\"):
# remove the trailing \ # remove the trailing \
line = line[:-1] line = line[:-1]
line = line.strip() line = line.strip()
s.add(line) s.add(line)
else: else:
# we consumed all the parallel tests # we consumed all the non_parallel tests
break break
return s return s
@ -123,10 +123,10 @@ def generate_targets(repo_path, deps_map):
src_mk = parse_src_mk(repo_path) src_mk = parse_src_mk(repo_path)
# get all .cc files # get all .cc files
cc_files = get_cc_files(repo_path) cc_files = get_cc_files(repo_path)
# get parallel tests from Makefile # get non_parallel tests from Makefile
parallel_tests = get_parallel_tests(repo_path) non_parallel_tests = get_non_parallel_tests(repo_path)
if src_mk is None or cc_files is None or parallel_tests is None: if src_mk is None or cc_files is None or non_parallel_tests is None:
return False return False
extra_argv = "" extra_argv = ""
@ -211,7 +211,7 @@ def generate_targets(repo_path, deps_map):
TARGETS.register_test( TARGETS.register_test(
test_target_name, test_target_name,
test_src, test_src,
test in parallel_tests, test not in non_parallel_tests,
json.dumps(deps['extra_deps']), json.dumps(deps['extra_deps']),
json.dumps(deps['extra_compiler_flags'])) json.dumps(deps['extra_compiler_flags']))

@ -435,7 +435,6 @@ TEST_MAIN_SOURCES = \
db/external_sst_file_test.cc \ db/external_sst_file_test.cc \
db/fault_injection_test.cc \ db/fault_injection_test.cc \
db/file_indexer_test.cc \ db/file_indexer_test.cc \
db/file_reader_writer_test.cc \
db/filename_test.cc \ db/filename_test.cc \
db/flush_job_test.cc \ db/flush_job_test.cc \
db/listener_test.cc \ db/listener_test.cc \

Loading…
Cancel
Save