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 3 years ago committed by Facebook GitHub Bot
parent d0d2ab0b1a
commit bd7ddf58cb
  1. 2
      .circleci/config.yml
  2. 242
      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 = \
backupable_db_test \
db_bloom_filter_test \
db_compaction_filter_test \
db_compaction_test \
db_merge_operator_test \
db_sst_test \
db_test \
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 \
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
TESTS_PASSING_ASC = folly_synchronization_distributed_mutex_test
endif
# 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 ifdef COMPILE_WITH_UBSAN
TESTS := $(shell echo $(TESTS) | sed 's/\boptions_settable_test\b//g') TESTS := $(shell echo $(TESTS) | sed 's/\boptions_settable_test\b//g')
endif endif
ifdef ASSERT_STATUS_CHECKED ifdef ASSERT_STATUS_CHECKED
# This is a new check for which we will add support incrementally. This # TODO: finish fixing all tests to pass this check
# list can be removed once support is fully added. TESTS_FAILING_ASC = \
TESTS_PASSING_ASC = \ db_test \
arena_test \ db_test2 \
autovector_test \ range_locking_test \
cache_test \ testutil_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_logger_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) # Since we have very few ASC exclusions left, excluding them from
TESTS_PASSING_ASC += folly_synchronization_distributed_mutex_test # the build is the most convenient way to exclude them from testing
TESTS := $(filter-out $(TESTS_FAILING_ASC),$(TESTS))
endif endif
# Enable building all unit tests, but use check_some to run only tests ROCKSDBTESTS_SUBSET ?= $(TESTS)
# known to pass ASC (ASSERT_STATUS_CHECKED)
ROCKSDBTESTS_SUBSET ?= $(TESTS_PASSING_ASC) # env_test - suspicious use of test::TmpDir
# Alternate: only build unit tests known to pass ASC, and run them # deletefile_test - serial because it generates giant temporary files in
# with make check # its various tests. Parallel can fill up your /dev/shm
#TESTS := $(filter $(TESTS_PASSING_ASC),$(TESTS)) NON_PARALLEL_TEST = \
#PARALLEL_TEST := $(filter $(TESTS_PASSING_ASC),$(PARALLEL_TEST)) env_test \
else deletefile_test \
ROCKSDBTESTS_SUBSET ?= $(TESTS)
endif PARALLEL_TEST = $(filter-out $(NON_PARALLEL_TEST), $(TESTS))
# 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