mirror of
https://github.com/facebook/rocksdb.git
synced 2024-11-25 22:44:05 +00:00
b2aacaf923
Summary: On CircleCI MacOS instances, we have been seeing the following assertion error: ``` Assertion failed: (alive_log_files_tail_ == alive_log_files_.rbegin()), function WriteToWAL, file /Users/distiller/project/db/db_impl/db_impl_write.cc, line 1213. Received signal 6 (Abort trap: 6) #0 0x1 https://github.com/facebook/rocksdb/issues/1 abort (in libsystem_c.dylib) + 120 https://github.com/facebook/rocksdb/issues/2 err (in libsystem_c.dylib) + 0 https://github.com/facebook/rocksdb/issues/3 rocksdb::DBImpl::WriteToWAL(rocksdb::WriteBatch const&, rocksdb::log::Writer*, unsigned long long*, unsigned long long*, rocksdb::Env::IOPriority, bool, bool) (in librocksdb.7.0.0.dylib) (db_impl_write.cc:1213) https://github.com/facebook/rocksdb/issues/4 rocksdb::DBImpl::WriteToWAL(rocksdb::WriteThread::WriteGroup const&, rocksdb::log::Writer*, unsigned long long*, bool, bool, unsigned long long) (in librocksdb.7.0.0.dylib) (db_impl_write.cc:1251) https://github.com/facebook/rocksdb/issues/5 rocksdb::DBImpl::WriteImpl(rocksdb::WriteOptions const&, rocksdb::WriteBatch*, rocksdb::WriteCallback*, unsigned long long*, unsigned long long, bool, unsigned long long*, unsigned long, rocksdb::PreReleaseCallback*) (in librocksdb.7.0.0.dylib) (db_impl_ rite.cc:421) https://github.com/facebook/rocksdb/issues/6 rocksdb::DBImpl::Write(rocksdb::WriteOptions const&, rocksdb::WriteBatch*) (in librocksdb.7.0.0.dylib) (db_impl_write.cc:109) https://github.com/facebook/rocksdb/issues/7 rocksdb::DB::Put(rocksdb::WriteOptions const&, rocksdb::ColumnFamilyHandle*, rocksdb::Slice const&, rocksdb::Slice const&, rocksdb::Slice const&) (in librocksdb.7.0.0.dylib) (db_impl_write.cc:2159) https://github.com/facebook/rocksdb/issues/8 rocksdb::DBImpl::Put(rocksdb::WriteOptions const&, rocksdb::ColumnFamilyHandle*, rocksdb::Slice const&, rocksdb::Slice const&, rocksdb::Slice const&) (in librocksdb.7.0.0.dylib) (db_impl_write.cc:37) https://github.com/facebook/rocksdb/issues/9 rocksdb::DB::Put(rocksdb::WriteOptions const&, rocksdb::Slice const&, rocksdb::Slice const&, rocksdb::Slice const&) (in librocksdb.7.0.0.dylib) (db.h:382) https://github.com/facebook/rocksdb/issues/10 rocksdb::DBBasicTestWithTimestampPrefixSeek_IterateWithPrefix_Test::TestBody() (in db_with_timestamp_basic_test) (db_with_timestamp_basic_test.cc:2926) https://github.com/facebook/rocksdb/issues/11 void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (in db_with_timestamp_basic_test) (gtest-all.cc:3899) https://github.com/facebook/rocksdb/issues/12 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (in db_with_timestamp_basic_test) (gtest-all.cc:3935) https://github.com/facebook/rocksdb/issues/13 testing::Test::Run() (in db_with_timestamp_basic_test) (gtest-all.cc:3980) https://github.com/facebook/rocksdb/issues/14 testing::TestInfo::Run() (in db_with_timestamp_basic_test) (gtest-all.cc:4153) https://github.com/facebook/rocksdb/issues/15 testing::TestCase::Run() (in db_with_timestamp_basic_test) (gtest-all.cc:4266) https://github.com/facebook/rocksdb/issues/16 testing::internal::UnitTestImpl::RunAllTests() (in db_with_timestamp_basic_test) (gtest-all.cc:6632) https://github.com/facebook/rocksdb/issues/17 bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (in db_with_timestamp_basic_test) (gtest-all.cc:3899) https://github.com/facebook/rocksdb/issues/18 bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (in db_with_timestamp_basic_test) (gtest-all.cc:3935) https://github.com/facebook/rocksdb/issues/19 testing::UnitTest::Run() (in db_with_timestamp_basic_test) (gtest-all.cc:6242) https://github.com/facebook/rocksdb/issues/20 RUN_ALL_TESTS() (in db_with_timestamp_basic_test) (gtest.h:22110) https://github.com/facebook/rocksdb/issues/21 main (in db_with_timestamp_basic_test) (db_with_timestamp_basic_test.cc:3150) https://github.com/facebook/rocksdb/issues/22 start (in libdyld.dylib) + 1 ``` It's likely caused by concurrent, unprotected access to the deque, even though `back()` is never popped, and we are comparing `rbegin()` with a cached `riterator`. To be safe, do the comparison only if we have mutex. Pull Request resolved: https://github.com/facebook/rocksdb/pull/9717 Test Plan: One example Ssh to one CircleCI MacOS instance. ``` gtest-parallel -r 1000 -w 8 ./db_test --gtest_filter=DBTest.FlushesInParallelWithCompactRange ``` Reviewed By: pdillinger Differential Revision: D34990696 Pulled By: riversand963 fbshipit-source-id: 62dd48ae6fedbda53d0a64d73de9b948b4c26eee |
||
---|---|---|
.. | ||
blob | ||
compaction | ||
db_impl | ||
arena_wrapped_db_iter.cc | ||
arena_wrapped_db_iter.h | ||
builder.cc | ||
builder.h | ||
c.cc | ||
c_test.c | ||
column_family.cc | ||
column_family.h | ||
column_family_test.cc | ||
compact_files_test.cc | ||
comparator_db_test.cc | ||
convenience.cc | ||
corruption_test.cc | ||
cuckoo_table_db_test.cc | ||
db_basic_test.cc | ||
db_block_cache_test.cc | ||
db_bloom_filter_test.cc | ||
db_compaction_filter_test.cc | ||
db_compaction_test.cc | ||
db_dynamic_level_test.cc | ||
db_encryption_test.cc | ||
db_filesnapshot.cc | ||
db_flush_test.cc | ||
db_info_dumper.cc | ||
db_info_dumper.h | ||
db_inplace_update_test.cc | ||
db_io_failure_test.cc | ||
db_iter.cc | ||
db_iter.h | ||
db_iter_stress_test.cc | ||
db_iter_test.cc | ||
db_iterator_test.cc | ||
db_kv_checksum_test.cc | ||
db_log_iter_test.cc | ||
db_logical_block_size_cache_test.cc | ||
db_memtable_test.cc | ||
db_merge_operand_test.cc | ||
db_merge_operator_test.cc | ||
db_options_test.cc | ||
db_properties_test.cc | ||
db_range_del_test.cc | ||
db_rate_limiter_test.cc | ||
db_secondary_test.cc | ||
db_sst_test.cc | ||
db_statistics_test.cc | ||
db_table_properties_test.cc | ||
db_tailing_iter_test.cc | ||
db_test.cc | ||
db_test2.cc | ||
db_test_util.cc | ||
db_test_util.h | ||
db_universal_compaction_test.cc | ||
db_wal_test.cc | ||
db_with_timestamp_basic_test.cc | ||
db_with_timestamp_compaction_test.cc | ||
db_write_buffer_manager_test.cc | ||
db_write_test.cc | ||
dbformat.cc | ||
dbformat.h | ||
dbformat_test.cc | ||
deletefile_test.cc | ||
error_handler.cc | ||
error_handler.h | ||
error_handler_fs_test.cc | ||
event_helpers.cc | ||
event_helpers.h | ||
experimental.cc | ||
external_sst_file_basic_test.cc | ||
external_sst_file_ingestion_job.cc | ||
external_sst_file_ingestion_job.h | ||
external_sst_file_test.cc | ||
fault_injection_test.cc | ||
file_indexer.cc | ||
file_indexer.h | ||
file_indexer_test.cc | ||
filename_test.cc | ||
flush_job.cc | ||
flush_job.h | ||
flush_job_test.cc | ||
flush_scheduler.cc | ||
flush_scheduler.h | ||
forward_iterator.cc | ||
forward_iterator.h | ||
forward_iterator_bench.cc | ||
history_trimming_iterator.h | ||
import_column_family_job.cc | ||
import_column_family_job.h | ||
import_column_family_test.cc | ||
internal_stats.cc | ||
internal_stats.h | ||
job_context.h | ||
kv_checksum.h | ||
listener_test.cc | ||
log_format.h | ||
log_reader.cc | ||
log_reader.h | ||
log_test.cc | ||
log_writer.cc | ||
log_writer.h | ||
logs_with_prep_tracker.cc | ||
logs_with_prep_tracker.h | ||
lookup_key.h | ||
malloc_stats.cc | ||
malloc_stats.h | ||
manual_compaction_test.cc | ||
memtable.cc | ||
memtable.h | ||
memtable_list.cc | ||
memtable_list.h | ||
memtable_list_test.cc | ||
merge_context.h | ||
merge_helper.cc | ||
merge_helper.h | ||
merge_helper_test.cc | ||
merge_operator.cc | ||
merge_test.cc | ||
obsolete_files_test.cc | ||
options_file_test.cc | ||
output_validator.cc | ||
output_validator.h | ||
perf_context_test.cc | ||
periodic_work_scheduler.cc | ||
periodic_work_scheduler.h | ||
periodic_work_scheduler_test.cc | ||
pinned_iterators_manager.h | ||
plain_table_db_test.cc | ||
pre_release_callback.h | ||
prefix_test.cc | ||
range_del_aggregator.cc | ||
range_del_aggregator.h | ||
range_del_aggregator_bench.cc | ||
range_del_aggregator_test.cc | ||
range_tombstone_fragmenter.cc | ||
range_tombstone_fragmenter.h | ||
range_tombstone_fragmenter_test.cc | ||
read_callback.h | ||
repair.cc | ||
repair_test.cc | ||
snapshot_checker.h | ||
snapshot_impl.cc | ||
snapshot_impl.h | ||
table_cache.cc | ||
table_cache.h | ||
table_properties_collector.cc | ||
table_properties_collector.h | ||
table_properties_collector_test.cc | ||
transaction_log_impl.cc | ||
transaction_log_impl.h | ||
trim_history_scheduler.cc | ||
trim_history_scheduler.h | ||
version_builder.cc | ||
version_builder.h | ||
version_builder_test.cc | ||
version_edit.cc | ||
version_edit.h | ||
version_edit_handler.cc | ||
version_edit_handler.h | ||
version_edit_test.cc | ||
version_set.cc | ||
version_set.h | ||
version_set_test.cc | ||
wal_edit.cc | ||
wal_edit.h | ||
wal_edit_test.cc | ||
wal_manager.cc | ||
wal_manager.h | ||
wal_manager_test.cc | ||
write_batch.cc | ||
write_batch_base.cc | ||
write_batch_internal.h | ||
write_batch_test.cc | ||
write_callback.h | ||
write_callback_test.cc | ||
write_controller.cc | ||
write_controller.h | ||
write_controller_test.cc | ||
write_thread.cc | ||
write_thread.h |