@nxtedition/rocksdb 8.2.8 → 9.0.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/binding.cc +0 -21
- package/deps/rocksdb/rocksdb/CMakeLists.txt +20 -10
- package/deps/rocksdb/rocksdb/Makefile +37 -25
- package/deps/rocksdb/rocksdb/README.md +29 -0
- package/deps/rocksdb/rocksdb/TARGETS +25 -2
- package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +229 -74
- package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +2 -1
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +4 -3
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +58 -95
- package/deps/rocksdb/rocksdb/cache/charged_cache.cc +4 -2
- package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -3
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +2683 -496
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +580 -159
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +145 -42
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +20 -1
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +391 -17
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +309 -212
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -32
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +439 -12
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +44 -2
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +11 -1
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -3
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
- package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
- package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +28 -12
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +20 -22
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
- package/deps/rocksdb/rocksdb/db/builder.cc +35 -10
- package/deps/rocksdb/rocksdb/db/c.cc +233 -6
- package/deps/rocksdb/rocksdb/db/c_test.c +140 -6
- package/deps/rocksdb/rocksdb/db/column_family.cc +110 -51
- package/deps/rocksdb/rocksdb/db/column_family.h +34 -2
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +314 -7
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +106 -23
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +47 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +10 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +148 -60
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +22 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +33 -23
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +14 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +90 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +170 -95
- package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +32 -58
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +3 -1
- package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
- package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +46 -10
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -3
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +74 -15
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +850 -44
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +275 -1
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +52 -19
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +733 -320
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +155 -66
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +516 -155
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +8 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +17 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +100 -35
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +95 -50
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +136 -79
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +6 -95
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +31 -22
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_iter.cc +85 -57
- package/deps/rocksdb/rocksdb/db/db_iter.h +11 -2
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +193 -7
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +294 -26
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +364 -0
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +13 -3
- package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +282 -167
- package/deps/rocksdb/rocksdb/db/db_test.cc +180 -49
- package/deps/rocksdb/rocksdb/db/db_test2.cc +84 -12
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +25 -12
- package/deps/rocksdb/rocksdb/db/db_test_util.h +45 -2
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +14 -1
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +245 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +480 -1
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/error_handler.cc +67 -34
- package/deps/rocksdb/rocksdb/db/error_handler.h +13 -9
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +144 -4
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
- package/deps/rocksdb/rocksdb/db/flush_job.cc +105 -17
- package/deps/rocksdb/rocksdb/db/flush_job.h +27 -4
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -12
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
- package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
- package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
- package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/memtable.cc +70 -83
- package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +45 -11
- package/deps/rocksdb/rocksdb/db/memtable_list.h +43 -2
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +91 -5
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
- package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
- package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
- package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +5 -2
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -0
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +25 -7
- package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +459 -74
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
- package/deps/rocksdb/rocksdb/db/table_cache.cc +76 -54
- package/deps/rocksdb/rocksdb/db/table_cache.h +18 -12
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
- package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
- package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
- package/deps/rocksdb/rocksdb/db/version_edit.h +58 -10
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
- package/deps/rocksdb/rocksdb/db/version_set.cc +207 -110
- package/deps/rocksdb/rocksdb/db/version_set.h +36 -15
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -26
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +55 -20
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +37 -13
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +110 -58
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +68 -17
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +8 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +429 -237
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +13 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +21 -14
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +29 -38
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +302 -101
- package/deps/rocksdb/rocksdb/env/env.cc +6 -2
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
- package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
- package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
- package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +79 -0
- package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +100 -70
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +64 -18
- package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
- package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1225 -97
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +72 -33
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +40 -14
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +163 -91
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +112 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +108 -16
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +42 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +92 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +34 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +91 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +130 -22
- package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +92 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +37 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +20 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +42 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -2
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +4 -3
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
- package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +22 -1
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
- package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +6 -1
- package/deps/rocksdb/rocksdb/options/db_options.cc +54 -2
- package/deps/rocksdb/rocksdb/options/db_options.h +4 -0
- package/deps/rocksdb/rocksdb/options/options.cc +15 -1
- package/deps/rocksdb/rocksdb/options/options_helper.cc +18 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +14 -4
- package/deps/rocksdb/rocksdb/options/options_test.cc +14 -1
- package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
- package/deps/rocksdb/rocksdb/port/README +10 -0
- package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
- package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
- package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
- package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +32 -12
- package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
- package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
- package/deps/rocksdb/rocksdb/src.mk +10 -1
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
- package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +116 -43
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +9 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +321 -49
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +98 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +233 -98
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +58 -23
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +52 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -18
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +20 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +232 -71
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +36 -19
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +11 -7
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +14 -13
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +9 -2
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/table/format.cc +175 -33
- package/deps/rocksdb/rocksdb/table/format.h +63 -10
- package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
- package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +22 -2
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
- package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +45 -9
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +24 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
- package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
- package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
- package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +87 -65
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +221 -33
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -11
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
- package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
- package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
- package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
- package/deps/rocksdb/rocksdb/util/cast_util.h +24 -0
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +55 -8
- package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
- package/deps/rocksdb/rocksdb/util/compression.h +119 -35
- package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
- package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
- package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
- package/deps/rocksdb/rocksdb/util/hash.h +7 -3
- package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
- package/deps/rocksdb/rocksdb/util/math.h +58 -6
- package/deps/rocksdb/rocksdb/util/math128.h +29 -7
- package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
- package/deps/rocksdb/rocksdb/util/overload.h +23 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
- package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
- package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
- package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
- package/deps/rocksdb/rocksdb/util/status.cc +1 -0
- package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
- package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
- package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +10 -1
- package/deps/rocksdb/rocksdb/util/udt_util.cc +385 -0
- package/deps/rocksdb/rocksdb/util/udt_util.h +192 -1
- package/deps/rocksdb/rocksdb/util/udt_util_test.cc +461 -0
- package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
- package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
- package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
- package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +71 -26
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +20 -16
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +7 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +12 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +272 -33
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +195 -23
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +19 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +88 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +43 -17
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +73 -24
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +41 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +15 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +59 -28
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +111 -14
- package/deps/rocksdb/rocksdb.gyp +6 -2
- package/index.js +0 -8
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
- package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
- package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
- package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
|
@@ -39,20 +39,37 @@ void WritePreparedTxn::Initialize(const TransactionOptions& txn_options) {
|
|
|
39
39
|
prepare_batch_cnt_ = 0;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
void WritePreparedTxn::MultiGet(const ReadOptions&
|
|
42
|
+
void WritePreparedTxn::MultiGet(const ReadOptions& _read_options,
|
|
43
43
|
ColumnFamilyHandle* column_family,
|
|
44
44
|
const size_t num_keys, const Slice* keys,
|
|
45
45
|
PinnableSlice* values, Status* statuses,
|
|
46
46
|
const bool sorted_input) {
|
|
47
|
-
|
|
47
|
+
if (_read_options.io_activity != Env::IOActivity::kUnknown &&
|
|
48
|
+
_read_options.io_activity != Env::IOActivity::kMultiGet) {
|
|
49
|
+
Status s = Status::InvalidArgument(
|
|
50
|
+
"Can only call MultiGet with `ReadOptions::io_activity` is "
|
|
51
|
+
"`Env::IOActivity::kUnknown` or `Env::IOActivity::kMultiGet`");
|
|
52
|
+
|
|
53
|
+
for (size_t i = 0; i < num_keys; ++i) {
|
|
54
|
+
if (statuses[i].ok()) {
|
|
55
|
+
statuses[i] = s;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
ReadOptions read_options(_read_options);
|
|
61
|
+
if (read_options.io_activity == Env::IOActivity::kUnknown) {
|
|
62
|
+
read_options.io_activity = Env::IOActivity::kMultiGet;
|
|
63
|
+
}
|
|
64
|
+
|
|
48
65
|
SequenceNumber min_uncommitted, snap_seq;
|
|
49
|
-
const SnapshotBackup backed_by_snapshot =
|
|
50
|
-
|
|
66
|
+
const SnapshotBackup backed_by_snapshot = wpt_db_->AssignMinMaxSeqs(
|
|
67
|
+
read_options.snapshot, &min_uncommitted, &snap_seq);
|
|
51
68
|
WritePreparedTxnReadCallback callback(wpt_db_, snap_seq, min_uncommitted,
|
|
52
69
|
backed_by_snapshot);
|
|
53
|
-
write_batch_.MultiGetFromBatchAndDB(db_,
|
|
54
|
-
keys, values, statuses,
|
|
55
|
-
&callback);
|
|
70
|
+
write_batch_.MultiGetFromBatchAndDB(db_, read_options, column_family,
|
|
71
|
+
num_keys, keys, values, statuses,
|
|
72
|
+
sorted_input, &callback);
|
|
56
73
|
if (UNLIKELY(!callback.valid() ||
|
|
57
74
|
!wpt_db_->ValidateSnapshot(snap_seq, backed_by_snapshot))) {
|
|
58
75
|
wpt_db_->WPRecordTick(TXN_GET_TRY_AGAIN);
|
|
@@ -62,14 +79,27 @@ void WritePreparedTxn::MultiGet(const ReadOptions& options,
|
|
|
62
79
|
}
|
|
63
80
|
}
|
|
64
81
|
|
|
65
|
-
Status WritePreparedTxn::Get(const ReadOptions&
|
|
82
|
+
Status WritePreparedTxn::Get(const ReadOptions& _read_options,
|
|
66
83
|
ColumnFamilyHandle* column_family,
|
|
67
84
|
const Slice& key, PinnableSlice* pinnable_val) {
|
|
68
|
-
if (
|
|
85
|
+
if (_read_options.io_activity != Env::IOActivity::kUnknown &&
|
|
86
|
+
_read_options.io_activity != Env::IOActivity::kGet) {
|
|
69
87
|
return Status::InvalidArgument(
|
|
70
|
-
"
|
|
71
|
-
"`Env::IOActivity::kUnknown`");
|
|
88
|
+
"Can only call Get with `ReadOptions::io_activity` is "
|
|
89
|
+
"`Env::IOActivity::kUnknown` or `Env::IOActivity::kGet`");
|
|
72
90
|
}
|
|
91
|
+
ReadOptions read_options(_read_options);
|
|
92
|
+
if (read_options.io_activity == Env::IOActivity::kUnknown) {
|
|
93
|
+
read_options.io_activity = Env::IOActivity::kGet;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return GetImpl(read_options, column_family, key, pinnable_val);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
Status WritePreparedTxn::GetImpl(const ReadOptions& options,
|
|
100
|
+
ColumnFamilyHandle* column_family,
|
|
101
|
+
const Slice& key,
|
|
102
|
+
PinnableSlice* pinnable_val) {
|
|
73
103
|
SequenceNumber min_uncommitted, snap_seq;
|
|
74
104
|
const SnapshotBackup backed_by_snapshot =
|
|
75
105
|
wpt_db_->AssignMinMaxSeqs(options.snapshot, &min_uncommitted, &snap_seq);
|
|
@@ -93,11 +123,7 @@ Status WritePreparedTxn::Get(const ReadOptions& options,
|
|
|
93
123
|
}
|
|
94
124
|
|
|
95
125
|
Iterator* WritePreparedTxn::GetIterator(const ReadOptions& options) {
|
|
96
|
-
|
|
97
|
-
Iterator* db_iter = wpt_db_->NewIterator(options);
|
|
98
|
-
assert(db_iter);
|
|
99
|
-
|
|
100
|
-
return write_batch_.NewIteratorWithBase(db_iter);
|
|
126
|
+
return GetIterator(options, wpt_db_->DefaultColumnFamily());
|
|
101
127
|
}
|
|
102
128
|
|
|
103
129
|
Iterator* WritePreparedTxn::GetIterator(const ReadOptions& options,
|
|
@@ -106,7 +132,7 @@ Iterator* WritePreparedTxn::GetIterator(const ReadOptions& options,
|
|
|
106
132
|
Iterator* db_iter = wpt_db_->NewIterator(options, column_family);
|
|
107
133
|
assert(db_iter);
|
|
108
134
|
|
|
109
|
-
return write_batch_.NewIteratorWithBase(column_family, db_iter);
|
|
135
|
+
return write_batch_.NewIteratorWithBase(column_family, db_iter, &options);
|
|
110
136
|
}
|
|
111
137
|
|
|
112
138
|
Status WritePreparedTxn::PrepareInternal() {
|
|
@@ -51,12 +51,12 @@ class WritePreparedTxn : public PessimisticTransaction {
|
|
|
51
51
|
// seq in the WAL that is also published, LastPublishedSequence, as opposed to
|
|
52
52
|
// the last seq in the memtable.
|
|
53
53
|
using Transaction::Get;
|
|
54
|
-
virtual Status Get(const ReadOptions&
|
|
54
|
+
virtual Status Get(const ReadOptions& _read_options,
|
|
55
55
|
ColumnFamilyHandle* column_family, const Slice& key,
|
|
56
56
|
PinnableSlice* value) override;
|
|
57
57
|
|
|
58
58
|
using Transaction::MultiGet;
|
|
59
|
-
virtual void MultiGet(const ReadOptions&
|
|
59
|
+
virtual void MultiGet(const ReadOptions& _read_options,
|
|
60
60
|
ColumnFamilyHandle* column_family,
|
|
61
61
|
const size_t num_keys, const Slice* keys,
|
|
62
62
|
PinnableSlice* values, Status* statuses,
|
|
@@ -86,6 +86,10 @@ class WritePreparedTxn : public PessimisticTransaction {
|
|
|
86
86
|
friend class WriteUnpreparedTxnDB;
|
|
87
87
|
friend class WriteUnpreparedTxn;
|
|
88
88
|
|
|
89
|
+
using Transaction::GetImpl;
|
|
90
|
+
Status GetImpl(const ReadOptions& options, ColumnFamilyHandle* column_family,
|
|
91
|
+
const Slice& key, PinnableSlice* value) override;
|
|
92
|
+
|
|
89
93
|
Status PrepareInternal() override;
|
|
90
94
|
|
|
91
95
|
Status CommitWithoutPrepareInternal() override;
|
|
@@ -114,4 +118,3 @@ class WritePreparedTxn : public PessimisticTransaction {
|
|
|
114
118
|
};
|
|
115
119
|
|
|
116
120
|
} // namespace ROCKSDB_NAMESPACE
|
|
117
|
-
|
|
@@ -247,14 +247,26 @@ Status WritePreparedTxnDB::WriteInternal(const WriteOptions& write_options_orig,
|
|
|
247
247
|
return s;
|
|
248
248
|
}
|
|
249
249
|
|
|
250
|
-
Status WritePreparedTxnDB::Get(const ReadOptions&
|
|
250
|
+
Status WritePreparedTxnDB::Get(const ReadOptions& _read_options,
|
|
251
251
|
ColumnFamilyHandle* column_family,
|
|
252
252
|
const Slice& key, PinnableSlice* value) {
|
|
253
|
-
if (
|
|
253
|
+
if (_read_options.io_activity != Env::IOActivity::kUnknown &&
|
|
254
|
+
_read_options.io_activity != Env::IOActivity::kGet) {
|
|
254
255
|
return Status::InvalidArgument(
|
|
255
|
-
"
|
|
256
|
-
"`Env::IOActivity::kUnknown`");
|
|
256
|
+
"Can only call Get with `ReadOptions::io_activity` is "
|
|
257
|
+
"`Env::IOActivity::kUnknown` or `Env::IOActivity::kGet`");
|
|
257
258
|
}
|
|
259
|
+
ReadOptions read_options(_read_options);
|
|
260
|
+
if (read_options.io_activity == Env::IOActivity::kUnknown) {
|
|
261
|
+
read_options.io_activity = Env::IOActivity::kGet;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
return GetImpl(read_options, column_family, key, value);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
Status WritePreparedTxnDB::GetImpl(const ReadOptions& options,
|
|
268
|
+
ColumnFamilyHandle* column_family,
|
|
269
|
+
const Slice& key, PinnableSlice* value) {
|
|
258
270
|
SequenceNumber min_uncommitted, snap_seq;
|
|
259
271
|
const SnapshotBackup backed_by_snapshot =
|
|
260
272
|
AssignMinMaxSeqs(options.snapshot, &min_uncommitted, &snap_seq);
|
|
@@ -314,16 +326,35 @@ void WritePreparedTxnDB::UpdateCFComparatorMap(ColumnFamilyHandle* h) {
|
|
|
314
326
|
}
|
|
315
327
|
|
|
316
328
|
std::vector<Status> WritePreparedTxnDB::MultiGet(
|
|
317
|
-
const ReadOptions&
|
|
329
|
+
const ReadOptions& _read_options,
|
|
318
330
|
const std::vector<ColumnFamilyHandle*>& column_family,
|
|
319
331
|
const std::vector<Slice>& keys, std::vector<std::string>* values) {
|
|
320
332
|
assert(values);
|
|
321
333
|
size_t num_keys = keys.size();
|
|
334
|
+
std::vector<Status> stat_list(num_keys);
|
|
335
|
+
|
|
336
|
+
if (_read_options.io_activity != Env::IOActivity::kUnknown &&
|
|
337
|
+
_read_options.io_activity != Env::IOActivity::kMultiGet) {
|
|
338
|
+
Status s = Status::InvalidArgument(
|
|
339
|
+
"Can only call MultiGet with `ReadOptions::io_activity` is "
|
|
340
|
+
"`Env::IOActivity::kUnknown` or `Env::IOActivity::kMultiGet`");
|
|
341
|
+
|
|
342
|
+
for (size_t i = 0; i < num_keys; ++i) {
|
|
343
|
+
stat_list[i] = s;
|
|
344
|
+
}
|
|
345
|
+
return stat_list;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
ReadOptions read_options(_read_options);
|
|
349
|
+
if (read_options.io_activity == Env::IOActivity::kUnknown) {
|
|
350
|
+
read_options.io_activity = Env::IOActivity::kMultiGet;
|
|
351
|
+
}
|
|
352
|
+
|
|
322
353
|
values->resize(num_keys);
|
|
323
354
|
|
|
324
|
-
std::vector<Status> stat_list(num_keys);
|
|
325
355
|
for (size_t i = 0; i < num_keys; ++i) {
|
|
326
|
-
stat_list[i] =
|
|
356
|
+
stat_list[i] =
|
|
357
|
+
this->GetImpl(read_options, column_family[i], keys[i], &(*values)[i]);
|
|
327
358
|
}
|
|
328
359
|
return stat_list;
|
|
329
360
|
}
|
|
@@ -346,22 +377,27 @@ static void CleanupWritePreparedTxnDBIterator(void* arg1, void* /*arg2*/) {
|
|
|
346
377
|
}
|
|
347
378
|
} // anonymous namespace
|
|
348
379
|
|
|
349
|
-
Iterator* WritePreparedTxnDB::NewIterator(const ReadOptions&
|
|
380
|
+
Iterator* WritePreparedTxnDB::NewIterator(const ReadOptions& _read_options,
|
|
350
381
|
ColumnFamilyHandle* column_family) {
|
|
351
|
-
if (
|
|
382
|
+
if (_read_options.io_activity != Env::IOActivity::kUnknown &&
|
|
383
|
+
_read_options.io_activity != Env::IOActivity::kDBIterator) {
|
|
352
384
|
return NewErrorIterator(Status::InvalidArgument(
|
|
353
|
-
"
|
|
354
|
-
"`Env::IOActivity::kUnknown`"));
|
|
385
|
+
"Can only call NewIterator with `ReadOptions::io_activity` is "
|
|
386
|
+
"`Env::IOActivity::kUnknown` or `Env::IOActivity::kDBIterator`"));
|
|
387
|
+
}
|
|
388
|
+
ReadOptions read_options(_read_options);
|
|
389
|
+
if (read_options.io_activity == Env::IOActivity::kUnknown) {
|
|
390
|
+
read_options.io_activity = Env::IOActivity::kDBIterator;
|
|
355
391
|
}
|
|
356
392
|
constexpr bool expose_blob_index = false;
|
|
357
393
|
constexpr bool allow_refresh = false;
|
|
358
394
|
std::shared_ptr<ManagedSnapshot> own_snapshot = nullptr;
|
|
359
395
|
SequenceNumber snapshot_seq = kMaxSequenceNumber;
|
|
360
396
|
SequenceNumber min_uncommitted = 0;
|
|
361
|
-
if (
|
|
362
|
-
snapshot_seq =
|
|
397
|
+
if (read_options.snapshot != nullptr) {
|
|
398
|
+
snapshot_seq = read_options.snapshot->GetSequenceNumber();
|
|
363
399
|
min_uncommitted =
|
|
364
|
-
static_cast_with_check<const SnapshotImpl>(
|
|
400
|
+
static_cast_with_check<const SnapshotImpl>(read_options.snapshot)
|
|
365
401
|
->min_uncommitted_;
|
|
366
402
|
} else {
|
|
367
403
|
auto* snapshot = GetSnapshot();
|
|
@@ -377,26 +413,38 @@ Iterator* WritePreparedTxnDB::NewIterator(const ReadOptions& options,
|
|
|
377
413
|
static_cast_with_check<ColumnFamilyHandleImpl>(column_family)->cfd();
|
|
378
414
|
auto* state =
|
|
379
415
|
new IteratorState(this, snapshot_seq, own_snapshot, min_uncommitted);
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
416
|
+
SuperVersion* super_version = cfd->GetReferencedSuperVersion(db_impl_);
|
|
417
|
+
auto* db_iter = db_impl_->NewIteratorImpl(read_options, cfd, super_version,
|
|
418
|
+
snapshot_seq, &state->callback,
|
|
419
|
+
expose_blob_index, allow_refresh);
|
|
383
420
|
db_iter->RegisterCleanup(CleanupWritePreparedTxnDBIterator, state, nullptr);
|
|
384
421
|
return db_iter;
|
|
385
422
|
}
|
|
386
423
|
|
|
387
424
|
Status WritePreparedTxnDB::NewIterators(
|
|
388
|
-
const ReadOptions&
|
|
425
|
+
const ReadOptions& _read_options,
|
|
389
426
|
const std::vector<ColumnFamilyHandle*>& column_families,
|
|
390
427
|
std::vector<Iterator*>* iterators) {
|
|
428
|
+
if (_read_options.io_activity != Env::IOActivity::kUnknown &&
|
|
429
|
+
_read_options.io_activity != Env::IOActivity::kDBIterator) {
|
|
430
|
+
return Status::InvalidArgument(
|
|
431
|
+
"Can only call NewIterator with `ReadOptions::io_activity` is "
|
|
432
|
+
"`Env::IOActivity::kUnknown` or `Env::IOActivity::kDBIterator`");
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
ReadOptions read_options(_read_options);
|
|
436
|
+
if (read_options.io_activity == Env::IOActivity::kUnknown) {
|
|
437
|
+
read_options.io_activity = Env::IOActivity::kDBIterator;
|
|
438
|
+
}
|
|
391
439
|
constexpr bool expose_blob_index = false;
|
|
392
440
|
constexpr bool allow_refresh = false;
|
|
393
441
|
std::shared_ptr<ManagedSnapshot> own_snapshot = nullptr;
|
|
394
442
|
SequenceNumber snapshot_seq = kMaxSequenceNumber;
|
|
395
443
|
SequenceNumber min_uncommitted = 0;
|
|
396
|
-
if (
|
|
397
|
-
snapshot_seq =
|
|
444
|
+
if (read_options.snapshot != nullptr) {
|
|
445
|
+
snapshot_seq = read_options.snapshot->GetSequenceNumber();
|
|
398
446
|
min_uncommitted =
|
|
399
|
-
static_cast_with_check<const SnapshotImpl>(
|
|
447
|
+
static_cast_with_check<const SnapshotImpl>(read_options.snapshot)
|
|
400
448
|
->min_uncommitted_;
|
|
401
449
|
} else {
|
|
402
450
|
auto* snapshot = GetSnapshot();
|
|
@@ -414,9 +462,10 @@ Status WritePreparedTxnDB::NewIterators(
|
|
|
414
462
|
static_cast_with_check<ColumnFamilyHandleImpl>(column_family)->cfd();
|
|
415
463
|
auto* state =
|
|
416
464
|
new IteratorState(this, snapshot_seq, own_snapshot, min_uncommitted);
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
465
|
+
SuperVersion* super_version = cfd->GetReferencedSuperVersion(db_impl_);
|
|
466
|
+
auto* db_iter = db_impl_->NewIteratorImpl(read_options, cfd, super_version,
|
|
467
|
+
snapshot_seq, &state->callback,
|
|
468
|
+
expose_blob_index, allow_refresh);
|
|
420
469
|
db_iter->RegisterCleanup(CleanupWritePreparedTxnDBIterator, state, nullptr);
|
|
421
470
|
iterators->push_back(db_iter);
|
|
422
471
|
}
|
|
@@ -83,24 +83,24 @@ class WritePreparedTxnDB : public PessimisticTransactionDB {
|
|
|
83
83
|
size_t batch_cnt, WritePreparedTxn* txn);
|
|
84
84
|
|
|
85
85
|
using DB::Get;
|
|
86
|
-
virtual Status Get(const ReadOptions&
|
|
86
|
+
virtual Status Get(const ReadOptions& _read_options,
|
|
87
87
|
ColumnFamilyHandle* column_family, const Slice& key,
|
|
88
88
|
PinnableSlice* value) override;
|
|
89
89
|
|
|
90
90
|
using DB::MultiGet;
|
|
91
91
|
virtual std::vector<Status> MultiGet(
|
|
92
|
-
const ReadOptions&
|
|
92
|
+
const ReadOptions& _read_options,
|
|
93
93
|
const std::vector<ColumnFamilyHandle*>& column_family,
|
|
94
94
|
const std::vector<Slice>& keys,
|
|
95
95
|
std::vector<std::string>* values) override;
|
|
96
96
|
|
|
97
97
|
using DB::NewIterator;
|
|
98
|
-
virtual Iterator* NewIterator(const ReadOptions&
|
|
98
|
+
virtual Iterator* NewIterator(const ReadOptions& _read_options,
|
|
99
99
|
ColumnFamilyHandle* column_family) override;
|
|
100
100
|
|
|
101
101
|
using DB::NewIterators;
|
|
102
102
|
virtual Status NewIterators(
|
|
103
|
-
const ReadOptions&
|
|
103
|
+
const ReadOptions& _read_options,
|
|
104
104
|
const std::vector<ColumnFamilyHandle*>& column_families,
|
|
105
105
|
std::vector<Iterator*>* iterators) override;
|
|
106
106
|
|
|
@@ -520,6 +520,21 @@ class WritePreparedTxnDB : public PessimisticTransactionDB {
|
|
|
520
520
|
RecordTick(db_impl_->immutable_db_options_.statistics.get(), ticker_type);
|
|
521
521
|
}
|
|
522
522
|
|
|
523
|
+
Status GetImpl(const ReadOptions& options, ColumnFamilyHandle* column_family,
|
|
524
|
+
const Slice& key, std::string* value) {
|
|
525
|
+
assert(value != nullptr);
|
|
526
|
+
PinnableSlice pinnable_val(value);
|
|
527
|
+
assert(!pinnable_val.IsPinned());
|
|
528
|
+
auto s = GetImpl(options, column_family, key, &pinnable_val);
|
|
529
|
+
if (s.ok() && pinnable_val.IsPinned()) {
|
|
530
|
+
value->assign(pinnable_val.data(), pinnable_val.size());
|
|
531
|
+
} // else value is already assigned
|
|
532
|
+
return s;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
Status GetImpl(const ReadOptions& options, ColumnFamilyHandle* column_family,
|
|
536
|
+
const Slice& key, PinnableSlice* value);
|
|
537
|
+
|
|
523
538
|
// A heap with the amortized O(1) complexity for erase. It uses one extra heap
|
|
524
539
|
// to keep track of erased entries that are not yet on top of the main heap.
|
|
525
540
|
class PreparedHeap {
|
|
@@ -35,26 +35,32 @@ INSTANTIATE_TEST_CASE_P(
|
|
|
35
35
|
::testing::Values(std::make_tuple(false, false, WRITE_UNPREPARED),
|
|
36
36
|
std::make_tuple(false, true, WRITE_UNPREPARED)));
|
|
37
37
|
|
|
38
|
-
enum
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
enum SnapshotAction { NO_SNAPSHOT, RO_SNAPSHOT, REFRESH_SNAPSHOT };
|
|
39
|
+
enum VerificationOperation { VERIFY_GET, VERIFY_NEXT, VERIFY_PREV };
|
|
40
|
+
class WriteUnpreparedSnapshotTest
|
|
41
|
+
: public WriteUnpreparedTransactionTestBase,
|
|
42
|
+
virtual public ::testing::WithParamInterface<
|
|
43
|
+
std::tuple<bool, SnapshotAction, VerificationOperation>> {
|
|
42
44
|
public:
|
|
43
|
-
|
|
45
|
+
WriteUnpreparedSnapshotTest()
|
|
44
46
|
: WriteUnpreparedTransactionTestBase(false, std::get<0>(GetParam()),
|
|
45
47
|
WRITE_UNPREPARED),
|
|
46
|
-
action_(std::get<1>(GetParam()))
|
|
47
|
-
|
|
48
|
+
action_(std::get<1>(GetParam())),
|
|
49
|
+
verify_op_(std::get<2>(GetParam())) {}
|
|
50
|
+
SnapshotAction action_;
|
|
51
|
+
VerificationOperation verify_op_;
|
|
48
52
|
};
|
|
49
53
|
|
|
54
|
+
// Test parameters:
|
|
55
|
+
// Param 0): use stackable db, parameterization hard coded to be overwritten to
|
|
56
|
+
// false. Param 1): test mode for snapshot action Param 2): test mode for
|
|
57
|
+
// verification operation
|
|
50
58
|
INSTANTIATE_TEST_CASE_P(
|
|
51
|
-
|
|
52
|
-
::testing::
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
std::make_tuple(true, RO_SNAPSHOT),
|
|
57
|
-
std::make_tuple(true, REFRESH_SNAPSHOT)));
|
|
59
|
+
WriteUnpreparedSnapshotTest, WriteUnpreparedSnapshotTest,
|
|
60
|
+
::testing::Combine(
|
|
61
|
+
::testing::Bool(),
|
|
62
|
+
::testing::Values(NO_SNAPSHOT, RO_SNAPSHOT, REFRESH_SNAPSHOT),
|
|
63
|
+
::testing::Values(VERIFY_GET, VERIFY_NEXT, VERIFY_PREV)));
|
|
58
64
|
|
|
59
65
|
TEST_P(WriteUnpreparedTransactionTest, ReadYourOwnWrite) {
|
|
60
66
|
// The following tests checks whether reading your own write for
|
|
@@ -135,42 +141,33 @@ TEST_P(WriteUnpreparedTransactionTest, ReadYourOwnWrite) {
|
|
|
135
141
|
}
|
|
136
142
|
}
|
|
137
143
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
//
|
|
141
|
-
// then before committing or aborting the transaction, it validates to see
|
|
142
|
-
// that it can read the keys it wrote, and the keys it did not write respect
|
|
143
|
-
// the snapshot. To avoid row lock contention (and simply stressing the
|
|
144
|
-
// locking system), each thread is mostly only writing to its own set of keys.
|
|
144
|
+
TEST_P(WriteUnpreparedSnapshotTest, ReadYourOwnWrite) {
|
|
145
|
+
// This test validates a transaction can read its writes and the correctness
|
|
146
|
+
// of its read with regard to a mocked snapshot functionality.
|
|
145
147
|
const uint32_t kNumIter = 1000;
|
|
146
|
-
const uint32_t kNumThreads = 10;
|
|
147
148
|
const uint32_t kNumKeys = 5;
|
|
148
149
|
|
|
149
150
|
// Test with
|
|
150
151
|
// 1. no snapshots set
|
|
151
152
|
// 2. snapshot set on ReadOptions
|
|
152
153
|
// 3. snapshot set, and refreshing after every write.
|
|
153
|
-
|
|
154
|
+
SnapshotAction snapshot_action = action_;
|
|
154
155
|
WriteOptions write_options;
|
|
155
156
|
txn_db_options.transaction_lock_timeout = -1;
|
|
156
157
|
options.disable_auto_compactions = true;
|
|
157
158
|
ASSERT_OK(ReOpen());
|
|
158
159
|
|
|
159
160
|
std::vector<std::string> keys;
|
|
160
|
-
for (uint32_t k = 0; k < kNumKeys
|
|
161
|
+
for (uint32_t k = 0; k < kNumKeys; k++) {
|
|
161
162
|
keys.push_back("k" + std::to_string(k));
|
|
162
163
|
}
|
|
163
|
-
RandomShuffle(keys.begin(), keys.end());
|
|
164
164
|
|
|
165
165
|
// This counter will act as a "sequence number" to help us validate
|
|
166
166
|
// visibility logic with snapshots. If we had direct access to the seqno of
|
|
167
167
|
// snapshots and key/values, then we should directly compare those instead.
|
|
168
168
|
std::atomic<int64_t> counter(0);
|
|
169
169
|
|
|
170
|
-
std::function<void(
|
|
171
|
-
size_t tid = std::hash<std::thread::id>()(std::this_thread::get_id());
|
|
172
|
-
Random64 rnd(static_cast<uint32_t>(tid));
|
|
173
|
-
|
|
170
|
+
std::function<void()> check_correctness_wrt_snapshot = [&]() {
|
|
174
171
|
Transaction* txn;
|
|
175
172
|
TransactionOptions txn_options;
|
|
176
173
|
// batch_size of 1 causes writes to DB for every marker.
|
|
@@ -178,114 +175,82 @@ TEST_P(WriteUnpreparedStressTest, ReadYourOwnWriteStress) {
|
|
|
178
175
|
ReadOptions read_options;
|
|
179
176
|
|
|
180
177
|
for (uint32_t i = 0; i < kNumIter; i++) {
|
|
181
|
-
std::set<std::string> owned_keys(keys.begin() + id * kNumKeys,
|
|
182
|
-
keys.begin() + (id + 1) * kNumKeys);
|
|
183
|
-
// Add unowned keys to make the workload more interesting, but this
|
|
184
|
-
// increases row lock contention, so just do it sometimes.
|
|
185
|
-
if (rnd.OneIn(2)) {
|
|
186
|
-
owned_keys.insert(keys[rnd.Uniform(kNumKeys * kNumThreads)]);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
178
|
txn = db->BeginTransaction(write_options, txn_options);
|
|
190
|
-
ASSERT_OK(txn->SetName(std::to_string(id)));
|
|
191
179
|
txn->SetSnapshot();
|
|
192
|
-
if (
|
|
180
|
+
if (snapshot_action >= RO_SNAPSHOT) {
|
|
193
181
|
read_options.snapshot = txn->GetSnapshot();
|
|
194
182
|
ASSERT_TRUE(read_options.snapshot != nullptr);
|
|
195
183
|
}
|
|
196
184
|
|
|
197
|
-
uint64_t buf[
|
|
198
|
-
buf[0] = id;
|
|
185
|
+
uint64_t buf[1];
|
|
199
186
|
|
|
200
187
|
// When scanning through the database, make sure that all unprepared
|
|
201
|
-
// keys have value >= snapshot
|
|
188
|
+
// keys have value >= snapshot.
|
|
202
189
|
int64_t snapshot_num = counter.fetch_add(1);
|
|
203
190
|
|
|
204
191
|
Status s;
|
|
205
|
-
for (const auto& key :
|
|
206
|
-
buf[
|
|
192
|
+
for (const auto& key : keys) {
|
|
193
|
+
buf[0] = counter.fetch_add(1);
|
|
207
194
|
s = txn->Put(key, Slice((const char*)buf, sizeof(buf)));
|
|
208
195
|
if (!s.ok()) {
|
|
209
196
|
break;
|
|
210
197
|
}
|
|
211
|
-
if (
|
|
198
|
+
if (snapshot_action == REFRESH_SNAPSHOT) {
|
|
212
199
|
txn->SetSnapshot();
|
|
213
200
|
read_options.snapshot = txn->GetSnapshot();
|
|
214
201
|
snapshot_num = counter.fetch_add(1);
|
|
215
202
|
}
|
|
216
203
|
}
|
|
217
204
|
|
|
218
|
-
|
|
219
|
-
// rollback and move onto next iteration.
|
|
220
|
-
if (!s.ok()) {
|
|
221
|
-
ASSERT_TRUE(s.IsBusy());
|
|
222
|
-
ASSERT_OK(txn->Rollback());
|
|
223
|
-
delete txn;
|
|
224
|
-
continue;
|
|
225
|
-
}
|
|
205
|
+
ASSERT_OK(s);
|
|
226
206
|
|
|
227
|
-
auto verify_key = [&
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
//
|
|
233
|
-
//
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
// If refresh snapshot is not on, then the snapshot was taken at
|
|
243
|
-
// the beginning of the transaction, meaning all writes must come
|
|
244
|
-
// after snapshot_num
|
|
245
|
-
ASSERT_GT(((int64_t*)value.c_str())[1], snapshot_num);
|
|
246
|
-
}
|
|
247
|
-
} else if (a >= RO_SNAPSHOT) {
|
|
248
|
-
// If this is not an unprepared key, just assert that the key
|
|
249
|
-
// "seqno" is smaller than the snapshot seqno.
|
|
250
|
-
ASSERT_EQ(value.size(), 16);
|
|
251
|
-
ASSERT_LT(((int64_t*)value.c_str())[1], snapshot_num);
|
|
207
|
+
auto verify_key = [&snapshot_action,
|
|
208
|
+
&snapshot_num](const std::string& value) {
|
|
209
|
+
ASSERT_EQ(value.size(), 8);
|
|
210
|
+
|
|
211
|
+
if (snapshot_action == REFRESH_SNAPSHOT) {
|
|
212
|
+
// If refresh snapshot is true, then the snapshot is refreshed
|
|
213
|
+
// after every Put(), meaning that the current snapshot in
|
|
214
|
+
// snapshot_num must be greater than the "seqno" of any keys
|
|
215
|
+
// written by the current transaction.
|
|
216
|
+
ASSERT_LT(((int64_t*)value.c_str())[0], snapshot_num);
|
|
217
|
+
} else {
|
|
218
|
+
// If refresh snapshot is not on, then the snapshot was taken at
|
|
219
|
+
// the beginning of the transaction, meaning all writes must come
|
|
220
|
+
// after snapshot_num
|
|
221
|
+
ASSERT_GT(((int64_t*)value.c_str())[0], snapshot_num);
|
|
252
222
|
}
|
|
253
223
|
};
|
|
254
224
|
|
|
255
|
-
// Validate Get()/Next()/Prev()
|
|
256
|
-
//
|
|
257
|
-
switch (
|
|
258
|
-
case
|
|
225
|
+
// Validate one of Get()/Next()/Prev() depending on the verification
|
|
226
|
+
// operation to use.
|
|
227
|
+
switch (verify_op_) {
|
|
228
|
+
case VERIFY_GET: // Validate Get()
|
|
259
229
|
{
|
|
260
230
|
for (const auto& key : keys) {
|
|
261
231
|
std::string value;
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
ASSERT_TRUE(s.IsNotFound());
|
|
265
|
-
ASSERT_EQ(owned_keys.count(key), 0);
|
|
266
|
-
} else {
|
|
267
|
-
verify_key(key, value);
|
|
268
|
-
}
|
|
232
|
+
ASSERT_OK(txn->Get(read_options, Slice(key), &value));
|
|
233
|
+
verify_key(value);
|
|
269
234
|
}
|
|
270
235
|
break;
|
|
271
236
|
}
|
|
272
|
-
case
|
|
237
|
+
case VERIFY_NEXT: // Validate Next()
|
|
273
238
|
{
|
|
274
239
|
Iterator* iter = txn->GetIterator(read_options);
|
|
275
240
|
ASSERT_OK(iter->status());
|
|
276
241
|
for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
|
|
277
|
-
verify_key(iter->
|
|
242
|
+
verify_key(iter->value().ToString());
|
|
278
243
|
}
|
|
279
244
|
ASSERT_OK(iter->status());
|
|
280
245
|
delete iter;
|
|
281
246
|
break;
|
|
282
247
|
}
|
|
283
|
-
case
|
|
248
|
+
case VERIFY_PREV: // Validate Prev()
|
|
284
249
|
{
|
|
285
250
|
Iterator* iter = txn->GetIterator(read_options);
|
|
286
251
|
ASSERT_OK(iter->status());
|
|
287
252
|
for (iter->SeekToLast(); iter->Valid(); iter->Prev()) {
|
|
288
|
-
verify_key(iter->
|
|
253
|
+
verify_key(iter->value().ToString());
|
|
289
254
|
}
|
|
290
255
|
ASSERT_OK(iter->status());
|
|
291
256
|
delete iter;
|
|
@@ -295,25 +260,13 @@ TEST_P(WriteUnpreparedStressTest, ReadYourOwnWriteStress) {
|
|
|
295
260
|
FAIL();
|
|
296
261
|
}
|
|
297
262
|
|
|
298
|
-
|
|
299
|
-
ASSERT_OK(txn->Commit());
|
|
300
|
-
} else {
|
|
301
|
-
ASSERT_OK(txn->Rollback());
|
|
302
|
-
}
|
|
263
|
+
ASSERT_OK(txn->Commit());
|
|
303
264
|
delete txn;
|
|
304
265
|
}
|
|
305
266
|
};
|
|
306
267
|
|
|
307
|
-
|
|
308
|
-
for (uint32_t i = 0; i < kNumThreads; i++) {
|
|
309
|
-
threads.emplace_back(stress_thread, i);
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
for (auto& t : threads) {
|
|
313
|
-
t.join();
|
|
314
|
-
}
|
|
268
|
+
check_correctness_wrt_snapshot();
|
|
315
269
|
}
|
|
316
|
-
#endif // !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
|
|
317
270
|
|
|
318
271
|
// This tests how write unprepared behaves during recovery when the DB crashes
|
|
319
272
|
// after a transaction has either been unprepared or prepared, and tests if
|