@nxtedition/rocksdb 6.0.0 → 6.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BUILDING.md +18 -0
- package/binding.cc +16 -17
- package/binding.gyp +2 -2
- package/deps/rocksdb/build_version.cc +4 -10
- package/deps/rocksdb/rocksdb/CMakeLists.txt +26 -3
- package/deps/rocksdb/rocksdb/Makefile +73 -91
- package/deps/rocksdb/rocksdb/TARGETS +27 -2
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +29 -17
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +511 -0
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +299 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +3 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +7 -0
- package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
- package/deps/rocksdb/rocksdb/common.mk +30 -0
- package/deps/rocksdb/rocksdb/crash_test.mk +3 -3
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -3
- package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/builder.cc +22 -7
- package/deps/rocksdb/rocksdb/db/c.cc +71 -0
- package/deps/rocksdb/rocksdb/db/c_test.c +28 -2
- package/deps/rocksdb/rocksdb/db/column_family.cc +12 -5
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +23 -22
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +11 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +36 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +54 -16
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +14 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +85 -18
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +7 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +23 -22
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +151 -32
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +209 -38
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +404 -32
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -25
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +85 -138
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +68 -3
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +38 -13
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +11 -20
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +15 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +12 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +42 -10
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +54 -23
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +3 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +14 -4
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +26 -18
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +8 -7
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +28 -12
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +16 -15
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +6 -4
- package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +331 -0
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +11 -6
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +68 -7
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -5
- package/deps/rocksdb/rocksdb/db/db_test.cc +60 -42
- package/deps/rocksdb/rocksdb/db/db_test2.cc +244 -111
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +101 -19
- package/deps/rocksdb/rocksdb/db/db_test_util.h +52 -2
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +5 -175
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.cc +96 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.h +126 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/experimental.cc +1 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +91 -12
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +16 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +2 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/file_indexer.h +1 -4
- package/deps/rocksdb/rocksdb/db/flush_job.cc +28 -15
- package/deps/rocksdb/rocksdb/db/flush_job.h +4 -0
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +98 -30
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +14 -1
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +6 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +12 -12
- package/deps/rocksdb/rocksdb/db/listener_test.cc +4 -3
- package/deps/rocksdb/rocksdb/db/memtable.cc +2 -2
- package/deps/rocksdb/rocksdb/db/memtable_list.h +1 -1
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +37 -25
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +18 -18
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/repair.cc +13 -2
- package/deps/rocksdb/rocksdb/db/repair_test.cc +37 -15
- package/deps/rocksdb/rocksdb/db/snapshot_checker.h +1 -2
- package/deps/rocksdb/rocksdb/db/snapshot_impl.h +3 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +20 -130
- package/deps/rocksdb/rocksdb/db/table_cache.h +3 -2
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +140 -0
- package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +133 -133
- package/deps/rocksdb/rocksdb/db/version_edit.cc +22 -2
- package/deps/rocksdb/rocksdb/db/version_edit.h +13 -4
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +14 -14
- package/deps/rocksdb/rocksdb/db/version_set.cc +207 -214
- package/deps/rocksdb/rocksdb/db/version_set.h +14 -3
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +154 -0
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +10 -9
- package/deps/rocksdb/rocksdb/db/wal_edit.h +2 -1
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +2 -3
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/write_batch.cc +178 -30
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/write_controller.h +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +0 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +9 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +2 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +4 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +44 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +4 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.cc +0 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +45 -42
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +374 -275
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +53 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +0 -12
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +13 -11
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +276 -109
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +63 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +45 -54
- package/deps/rocksdb/rocksdb/env/composite_env.cc +87 -14
- package/deps/rocksdb/rocksdb/env/env.cc +0 -60
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +9 -0
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +1 -1
- package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -5
- package/deps/rocksdb/rocksdb/env/env_test.cc +18 -5
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +17 -12
- package/deps/rocksdb/rocksdb/env/io_posix.cc +39 -37
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +9 -9
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +159 -65
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +44 -22
- package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +142 -17
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +5 -2
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +7 -0
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +60 -40
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +23 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +49 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +5 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +59 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +46 -44
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +2 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +45 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/snapshot.h +4 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +91 -40
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +22 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +25 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +378 -103
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +18 -4
- package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
- package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +1 -5
- package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +1 -5
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +6 -8
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +1 -1
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +1 -1
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +5 -3
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +266 -45
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +2 -1
- package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +1 -4
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +4 -4
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +7 -8
- package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +2 -2
- package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +1 -5
- package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +1 -5
- package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +2 -2
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +2 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +3 -3
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +47 -38
- package/deps/rocksdb/rocksdb/options/configurable.cc +9 -27
- package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -1
- package/deps/rocksdb/rocksdb/options/customizable.cc +3 -1
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +379 -318
- package/deps/rocksdb/rocksdb/options/db_options.cc +46 -17
- package/deps/rocksdb/rocksdb/options/db_options.h +2 -0
- package/deps/rocksdb/rocksdb/options/options.cc +7 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +86 -39
- package/deps/rocksdb/rocksdb/options/options_parser.cc +10 -10
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +12 -7
- package/deps/rocksdb/rocksdb/options/options_test.cc +222 -68
- package/deps/rocksdb/rocksdb/port/port_posix.h +0 -15
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +5 -4
- package/deps/rocksdb/rocksdb/port/win/env_win.h +2 -2
- package/deps/rocksdb/rocksdb/port/win/port_win.h +0 -31
- package/deps/rocksdb/rocksdb/rocksdb.pc.in +11 -0
- package/deps/rocksdb/rocksdb/src.mk +6 -1
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/block.h +21 -25
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +23 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +52 -15
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +81 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +8 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +94 -726
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +21 -15
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +9 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +754 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +44 -73
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +15 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +2 -11
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +59 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +18 -0
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +33 -17
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +0 -61
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +0 -13
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +8 -4
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +4 -4
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +65 -7
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +2 -0
- package/deps/rocksdb/rocksdb/table/cleanable_test.cc +113 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +1 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -1
- package/deps/rocksdb/rocksdb/table/format.cc +22 -20
- package/deps/rocksdb/rocksdb/table/iterator.cc +1 -81
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +39 -0
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +2 -2
- package/deps/rocksdb/rocksdb/table/multiget_context.h +60 -13
- package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +0 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +12 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +4 -4
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +2 -1
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +1 -1
- package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
- package/deps/rocksdb/rocksdb/table/table_properties.cc +3 -5
- package/deps/rocksdb/rocksdb/table/table_reader.h +13 -0
- package/deps/rocksdb/rocksdb/table/table_test.cc +202 -78
- package/deps/rocksdb/rocksdb/table/unique_id.cc +84 -25
- package/deps/rocksdb/rocksdb/table/unique_id_impl.h +37 -4
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +3 -1
- package/deps/rocksdb/rocksdb/test_util/testutil.h +11 -8
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +8 -4
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +17 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +11 -9
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +3 -3
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +277 -105
- package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +4 -4
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +186 -42
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +75 -49
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +9 -8
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +4 -1
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +26 -4
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +1 -1
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +72 -0
- package/deps/rocksdb/rocksdb/util/async_file_reader.h +144 -0
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +4 -4
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +14 -8
- package/deps/rocksdb/rocksdb/util/build_version.cc.in +5 -6
- package/deps/rocksdb/rocksdb/util/cleanable.cc +180 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +5 -3
- package/deps/rocksdb/rocksdb/util/compression.h +56 -7
- package/deps/rocksdb/rocksdb/util/coro_utils.h +111 -0
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +148 -0
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +2 -2
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +12 -4
- package/deps/rocksdb/rocksdb/util/heap.h +5 -3
- package/deps/rocksdb/rocksdb/util/random.cc +1 -5
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +12 -9
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -1
- package/deps/rocksdb/rocksdb/util/ribbon_alg.h +1 -1
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +2 -4
- package/deps/rocksdb/rocksdb/util/single_thread_executor.h +55 -0
- package/deps/rocksdb/rocksdb/util/slice.cc +8 -9
- package/deps/rocksdb/rocksdb/util/string_util.cc +3 -2
- package/deps/rocksdb/rocksdb/util/string_util.h +0 -13
- package/deps/rocksdb/rocksdb/util/thread_local.cc +4 -23
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +99 -22
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +7 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +102 -59
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +38 -36
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +28 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +3 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/object_registry.cc +71 -0
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +71 -0
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +5 -5
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -13
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +40 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc +10 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.h +4 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +17 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +7 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +8 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +5 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +21 -15
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +69 -11
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +22 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +26 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +17 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +19 -16
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +7 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +3 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
- package/deps/rocksdb/rocksdb.gyp +47 -37
- package/package-lock.json +23687 -0
- package/package.json +2 -30
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/darwin-x64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- package/deps/liburing/liburing/README +0 -46
- package/deps/liburing/liburing/test/232c93d07b74-test.c +0 -305
- package/deps/liburing/liburing/test/35fa71a030ca-test.c +0 -329
- package/deps/liburing/liburing/test/500f9fbadef8-test.c +0 -89
- package/deps/liburing/liburing/test/7ad0e4b2f83c-test.c +0 -93
- package/deps/liburing/liburing/test/8a9973408177-test.c +0 -106
- package/deps/liburing/liburing/test/917257daa0fe-test.c +0 -53
- package/deps/liburing/liburing/test/Makefile +0 -312
- package/deps/liburing/liburing/test/a0908ae19763-test.c +0 -58
- package/deps/liburing/liburing/test/a4c0b3decb33-test.c +0 -180
- package/deps/liburing/liburing/test/accept-link.c +0 -251
- package/deps/liburing/liburing/test/accept-reuse.c +0 -164
- package/deps/liburing/liburing/test/accept-test.c +0 -79
- package/deps/liburing/liburing/test/accept.c +0 -476
- package/deps/liburing/liburing/test/across-fork.c +0 -283
- package/deps/liburing/liburing/test/b19062a56726-test.c +0 -53
- package/deps/liburing/liburing/test/b5837bd5311d-test.c +0 -77
- package/deps/liburing/liburing/test/ce593a6c480a-test.c +0 -135
- package/deps/liburing/liburing/test/close-opath.c +0 -122
- package/deps/liburing/liburing/test/config +0 -10
- package/deps/liburing/liburing/test/connect.c +0 -398
- package/deps/liburing/liburing/test/cq-full.c +0 -96
- package/deps/liburing/liburing/test/cq-overflow.c +0 -294
- package/deps/liburing/liburing/test/cq-peek-batch.c +0 -102
- package/deps/liburing/liburing/test/cq-ready.c +0 -94
- package/deps/liburing/liburing/test/cq-size.c +0 -58
- package/deps/liburing/liburing/test/d4ae271dfaae-test.c +0 -96
- package/deps/liburing/liburing/test/d77a67ed5f27-test.c +0 -65
- package/deps/liburing/liburing/test/defer.c +0 -307
- package/deps/liburing/liburing/test/double-poll-crash.c +0 -186
- package/deps/liburing/liburing/test/eeed8b54e0df-test.c +0 -114
- package/deps/liburing/liburing/test/empty-eownerdead.c +0 -42
- package/deps/liburing/liburing/test/eventfd-disable.c +0 -151
- package/deps/liburing/liburing/test/eventfd-ring.c +0 -97
- package/deps/liburing/liburing/test/eventfd.c +0 -112
- package/deps/liburing/liburing/test/fadvise.c +0 -202
- package/deps/liburing/liburing/test/fallocate.c +0 -249
- package/deps/liburing/liburing/test/fc2a85cb02ef-test.c +0 -138
- package/deps/liburing/liburing/test/file-register.c +0 -843
- package/deps/liburing/liburing/test/file-update.c +0 -173
- package/deps/liburing/liburing/test/files-exit-hang-poll.c +0 -128
- package/deps/liburing/liburing/test/files-exit-hang-timeout.c +0 -134
- package/deps/liburing/liburing/test/fixed-link.c +0 -90
- package/deps/liburing/liburing/test/fsync.c +0 -224
- package/deps/liburing/liburing/test/hardlink.c +0 -136
- package/deps/liburing/liburing/test/helpers.c +0 -135
- package/deps/liburing/liburing/test/helpers.h +0 -67
- package/deps/liburing/liburing/test/io-cancel.c +0 -537
- package/deps/liburing/liburing/test/io_uring_enter.c +0 -296
- package/deps/liburing/liburing/test/io_uring_register.c +0 -664
- package/deps/liburing/liburing/test/io_uring_setup.c +0 -192
- package/deps/liburing/liburing/test/iopoll.c +0 -366
- package/deps/liburing/liburing/test/lfs-openat-write.c +0 -117
- package/deps/liburing/liburing/test/lfs-openat.c +0 -273
- package/deps/liburing/liburing/test/link-timeout.c +0 -1107
- package/deps/liburing/liburing/test/link.c +0 -496
- package/deps/liburing/liburing/test/link_drain.c +0 -229
- package/deps/liburing/liburing/test/madvise.c +0 -195
- package/deps/liburing/liburing/test/mkdir.c +0 -108
- package/deps/liburing/liburing/test/multicqes_drain.c +0 -383
- package/deps/liburing/liburing/test/nop-all-sizes.c +0 -107
- package/deps/liburing/liburing/test/nop.c +0 -115
- package/deps/liburing/liburing/test/open-close.c +0 -146
- package/deps/liburing/liburing/test/openat2.c +0 -240
- package/deps/liburing/liburing/test/personality.c +0 -204
- package/deps/liburing/liburing/test/pipe-eof.c +0 -81
- package/deps/liburing/liburing/test/pipe-reuse.c +0 -105
- package/deps/liburing/liburing/test/poll-cancel-ton.c +0 -139
- package/deps/liburing/liburing/test/poll-cancel.c +0 -135
- package/deps/liburing/liburing/test/poll-link.c +0 -227
- package/deps/liburing/liburing/test/poll-many.c +0 -208
- package/deps/liburing/liburing/test/poll-mshot-update.c +0 -273
- package/deps/liburing/liburing/test/poll-ring.c +0 -48
- package/deps/liburing/liburing/test/poll-v-poll.c +0 -353
- package/deps/liburing/liburing/test/poll.c +0 -109
- package/deps/liburing/liburing/test/probe.c +0 -137
- package/deps/liburing/liburing/test/read-write.c +0 -876
- package/deps/liburing/liburing/test/register-restrictions.c +0 -633
- package/deps/liburing/liburing/test/rename.c +0 -134
- package/deps/liburing/liburing/test/ring-leak.c +0 -173
- package/deps/liburing/liburing/test/ring-leak2.c +0 -249
- package/deps/liburing/liburing/test/rsrc_tags.c +0 -449
- package/deps/liburing/liburing/test/runtests-loop.sh +0 -16
- package/deps/liburing/liburing/test/runtests.sh +0 -170
- package/deps/liburing/liburing/test/rw_merge_test.c +0 -97
- package/deps/liburing/liburing/test/self.c +0 -91
- package/deps/liburing/liburing/test/send_recv.c +0 -291
- package/deps/liburing/liburing/test/send_recvmsg.c +0 -345
- package/deps/liburing/liburing/test/sendmsg_fs_cve.c +0 -198
- package/deps/liburing/liburing/test/shared-wq.c +0 -84
- package/deps/liburing/liburing/test/short-read.c +0 -75
- package/deps/liburing/liburing/test/shutdown.c +0 -163
- package/deps/liburing/liburing/test/sigfd-deadlock.c +0 -74
- package/deps/liburing/liburing/test/socket-rw-eagain.c +0 -156
- package/deps/liburing/liburing/test/socket-rw.c +0 -147
- package/deps/liburing/liburing/test/splice.c +0 -511
- package/deps/liburing/liburing/test/sq-full-cpp.cc +0 -45
- package/deps/liburing/liburing/test/sq-full.c +0 -45
- package/deps/liburing/liburing/test/sq-poll-dup.c +0 -200
- package/deps/liburing/liburing/test/sq-poll-kthread.c +0 -168
- package/deps/liburing/liburing/test/sq-poll-share.c +0 -137
- package/deps/liburing/liburing/test/sq-space_left.c +0 -159
- package/deps/liburing/liburing/test/sqpoll-cancel-hang.c +0 -159
- package/deps/liburing/liburing/test/sqpoll-disable-exit.c +0 -195
- package/deps/liburing/liburing/test/sqpoll-exit-hang.c +0 -77
- package/deps/liburing/liburing/test/sqpoll-sleep.c +0 -68
- package/deps/liburing/liburing/test/statx.c +0 -172
- package/deps/liburing/liburing/test/stdout.c +0 -232
- package/deps/liburing/liburing/test/submit-link-fail.c +0 -154
- package/deps/liburing/liburing/test/submit-reuse.c +0 -239
- package/deps/liburing/liburing/test/symlink.c +0 -116
- package/deps/liburing/liburing/test/teardowns.c +0 -58
- package/deps/liburing/liburing/test/thread-exit.c +0 -131
- package/deps/liburing/liburing/test/timeout-new.c +0 -246
- package/deps/liburing/liburing/test/timeout-overflow.c +0 -204
- package/deps/liburing/liburing/test/timeout.c +0 -1354
- package/deps/liburing/liburing/test/unlink.c +0 -111
- package/deps/liburing/liburing/test/wakeup-hang.c +0 -162
- package/deps/rocksdb/rocksdb/README.md +0 -32
- package/deps/rocksdb/rocksdb/microbench/README.md +0 -60
- package/deps/rocksdb/rocksdb/plugin/README.md +0 -43
- package/deps/rocksdb/rocksdb/port/README +0 -10
- package/deps/rocksdb/rocksdb/python.mk +0 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
- package/prebuilds/linux-arm64/node.napi.node +0 -0
|
@@ -901,6 +901,154 @@ TEST_F(DBWritableFileWriterTest, IOErrorNotification) {
|
|
|
901
901
|
fwf->CheckCounters(1, 1);
|
|
902
902
|
}
|
|
903
903
|
#endif // ROCKSDB_LITE
|
|
904
|
+
|
|
905
|
+
class WritableFileWriterIOPriorityTest : public testing::Test {
|
|
906
|
+
protected:
|
|
907
|
+
// This test is to check whether the rate limiter priority can be passed
|
|
908
|
+
// correctly from WritableFileWriter functions to FSWritableFile functions.
|
|
909
|
+
|
|
910
|
+
void SetUp() override {
|
|
911
|
+
// When op_rate_limiter_priority parameter in WritableFileWriter functions
|
|
912
|
+
// is the default (Env::IO_TOTAL).
|
|
913
|
+
std::unique_ptr<FakeWF> wf{new FakeWF(Env::IO_HIGH)};
|
|
914
|
+
FileOptions file_options;
|
|
915
|
+
writer_.reset(new WritableFileWriter(std::move(wf), "" /* don't care */,
|
|
916
|
+
file_options));
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
class FakeWF : public FSWritableFile {
|
|
920
|
+
public:
|
|
921
|
+
explicit FakeWF(Env::IOPriority io_priority) { SetIOPriority(io_priority); }
|
|
922
|
+
~FakeWF() override {}
|
|
923
|
+
|
|
924
|
+
IOStatus Append(const Slice& /*data*/, const IOOptions& options,
|
|
925
|
+
IODebugContext* /*dbg*/) override {
|
|
926
|
+
EXPECT_EQ(options.rate_limiter_priority, io_priority_);
|
|
927
|
+
return IOStatus::OK();
|
|
928
|
+
}
|
|
929
|
+
IOStatus Append(const Slice& data, const IOOptions& options,
|
|
930
|
+
const DataVerificationInfo& /* verification_info */,
|
|
931
|
+
IODebugContext* dbg) override {
|
|
932
|
+
return Append(data, options, dbg);
|
|
933
|
+
}
|
|
934
|
+
IOStatus PositionedAppend(const Slice& /*data*/, uint64_t /*offset*/,
|
|
935
|
+
const IOOptions& options,
|
|
936
|
+
IODebugContext* /*dbg*/) override {
|
|
937
|
+
EXPECT_EQ(options.rate_limiter_priority, io_priority_);
|
|
938
|
+
return IOStatus::OK();
|
|
939
|
+
}
|
|
940
|
+
IOStatus PositionedAppend(
|
|
941
|
+
const Slice& /* data */, uint64_t /* offset */,
|
|
942
|
+
const IOOptions& options,
|
|
943
|
+
const DataVerificationInfo& /* verification_info */,
|
|
944
|
+
IODebugContext* /*dbg*/) override {
|
|
945
|
+
EXPECT_EQ(options.rate_limiter_priority, io_priority_);
|
|
946
|
+
return IOStatus::OK();
|
|
947
|
+
}
|
|
948
|
+
IOStatus Truncate(uint64_t /*size*/, const IOOptions& options,
|
|
949
|
+
IODebugContext* /*dbg*/) override {
|
|
950
|
+
EXPECT_EQ(options.rate_limiter_priority, io_priority_);
|
|
951
|
+
return IOStatus::OK();
|
|
952
|
+
}
|
|
953
|
+
IOStatus Close(const IOOptions& options, IODebugContext* /*dbg*/) override {
|
|
954
|
+
EXPECT_EQ(options.rate_limiter_priority, io_priority_);
|
|
955
|
+
return IOStatus::OK();
|
|
956
|
+
}
|
|
957
|
+
IOStatus Flush(const IOOptions& options, IODebugContext* /*dbg*/) override {
|
|
958
|
+
EXPECT_EQ(options.rate_limiter_priority, io_priority_);
|
|
959
|
+
return IOStatus::OK();
|
|
960
|
+
}
|
|
961
|
+
IOStatus Sync(const IOOptions& options, IODebugContext* /*dbg*/) override {
|
|
962
|
+
EXPECT_EQ(options.rate_limiter_priority, io_priority_);
|
|
963
|
+
return IOStatus::OK();
|
|
964
|
+
}
|
|
965
|
+
IOStatus Fsync(const IOOptions& options, IODebugContext* /*dbg*/) override {
|
|
966
|
+
EXPECT_EQ(options.rate_limiter_priority, io_priority_);
|
|
967
|
+
return IOStatus::OK();
|
|
968
|
+
}
|
|
969
|
+
uint64_t GetFileSize(const IOOptions& options,
|
|
970
|
+
IODebugContext* /*dbg*/) override {
|
|
971
|
+
EXPECT_EQ(options.rate_limiter_priority, io_priority_);
|
|
972
|
+
return 0;
|
|
973
|
+
}
|
|
974
|
+
void GetPreallocationStatus(size_t* /*block_size*/,
|
|
975
|
+
size_t* /*last_allocated_block*/) override {}
|
|
976
|
+
size_t GetUniqueId(char* /*id*/, size_t /*max_size*/) const override {
|
|
977
|
+
return 0;
|
|
978
|
+
}
|
|
979
|
+
IOStatus InvalidateCache(size_t /*offset*/, size_t /*length*/) override {
|
|
980
|
+
return IOStatus::OK();
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
IOStatus Allocate(uint64_t /*offset*/, uint64_t /*len*/,
|
|
984
|
+
const IOOptions& options,
|
|
985
|
+
IODebugContext* /*dbg*/) override {
|
|
986
|
+
EXPECT_EQ(options.rate_limiter_priority, io_priority_);
|
|
987
|
+
return IOStatus::OK();
|
|
988
|
+
}
|
|
989
|
+
IOStatus RangeSync(uint64_t /*offset*/, uint64_t /*nbytes*/,
|
|
990
|
+
const IOOptions& options,
|
|
991
|
+
IODebugContext* /*dbg*/) override {
|
|
992
|
+
EXPECT_EQ(options.rate_limiter_priority, io_priority_);
|
|
993
|
+
return IOStatus::OK();
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
void PrepareWrite(size_t /*offset*/, size_t /*len*/,
|
|
997
|
+
const IOOptions& options,
|
|
998
|
+
IODebugContext* /*dbg*/) override {
|
|
999
|
+
EXPECT_EQ(options.rate_limiter_priority, io_priority_);
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
bool IsSyncThreadSafe() const override { return true; }
|
|
1003
|
+
};
|
|
1004
|
+
|
|
1005
|
+
std::unique_ptr<WritableFileWriter> writer_;
|
|
1006
|
+
};
|
|
1007
|
+
|
|
1008
|
+
TEST_F(WritableFileWriterIOPriorityTest, Append) {
|
|
1009
|
+
ASSERT_OK(writer_->Append(Slice("abc")));
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
TEST_F(WritableFileWriterIOPriorityTest, Pad) { ASSERT_OK(writer_->Pad(500)); }
|
|
1013
|
+
|
|
1014
|
+
TEST_F(WritableFileWriterIOPriorityTest, Flush) { ASSERT_OK(writer_->Flush()); }
|
|
1015
|
+
|
|
1016
|
+
TEST_F(WritableFileWriterIOPriorityTest, Close) { ASSERT_OK(writer_->Close()); }
|
|
1017
|
+
|
|
1018
|
+
TEST_F(WritableFileWriterIOPriorityTest, Sync) {
|
|
1019
|
+
ASSERT_OK(writer_->Sync(false));
|
|
1020
|
+
ASSERT_OK(writer_->Sync(true));
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
TEST_F(WritableFileWriterIOPriorityTest, SyncWithoutFlush) {
|
|
1024
|
+
ASSERT_OK(writer_->SyncWithoutFlush(false));
|
|
1025
|
+
ASSERT_OK(writer_->SyncWithoutFlush(true));
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
TEST_F(WritableFileWriterIOPriorityTest, BasicOp) {
|
|
1029
|
+
EnvOptions env_options;
|
|
1030
|
+
env_options.bytes_per_sync = kMb;
|
|
1031
|
+
std::unique_ptr<FakeWF> wf(new FakeWF(Env::IO_HIGH));
|
|
1032
|
+
std::unique_ptr<WritableFileWriter> writer(
|
|
1033
|
+
new WritableFileWriter(std::move(wf), "" /* don't care */, env_options));
|
|
1034
|
+
Random r(301);
|
|
1035
|
+
Status s;
|
|
1036
|
+
std::unique_ptr<char[]> large_buf(new char[10 * kMb]);
|
|
1037
|
+
for (int i = 0; i < 1000; i++) {
|
|
1038
|
+
int skew_limit = (i < 700) ? 10 : 15;
|
|
1039
|
+
uint32_t num = r.Skewed(skew_limit) * 100 + r.Uniform(100);
|
|
1040
|
+
s = writer->Append(Slice(large_buf.get(), num));
|
|
1041
|
+
ASSERT_OK(s);
|
|
1042
|
+
|
|
1043
|
+
// Flush in a chance of 1/10.
|
|
1044
|
+
if (r.Uniform(10) == 0) {
|
|
1045
|
+
s = writer->Flush();
|
|
1046
|
+
ASSERT_OK(s);
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
s = writer->Close();
|
|
1050
|
+
ASSERT_OK(s);
|
|
1051
|
+
}
|
|
904
1052
|
} // namespace ROCKSDB_NAMESPACE
|
|
905
1053
|
|
|
906
1054
|
int main(int argc, char** argv) {
|
|
@@ -129,8 +129,8 @@ TEST_F(LockTest, LockBySameThread) {
|
|
|
129
129
|
ASSERT_TRUE(s.IsIOError());
|
|
130
130
|
#ifndef OS_WIN
|
|
131
131
|
// Validate that error message contains current thread ID.
|
|
132
|
-
ASSERT_TRUE(s.ToString().find(
|
|
133
|
-
|
|
132
|
+
ASSERT_TRUE(s.ToString().find(std::to_string(
|
|
133
|
+
Env::Default()->GetThreadID())) != std::string::npos);
|
|
134
134
|
#endif
|
|
135
135
|
|
|
136
136
|
// check the file is locked
|
|
@@ -21,6 +21,7 @@ int main() {
|
|
|
21
21
|
#include "port/stack_trace.h"
|
|
22
22
|
#include "rocksdb/cache.h"
|
|
23
23
|
#include "rocksdb/system_clock.h"
|
|
24
|
+
#include "rocksdb/table.h"
|
|
24
25
|
#include "table/block_based/filter_policy_internal.h"
|
|
25
26
|
#include "table/block_based/full_filter_block.h"
|
|
26
27
|
#include "table/block_based/mock_block_based_table.h"
|
|
@@ -103,9 +104,10 @@ DEFINE_uint32(block_cache_capacity_MB, 8,
|
|
|
103
104
|
"Setting for "
|
|
104
105
|
"LRUCacheOptions::capacity");
|
|
105
106
|
|
|
106
|
-
DEFINE_bool(
|
|
107
|
+
DEFINE_bool(charge_filter_construction, false,
|
|
107
108
|
"Setting for "
|
|
108
|
-
"
|
|
109
|
+
"CacheEntryRoleOptions::charged of"
|
|
110
|
+
"CacheEntryRole::kFilterConstruction");
|
|
109
111
|
|
|
110
112
|
DEFINE_bool(strict_capacity_limit, false,
|
|
111
113
|
"Setting for "
|
|
@@ -145,6 +147,8 @@ using ROCKSDB_NAMESPACE::BloomLikeFilterPolicy;
|
|
|
145
147
|
using ROCKSDB_NAMESPACE::BuiltinFilterBitsBuilder;
|
|
146
148
|
using ROCKSDB_NAMESPACE::CachableEntry;
|
|
147
149
|
using ROCKSDB_NAMESPACE::Cache;
|
|
150
|
+
using ROCKSDB_NAMESPACE::CacheEntryRole;
|
|
151
|
+
using ROCKSDB_NAMESPACE::CacheEntryRoleOptions;
|
|
148
152
|
using ROCKSDB_NAMESPACE::EncodeFixed32;
|
|
149
153
|
using ROCKSDB_NAMESPACE::FastRange32;
|
|
150
154
|
using ROCKSDB_NAMESPACE::FilterBitsReader;
|
|
@@ -321,8 +325,12 @@ struct FilterBench : public MockBlockBasedTableTester {
|
|
|
321
325
|
FLAGS_optimize_filters_for_memory;
|
|
322
326
|
table_options_.detect_filter_construct_corruption =
|
|
323
327
|
FLAGS_detect_filter_construct_corruption;
|
|
324
|
-
|
|
325
|
-
|
|
328
|
+
table_options_.cache_usage_options.options_overrides.insert(
|
|
329
|
+
{CacheEntryRole::kFilterConstruction,
|
|
330
|
+
{/*.charged = */ FLAGS_charge_filter_construction
|
|
331
|
+
? CacheEntryRoleOptions::Decision::kEnabled
|
|
332
|
+
: CacheEntryRoleOptions::Decision::kDisabled}});
|
|
333
|
+
if (FLAGS_charge_filter_construction) {
|
|
326
334
|
table_options_.no_block_cache = false;
|
|
327
335
|
LRUCacheOptions lo;
|
|
328
336
|
lo.capacity = FLAGS_block_cache_capacity_MB * 1024 * 1024;
|
|
@@ -101,7 +101,9 @@ class BinaryHeap {
|
|
|
101
101
|
|
|
102
102
|
size_t size() const { return data_.size(); }
|
|
103
103
|
|
|
104
|
-
void reset_root_cmp_cache() {
|
|
104
|
+
void reset_root_cmp_cache() {
|
|
105
|
+
root_cmp_cache_ = std::numeric_limits<size_t>::max();
|
|
106
|
+
}
|
|
105
107
|
|
|
106
108
|
private:
|
|
107
109
|
static inline size_t get_root() { return 0; }
|
|
@@ -126,7 +128,7 @@ class BinaryHeap {
|
|
|
126
128
|
void downheap(size_t index) {
|
|
127
129
|
T v = std::move(data_[index]);
|
|
128
130
|
|
|
129
|
-
size_t picked_child =
|
|
131
|
+
size_t picked_child = std::numeric_limits<size_t>::max();
|
|
130
132
|
while (1) {
|
|
131
133
|
const size_t left_child = get_left(index);
|
|
132
134
|
if (get_left(index) >= data_.size()) {
|
|
@@ -165,7 +167,7 @@ class BinaryHeap {
|
|
|
165
167
|
Compare cmp_;
|
|
166
168
|
autovector<T> data_;
|
|
167
169
|
// Used to reduce number of cmp_ calls in downheap()
|
|
168
|
-
size_t root_cmp_cache_ =
|
|
170
|
+
size_t root_cmp_cache_ = std::numeric_limits<size_t>::max();
|
|
169
171
|
};
|
|
170
172
|
|
|
171
173
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -14,11 +14,7 @@
|
|
|
14
14
|
#include "port/likely.h"
|
|
15
15
|
#include "util/thread_local.h"
|
|
16
16
|
|
|
17
|
-
#
|
|
18
|
-
#define STORAGE_DECL static __thread
|
|
19
|
-
#else
|
|
20
|
-
#define STORAGE_DECL static
|
|
21
|
-
#endif
|
|
17
|
+
#define STORAGE_DECL static thread_local
|
|
22
18
|
|
|
23
19
|
namespace ROCKSDB_NAMESPACE {
|
|
24
20
|
|
|
@@ -31,8 +31,8 @@ size_t RateLimiter::RequestToken(size_t bytes, size_t alignment,
|
|
|
31
31
|
|
|
32
32
|
if (alignment > 0) {
|
|
33
33
|
// Here we may actually require more than burst and block
|
|
34
|
-
//
|
|
35
|
-
// thus we
|
|
34
|
+
// as we can not write/read less than one page at a time on direct I/O
|
|
35
|
+
// thus we do not want to be strictly constrained by burst
|
|
36
36
|
bytes = std::max(alignment, TruncateToPageBoundary(alignment, bytes));
|
|
37
37
|
}
|
|
38
38
|
Request(bytes, io_priority, stats, op_type);
|
|
@@ -347,10 +347,11 @@ void GenericRateLimiter::RefillBytesAndGrantRequests() {
|
|
|
347
347
|
|
|
348
348
|
int64_t GenericRateLimiter::CalculateRefillBytesPerPeriod(
|
|
349
349
|
int64_t rate_bytes_per_sec) {
|
|
350
|
-
if (
|
|
350
|
+
if (std::numeric_limits<int64_t>::max() / rate_bytes_per_sec <
|
|
351
|
+
options_.refill_period_us) {
|
|
351
352
|
// Avoid unexpected result in the overflow case. The result now is still
|
|
352
353
|
// inaccurate but is a number that is large enough.
|
|
353
|
-
return
|
|
354
|
+
return std::numeric_limits<int64_t>::max() / 1000000;
|
|
354
355
|
} else {
|
|
355
356
|
return rate_bytes_per_sec * options_.refill_period_us / 1000000;
|
|
356
357
|
}
|
|
@@ -374,7 +375,7 @@ Status GenericRateLimiter::Tune() {
|
|
|
374
375
|
std::chrono::microseconds(options_.refill_period_us);
|
|
375
376
|
// We tune every kRefillsPerTune intervals, so the overflow and division-by-
|
|
376
377
|
// zero conditions should never happen.
|
|
377
|
-
assert(num_drains_ <=
|
|
378
|
+
assert(num_drains_ <= std::numeric_limits<int64_t>::max() / 100);
|
|
378
379
|
assert(elapsed_intervals > 0);
|
|
379
380
|
int64_t drained_pct = num_drains_ * 100 / elapsed_intervals;
|
|
380
381
|
|
|
@@ -385,14 +386,15 @@ Status GenericRateLimiter::Tune() {
|
|
|
385
386
|
} else if (drained_pct < kLowWatermarkPct) {
|
|
386
387
|
// sanitize to prevent overflow
|
|
387
388
|
int64_t sanitized_prev_bytes_per_sec =
|
|
388
|
-
std::min(prev_bytes_per_sec,
|
|
389
|
+
std::min(prev_bytes_per_sec, std::numeric_limits<int64_t>::max() / 100);
|
|
389
390
|
new_bytes_per_sec =
|
|
390
391
|
std::max(options_.max_bytes_per_sec / kAllowedRangeFactor,
|
|
391
392
|
sanitized_prev_bytes_per_sec * 100 / (100 + kAdjustFactorPct));
|
|
392
393
|
} else if (drained_pct > kHighWatermarkPct) {
|
|
393
394
|
// sanitize to prevent overflow
|
|
394
|
-
int64_t sanitized_prev_bytes_per_sec =
|
|
395
|
-
prev_bytes_per_sec,
|
|
395
|
+
int64_t sanitized_prev_bytes_per_sec =
|
|
396
|
+
std::min(prev_bytes_per_sec, std::numeric_limits<int64_t>::max() /
|
|
397
|
+
(100 + kAdjustFactorPct));
|
|
396
398
|
new_bytes_per_sec =
|
|
397
399
|
std::min(options_.max_bytes_per_sec,
|
|
398
400
|
sanitized_prev_bytes_per_sec * (100 + kAdjustFactorPct) / 100);
|
|
@@ -433,7 +435,8 @@ static int RegisterBuiltinRateLimiters(ObjectLibrary& library,
|
|
|
433
435
|
GenericRateLimiter::kClassName(),
|
|
434
436
|
[](const std::string& /*uri*/, std::unique_ptr<RateLimiter>* guard,
|
|
435
437
|
std::string* /*errmsg*/) {
|
|
436
|
-
guard->reset(
|
|
438
|
+
guard->reset(
|
|
439
|
+
new GenericRateLimiter(std::numeric_limits<int64_t>::max()));
|
|
437
440
|
return guard->get();
|
|
438
441
|
});
|
|
439
442
|
size_t num_types;
|
|
@@ -36,7 +36,7 @@ class RateLimiterTest : public testing::Test {
|
|
|
36
36
|
};
|
|
37
37
|
|
|
38
38
|
TEST_F(RateLimiterTest, OverflowRate) {
|
|
39
|
-
GenericRateLimiter limiter(
|
|
39
|
+
GenericRateLimiter limiter(std::numeric_limits<int64_t>::max(), 1000, 10,
|
|
40
40
|
RateLimiter::Mode::kWritesOnly,
|
|
41
41
|
SystemClock::Default(), false /* auto_tuned */);
|
|
42
42
|
ASSERT_GT(limiter.GetSingleBurstBytes(), 1000000000ll);
|
|
@@ -142,7 +142,7 @@ namespace ribbon {
|
|
|
142
142
|
// only some small fixed number of columns (typically k=3) to 1 for each
|
|
143
143
|
// row of C, with remaining entries implicitly 0. This is implemented as
|
|
144
144
|
// three hash functions over [0,m), and S can be implemented as a vector
|
|
145
|
-
//
|
|
145
|
+
// of b-bit values. Now, a query only involves looking up k rows
|
|
146
146
|
// (values) in S and computing their bitwise XOR. Additionally, this
|
|
147
147
|
// construction can use a linear time algorithm called "peeling" for
|
|
148
148
|
// finding a solution in many cases of one existing, but peeling
|
|
@@ -1128,8 +1128,7 @@ TYPED_TEST(RibbonTypeParamTest, FindOccupancy) {
|
|
|
1128
1128
|
return;
|
|
1129
1129
|
}
|
|
1130
1130
|
|
|
1131
|
-
KeyGen cur(
|
|
1132
|
-
testing::UnitTest::GetInstance()->random_seed()),
|
|
1131
|
+
KeyGen cur(std::to_string(testing::UnitTest::GetInstance()->random_seed()),
|
|
1133
1132
|
0);
|
|
1134
1133
|
|
|
1135
1134
|
Banding banding;
|
|
@@ -1247,8 +1246,7 @@ TYPED_TEST(RibbonTypeParamTest, OptimizeHomogAtScale) {
|
|
|
1247
1246
|
return;
|
|
1248
1247
|
}
|
|
1249
1248
|
|
|
1250
|
-
KeyGen cur(
|
|
1251
|
-
testing::UnitTest::GetInstance()->random_seed()),
|
|
1249
|
+
KeyGen cur(std::to_string(testing::UnitTest::GetInstance()->random_seed()),
|
|
1252
1250
|
0);
|
|
1253
1251
|
|
|
1254
1252
|
Banding banding;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and its affiliates. All Rights Reserved.
|
|
2
|
+
// This source code is licensed under both the GPLv2 (found in the
|
|
3
|
+
// COPYING file in the root directory) and Apache 2.0 License
|
|
4
|
+
// (found in the LICENSE.Apache file in the root directory).
|
|
5
|
+
//
|
|
6
|
+
#pragma once
|
|
7
|
+
|
|
8
|
+
#if USE_COROUTINES
|
|
9
|
+
#include <atomic>
|
|
10
|
+
|
|
11
|
+
#include "folly/CPortability.h"
|
|
12
|
+
#include "folly/CppAttributes.h"
|
|
13
|
+
#include "folly/Executor.h"
|
|
14
|
+
#include "util/async_file_reader.h"
|
|
15
|
+
|
|
16
|
+
namespace ROCKSDB_NAMESPACE {
|
|
17
|
+
// Implements a simple executor that runs callback functions in the same
|
|
18
|
+
// thread, unlike CPUThreadExecutor which may schedule the callback on
|
|
19
|
+
// another thread. Runs in a tight loop calling the queued callbacks,
|
|
20
|
+
// and polls for async IO completions when idle. The completions will
|
|
21
|
+
// resume suspended coroutines and they get added to the queue, which
|
|
22
|
+
// will get picked up by this loop.
|
|
23
|
+
// Any possibility of deadlock is precluded because the file system
|
|
24
|
+
// guarantees that async IO completion callbacks will not be scheduled
|
|
25
|
+
// to run in this thread or this executor.
|
|
26
|
+
class SingleThreadExecutor : public folly::Executor {
|
|
27
|
+
public:
|
|
28
|
+
explicit SingleThreadExecutor(AsyncFileReader& reader)
|
|
29
|
+
: reader_(reader), busy_(false) {}
|
|
30
|
+
|
|
31
|
+
void add(folly::Func callback) override {
|
|
32
|
+
auto& q = q_;
|
|
33
|
+
q.push(std::move(callback));
|
|
34
|
+
if (q.size() == 1 && !busy_) {
|
|
35
|
+
while (!q.empty()) {
|
|
36
|
+
q.front()();
|
|
37
|
+
q.pop();
|
|
38
|
+
|
|
39
|
+
if (q.empty()) {
|
|
40
|
+
// Prevent recursion, as the Wait may queue resumed coroutines
|
|
41
|
+
busy_ = true;
|
|
42
|
+
reader_.Wait();
|
|
43
|
+
busy_ = false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
private:
|
|
50
|
+
std::queue<folly::Func> q_;
|
|
51
|
+
AsyncFileReader& reader_;
|
|
52
|
+
bool busy_;
|
|
53
|
+
};
|
|
54
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
55
|
+
#endif // USE_COROUTINES
|
|
@@ -30,8 +30,7 @@ class FixedPrefixTransform : public SliceTransform {
|
|
|
30
30
|
|
|
31
31
|
public:
|
|
32
32
|
explicit FixedPrefixTransform(size_t prefix_len) : prefix_len_(prefix_len) {
|
|
33
|
-
id_ = std::string(kClassName()) + "." +
|
|
34
|
-
ROCKSDB_NAMESPACE::ToString(prefix_len_);
|
|
33
|
+
id_ = std::string(kClassName()) + "." + std::to_string(prefix_len_);
|
|
35
34
|
}
|
|
36
35
|
|
|
37
36
|
static const char* kClassName() { return "rocksdb.FixedPrefix"; }
|
|
@@ -43,8 +42,8 @@ class FixedPrefixTransform : public SliceTransform {
|
|
|
43
42
|
if (name == id_) {
|
|
44
43
|
return true;
|
|
45
44
|
} else if (StartsWith(name, kNickName())) {
|
|
46
|
-
std::string alt_id =
|
|
47
|
-
|
|
45
|
+
std::string alt_id =
|
|
46
|
+
std::string(kNickName()) + ":" + std::to_string(prefix_len_);
|
|
48
47
|
if (name == alt_id) {
|
|
49
48
|
return true;
|
|
50
49
|
}
|
|
@@ -84,8 +83,7 @@ class CappedPrefixTransform : public SliceTransform {
|
|
|
84
83
|
|
|
85
84
|
public:
|
|
86
85
|
explicit CappedPrefixTransform(size_t cap_len) : cap_len_(cap_len) {
|
|
87
|
-
id_ =
|
|
88
|
-
std::string(kClassName()) + "." + ROCKSDB_NAMESPACE::ToString(cap_len_);
|
|
86
|
+
id_ = std::string(kClassName()) + "." + std::to_string(cap_len_);
|
|
89
87
|
}
|
|
90
88
|
|
|
91
89
|
static const char* kClassName() { return "rocksdb.CappedPrefix"; }
|
|
@@ -98,8 +96,8 @@ class CappedPrefixTransform : public SliceTransform {
|
|
|
98
96
|
if (name == id_) {
|
|
99
97
|
return true;
|
|
100
98
|
} else if (StartsWith(name, kNickName())) {
|
|
101
|
-
std::string alt_id =
|
|
102
|
-
|
|
99
|
+
std::string alt_id =
|
|
100
|
+
std::string(kNickName()) + ":" + std::to_string(cap_len_);
|
|
103
101
|
if (name == alt_id) {
|
|
104
102
|
return true;
|
|
105
103
|
}
|
|
@@ -291,7 +289,8 @@ std::string SliceTransform::AsString() const {
|
|
|
291
289
|
|
|
292
290
|
// 2 small internal utility functions, for efficient hex conversions
|
|
293
291
|
// and no need for snprintf, toupper etc...
|
|
294
|
-
// Originally from wdt/util/EncryptionUtils.cpp - for
|
|
292
|
+
// Originally from wdt/util/EncryptionUtils.cpp - for
|
|
293
|
+
// std::to_string(true)/DecodeHex:
|
|
295
294
|
char toHex(unsigned char v) {
|
|
296
295
|
if (v <= 9) {
|
|
297
296
|
return '0' + v;
|
|
@@ -315,7 +315,8 @@ uint32_t ParseUint32(const std::string& value) {
|
|
|
315
315
|
|
|
316
316
|
int32_t ParseInt32(const std::string& value) {
|
|
317
317
|
int64_t num = ParseInt64(value);
|
|
318
|
-
if (num <=
|
|
318
|
+
if (num <= std::numeric_limits<int32_t>::max() &&
|
|
319
|
+
num >= std::numeric_limits<int32_t>::min()) {
|
|
319
320
|
return static_cast<int32_t>(num);
|
|
320
321
|
} else {
|
|
321
322
|
throw std::out_of_range(value);
|
|
@@ -431,7 +432,7 @@ bool SerializeIntVector(const std::vector<int>& vec, std::string* value) {
|
|
|
431
432
|
if (i > 0) {
|
|
432
433
|
*value += ":";
|
|
433
434
|
}
|
|
434
|
-
*value +=
|
|
435
|
+
*value += std::to_string(vec[i]);
|
|
435
436
|
}
|
|
436
437
|
return true;
|
|
437
438
|
}
|
|
@@ -19,19 +19,6 @@ class Slice;
|
|
|
19
19
|
|
|
20
20
|
extern std::vector<std::string> StringSplit(const std::string& arg, char delim);
|
|
21
21
|
|
|
22
|
-
template <typename T>
|
|
23
|
-
inline std::string ToString(T value) {
|
|
24
|
-
#if !(defined OS_ANDROID) && !(defined CYGWIN) && !(defined OS_FREEBSD)
|
|
25
|
-
return std::to_string(value);
|
|
26
|
-
#else
|
|
27
|
-
// Andorid or cygwin doesn't support all of C++11, std::to_string() being
|
|
28
|
-
// one of the not supported features.
|
|
29
|
-
std::ostringstream os;
|
|
30
|
-
os << value;
|
|
31
|
-
return os.str();
|
|
32
|
-
#endif
|
|
33
|
-
}
|
|
34
|
-
|
|
35
22
|
// Append a human-readable printout of "num" to *str
|
|
36
23
|
extern void AppendNumberTo(std::string* str, uint64_t num);
|
|
37
24
|
|
|
@@ -140,20 +140,15 @@ private:
|
|
|
140
140
|
// The private mutex. Developers should always use Mutex() instead of
|
|
141
141
|
// using this variable directly.
|
|
142
142
|
port::Mutex mutex_;
|
|
143
|
-
#ifdef ROCKSDB_SUPPORT_THREAD_LOCAL
|
|
144
143
|
// Thread local storage
|
|
145
|
-
static
|
|
146
|
-
#endif
|
|
144
|
+
static thread_local ThreadData* tls_;
|
|
147
145
|
|
|
148
146
|
// Used to make thread exit trigger possible if !defined(OS_MACOSX).
|
|
149
147
|
// Otherwise, used to retrieve thread data.
|
|
150
148
|
pthread_key_t pthread_key_;
|
|
151
149
|
};
|
|
152
150
|
|
|
153
|
-
|
|
154
|
-
#ifdef ROCKSDB_SUPPORT_THREAD_LOCAL
|
|
155
|
-
__thread ThreadData* ThreadLocalPtr::StaticMeta::tls_ = nullptr;
|
|
156
|
-
#endif
|
|
151
|
+
thread_local ThreadData* ThreadLocalPtr::StaticMeta::tls_ = nullptr;
|
|
157
152
|
|
|
158
153
|
// Windows doesn't support a per-thread destructor with its
|
|
159
154
|
// TLS primitives. So, we build it manually by inserting a
|
|
@@ -263,13 +258,10 @@ ThreadLocalPtr::StaticMeta* ThreadLocalPtr::Instance() {
|
|
|
263
258
|
// the following variable will go first, then OnThreadExit, therefore causing
|
|
264
259
|
// invalid access.
|
|
265
260
|
//
|
|
266
|
-
// The above problem can be solved by using thread_local to store tls_
|
|
267
|
-
//
|
|
268
|
-
// is that thread_local supports dynamic construction and destruction of
|
|
261
|
+
// The above problem can be solved by using thread_local to store tls_.
|
|
262
|
+
// thread_local supports dynamic construction and destruction of
|
|
269
263
|
// non-primitive typed variables. As a result, we can guarantee the
|
|
270
264
|
// destruction order even when the main thread dies before any child threads.
|
|
271
|
-
// However, thread_local is not supported in all compilers that accept -std=c++11
|
|
272
|
-
// (e.g., eg Mac with XCode < 8. XCode 8+ supports thread_local).
|
|
273
265
|
static ThreadLocalPtr::StaticMeta* inst = new ThreadLocalPtr::StaticMeta();
|
|
274
266
|
return inst;
|
|
275
267
|
}
|
|
@@ -328,10 +320,6 @@ ThreadLocalPtr::StaticMeta::StaticMeta()
|
|
|
328
320
|
#if !defined(OS_WIN)
|
|
329
321
|
static struct A {
|
|
330
322
|
~A() {
|
|
331
|
-
#ifndef ROCKSDB_SUPPORT_THREAD_LOCAL
|
|
332
|
-
ThreadData* tls_ =
|
|
333
|
-
static_cast<ThreadData*>(pthread_getspecific(Instance()->pthread_key_));
|
|
334
|
-
#endif
|
|
335
323
|
if (tls_) {
|
|
336
324
|
OnThreadExit(tls_);
|
|
337
325
|
}
|
|
@@ -366,13 +354,6 @@ void ThreadLocalPtr::StaticMeta::RemoveThreadData(
|
|
|
366
354
|
}
|
|
367
355
|
|
|
368
356
|
ThreadData* ThreadLocalPtr::StaticMeta::GetThreadLocal() {
|
|
369
|
-
#ifndef ROCKSDB_SUPPORT_THREAD_LOCAL
|
|
370
|
-
// Make this local variable name look like a member variable so that we
|
|
371
|
-
// can share all the code below
|
|
372
|
-
ThreadData* tls_ =
|
|
373
|
-
static_cast<ThreadData*>(pthread_getspecific(Instance()->pthread_key_));
|
|
374
|
-
#endif
|
|
375
|
-
|
|
376
357
|
if (UNLIKELY(tls_ == nullptr)) {
|
|
377
358
|
auto* inst = Instance();
|
|
378
359
|
tls_ = new ThreadData(inst);
|