@nxtedition/rocksdb 6.0.1 → 7.0.0-alpha.1
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 +12 -4
- package/binding.cc +421 -40
- 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 +20 -13
- package/index.js +187 -3
- package/iterator.js +1 -0
- package/package-lock.json +23687 -0
- package/package.json +2 -30
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/snapshot.js +23 -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/darwin-x64/node.napi.node +0 -0
- package/prebuilds/linux-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -369,6 +369,46 @@ TEST_F(RangeLockingTest, LockWaitCount) {
|
|
|
369
369
|
delete txn1;
|
|
370
370
|
}
|
|
371
371
|
|
|
372
|
+
TEST_F(RangeLockingTest, LockWaiteeAccess) {
|
|
373
|
+
TransactionOptions txn_options;
|
|
374
|
+
auto cf = db->DefaultColumnFamily();
|
|
375
|
+
txn_options.lock_timeout = 60;
|
|
376
|
+
Transaction* txn0 = db->BeginTransaction(WriteOptions(), txn_options);
|
|
377
|
+
Transaction* txn1 = db->BeginTransaction(WriteOptions(), txn_options);
|
|
378
|
+
|
|
379
|
+
// Get a range lock
|
|
380
|
+
ASSERT_OK(txn0->GetRangeLock(cf, Endpoint("a"), Endpoint("c")));
|
|
381
|
+
|
|
382
|
+
std::atomic<bool> reached(false);
|
|
383
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
384
|
+
"RangeTreeLockManager::TryRangeLock:EnterWaitingTxn", [&](void* /*arg*/) {
|
|
385
|
+
reached.store(true);
|
|
386
|
+
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
|
|
387
|
+
});
|
|
388
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
389
|
+
|
|
390
|
+
port::Thread t([&]() {
|
|
391
|
+
// Attempt to get a conflicting lock
|
|
392
|
+
auto s = txn1->GetRangeLock(cf, Endpoint("b"), Endpoint("z"));
|
|
393
|
+
ASSERT_TRUE(s.ok());
|
|
394
|
+
txn1->Rollback();
|
|
395
|
+
});
|
|
396
|
+
|
|
397
|
+
while (!reached.load()) {
|
|
398
|
+
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
|
399
|
+
}
|
|
400
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
|
|
401
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
402
|
+
|
|
403
|
+
// Release locks and free the transaction
|
|
404
|
+
txn0->Rollback();
|
|
405
|
+
delete txn0;
|
|
406
|
+
|
|
407
|
+
t.join();
|
|
408
|
+
|
|
409
|
+
delete txn1;
|
|
410
|
+
}
|
|
411
|
+
|
|
372
412
|
void PointLockManagerTestExternalSetup(PointLockManagerTest* self) {
|
|
373
413
|
self->env_ = Env::Default();
|
|
374
414
|
self->db_dir_ = test::PerThreadDBPath("point_lock_manager_test");
|
|
@@ -368,8 +368,6 @@ void lock_request::retry_all_lock_requests(
|
|
|
368
368
|
|
|
369
369
|
toku_mutex_lock(&info->retry_mutex);
|
|
370
370
|
|
|
371
|
-
lock_wait_infos conflicts_collector;
|
|
372
|
-
|
|
373
371
|
// here is the group retry algorithm.
|
|
374
372
|
// get the latest retry_want count and use it as the generation number of
|
|
375
373
|
// this retry operation. if this retry generation is > the last retry
|
|
@@ -381,7 +379,7 @@ void lock_request::retry_all_lock_requests(
|
|
|
381
379
|
info->running_retry = true;
|
|
382
380
|
info->retry_done = info->retry_want;
|
|
383
381
|
toku_mutex_unlock(&info->retry_mutex);
|
|
384
|
-
retry_all_lock_requests_info(info,
|
|
382
|
+
retry_all_lock_requests_info(info, lock_wait_callback, callback_arg);
|
|
385
383
|
if (after_retry_all_test_callback) after_retry_all_test_callback();
|
|
386
384
|
toku_mutex_lock(&info->retry_mutex);
|
|
387
385
|
info->running_retry = false;
|
|
@@ -393,14 +391,14 @@ void lock_request::retry_all_lock_requests(
|
|
|
393
391
|
}
|
|
394
392
|
}
|
|
395
393
|
toku_mutex_unlock(&info->retry_mutex);
|
|
396
|
-
|
|
397
|
-
report_waits(&conflicts_collector, lock_wait_callback, callback_arg);
|
|
398
394
|
}
|
|
399
395
|
|
|
400
|
-
void lock_request::retry_all_lock_requests_info(
|
|
401
|
-
|
|
396
|
+
void lock_request::retry_all_lock_requests_info(
|
|
397
|
+
lt_lock_request_info *info,
|
|
398
|
+
void (*lock_wait_callback)(void *, lock_wait_infos *), void *callback_arg) {
|
|
402
399
|
toku_external_mutex_lock(&info->mutex);
|
|
403
400
|
// retry all of the pending lock requests.
|
|
401
|
+
lock_wait_infos conflicts_collector;
|
|
404
402
|
for (uint32_t i = 0; i < info->pending_lock_requests.size();) {
|
|
405
403
|
lock_request *request;
|
|
406
404
|
int r = info->pending_lock_requests.fetch(i, &request);
|
|
@@ -410,12 +408,16 @@ void lock_request::retry_all_lock_requests_info(lt_lock_request_info *info,
|
|
|
410
408
|
// move on to the next lock request. otherwise
|
|
411
409
|
// the request is gone from the list so we may
|
|
412
410
|
// read the i'th entry for the next one.
|
|
413
|
-
r = request->retry(
|
|
411
|
+
r = request->retry(&conflicts_collector);
|
|
414
412
|
if (r != 0) {
|
|
415
413
|
i++;
|
|
416
414
|
}
|
|
417
415
|
}
|
|
418
416
|
|
|
417
|
+
// call report_waits while holding the pending queue lock since
|
|
418
|
+
// the waiter object is still valid while it's in the queue
|
|
419
|
+
report_waits(&conflicts_collector, lock_wait_callback, callback_arg);
|
|
420
|
+
|
|
419
421
|
// future threads should only retry lock requests if some still exist
|
|
420
422
|
info->should_retry_lock_requests = info->pending_lock_requests.size() > 0;
|
|
421
423
|
toku_external_mutex_unlock(&info->mutex);
|
|
@@ -140,8 +140,10 @@ class lock_request {
|
|
|
140
140
|
void (*lock_wait_callback)(void *, lock_wait_infos *) = nullptr,
|
|
141
141
|
void *callback_arg = nullptr,
|
|
142
142
|
void (*after_retry_test_callback)(void) = nullptr);
|
|
143
|
-
static void retry_all_lock_requests_info(
|
|
144
|
-
|
|
143
|
+
static void retry_all_lock_requests_info(
|
|
144
|
+
lt_lock_request_info *info,
|
|
145
|
+
void (*lock_wait_callback)(void *, lock_wait_infos *),
|
|
146
|
+
void *callback_arg);
|
|
145
147
|
|
|
146
148
|
void set_start_test_callback(void (*f)(void));
|
|
147
149
|
void set_start_before_pending_test_callback(void (*f)(void));
|
|
@@ -137,6 +137,23 @@ static inline tokutime_t toku_time_now(void) {
|
|
|
137
137
|
uint64_t result;
|
|
138
138
|
asm volatile("stckf %0" : "=Q"(result) : : "cc");
|
|
139
139
|
return result;
|
|
140
|
+
#elif defined(__riscv) && __riscv_xlen == 32
|
|
141
|
+
uint32_t cycles_lo, cycles_hi0, cycles_hi1;
|
|
142
|
+
// Implemented in assembly because Clang insisted on branching.
|
|
143
|
+
asm volatile(
|
|
144
|
+
"rdcycleh %0\n"
|
|
145
|
+
"rdcycle %1\n"
|
|
146
|
+
"rdcycleh %2\n"
|
|
147
|
+
"sub %0, %0, %2\n"
|
|
148
|
+
"seqz %0, %0\n"
|
|
149
|
+
"sub %0, zero, %0\n"
|
|
150
|
+
"and %1, %1, %0\n"
|
|
151
|
+
: "=r"(cycles_hi0), "=r"(cycles_lo), "=r"(cycles_hi1));
|
|
152
|
+
return (static_cast<uint64_t>(cycles_hi1) << 32) | cycles_lo;
|
|
153
|
+
#elif defined(__riscv) && __riscv_xlen == 64
|
|
154
|
+
uint64_t cycles;
|
|
155
|
+
asm volatile("rdcycle %0" : "=r"(cycles));
|
|
156
|
+
return cycles;
|
|
140
157
|
#else
|
|
141
158
|
#error No timer implementation for this platform
|
|
142
159
|
#endif
|
package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc
CHANGED
|
@@ -111,8 +111,7 @@ Status RangeTreeLockManager::TryLock(PessimisticTransaction* txn,
|
|
|
111
111
|
deserialize_endpoint(start_dbt, &start);
|
|
112
112
|
deserialize_endpoint(end_dbt, &end);
|
|
113
113
|
|
|
114
|
-
di_path.push_back({
|
|
115
|
-
column_family_id, is_exclusive, std::move(start),
|
|
114
|
+
di_path.push_back({txnid, column_family_id, is_exclusive, std::move(start),
|
|
116
115
|
std::move(end)});
|
|
117
116
|
};
|
|
118
117
|
|
|
@@ -150,13 +149,16 @@ Status RangeTreeLockManager::TryLock(PessimisticTransaction* txn,
|
|
|
150
149
|
// Wait callback that locktree library will call to inform us about
|
|
151
150
|
// the lock waits that are in progress.
|
|
152
151
|
void wait_callback_for_locktree(void*, toku::lock_wait_infos* infos) {
|
|
152
|
+
TEST_SYNC_POINT("RangeTreeLockManager::TryRangeLock:EnterWaitingTxn");
|
|
153
153
|
for (auto wait_info : *infos) {
|
|
154
|
+
// As long as we hold the lock on the locktree's pending request queue
|
|
155
|
+
// this should be safe.
|
|
154
156
|
auto txn = (PessimisticTransaction*)wait_info.waiter;
|
|
155
157
|
auto cf_id = (ColumnFamilyId)wait_info.ltree->get_dict_id().dictid;
|
|
156
158
|
|
|
157
159
|
autovector<TransactionID> waitee_ids;
|
|
158
160
|
for (auto waitee : wait_info.waitees) {
|
|
159
|
-
waitee_ids.push_back(
|
|
161
|
+
waitee_ids.push_back(waitee);
|
|
160
162
|
}
|
|
161
163
|
txn->SetWaitingTxn(waitee_ids, cf_id, (std::string*)wait_info.m_extra);
|
|
162
164
|
}
|
|
@@ -475,12 +477,10 @@ static void push_into_lock_status_data(void* param, const DBT* left,
|
|
|
475
477
|
deserialize_endpoint(right, &info.end);
|
|
476
478
|
|
|
477
479
|
if (txnid_arg != TXNID_SHARED) {
|
|
478
|
-
|
|
479
|
-
info.ids.push_back(txnid);
|
|
480
|
+
info.ids.push_back(txnid_arg);
|
|
480
481
|
} else {
|
|
481
482
|
for (auto it : *owners) {
|
|
482
|
-
|
|
483
|
-
info.ids.push_back(real_id);
|
|
483
|
+
info.ids.push_back(it);
|
|
484
484
|
}
|
|
485
485
|
}
|
|
486
486
|
ctx->data->insert({ctx->cfh_id, info});
|
|
@@ -61,7 +61,14 @@ PessimisticTransaction::PessimisticTransaction(
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
void PessimisticTransaction::Initialize(const TransactionOptions& txn_options) {
|
|
64
|
-
|
|
64
|
+
// Range lock manager uses address of transaction object as TXNID
|
|
65
|
+
const TransactionDBOptions& db_options = txn_db_impl_->GetTxnDBOptions();
|
|
66
|
+
if (db_options.lock_mgr_handle &&
|
|
67
|
+
db_options.lock_mgr_handle->getLockManager()->IsRangeLockSupported()) {
|
|
68
|
+
txn_id_ = reinterpret_cast<TransactionID>(this);
|
|
69
|
+
} else {
|
|
70
|
+
txn_id_ = GenTxnID();
|
|
71
|
+
}
|
|
65
72
|
|
|
66
73
|
txn_state_ = STARTED;
|
|
67
74
|
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
#include <assert.h>
|
|
10
10
|
#endif // ROCKSDB_LITE
|
|
11
11
|
|
|
12
|
+
#include "port/lang.h"
|
|
12
13
|
#include "utilities/transactions/write_prepared_txn_db.h"
|
|
13
14
|
|
|
14
15
|
namespace ROCKSDB_NAMESPACE {
|
|
@@ -44,6 +45,9 @@ SnapshotCheckerResult WritePreparedSnapshotChecker::CheckInSnapshot(
|
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
#endif // ROCKSDB_LITE
|
|
47
|
-
DisableGCSnapshotChecker DisableGCSnapshotChecker::instance_;
|
|
48
48
|
|
|
49
|
+
DisableGCSnapshotChecker* DisableGCSnapshotChecker::Instance() {
|
|
50
|
+
STATIC_AVOID_DESTRUCTION(DisableGCSnapshotChecker, instance);
|
|
51
|
+
return &instance;
|
|
52
|
+
}
|
|
49
53
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -574,8 +574,8 @@ TEST_P(TransactionTest, DeadlockCycleShared) {
|
|
|
574
574
|
for (uint32_t i = 0; i < 31; i++) {
|
|
575
575
|
txns[i] = db->BeginTransaction(write_options, txn_options);
|
|
576
576
|
ASSERT_TRUE(txns[i]);
|
|
577
|
-
auto s = txns[i]->GetForUpdate(read_options,
|
|
578
|
-
false /* exclusive */);
|
|
577
|
+
auto s = txns[i]->GetForUpdate(read_options, std::to_string((i + 1) / 2),
|
|
578
|
+
nullptr, false /* exclusive */);
|
|
579
579
|
ASSERT_OK(s);
|
|
580
580
|
}
|
|
581
581
|
|
|
@@ -589,8 +589,8 @@ TEST_P(TransactionTest, DeadlockCycleShared) {
|
|
|
589
589
|
std::vector<port::Thread> threads;
|
|
590
590
|
for (uint32_t i = 0; i < 15; i++) {
|
|
591
591
|
std::function<void()> blocking_thread = [&, i] {
|
|
592
|
-
auto s = txns[i]->GetForUpdate(read_options,
|
|
593
|
-
true /* exclusive */);
|
|
592
|
+
auto s = txns[i]->GetForUpdate(read_options, std::to_string(i + 1),
|
|
593
|
+
nullptr, true /* exclusive */);
|
|
594
594
|
ASSERT_OK(s);
|
|
595
595
|
ASSERT_OK(txns[i]->Rollback());
|
|
596
596
|
delete txns[i];
|
|
@@ -641,7 +641,7 @@ TEST_P(TransactionTest, DeadlockCycleShared) {
|
|
|
641
641
|
auto dl_node = *it;
|
|
642
642
|
ASSERT_EQ(dl_node.m_txn_id, offset_root + leaf_id);
|
|
643
643
|
ASSERT_EQ(dl_node.m_cf_id, 0U);
|
|
644
|
-
ASSERT_EQ(dl_node.m_waiting_key,
|
|
644
|
+
ASSERT_EQ(dl_node.m_waiting_key, std::to_string(curr_waiting_key));
|
|
645
645
|
ASSERT_EQ(dl_node.m_exclusive, true);
|
|
646
646
|
|
|
647
647
|
if (curr_waiting_key == 0) {
|
|
@@ -708,7 +708,8 @@ TEST_P(TransactionTest, DeadlockCycleShared) {
|
|
|
708
708
|
for (uint32_t i = 0; i < 2; i++) {
|
|
709
709
|
txns_shared[i] = db->BeginTransaction(write_options, txn_options);
|
|
710
710
|
ASSERT_TRUE(txns_shared[i]);
|
|
711
|
-
auto s =
|
|
711
|
+
auto s =
|
|
712
|
+
txns_shared[i]->GetForUpdate(read_options, std::to_string(i), nullptr);
|
|
712
713
|
ASSERT_OK(s);
|
|
713
714
|
}
|
|
714
715
|
|
|
@@ -721,8 +722,8 @@ TEST_P(TransactionTest, DeadlockCycleShared) {
|
|
|
721
722
|
std::vector<port::Thread> threads_shared;
|
|
722
723
|
for (uint32_t i = 0; i < 1; i++) {
|
|
723
724
|
std::function<void()> blocking_thread = [&, i] {
|
|
724
|
-
auto s =
|
|
725
|
-
|
|
725
|
+
auto s = txns_shared[i]->GetForUpdate(read_options, std::to_string(i + 1),
|
|
726
|
+
nullptr);
|
|
726
727
|
ASSERT_OK(s);
|
|
727
728
|
ASSERT_OK(txns_shared[i]->Rollback());
|
|
728
729
|
delete txns_shared[i];
|
|
@@ -781,7 +782,7 @@ TEST_P(TransactionStressTest, DeadlockCycle) {
|
|
|
781
782
|
for (uint32_t i = 0; i < len; i++) {
|
|
782
783
|
txns[i] = db->BeginTransaction(write_options, txn_options);
|
|
783
784
|
ASSERT_TRUE(txns[i]);
|
|
784
|
-
auto s = txns[i]->GetForUpdate(read_options,
|
|
785
|
+
auto s = txns[i]->GetForUpdate(read_options, std::to_string(i), nullptr);
|
|
785
786
|
ASSERT_OK(s);
|
|
786
787
|
}
|
|
787
788
|
|
|
@@ -796,7 +797,8 @@ TEST_P(TransactionStressTest, DeadlockCycle) {
|
|
|
796
797
|
std::vector<port::Thread> threads;
|
|
797
798
|
for (uint32_t i = 0; i + 1 < len; i++) {
|
|
798
799
|
std::function<void()> blocking_thread = [&, i] {
|
|
799
|
-
auto s =
|
|
800
|
+
auto s =
|
|
801
|
+
txns[i]->GetForUpdate(read_options, std::to_string(i + 1), nullptr);
|
|
800
802
|
ASSERT_OK(s);
|
|
801
803
|
ASSERT_OK(txns[i]->Rollback());
|
|
802
804
|
delete txns[i];
|
|
@@ -848,7 +850,7 @@ TEST_P(TransactionStressTest, DeadlockCycle) {
|
|
|
848
850
|
auto dl_node = *it;
|
|
849
851
|
ASSERT_EQ(dl_node.m_txn_id, len + curr_txn_id - 1);
|
|
850
852
|
ASSERT_EQ(dl_node.m_cf_id, 0u);
|
|
851
|
-
ASSERT_EQ(dl_node.m_waiting_key,
|
|
853
|
+
ASSERT_EQ(dl_node.m_waiting_key, std::to_string(curr_waiting_key));
|
|
852
854
|
ASSERT_EQ(dl_node.m_exclusive, true);
|
|
853
855
|
|
|
854
856
|
curr_txn_id--;
|
|
@@ -882,8 +884,8 @@ TEST_P(TransactionStressTest, DeadlockStress) {
|
|
|
882
884
|
std::vector<std::string> keys;
|
|
883
885
|
|
|
884
886
|
for (uint32_t i = 0; i < NUM_KEYS; i++) {
|
|
885
|
-
ASSERT_OK(db->Put(write_options, Slice(
|
|
886
|
-
keys.push_back(
|
|
887
|
+
ASSERT_OK(db->Put(write_options, Slice(std::to_string(i)), Slice("")));
|
|
888
|
+
keys.push_back(std::to_string(i));
|
|
887
889
|
}
|
|
888
890
|
|
|
889
891
|
size_t tid = std::hash<std::thread::id>()(std::this_thread::get_id());
|
|
@@ -959,8 +961,8 @@ TEST_P(TransactionTest, LogMarkLeakTest) {
|
|
|
959
961
|
ASSERT_EQ(db_impl->TEST_FindMinLogContainingOutstandingPrep(), 0);
|
|
960
962
|
for (size_t i = 0; i < 100; i++) {
|
|
961
963
|
Transaction* txn = db->BeginTransaction(write_options, txn_options);
|
|
962
|
-
ASSERT_OK(txn->SetName("xid" +
|
|
963
|
-
ASSERT_OK(txn->Put(Slice("foo" +
|
|
964
|
+
ASSERT_OK(txn->SetName("xid" + std::to_string(i)));
|
|
965
|
+
ASSERT_OK(txn->Put(Slice("foo" + std::to_string(i)), Slice("bar")));
|
|
964
966
|
ASSERT_OK(txn->Prepare());
|
|
965
967
|
ASSERT_GT(db_impl->TEST_FindMinLogContainingOutstandingPrep(), 0);
|
|
966
968
|
if (rnd.OneIn(5)) {
|
|
@@ -5469,6 +5471,10 @@ Status TransactionStressTestInserter(
|
|
|
5469
5471
|
TEST_P(MySQLStyleTransactionTest, TransactionStressTest) {
|
|
5470
5472
|
// Small write buffer to trigger more compactions
|
|
5471
5473
|
options.write_buffer_size = 1024;
|
|
5474
|
+
txn_db_options.rollback_deletion_type_callback =
|
|
5475
|
+
[](TransactionDB*, ColumnFamilyHandle*, const Slice& key) {
|
|
5476
|
+
return RandomTransactionInserter::RollbackDeletionTypeCallback(key);
|
|
5477
|
+
};
|
|
5472
5478
|
ASSERT_OK(ReOpenNoDelete());
|
|
5473
5479
|
constexpr size_t num_workers = 4; // worker threads count
|
|
5474
5480
|
constexpr size_t num_checkers = 2; // checker threads count
|
|
@@ -79,7 +79,7 @@ Status TransactionUtil::CheckKey(DBImpl* db_impl, SuperVersion* sv,
|
|
|
79
79
|
result = Status::TryAgain(
|
|
80
80
|
"Transaction could not check for conflicts as the MemTable does not "
|
|
81
81
|
"contain a long enough history to check write at SequenceNumber: ",
|
|
82
|
-
|
|
82
|
+
std::to_string(snap_seq));
|
|
83
83
|
}
|
|
84
84
|
} else if (snap_seq < earliest_seq || min_uncommitted <= earliest_seq) {
|
|
85
85
|
// Use <= for min_uncommitted since earliest_seq is actually the largest sec
|
|
@@ -164,7 +164,7 @@ Status TransactionUtil::CheckKeysForConflicts(DBImpl* db_impl,
|
|
|
164
164
|
SuperVersion* sv = db_impl->GetAndRefSuperVersion(cf);
|
|
165
165
|
if (sv == nullptr) {
|
|
166
166
|
result = Status::InvalidArgument("Could not access column family " +
|
|
167
|
-
|
|
167
|
+
std::to_string(cf));
|
|
168
168
|
break;
|
|
169
169
|
}
|
|
170
170
|
|
|
@@ -1596,9 +1596,9 @@ TEST_P(WritePreparedTransactionTest, SmallestUnCommittedSeq) {
|
|
|
1596
1596
|
const int cnt = 100;
|
|
1597
1597
|
for (int i = 0; i < cnt; i++) {
|
|
1598
1598
|
Transaction* txn = db->BeginTransaction(write_options, txn_options);
|
|
1599
|
-
ASSERT_OK(txn->SetName("xid" +
|
|
1600
|
-
auto key = "key1" +
|
|
1601
|
-
auto value = "value1" +
|
|
1599
|
+
ASSERT_OK(txn->SetName("xid" + std::to_string(i)));
|
|
1600
|
+
auto key = "key1" + std::to_string(i);
|
|
1601
|
+
auto value = "value1" + std::to_string(i);
|
|
1602
1602
|
ASSERT_OK(txn->Put(Slice(key), Slice(value)));
|
|
1603
1603
|
ASSERT_OK(txn->Prepare());
|
|
1604
1604
|
txns.push_back(txn);
|
|
@@ -2229,7 +2229,7 @@ TEST_P(WritePreparedTransactionTest, Rollback) {
|
|
|
2229
2229
|
for (bool crash : {false, true}) {
|
|
2230
2230
|
ASSERT_OK(ReOpen());
|
|
2231
2231
|
WritePreparedTxnDB* wp_db = dynamic_cast<WritePreparedTxnDB*>(db);
|
|
2232
|
-
std::string key_str = "key" +
|
|
2232
|
+
std::string key_str = "key" + std::to_string(ikey);
|
|
2233
2233
|
switch (ivalue) {
|
|
2234
2234
|
case 0:
|
|
2235
2235
|
break;
|
|
@@ -2335,7 +2335,7 @@ TEST_P(WritePreparedTransactionTest, DisableGCDuringRecovery) {
|
|
|
2335
2335
|
std::vector<KeyVersion> versions;
|
|
2336
2336
|
uint64_t seq = 0;
|
|
2337
2337
|
for (uint64_t i = 1; i <= 1024; i++) {
|
|
2338
|
-
std::string v = "bar" +
|
|
2338
|
+
std::string v = "bar" + std::to_string(i);
|
|
2339
2339
|
ASSERT_OK(db->Put(WriteOptions(), "foo", v));
|
|
2340
2340
|
VerifyKeys({{"foo", v}});
|
|
2341
2341
|
seq++; // one for the key/value
|
|
@@ -3202,6 +3202,8 @@ TEST_P(WritePreparedTransactionTest, ReleaseEarliestSnapshotAfterSeqZeroing2) {
|
|
|
3202
3202
|
TEST_P(WritePreparedTransactionTest, SingleDeleteAfterRollback) {
|
|
3203
3203
|
constexpr size_t kSnapshotCacheBits = 7; // same as default
|
|
3204
3204
|
constexpr size_t kCommitCacheBits = 0; // minimum commit cache
|
|
3205
|
+
txn_db_options.rollback_deletion_type_callback =
|
|
3206
|
+
[](TransactionDB*, ColumnFamilyHandle*, const Slice&) { return true; };
|
|
3205
3207
|
UpdateTransactionDBOptions(kSnapshotCacheBits, kCommitCacheBits);
|
|
3206
3208
|
options.disable_auto_compactions = true;
|
|
3207
3209
|
ASSERT_OK(ReOpen());
|
|
@@ -3290,7 +3292,7 @@ TEST_P(WritePreparedTransactionTest,
|
|
|
3290
3292
|
ASSERT_OK(ReOpen());
|
|
3291
3293
|
|
|
3292
3294
|
for (size_t i = 0; i < kNumTransactions; i++) {
|
|
3293
|
-
std::string key = "key" +
|
|
3295
|
+
std::string key = "key" + std::to_string(i);
|
|
3294
3296
|
std::string value = "value0";
|
|
3295
3297
|
ASSERT_OK(db->Put(WriteOptions(), key, value));
|
|
3296
3298
|
current_data[key] = value;
|
|
@@ -3300,16 +3302,16 @@ TEST_P(WritePreparedTransactionTest,
|
|
|
3300
3302
|
for (size_t iter = 0; iter < kNumIterations; iter++) {
|
|
3301
3303
|
auto r = rnd.Next() % (kNumTransactions + 1);
|
|
3302
3304
|
if (r < kNumTransactions) {
|
|
3303
|
-
std::string key = "key" +
|
|
3305
|
+
std::string key = "key" + std::to_string(r);
|
|
3304
3306
|
if (transactions[r] == nullptr) {
|
|
3305
|
-
std::string value = "value" +
|
|
3307
|
+
std::string value = "value" + std::to_string(versions[r] + 1);
|
|
3306
3308
|
auto* txn = db->BeginTransaction(WriteOptions());
|
|
3307
|
-
ASSERT_OK(txn->SetName("txn" +
|
|
3309
|
+
ASSERT_OK(txn->SetName("txn" + std::to_string(r)));
|
|
3308
3310
|
ASSERT_OK(txn->Put(key, value));
|
|
3309
3311
|
ASSERT_OK(txn->Prepare());
|
|
3310
3312
|
transactions[r] = txn;
|
|
3311
3313
|
} else {
|
|
3312
|
-
std::string value = "value" +
|
|
3314
|
+
std::string value = "value" + std::to_string(++versions[r]);
|
|
3313
3315
|
ASSERT_OK(transactions[r]->Commit());
|
|
3314
3316
|
delete transactions[r];
|
|
3315
3317
|
transactions[r] = nullptr;
|
|
@@ -3886,7 +3888,7 @@ TEST_P(WritePreparedTransactionTest, CommitOfDelayedPrepared) {
|
|
|
3886
3888
|
Transaction* txn =
|
|
3887
3889
|
db->BeginTransaction(WriteOptions(), TransactionOptions());
|
|
3888
3890
|
ASSERT_OK(txn->SetName("xid"));
|
|
3889
|
-
std::string val_str = "value" +
|
|
3891
|
+
std::string val_str = "value" + std::to_string(i);
|
|
3890
3892
|
for (size_t b = 0; b < sub_batch_cnt; b++) {
|
|
3891
3893
|
ASSERT_OK(txn->Put(Slice("key2"), val_str));
|
|
3892
3894
|
}
|
|
@@ -3970,6 +3972,62 @@ TEST_P(WritePreparedTransactionTest, AtomicCommit) {
|
|
|
3970
3972
|
}
|
|
3971
3973
|
}
|
|
3972
3974
|
|
|
3975
|
+
TEST_P(WritePreparedTransactionTest, BasicRollbackDeletionTypeCb) {
|
|
3976
|
+
options.level0_file_num_compaction_trigger = 2;
|
|
3977
|
+
// Always use SingleDelete to rollback Put.
|
|
3978
|
+
txn_db_options.rollback_deletion_type_callback =
|
|
3979
|
+
[](TransactionDB*, ColumnFamilyHandle*, const Slice&) { return true; };
|
|
3980
|
+
|
|
3981
|
+
const auto write_to_db = [&]() {
|
|
3982
|
+
assert(db);
|
|
3983
|
+
std::unique_ptr<Transaction> txn0(
|
|
3984
|
+
db->BeginTransaction(WriteOptions(), TransactionOptions()));
|
|
3985
|
+
ASSERT_OK(txn0->SetName("txn0"));
|
|
3986
|
+
ASSERT_OK(txn0->Put("a", "v0"));
|
|
3987
|
+
ASSERT_OK(txn0->Prepare());
|
|
3988
|
+
|
|
3989
|
+
// Generate sst1: [PUT('a')]
|
|
3990
|
+
ASSERT_OK(db->Flush(FlushOptions()));
|
|
3991
|
+
|
|
3992
|
+
{
|
|
3993
|
+
CompactRangeOptions cro;
|
|
3994
|
+
cro.change_level = true;
|
|
3995
|
+
cro.target_level = options.num_levels - 1;
|
|
3996
|
+
cro.bottommost_level_compaction = BottommostLevelCompaction::kForce;
|
|
3997
|
+
ASSERT_OK(db->CompactRange(cro, /*begin=*/nullptr, /*end=*/nullptr));
|
|
3998
|
+
}
|
|
3999
|
+
|
|
4000
|
+
ASSERT_OK(txn0->Rollback());
|
|
4001
|
+
txn0.reset();
|
|
4002
|
+
|
|
4003
|
+
ASSERT_OK(db->Put(WriteOptions(), "a", "v1"));
|
|
4004
|
+
|
|
4005
|
+
ASSERT_OK(db->SingleDelete(WriteOptions(), "a"));
|
|
4006
|
+
// Generate another SST with a SD to cover the oldest PUT('a')
|
|
4007
|
+
ASSERT_OK(db->Flush(FlushOptions()));
|
|
4008
|
+
|
|
4009
|
+
auto* dbimpl = static_cast_with_check<DBImpl>(db->GetRootDB());
|
|
4010
|
+
assert(dbimpl);
|
|
4011
|
+
ASSERT_OK(dbimpl->TEST_WaitForCompact());
|
|
4012
|
+
|
|
4013
|
+
{
|
|
4014
|
+
CompactRangeOptions cro;
|
|
4015
|
+
cro.bottommost_level_compaction = BottommostLevelCompaction::kForce;
|
|
4016
|
+
ASSERT_OK(db->CompactRange(cro, /*begin=*/nullptr, /*end=*/nullptr));
|
|
4017
|
+
}
|
|
4018
|
+
|
|
4019
|
+
{
|
|
4020
|
+
std::string value;
|
|
4021
|
+
const Status s = db->Get(ReadOptions(), "a", &value);
|
|
4022
|
+
ASSERT_TRUE(s.IsNotFound());
|
|
4023
|
+
}
|
|
4024
|
+
};
|
|
4025
|
+
|
|
4026
|
+
// Destroy and reopen
|
|
4027
|
+
ASSERT_OK(ReOpen());
|
|
4028
|
+
write_to_db();
|
|
4029
|
+
}
|
|
4030
|
+
|
|
3973
4031
|
// Test that we can change write policy from WriteCommitted to WritePrepared
|
|
3974
4032
|
// after a clean shutdown (which would empty the WAL)
|
|
3975
4033
|
TEST_P(WritePreparedTransactionTest, WP_WC_DBBackwardCompatibility) {
|
|
@@ -263,6 +263,10 @@ Status WritePreparedTxn::CommitInternal() {
|
|
|
263
263
|
Status WritePreparedTxn::RollbackInternal() {
|
|
264
264
|
ROCKS_LOG_WARN(db_impl_->immutable_db_options().info_log,
|
|
265
265
|
"RollbackInternal prepare_seq: %" PRIu64, GetId());
|
|
266
|
+
|
|
267
|
+
assert(db_impl_);
|
|
268
|
+
assert(wpt_db_);
|
|
269
|
+
|
|
266
270
|
WriteBatch rollback_batch;
|
|
267
271
|
assert(GetId() != kMaxSequenceNumber);
|
|
268
272
|
assert(GetId() > 0);
|
|
@@ -273,8 +277,9 @@ Status WritePreparedTxn::RollbackInternal() {
|
|
|
273
277
|
// to prevent callback's seq to be overrriden inside DBImpk::Get
|
|
274
278
|
roptions.snapshot = wpt_db_->GetMaxSnapshot();
|
|
275
279
|
struct RollbackWriteBatchBuilder : public WriteBatch::Handler {
|
|
276
|
-
DBImpl* db_;
|
|
277
|
-
|
|
280
|
+
DBImpl* const db_;
|
|
281
|
+
WritePreparedTxnDB* const wpt_db_;
|
|
282
|
+
WritePreparedTxnReadCallback callback_;
|
|
278
283
|
WriteBatch* rollback_batch_;
|
|
279
284
|
std::map<uint32_t, const Comparator*>& comparators_;
|
|
280
285
|
std::map<uint32_t, ColumnFamilyHandle*>& handles_;
|
|
@@ -282,14 +287,16 @@ Status WritePreparedTxn::RollbackInternal() {
|
|
|
282
287
|
std::map<uint32_t, CFKeys> keys_;
|
|
283
288
|
bool rollback_merge_operands_;
|
|
284
289
|
ReadOptions roptions_;
|
|
290
|
+
|
|
285
291
|
RollbackWriteBatchBuilder(
|
|
286
292
|
DBImpl* db, WritePreparedTxnDB* wpt_db, SequenceNumber snap_seq,
|
|
287
293
|
WriteBatch* dst_batch,
|
|
288
294
|
std::map<uint32_t, const Comparator*>& comparators,
|
|
289
295
|
std::map<uint32_t, ColumnFamilyHandle*>& handles,
|
|
290
|
-
bool rollback_merge_operands, ReadOptions _roptions)
|
|
296
|
+
bool rollback_merge_operands, const ReadOptions& _roptions)
|
|
291
297
|
: db_(db),
|
|
292
|
-
|
|
298
|
+
wpt_db_(wpt_db),
|
|
299
|
+
callback_(wpt_db, snap_seq), // disable min_uncommitted optimization
|
|
293
300
|
rollback_batch_(dst_batch),
|
|
294
301
|
comparators_(comparators),
|
|
295
302
|
handles_(handles),
|
|
@@ -304,8 +311,8 @@ Status WritePreparedTxn::RollbackInternal() {
|
|
|
304
311
|
keys_[cf] = CFKeys(SetComparator(cmp));
|
|
305
312
|
}
|
|
306
313
|
auto it = cf_keys.insert(key);
|
|
307
|
-
if
|
|
308
|
-
|
|
314
|
+
// second is false if a element already existed.
|
|
315
|
+
if (it.second == false) {
|
|
309
316
|
return s;
|
|
310
317
|
}
|
|
311
318
|
|
|
@@ -316,7 +323,7 @@ Status WritePreparedTxn::RollbackInternal() {
|
|
|
316
323
|
get_impl_options.column_family = cf_handle;
|
|
317
324
|
get_impl_options.value = &pinnable_val;
|
|
318
325
|
get_impl_options.value_found = ¬_used;
|
|
319
|
-
get_impl_options.callback = &
|
|
326
|
+
get_impl_options.callback = &callback_;
|
|
320
327
|
s = db_->GetImpl(roptions_, key, get_impl_options);
|
|
321
328
|
assert(s.ok() || s.IsNotFound());
|
|
322
329
|
if (s.ok()) {
|
|
@@ -325,7 +332,11 @@ Status WritePreparedTxn::RollbackInternal() {
|
|
|
325
332
|
} else if (s.IsNotFound()) {
|
|
326
333
|
// There has been no readable value before txn. By adding a delete we
|
|
327
334
|
// make sure that there will be none afterwards either.
|
|
328
|
-
|
|
335
|
+
if (wpt_db_->ShouldRollbackWithSingleDelete(cf_handle, key)) {
|
|
336
|
+
s = rollback_batch_->SingleDelete(cf_handle, key);
|
|
337
|
+
} else {
|
|
338
|
+
s = rollback_batch_->Delete(cf_handle, key);
|
|
339
|
+
}
|
|
329
340
|
assert(s.ok());
|
|
330
341
|
} else {
|
|
331
342
|
// Unexpected status. Return it to the user.
|
|
@@ -363,7 +374,9 @@ Status WritePreparedTxn::RollbackInternal() {
|
|
|
363
374
|
}
|
|
364
375
|
|
|
365
376
|
protected:
|
|
366
|
-
|
|
377
|
+
Handler::OptionState WriteAfterCommit() const override {
|
|
378
|
+
return Handler::OptionState::kDisabled;
|
|
379
|
+
}
|
|
367
380
|
} rollback_handler(db_impl_, wpt_db_, read_at_seq, &rollback_batch,
|
|
368
381
|
*cf_comp_map_shared_ptr.get(), *cf_map_shared_ptr.get(),
|
|
369
382
|
wpt_db_->txn_db_options_.rollback_merge_operands,
|
|
@@ -26,6 +26,18 @@
|
|
|
26
26
|
#include "utilities/transactions/pessimistic_transaction.h"
|
|
27
27
|
#include "utilities/transactions/transaction_db_mutex_impl.h"
|
|
28
28
|
|
|
29
|
+
// This function is for testing only. If it returns true, then all entries in
|
|
30
|
+
// the commit cache will be evicted. Unit and/or stress tests (db_stress)
|
|
31
|
+
// can implement this function and customize how frequently commit cache
|
|
32
|
+
// eviction occurs.
|
|
33
|
+
// TODO: remove this function once we can configure commit cache to be very
|
|
34
|
+
// small so that eviction occurs very frequently. This requires the commit
|
|
35
|
+
// cache entry to be able to encode prepare and commit sequence numbers so that
|
|
36
|
+
// the commit sequence number does not have to be within a certain range of
|
|
37
|
+
// prepare sequence number.
|
|
38
|
+
extern "C" bool rocksdb_write_prepared_TEST_ShouldClearCommitCache(void)
|
|
39
|
+
__attribute__((__weak__));
|
|
40
|
+
|
|
29
41
|
namespace ROCKSDB_NAMESPACE {
|
|
30
42
|
|
|
31
43
|
Status WritePreparedTxnDB::Initialize(
|
|
@@ -394,7 +406,7 @@ Status WritePreparedTxnDB::NewIterators(
|
|
|
394
406
|
return Status::OK();
|
|
395
407
|
}
|
|
396
408
|
|
|
397
|
-
void WritePreparedTxnDB::Init(const TransactionDBOptions&
|
|
409
|
+
void WritePreparedTxnDB::Init(const TransactionDBOptions& txn_db_opts) {
|
|
398
410
|
// Adcance max_evicted_seq_ no more than 100 times before the cache wraps
|
|
399
411
|
// around.
|
|
400
412
|
INC_STEP_FOR_MAX_EVICTED =
|
|
@@ -404,6 +416,8 @@ void WritePreparedTxnDB::Init(const TransactionDBOptions& /* unused */) {
|
|
|
404
416
|
commit_cache_ = std::unique_ptr<std::atomic<CommitEntry64b>[]>(
|
|
405
417
|
new std::atomic<CommitEntry64b>[COMMIT_CACHE_SIZE] {});
|
|
406
418
|
dummy_max_snapshot_.number_ = kMaxSequenceNumber;
|
|
419
|
+
rollback_deletion_type_callback_ =
|
|
420
|
+
txn_db_opts.rollback_deletion_type_callback;
|
|
407
421
|
}
|
|
408
422
|
|
|
409
423
|
void WritePreparedTxnDB::CheckPreparedAgainstMax(SequenceNumber new_max,
|
|
@@ -433,7 +447,7 @@ void WritePreparedTxnDB::CheckPreparedAgainstMax(SequenceNumber new_max,
|
|
|
433
447
|
delayed_prepared_.insert(to_be_popped);
|
|
434
448
|
ROCKS_LOG_WARN(info_log_,
|
|
435
449
|
"prepared_mutex_ overhead %" PRIu64 " (prep=%" PRIu64
|
|
436
|
-
" new_max=%" PRIu64,
|
|
450
|
+
" new_max=%" PRIu64 ")",
|
|
437
451
|
static_cast<uint64_t>(delayed_prepared_.size()),
|
|
438
452
|
to_be_popped, new_max);
|
|
439
453
|
delayed_prepared_empty_.store(false, std::memory_order_release);
|
|
@@ -503,6 +517,12 @@ void WritePreparedTxnDB::AddCommitted(uint64_t prepare_seq, uint64_t commit_seq,
|
|
|
503
517
|
// legit when a commit entry in a write batch overwrite the previous one
|
|
504
518
|
max_evicted_seq = evicted.commit_seq;
|
|
505
519
|
}
|
|
520
|
+
#ifdef OS_LINUX
|
|
521
|
+
if (rocksdb_write_prepared_TEST_ShouldClearCommitCache &&
|
|
522
|
+
rocksdb_write_prepared_TEST_ShouldClearCommitCache()) {
|
|
523
|
+
max_evicted_seq = last;
|
|
524
|
+
}
|
|
525
|
+
#endif // OS_LINUX
|
|
506
526
|
ROCKS_LOG_DETAILS(info_log_,
|
|
507
527
|
"%lu Evicting %" PRIu64 ",%" PRIu64 " with max %" PRIu64
|
|
508
528
|
" => %lu",
|
|
@@ -706,9 +726,10 @@ SnapshotImpl* WritePreparedTxnDB::GetSnapshotInternal(
|
|
|
706
726
|
assert(snap_impl->GetSequenceNumber() > max);
|
|
707
727
|
if (snap_impl->GetSequenceNumber() <= max) {
|
|
708
728
|
throw std::runtime_error(
|
|
709
|
-
"Snapshot seq " +
|
|
710
|
-
" after " +
|
|
711
|
-
" retries is still less than futre_max_evicted_seq_" +
|
|
729
|
+
"Snapshot seq " + std::to_string(snap_impl->GetSequenceNumber()) +
|
|
730
|
+
" after " + std::to_string(retry) +
|
|
731
|
+
" retries is still less than futre_max_evicted_seq_" +
|
|
732
|
+
std::to_string(max));
|
|
712
733
|
}
|
|
713
734
|
}
|
|
714
735
|
EnhanceSnapshot(snap_impl, min_uncommitted);
|