@nxtedition/rocksdb 5.2.21 → 5.2.26
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 +216 -252
- package/binding.gyp +78 -72
- package/deps/rocksdb/build_version.cc +70 -4
- package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
- package/deps/rocksdb/rocksdb/Makefile +459 -469
- package/deps/rocksdb/rocksdb/README.md +4 -4
- package/deps/rocksdb/rocksdb/TARGETS +5244 -1500
- package/deps/rocksdb/rocksdb/cache/cache.cc +12 -3
- package/deps/rocksdb/rocksdb/cache/cache_bench.cc +7 -368
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +924 -0
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +128 -0
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +103 -0
- package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +183 -0
- package/deps/rocksdb/rocksdb/cache/cache_helpers.h +11 -0
- package/deps/rocksdb/rocksdb/cache/cache_key.cc +344 -0
- package/deps/rocksdb/rocksdb/cache/cache_key.h +132 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +183 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +288 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +468 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +85 -8
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +121 -51
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +171 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +86 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +607 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +381 -154
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +176 -33
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1659 -3
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +94 -23
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +49 -28
- package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
- package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
- package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
- package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
- package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
- package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
- package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
- package/deps/rocksdb/rocksdb/db/builder.h +16 -37
- package/deps/rocksdb/rocksdb/db/c.cc +413 -208
- package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
- package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
- package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
- package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
- package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
- package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
- package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
- package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
- package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
- package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
- package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
- package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
- package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
- package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
- package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
- package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
- package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
- package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
- package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
- package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
- package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
- package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
- package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
- package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
- package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
- package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
- package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
- package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
- package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
- package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
- package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
- package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
- package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
- package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
- package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
- package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
- package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
- package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
- package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
- package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
- package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
- package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
- package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
- package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
- package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
- package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
- package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
- package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
- package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
- package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
- package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
- package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
- package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
- package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
- package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
- package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
- package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
- package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
- package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
- package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
- package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
- package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
- package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
- package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
- package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
- package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
- package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
- package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
- package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
- package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
- package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
- package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
- package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
- package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
- package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
- package/deps/rocksdb/rocksdb/env/env.cc +632 -42
- package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
- package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
- package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
- package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
- package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
- package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
- package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
- package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
- package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
- package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
- package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
- package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
- package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
- package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
- package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
- package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
- package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
- package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
- package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
- package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
- package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
- package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
- package/deps/rocksdb/rocksdb/file/filename.h +13 -8
- package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
- package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
- package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
- package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
- package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
- package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
- package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
- package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
- package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
- package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
- package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
- package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
- package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
- package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
- package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
- package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
- package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
- package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
- package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
- package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
- package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
- package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
- package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
- package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
- package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
- package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
- package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
- package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
- package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
- package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
- package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
- package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
- package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
- package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
- package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
- package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
- package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
- package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
- package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
- package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
- package/deps/rocksdb/rocksdb/options/options.cc +49 -17
- package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
- package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
- package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
- package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
- package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
- package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
- package/deps/rocksdb/rocksdb/port/lang.h +52 -0
- package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
- package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
- package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
- package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
- package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
- package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
- package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
- package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
- package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
- package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
- package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
- package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
- package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
- package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
- package/deps/rocksdb/rocksdb/python.mk +9 -0
- package/deps/rocksdb/rocksdb/src.mk +82 -34
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
- package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
- package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
- package/deps/rocksdb/rocksdb/table/format.cc +258 -104
- package/deps/rocksdb/rocksdb/table/format.h +120 -109
- package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
- package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
- package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
- package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
- package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
- package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
- package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
- package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
- package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
- package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
- package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
- package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
- package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
- package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
- package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
- package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
- package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
- package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
- package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
- package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
- package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
- package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
- package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
- package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
- package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
- package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
- package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
- package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
- package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
- package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
- package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
- package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
- package/deps/rocksdb/rocksdb/util/channel.h +2 -0
- package/deps/rocksdb/rocksdb/util/coding.h +1 -33
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
- package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
- package/deps/rocksdb/rocksdb/util/compression.h +212 -7
- package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
- package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
- package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
- package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
- package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
- package/deps/rocksdb/rocksdb/util/defer.h +30 -1
- package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
- package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
- package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
- package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
- package/deps/rocksdb/rocksdb/util/hash.h +31 -1
- package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
- package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
- package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
- package/deps/rocksdb/rocksdb/util/heap.h +6 -1
- package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
- package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
- package/deps/rocksdb/rocksdb/util/math.h +74 -7
- package/deps/rocksdb/rocksdb/util/math128.h +13 -1
- package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
- package/deps/rocksdb/rocksdb/util/random.cc +9 -0
- package/deps/rocksdb/rocksdb/util/random.h +6 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
- package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
- package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
- package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
- package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
- package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
- package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
- package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
- package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
- package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
- package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
- package/deps/rocksdb/rocksdb/util/status.cc +32 -29
- package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
- package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
- package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
- package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
- package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
- package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
- package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
- package/deps/rocksdb/rocksdb/util/timer.h +55 -46
- package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
- package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
- package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
- package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
- package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
- package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
- package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
- package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
- package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
- package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
- package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
- package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
- package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
- package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
- package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
- package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
- package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
- package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
- package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
- package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
- package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
- package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
- package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
- package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
- package/deps/rocksdb/rocksdb.gyp +425 -446
- package/package.json +8 -8
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/darwin-x86/node.napi.node +0 -0
- package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
- package/deps/rocksdb/rocksdb/hdfs/README +0 -23
- package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
- package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
- package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
- package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
- package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
- package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
- package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
- package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
- package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
- package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
- package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
- package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
- package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
- package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
- package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
- package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
- package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
- package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
- package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
- package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
- package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
- package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
- package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
- package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
- package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
- package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
#if !defined(ROCKSDB_LITE)
|
|
17
17
|
#include "test_util/sync_point.h"
|
|
18
18
|
#endif
|
|
19
|
+
#include "test_util/testutil.h"
|
|
19
20
|
#include "utilities/fault_injection_env.h"
|
|
20
21
|
|
|
21
22
|
namespace ROCKSDB_NAMESPACE {
|
|
@@ -195,6 +196,148 @@ class DBBasicTestWithTimestamp : public DBBasicTestWithTimestampBase {
|
|
|
195
196
|
: DBBasicTestWithTimestampBase("db_basic_test_with_timestamp") {}
|
|
196
197
|
};
|
|
197
198
|
|
|
199
|
+
TEST_F(DBBasicTestWithTimestamp, SanityChecks) {
|
|
200
|
+
Options options = CurrentOptions();
|
|
201
|
+
options.env = env_;
|
|
202
|
+
options.create_if_missing = true;
|
|
203
|
+
options.avoid_flush_during_shutdown = true;
|
|
204
|
+
options.merge_operator = MergeOperators::CreateStringAppendTESTOperator();
|
|
205
|
+
DestroyAndReopen(options);
|
|
206
|
+
|
|
207
|
+
Options options1 = CurrentOptions();
|
|
208
|
+
options1.env = env_;
|
|
209
|
+
options1.comparator = test::BytewiseComparatorWithU64TsWrapper();
|
|
210
|
+
options1.merge_operator = MergeOperators::CreateStringAppendTESTOperator();
|
|
211
|
+
assert(options1.comparator &&
|
|
212
|
+
options1.comparator->timestamp_size() == sizeof(uint64_t));
|
|
213
|
+
ColumnFamilyHandle* handle = nullptr;
|
|
214
|
+
Status s = db_->CreateColumnFamily(options1, "data", &handle);
|
|
215
|
+
ASSERT_OK(s);
|
|
216
|
+
|
|
217
|
+
std::string dummy_ts(sizeof(uint64_t), '\0');
|
|
218
|
+
// Perform timestamp operations on default cf.
|
|
219
|
+
ASSERT_TRUE(
|
|
220
|
+
db_->Put(WriteOptions(), "key", dummy_ts, "value").IsInvalidArgument());
|
|
221
|
+
ASSERT_TRUE(db_->Merge(WriteOptions(), db_->DefaultColumnFamily(), "key",
|
|
222
|
+
dummy_ts, "value")
|
|
223
|
+
.IsNotSupported());
|
|
224
|
+
ASSERT_TRUE(db_->Delete(WriteOptions(), "key", dummy_ts).IsInvalidArgument());
|
|
225
|
+
ASSERT_TRUE(
|
|
226
|
+
db_->SingleDelete(WriteOptions(), "key", dummy_ts).IsInvalidArgument());
|
|
227
|
+
ASSERT_TRUE(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(),
|
|
228
|
+
"begin_key", "end_key", dummy_ts)
|
|
229
|
+
.IsNotSupported());
|
|
230
|
+
|
|
231
|
+
// Perform non-timestamp operations on "data" cf.
|
|
232
|
+
ASSERT_TRUE(
|
|
233
|
+
db_->Put(WriteOptions(), handle, "key", "value").IsInvalidArgument());
|
|
234
|
+
ASSERT_TRUE(db_->Delete(WriteOptions(), handle, "key").IsInvalidArgument());
|
|
235
|
+
ASSERT_TRUE(
|
|
236
|
+
db_->SingleDelete(WriteOptions(), handle, "key").IsInvalidArgument());
|
|
237
|
+
|
|
238
|
+
ASSERT_TRUE(
|
|
239
|
+
db_->Merge(WriteOptions(), handle, "key", "value").IsInvalidArgument());
|
|
240
|
+
ASSERT_TRUE(db_->DeleteRange(WriteOptions(), handle, "begin_key", "end_key")
|
|
241
|
+
.IsInvalidArgument());
|
|
242
|
+
|
|
243
|
+
{
|
|
244
|
+
WriteBatch wb;
|
|
245
|
+
ASSERT_OK(wb.Put(handle, "key", "value"));
|
|
246
|
+
ASSERT_TRUE(db_->Write(WriteOptions(), &wb).IsInvalidArgument());
|
|
247
|
+
}
|
|
248
|
+
{
|
|
249
|
+
WriteBatch wb;
|
|
250
|
+
ASSERT_OK(wb.Delete(handle, "key"));
|
|
251
|
+
ASSERT_TRUE(db_->Write(WriteOptions(), &wb).IsInvalidArgument());
|
|
252
|
+
}
|
|
253
|
+
{
|
|
254
|
+
WriteBatch wb;
|
|
255
|
+
ASSERT_OK(wb.SingleDelete(handle, "key"));
|
|
256
|
+
ASSERT_TRUE(db_->Write(WriteOptions(), &wb).IsInvalidArgument());
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// Perform timestamp operations with timestamps of incorrect size.
|
|
260
|
+
const std::string wrong_ts(sizeof(uint32_t), '\0');
|
|
261
|
+
ASSERT_TRUE(db_->Put(WriteOptions(), handle, "key", wrong_ts, "value")
|
|
262
|
+
.IsInvalidArgument());
|
|
263
|
+
ASSERT_TRUE(db_->Merge(WriteOptions(), handle, "key", wrong_ts, "value")
|
|
264
|
+
.IsNotSupported());
|
|
265
|
+
ASSERT_TRUE(
|
|
266
|
+
db_->Delete(WriteOptions(), handle, "key", wrong_ts).IsInvalidArgument());
|
|
267
|
+
ASSERT_TRUE(db_->SingleDelete(WriteOptions(), handle, "key", wrong_ts)
|
|
268
|
+
.IsInvalidArgument());
|
|
269
|
+
ASSERT_TRUE(
|
|
270
|
+
db_->DeleteRange(WriteOptions(), handle, "begin_key", "end_key", wrong_ts)
|
|
271
|
+
.IsNotSupported());
|
|
272
|
+
|
|
273
|
+
delete handle;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
TEST_F(DBBasicTestWithTimestamp, MixedCfs) {
|
|
277
|
+
Options options = CurrentOptions();
|
|
278
|
+
options.env = env_;
|
|
279
|
+
options.create_if_missing = true;
|
|
280
|
+
options.avoid_flush_during_shutdown = true;
|
|
281
|
+
DestroyAndReopen(options);
|
|
282
|
+
|
|
283
|
+
Options options1 = CurrentOptions();
|
|
284
|
+
options1.env = env_;
|
|
285
|
+
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
286
|
+
TestComparator test_cmp(kTimestampSize);
|
|
287
|
+
options1.comparator = &test_cmp;
|
|
288
|
+
ColumnFamilyHandle* handle = nullptr;
|
|
289
|
+
Status s = db_->CreateColumnFamily(options1, "data", &handle);
|
|
290
|
+
ASSERT_OK(s);
|
|
291
|
+
|
|
292
|
+
WriteBatch wb;
|
|
293
|
+
ASSERT_OK(wb.Put("a", "value"));
|
|
294
|
+
ASSERT_OK(wb.Put(handle, "a", "value"));
|
|
295
|
+
{
|
|
296
|
+
std::string ts = Timestamp(1, 0);
|
|
297
|
+
const auto ts_sz_func = [kTimestampSize, handle](uint32_t cf_id) {
|
|
298
|
+
assert(handle);
|
|
299
|
+
if (cf_id == 0) {
|
|
300
|
+
return static_cast<size_t>(0);
|
|
301
|
+
} else if (cf_id == handle->GetID()) {
|
|
302
|
+
return kTimestampSize;
|
|
303
|
+
} else {
|
|
304
|
+
assert(false);
|
|
305
|
+
return std::numeric_limits<size_t>::max();
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
ASSERT_OK(wb.UpdateTimestamps(ts, ts_sz_func));
|
|
309
|
+
ASSERT_OK(db_->Write(WriteOptions(), &wb));
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
const auto verify_db = [this](ColumnFamilyHandle* h, const std::string& key,
|
|
313
|
+
const std::string& ts,
|
|
314
|
+
const std::string& expected_value) {
|
|
315
|
+
ASSERT_EQ(expected_value, Get(key));
|
|
316
|
+
Slice read_ts_slice(ts);
|
|
317
|
+
ReadOptions read_opts;
|
|
318
|
+
read_opts.timestamp = &read_ts_slice;
|
|
319
|
+
std::string value;
|
|
320
|
+
ASSERT_OK(db_->Get(read_opts, h, key, &value));
|
|
321
|
+
ASSERT_EQ(expected_value, value);
|
|
322
|
+
};
|
|
323
|
+
|
|
324
|
+
verify_db(handle, "a", Timestamp(1, 0), "value");
|
|
325
|
+
|
|
326
|
+
delete handle;
|
|
327
|
+
Close();
|
|
328
|
+
|
|
329
|
+
std::vector<ColumnFamilyDescriptor> cf_descs;
|
|
330
|
+
cf_descs.emplace_back(kDefaultColumnFamilyName, options);
|
|
331
|
+
cf_descs.emplace_back("data", options1);
|
|
332
|
+
options.create_if_missing = false;
|
|
333
|
+
s = DB::Open(options, dbname_, cf_descs, &handles_, &db_);
|
|
334
|
+
ASSERT_OK(s);
|
|
335
|
+
|
|
336
|
+
verify_db(handles_[1], "a", Timestamp(1, 0), "value");
|
|
337
|
+
|
|
338
|
+
Close();
|
|
339
|
+
}
|
|
340
|
+
|
|
198
341
|
TEST_F(DBBasicTestWithTimestamp, CompactRangeWithSpecifiedRange) {
|
|
199
342
|
Options options = CurrentOptions();
|
|
200
343
|
options.env = env_;
|
|
@@ -205,14 +348,12 @@ TEST_F(DBBasicTestWithTimestamp, CompactRangeWithSpecifiedRange) {
|
|
|
205
348
|
DestroyAndReopen(options);
|
|
206
349
|
|
|
207
350
|
WriteOptions write_opts;
|
|
208
|
-
std::string
|
|
209
|
-
Slice ts = ts_str;
|
|
210
|
-
write_opts.timestamp = &ts;
|
|
351
|
+
std::string ts = Timestamp(1, 0);
|
|
211
352
|
|
|
212
|
-
ASSERT_OK(db_->Put(write_opts, "foo1", "bar"));
|
|
353
|
+
ASSERT_OK(db_->Put(write_opts, "foo1", ts, "bar"));
|
|
213
354
|
ASSERT_OK(Flush());
|
|
214
355
|
|
|
215
|
-
ASSERT_OK(db_->Put(write_opts, "foo2", "bar"));
|
|
356
|
+
ASSERT_OK(db_->Put(write_opts, "foo2", ts, "bar"));
|
|
216
357
|
ASSERT_OK(Flush());
|
|
217
358
|
|
|
218
359
|
std::string start_str = "foo";
|
|
@@ -223,6 +364,189 @@ TEST_F(DBBasicTestWithTimestamp, CompactRangeWithSpecifiedRange) {
|
|
|
223
364
|
Close();
|
|
224
365
|
}
|
|
225
366
|
|
|
367
|
+
TEST_F(DBBasicTestWithTimestamp, GcPreserveLatestVersionBelowFullHistoryLow) {
|
|
368
|
+
Options options = CurrentOptions();
|
|
369
|
+
options.env = env_;
|
|
370
|
+
options.create_if_missing = true;
|
|
371
|
+
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
372
|
+
TestComparator test_cmp(kTimestampSize);
|
|
373
|
+
options.comparator = &test_cmp;
|
|
374
|
+
DestroyAndReopen(options);
|
|
375
|
+
|
|
376
|
+
std::string ts_str = Timestamp(1, 0);
|
|
377
|
+
WriteOptions wopts;
|
|
378
|
+
ASSERT_OK(db_->Put(wopts, "k1", ts_str, "v1"));
|
|
379
|
+
ASSERT_OK(db_->Put(wopts, "k2", ts_str, "v2"));
|
|
380
|
+
ASSERT_OK(db_->Put(wopts, "k3", ts_str, "v3"));
|
|
381
|
+
|
|
382
|
+
ts_str = Timestamp(2, 0);
|
|
383
|
+
ASSERT_OK(db_->Delete(wopts, "k3", ts_str));
|
|
384
|
+
|
|
385
|
+
ts_str = Timestamp(4, 0);
|
|
386
|
+
ASSERT_OK(db_->Put(wopts, "k1", ts_str, "v5"));
|
|
387
|
+
|
|
388
|
+
ts_str = Timestamp(3, 0);
|
|
389
|
+
Slice ts = ts_str;
|
|
390
|
+
CompactRangeOptions cro;
|
|
391
|
+
cro.full_history_ts_low = &ts;
|
|
392
|
+
ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
|
|
393
|
+
|
|
394
|
+
ASSERT_OK(Flush());
|
|
395
|
+
|
|
396
|
+
ReadOptions ropts;
|
|
397
|
+
ropts.timestamp = &ts;
|
|
398
|
+
std::string value;
|
|
399
|
+
Status s = db_->Get(ropts, "k1", &value);
|
|
400
|
+
ASSERT_OK(s);
|
|
401
|
+
ASSERT_EQ("v1", value);
|
|
402
|
+
|
|
403
|
+
Close();
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
TEST_F(DBBasicTestWithTimestamp, UpdateFullHistoryTsLow) {
|
|
407
|
+
Options options = CurrentOptions();
|
|
408
|
+
options.env = env_;
|
|
409
|
+
options.create_if_missing = true;
|
|
410
|
+
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
411
|
+
TestComparator test_cmp(kTimestampSize);
|
|
412
|
+
options.comparator = &test_cmp;
|
|
413
|
+
DestroyAndReopen(options);
|
|
414
|
+
|
|
415
|
+
const std::string kKey = "test kKey";
|
|
416
|
+
|
|
417
|
+
// Test set ts_low first and flush()
|
|
418
|
+
int current_ts_low = 5;
|
|
419
|
+
std::string ts_low_str = Timestamp(current_ts_low, 0);
|
|
420
|
+
Slice ts_low = ts_low_str;
|
|
421
|
+
CompactRangeOptions comp_opts;
|
|
422
|
+
comp_opts.full_history_ts_low = &ts_low;
|
|
423
|
+
comp_opts.bottommost_level_compaction = BottommostLevelCompaction::kForce;
|
|
424
|
+
|
|
425
|
+
ASSERT_OK(db_->CompactRange(comp_opts, nullptr, nullptr));
|
|
426
|
+
|
|
427
|
+
auto* cfd =
|
|
428
|
+
static_cast_with_check<ColumnFamilyHandleImpl>(db_->DefaultColumnFamily())
|
|
429
|
+
->cfd();
|
|
430
|
+
auto result_ts_low = cfd->GetFullHistoryTsLow();
|
|
431
|
+
|
|
432
|
+
ASSERT_TRUE(test_cmp.CompareTimestamp(ts_low, result_ts_low) == 0);
|
|
433
|
+
|
|
434
|
+
for (int i = 0; i < 10; i++) {
|
|
435
|
+
WriteOptions write_opts;
|
|
436
|
+
std::string ts = Timestamp(i, 0);
|
|
437
|
+
ASSERT_OK(db_->Put(write_opts, kKey, ts, Key(i)));
|
|
438
|
+
}
|
|
439
|
+
ASSERT_OK(Flush());
|
|
440
|
+
|
|
441
|
+
// TODO return a non-ok for read ts < current_ts_low and test it.
|
|
442
|
+
for (int i = 0; i < 10; i++) {
|
|
443
|
+
ReadOptions read_opts;
|
|
444
|
+
std::string ts_str = Timestamp(i, 0);
|
|
445
|
+
Slice ts = ts_str;
|
|
446
|
+
read_opts.timestamp = &ts;
|
|
447
|
+
std::string value;
|
|
448
|
+
Status status = db_->Get(read_opts, kKey, &value);
|
|
449
|
+
if (i < current_ts_low - 1) {
|
|
450
|
+
ASSERT_TRUE(status.IsNotFound());
|
|
451
|
+
} else {
|
|
452
|
+
ASSERT_OK(status);
|
|
453
|
+
ASSERT_TRUE(value.compare(Key(i)) == 0);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
// Test set ts_low and then trigger compaction
|
|
458
|
+
for (int i = 10; i < 20; i++) {
|
|
459
|
+
WriteOptions write_opts;
|
|
460
|
+
std::string ts = Timestamp(i, 0);
|
|
461
|
+
ASSERT_OK(db_->Put(write_opts, kKey, ts, Key(i)));
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
ASSERT_OK(Flush());
|
|
465
|
+
|
|
466
|
+
current_ts_low = 15;
|
|
467
|
+
ts_low_str = Timestamp(current_ts_low, 0);
|
|
468
|
+
ts_low = ts_low_str;
|
|
469
|
+
comp_opts.full_history_ts_low = &ts_low;
|
|
470
|
+
ASSERT_OK(db_->CompactRange(comp_opts, nullptr, nullptr));
|
|
471
|
+
result_ts_low = cfd->GetFullHistoryTsLow();
|
|
472
|
+
ASSERT_TRUE(test_cmp.CompareTimestamp(ts_low, result_ts_low) == 0);
|
|
473
|
+
|
|
474
|
+
// TODO return a non-ok for read ts < current_ts_low and test it.
|
|
475
|
+
for (int i = current_ts_low; i < 20; i++) {
|
|
476
|
+
ReadOptions read_opts;
|
|
477
|
+
std::string ts_str = Timestamp(i, 0);
|
|
478
|
+
Slice ts = ts_str;
|
|
479
|
+
read_opts.timestamp = &ts;
|
|
480
|
+
std::string value;
|
|
481
|
+
Status status = db_->Get(read_opts, kKey, &value);
|
|
482
|
+
ASSERT_OK(status);
|
|
483
|
+
ASSERT_TRUE(value.compare(Key(i)) == 0);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
// Test invalid compaction with range
|
|
487
|
+
Slice start(kKey), end(kKey);
|
|
488
|
+
Status s = db_->CompactRange(comp_opts, &start, &end);
|
|
489
|
+
ASSERT_TRUE(s.IsInvalidArgument());
|
|
490
|
+
s = db_->CompactRange(comp_opts, &start, nullptr);
|
|
491
|
+
ASSERT_TRUE(s.IsInvalidArgument());
|
|
492
|
+
s = db_->CompactRange(comp_opts, nullptr, &end);
|
|
493
|
+
ASSERT_TRUE(s.IsInvalidArgument());
|
|
494
|
+
|
|
495
|
+
// Test invalid compaction with the decreasing ts_low
|
|
496
|
+
ts_low_str = Timestamp(current_ts_low - 1, 0);
|
|
497
|
+
ts_low = ts_low_str;
|
|
498
|
+
comp_opts.full_history_ts_low = &ts_low;
|
|
499
|
+
s = db_->CompactRange(comp_opts, nullptr, nullptr);
|
|
500
|
+
ASSERT_TRUE(s.IsInvalidArgument());
|
|
501
|
+
|
|
502
|
+
Close();
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
TEST_F(DBBasicTestWithTimestamp, UpdateFullHistoryTsLowWithPublicAPI) {
|
|
506
|
+
Options options = CurrentOptions();
|
|
507
|
+
options.env = env_;
|
|
508
|
+
options.create_if_missing = true;
|
|
509
|
+
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
510
|
+
TestComparator test_cmp(kTimestampSize);
|
|
511
|
+
options.comparator = &test_cmp;
|
|
512
|
+
DestroyAndReopen(options);
|
|
513
|
+
std::string ts_low_str = Timestamp(9, 0);
|
|
514
|
+
ASSERT_OK(
|
|
515
|
+
db_->IncreaseFullHistoryTsLow(db_->DefaultColumnFamily(), ts_low_str));
|
|
516
|
+
std::string result_ts_low;
|
|
517
|
+
ASSERT_OK(db_->GetFullHistoryTsLow(nullptr, &result_ts_low));
|
|
518
|
+
ASSERT_TRUE(test_cmp.CompareTimestamp(ts_low_str, result_ts_low) == 0);
|
|
519
|
+
// test increase full_history_low backward
|
|
520
|
+
std::string ts_low_str_back = Timestamp(8, 0);
|
|
521
|
+
auto s = db_->IncreaseFullHistoryTsLow(db_->DefaultColumnFamily(),
|
|
522
|
+
ts_low_str_back);
|
|
523
|
+
ASSERT_EQ(s, Status::InvalidArgument());
|
|
524
|
+
// test IncreaseFullHistoryTsLow with a timestamp whose length is longger
|
|
525
|
+
// than the cf's timestamp size
|
|
526
|
+
std::string ts_low_str_long(Timestamp(0, 0).size() + 1, 'a');
|
|
527
|
+
s = db_->IncreaseFullHistoryTsLow(db_->DefaultColumnFamily(),
|
|
528
|
+
ts_low_str_long);
|
|
529
|
+
ASSERT_EQ(s, Status::InvalidArgument());
|
|
530
|
+
// test IncreaseFullHistoryTsLow with a timestamp which is null
|
|
531
|
+
std::string ts_low_str_null = "";
|
|
532
|
+
s = db_->IncreaseFullHistoryTsLow(db_->DefaultColumnFamily(),
|
|
533
|
+
ts_low_str_null);
|
|
534
|
+
ASSERT_EQ(s, Status::InvalidArgument());
|
|
535
|
+
// test IncreaseFullHistoryTsLow for a column family that does not enable
|
|
536
|
+
// timestamp
|
|
537
|
+
options.comparator = BytewiseComparator();
|
|
538
|
+
DestroyAndReopen(options);
|
|
539
|
+
ts_low_str = Timestamp(10, 0);
|
|
540
|
+
s = db_->IncreaseFullHistoryTsLow(db_->DefaultColumnFamily(), ts_low_str);
|
|
541
|
+
ASSERT_EQ(s, Status::InvalidArgument());
|
|
542
|
+
// test GetFullHistoryTsLow for a column family that does not enable
|
|
543
|
+
// timestamp
|
|
544
|
+
std::string current_ts_low;
|
|
545
|
+
s = db_->GetFullHistoryTsLow(db_->DefaultColumnFamily(), ¤t_ts_low);
|
|
546
|
+
ASSERT_EQ(s, Status::InvalidArgument());
|
|
547
|
+
Close();
|
|
548
|
+
}
|
|
549
|
+
|
|
226
550
|
TEST_F(DBBasicTestWithTimestamp, GetApproximateSizes) {
|
|
227
551
|
Options options = CurrentOptions();
|
|
228
552
|
options.write_buffer_size = 100000000; // Large write buffer
|
|
@@ -235,14 +559,12 @@ TEST_F(DBBasicTestWithTimestamp, GetApproximateSizes) {
|
|
|
235
559
|
auto default_cf = db_->DefaultColumnFamily();
|
|
236
560
|
|
|
237
561
|
WriteOptions write_opts;
|
|
238
|
-
std::string
|
|
239
|
-
Slice ts = ts_str;
|
|
240
|
-
write_opts.timestamp = &ts;
|
|
562
|
+
std::string ts = Timestamp(1, 0);
|
|
241
563
|
|
|
242
564
|
const int N = 128;
|
|
243
565
|
Random rnd(301);
|
|
244
566
|
for (int i = 0; i < N; i++) {
|
|
245
|
-
ASSERT_OK(db_->Put(write_opts, Key(i), rnd.RandomString(1024)));
|
|
567
|
+
ASSERT_OK(db_->Put(write_opts, Key(i), ts, rnd.RandomString(1024)));
|
|
246
568
|
}
|
|
247
569
|
|
|
248
570
|
uint64_t size;
|
|
@@ -250,7 +572,7 @@ TEST_F(DBBasicTestWithTimestamp, GetApproximateSizes) {
|
|
|
250
572
|
std::string end = Key(60);
|
|
251
573
|
Range r(start, end);
|
|
252
574
|
SizeApproximationOptions size_approx_options;
|
|
253
|
-
size_approx_options.
|
|
575
|
+
size_approx_options.include_memtables = true;
|
|
254
576
|
size_approx_options.include_files = true;
|
|
255
577
|
ASSERT_OK(
|
|
256
578
|
db_->GetApproximateSizes(size_approx_options, default_cf, &r, 1, &size));
|
|
@@ -281,7 +603,7 @@ TEST_F(DBBasicTestWithTimestamp, GetApproximateSizes) {
|
|
|
281
603
|
ASSERT_EQ(size, 0);
|
|
282
604
|
|
|
283
605
|
// Test range boundaries
|
|
284
|
-
ASSERT_OK(db_->Put(write_opts, Key(1000), rnd.RandomString(1024)));
|
|
606
|
+
ASSERT_OK(db_->Put(write_opts, Key(1000), ts, rnd.RandomString(1024)));
|
|
285
607
|
// Should include start key
|
|
286
608
|
start = Key(1000);
|
|
287
609
|
end = Key(1100);
|
|
@@ -297,12 +619,11 @@ TEST_F(DBBasicTestWithTimestamp, GetApproximateSizes) {
|
|
|
297
619
|
ASSERT_OK(
|
|
298
620
|
db_->GetApproximateSizes(size_approx_options, default_cf, &r, 1, &size));
|
|
299
621
|
ASSERT_EQ(size, 0);
|
|
300
|
-
std::cout << size << std::endl;
|
|
301
622
|
|
|
302
623
|
Close();
|
|
303
624
|
}
|
|
304
625
|
|
|
305
|
-
TEST_F(DBBasicTestWithTimestamp,
|
|
626
|
+
TEST_F(DBBasicTestWithTimestamp, SimpleIterate) {
|
|
306
627
|
const int kNumKeysPerFile = 128;
|
|
307
628
|
const uint64_t kMaxKey = 1024;
|
|
308
629
|
Options options = CurrentOptions();
|
|
@@ -311,7 +632,8 @@ TEST_F(DBBasicTestWithTimestamp, SimpleForwardIterate) {
|
|
|
311
632
|
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
312
633
|
TestComparator test_cmp(kTimestampSize);
|
|
313
634
|
options.comparator = &test_cmp;
|
|
314
|
-
options.memtable_factory.reset(
|
|
635
|
+
options.memtable_factory.reset(
|
|
636
|
+
test::NewSpecialSkipListFactory(kNumKeysPerFile));
|
|
315
637
|
DestroyAndReopen(options);
|
|
316
638
|
const std::vector<uint64_t> start_keys = {1, 0};
|
|
317
639
|
const std::vector<std::string> write_timestamps = {Timestamp(1, 0),
|
|
@@ -320,10 +642,9 @@ TEST_F(DBBasicTestWithTimestamp, SimpleForwardIterate) {
|
|
|
320
642
|
Timestamp(4, 0)};
|
|
321
643
|
for (size_t i = 0; i < write_timestamps.size(); ++i) {
|
|
322
644
|
WriteOptions write_opts;
|
|
323
|
-
Slice write_ts = write_timestamps[i];
|
|
324
|
-
write_opts.timestamp = &write_ts;
|
|
325
645
|
for (uint64_t key = start_keys[i]; key <= kMaxKey; ++key) {
|
|
326
|
-
Status s = db_->Put(write_opts, Key1(key),
|
|
646
|
+
Status s = db_->Put(write_opts, Key1(key), write_timestamps[i],
|
|
647
|
+
"value" + std::to_string(i));
|
|
327
648
|
ASSERT_OK(s);
|
|
328
649
|
}
|
|
329
650
|
}
|
|
@@ -334,6 +655,7 @@ TEST_F(DBBasicTestWithTimestamp, SimpleForwardIterate) {
|
|
|
334
655
|
std::unique_ptr<Iterator> it(db_->NewIterator(read_opts));
|
|
335
656
|
int count = 0;
|
|
336
657
|
uint64_t key = 0;
|
|
658
|
+
// Forward iterate.
|
|
337
659
|
for (it->Seek(Key1(0)), key = start_keys[i]; it->Valid();
|
|
338
660
|
it->Next(), ++count, ++key) {
|
|
339
661
|
CheckIterUserEntry(it.get(), Key1(key), kTypeValue,
|
|
@@ -342,7 +664,16 @@ TEST_F(DBBasicTestWithTimestamp, SimpleForwardIterate) {
|
|
|
342
664
|
size_t expected_count = kMaxKey - start_keys[i] + 1;
|
|
343
665
|
ASSERT_EQ(expected_count, count);
|
|
344
666
|
|
|
345
|
-
//
|
|
667
|
+
// Backward iterate.
|
|
668
|
+
count = 0;
|
|
669
|
+
for (it->SeekForPrev(Key1(kMaxKey)), key = kMaxKey; it->Valid();
|
|
670
|
+
it->Prev(), ++count, --key) {
|
|
671
|
+
CheckIterUserEntry(it.get(), Key1(key), kTypeValue,
|
|
672
|
+
"value" + std::to_string(i), write_timestamps[i]);
|
|
673
|
+
}
|
|
674
|
+
ASSERT_EQ(static_cast<size_t>(kMaxKey) - start_keys[i] + 1, count);
|
|
675
|
+
|
|
676
|
+
// SeekToFirst()/SeekToLast() with lower/upper bounds.
|
|
346
677
|
// Then iter with lower and upper bounds.
|
|
347
678
|
uint64_t l = 0;
|
|
348
679
|
uint64_t r = kMaxKey + 1;
|
|
@@ -360,6 +691,12 @@ TEST_F(DBBasicTestWithTimestamp, SimpleForwardIterate) {
|
|
|
360
691
|
"value" + std::to_string(i), write_timestamps[i]);
|
|
361
692
|
}
|
|
362
693
|
ASSERT_EQ(r - std::max(l, start_keys[i]), count);
|
|
694
|
+
|
|
695
|
+
for (it->SeekToLast(), key = std::min(r, kMaxKey + 1), count = 0;
|
|
696
|
+
it->Valid(); it->Prev(), --key, ++count) {
|
|
697
|
+
CheckIterUserEntry(it.get(), Key1(key - 1), kTypeValue,
|
|
698
|
+
"value" + std::to_string(i), write_timestamps[i]);
|
|
699
|
+
}
|
|
363
700
|
l += (kMaxKey / 100);
|
|
364
701
|
r -= (kMaxKey / 100);
|
|
365
702
|
}
|
|
@@ -367,7 +704,194 @@ TEST_F(DBBasicTestWithTimestamp, SimpleForwardIterate) {
|
|
|
367
704
|
Close();
|
|
368
705
|
}
|
|
369
706
|
|
|
370
|
-
TEST_F(DBBasicTestWithTimestamp,
|
|
707
|
+
TEST_F(DBBasicTestWithTimestamp, TrimHistoryTest) {
|
|
708
|
+
Options options = CurrentOptions();
|
|
709
|
+
options.env = env_;
|
|
710
|
+
options.create_if_missing = true;
|
|
711
|
+
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
712
|
+
TestComparator test_cmp(kTimestampSize);
|
|
713
|
+
options.comparator = &test_cmp;
|
|
714
|
+
DestroyAndReopen(options);
|
|
715
|
+
auto check_value_by_ts = [](DB* db, Slice key, std::string readTs,
|
|
716
|
+
Status status, std::string checkValue) {
|
|
717
|
+
ReadOptions ropts;
|
|
718
|
+
Slice ts = readTs;
|
|
719
|
+
ropts.timestamp = &ts;
|
|
720
|
+
std::string value;
|
|
721
|
+
Status s = db->Get(ropts, key, &value);
|
|
722
|
+
ASSERT_TRUE(s == status);
|
|
723
|
+
if (s.ok()) {
|
|
724
|
+
ASSERT_EQ(checkValue, value);
|
|
725
|
+
}
|
|
726
|
+
};
|
|
727
|
+
// Construct data of different versions with different ts
|
|
728
|
+
ASSERT_OK(db_->Put(WriteOptions(), "k1", Timestamp(2, 0), "v1"));
|
|
729
|
+
ASSERT_OK(db_->Put(WriteOptions(), "k1", Timestamp(4, 0), "v2"));
|
|
730
|
+
ASSERT_OK(db_->Delete(WriteOptions(), "k1", Timestamp(5, 0)));
|
|
731
|
+
ASSERT_OK(db_->Put(WriteOptions(), "k1", Timestamp(6, 0), "v3"));
|
|
732
|
+
check_value_by_ts(db_, "k1", Timestamp(7, 0), Status::OK(), "v3");
|
|
733
|
+
ASSERT_OK(Flush());
|
|
734
|
+
Close();
|
|
735
|
+
|
|
736
|
+
ColumnFamilyOptions cf_options(options);
|
|
737
|
+
std::vector<ColumnFamilyDescriptor> column_families;
|
|
738
|
+
column_families.push_back(
|
|
739
|
+
ColumnFamilyDescriptor(kDefaultColumnFamilyName, cf_options));
|
|
740
|
+
DBOptions db_options(options);
|
|
741
|
+
|
|
742
|
+
// Trim data whose version > Timestamp(5, 0), read(k1, ts(7)) <- NOT_FOUND.
|
|
743
|
+
ASSERT_OK(DB::OpenAndTrimHistory(db_options, dbname_, column_families,
|
|
744
|
+
&handles_, &db_, Timestamp(5, 0)));
|
|
745
|
+
check_value_by_ts(db_, "k1", Timestamp(7, 0), Status::NotFound(), "");
|
|
746
|
+
Close();
|
|
747
|
+
|
|
748
|
+
// Trim data whose timestamp > Timestamp(4, 0), read(k1, ts(7)) <- v2
|
|
749
|
+
ASSERT_OK(DB::OpenAndTrimHistory(db_options, dbname_, column_families,
|
|
750
|
+
&handles_, &db_, Timestamp(4, 0)));
|
|
751
|
+
check_value_by_ts(db_, "k1", Timestamp(7, 0), Status::OK(), "v2");
|
|
752
|
+
Close();
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
TEST_F(DBBasicTestWithTimestamp, OpenAndTrimHistoryInvalidOptionTest) {
|
|
756
|
+
Destroy(last_options_);
|
|
757
|
+
|
|
758
|
+
Options options = CurrentOptions();
|
|
759
|
+
options.env = env_;
|
|
760
|
+
options.create_if_missing = true;
|
|
761
|
+
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
762
|
+
TestComparator test_cmp(kTimestampSize);
|
|
763
|
+
options.comparator = &test_cmp;
|
|
764
|
+
|
|
765
|
+
ColumnFamilyOptions cf_options(options);
|
|
766
|
+
std::vector<ColumnFamilyDescriptor> column_families;
|
|
767
|
+
column_families.push_back(
|
|
768
|
+
ColumnFamilyDescriptor(kDefaultColumnFamilyName, cf_options));
|
|
769
|
+
DBOptions db_options(options);
|
|
770
|
+
|
|
771
|
+
// OpenAndTrimHistory should not work with avoid_flush_during_recovery
|
|
772
|
+
db_options.avoid_flush_during_recovery = true;
|
|
773
|
+
ASSERT_TRUE(DB::OpenAndTrimHistory(db_options, dbname_, column_families,
|
|
774
|
+
&handles_, &db_, Timestamp(0, 0))
|
|
775
|
+
.IsInvalidArgument());
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
#ifndef ROCKSDB_LITE
|
|
779
|
+
TEST_F(DBBasicTestWithTimestamp, GetTimestampTableProperties) {
|
|
780
|
+
Options options = CurrentOptions();
|
|
781
|
+
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
782
|
+
TestComparator test_cmp(kTimestampSize);
|
|
783
|
+
options.comparator = &test_cmp;
|
|
784
|
+
DestroyAndReopen(options);
|
|
785
|
+
// Create 2 tables
|
|
786
|
+
for (int table = 0; table < 2; ++table) {
|
|
787
|
+
for (int i = 0; i < 10; i++) {
|
|
788
|
+
std::string ts = Timestamp(i, 0);
|
|
789
|
+
ASSERT_OK(db_->Put(WriteOptions(), "key", ts, Key(i)));
|
|
790
|
+
}
|
|
791
|
+
ASSERT_OK(Flush());
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
TablePropertiesCollection props;
|
|
795
|
+
ASSERT_OK(db_->GetPropertiesOfAllTables(&props));
|
|
796
|
+
ASSERT_EQ(2U, props.size());
|
|
797
|
+
for (const auto& item : props) {
|
|
798
|
+
auto& user_collected = item.second->user_collected_properties;
|
|
799
|
+
ASSERT_TRUE(user_collected.find("rocksdb.timestamp_min") !=
|
|
800
|
+
user_collected.end());
|
|
801
|
+
ASSERT_TRUE(user_collected.find("rocksdb.timestamp_max") !=
|
|
802
|
+
user_collected.end());
|
|
803
|
+
ASSERT_EQ(user_collected.at("rocksdb.timestamp_min"), Timestamp(0, 0));
|
|
804
|
+
ASSERT_EQ(user_collected.at("rocksdb.timestamp_max"), Timestamp(9, 0));
|
|
805
|
+
}
|
|
806
|
+
Close();
|
|
807
|
+
}
|
|
808
|
+
#endif // !ROCKSDB_LITE
|
|
809
|
+
|
|
810
|
+
class DBBasicTestWithTimestampTableOptions
|
|
811
|
+
: public DBBasicTestWithTimestampBase,
|
|
812
|
+
public testing::WithParamInterface<BlockBasedTableOptions::IndexType> {
|
|
813
|
+
public:
|
|
814
|
+
explicit DBBasicTestWithTimestampTableOptions()
|
|
815
|
+
: DBBasicTestWithTimestampBase(
|
|
816
|
+
"db_basic_test_with_timestamp_table_options") {}
|
|
817
|
+
};
|
|
818
|
+
|
|
819
|
+
INSTANTIATE_TEST_CASE_P(
|
|
820
|
+
Timestamp, DBBasicTestWithTimestampTableOptions,
|
|
821
|
+
testing::Values(
|
|
822
|
+
BlockBasedTableOptions::IndexType::kBinarySearch,
|
|
823
|
+
BlockBasedTableOptions::IndexType::kHashSearch,
|
|
824
|
+
BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch,
|
|
825
|
+
BlockBasedTableOptions::IndexType::kBinarySearchWithFirstKey));
|
|
826
|
+
|
|
827
|
+
TEST_P(DBBasicTestWithTimestampTableOptions, GetAndMultiGet) {
|
|
828
|
+
Options options = GetDefaultOptions();
|
|
829
|
+
options.create_if_missing = true;
|
|
830
|
+
options.prefix_extractor.reset(NewFixedPrefixTransform(3));
|
|
831
|
+
options.compression = kNoCompression;
|
|
832
|
+
BlockBasedTableOptions bbto;
|
|
833
|
+
bbto.index_type = GetParam();
|
|
834
|
+
bbto.block_size = 100;
|
|
835
|
+
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
836
|
+
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
837
|
+
TestComparator cmp(kTimestampSize);
|
|
838
|
+
options.comparator = &cmp;
|
|
839
|
+
DestroyAndReopen(options);
|
|
840
|
+
constexpr uint64_t kNumKeys = 1024;
|
|
841
|
+
for (uint64_t k = 0; k < kNumKeys; ++k) {
|
|
842
|
+
WriteOptions write_opts;
|
|
843
|
+
ASSERT_OK(db_->Put(write_opts, Key1(k), Timestamp(1, 0),
|
|
844
|
+
"value" + std::to_string(k)));
|
|
845
|
+
}
|
|
846
|
+
ASSERT_OK(Flush());
|
|
847
|
+
{
|
|
848
|
+
ReadOptions read_opts;
|
|
849
|
+
read_opts.total_order_seek = true;
|
|
850
|
+
std::string ts_str = Timestamp(2, 0);
|
|
851
|
+
Slice ts = ts_str;
|
|
852
|
+
read_opts.timestamp = &ts;
|
|
853
|
+
std::unique_ptr<Iterator> it(db_->NewIterator(read_opts));
|
|
854
|
+
// verify Get()
|
|
855
|
+
for (it->SeekToFirst(); it->Valid(); it->Next()) {
|
|
856
|
+
std::string value_from_get;
|
|
857
|
+
std::string key_str(it->key().data(), it->key().size());
|
|
858
|
+
std::string timestamp;
|
|
859
|
+
ASSERT_OK(db_->Get(read_opts, key_str, &value_from_get, ×tamp));
|
|
860
|
+
ASSERT_EQ(it->value(), value_from_get);
|
|
861
|
+
ASSERT_EQ(Timestamp(1, 0), timestamp);
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
// verify MultiGet()
|
|
865
|
+
constexpr uint64_t step = 2;
|
|
866
|
+
static_assert(0 == (kNumKeys % step),
|
|
867
|
+
"kNumKeys must be a multiple of step");
|
|
868
|
+
for (uint64_t k = 0; k < kNumKeys; k += 2) {
|
|
869
|
+
std::vector<std::string> key_strs;
|
|
870
|
+
std::vector<Slice> keys;
|
|
871
|
+
for (size_t i = 0; i < step; ++i) {
|
|
872
|
+
key_strs.push_back(Key1(k + i));
|
|
873
|
+
}
|
|
874
|
+
for (size_t i = 0; i < step; ++i) {
|
|
875
|
+
keys.emplace_back(key_strs[i]);
|
|
876
|
+
}
|
|
877
|
+
std::vector<std::string> values;
|
|
878
|
+
std::vector<std::string> timestamps;
|
|
879
|
+
std::vector<Status> statuses =
|
|
880
|
+
db_->MultiGet(read_opts, keys, &values, ×tamps);
|
|
881
|
+
ASSERT_EQ(step, statuses.size());
|
|
882
|
+
ASSERT_EQ(step, values.size());
|
|
883
|
+
ASSERT_EQ(step, timestamps.size());
|
|
884
|
+
for (uint64_t i = 0; i < step; ++i) {
|
|
885
|
+
ASSERT_OK(statuses[i]);
|
|
886
|
+
ASSERT_EQ("value" + std::to_string(k + i), values[i]);
|
|
887
|
+
ASSERT_EQ(Timestamp(1, 0), timestamps[i]);
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
Close();
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
TEST_P(DBBasicTestWithTimestampTableOptions, SeekWithPrefixLessThanKey) {
|
|
371
895
|
Options options = CurrentOptions();
|
|
372
896
|
options.env = env_;
|
|
373
897
|
options.create_if_missing = true;
|
|
@@ -378,6 +902,7 @@ TEST_F(DBBasicTestWithTimestamp, SeekWithPrefixLessThanKey) {
|
|
|
378
902
|
bbto.filter_policy.reset(NewBloomFilterPolicy(10, false));
|
|
379
903
|
bbto.cache_index_and_filter_blocks = true;
|
|
380
904
|
bbto.whole_key_filtering = true;
|
|
905
|
+
bbto.index_type = GetParam();
|
|
381
906
|
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
382
907
|
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
383
908
|
TestComparator test_cmp(kTimestampSize);
|
|
@@ -385,26 +910,23 @@ TEST_F(DBBasicTestWithTimestamp, SeekWithPrefixLessThanKey) {
|
|
|
385
910
|
DestroyAndReopen(options);
|
|
386
911
|
|
|
387
912
|
WriteOptions write_opts;
|
|
388
|
-
std::string
|
|
389
|
-
Slice ts = ts_str;
|
|
390
|
-
write_opts.timestamp = &ts;
|
|
913
|
+
std::string ts = Timestamp(1, 0);
|
|
391
914
|
|
|
392
|
-
ASSERT_OK(db_->Put(write_opts, "foo1", "bar"));
|
|
915
|
+
ASSERT_OK(db_->Put(write_opts, "foo1", ts, "bar"));
|
|
393
916
|
ASSERT_OK(Flush());
|
|
394
917
|
|
|
395
|
-
ASSERT_OK(db_->Put(write_opts, "foo2", "bar"));
|
|
918
|
+
ASSERT_OK(db_->Put(write_opts, "foo2", ts, "bar"));
|
|
396
919
|
ASSERT_OK(Flush());
|
|
397
920
|
|
|
398
921
|
// Move sst file to next level
|
|
399
922
|
ASSERT_OK(db_->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
400
923
|
|
|
401
|
-
ASSERT_OK(db_->Put(write_opts, "foo3", "bar"));
|
|
924
|
+
ASSERT_OK(db_->Put(write_opts, "foo3", ts, "bar"));
|
|
402
925
|
ASSERT_OK(Flush());
|
|
403
926
|
|
|
404
927
|
ReadOptions read_opts;
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
read_opts.timestamp = &ts;
|
|
928
|
+
Slice read_ts = ts;
|
|
929
|
+
read_opts.timestamp = &read_ts;
|
|
408
930
|
{
|
|
409
931
|
std::unique_ptr<Iterator> iter(db_->NewIterator(read_opts));
|
|
410
932
|
iter->Seek("foo");
|
|
@@ -422,17 +944,20 @@ TEST_F(DBBasicTestWithTimestamp, SeekWithPrefixLessThanKey) {
|
|
|
422
944
|
Close();
|
|
423
945
|
}
|
|
424
946
|
|
|
425
|
-
|
|
947
|
+
TEST_P(DBBasicTestWithTimestampTableOptions, SeekWithCappedPrefix) {
|
|
426
948
|
Options options = CurrentOptions();
|
|
427
949
|
options.env = env_;
|
|
428
950
|
options.create_if_missing = true;
|
|
429
|
-
|
|
951
|
+
// All of the keys or this test must be longer than 3 characters
|
|
952
|
+
constexpr int kMinKeyLen = 3;
|
|
953
|
+
options.prefix_extractor.reset(NewCappedPrefixTransform(kMinKeyLen));
|
|
430
954
|
options.memtable_whole_key_filtering = true;
|
|
431
955
|
options.memtable_prefix_bloom_size_ratio = 0.1;
|
|
432
956
|
BlockBasedTableOptions bbto;
|
|
433
957
|
bbto.filter_policy.reset(NewBloomFilterPolicy(10, false));
|
|
434
958
|
bbto.cache_index_and_filter_blocks = true;
|
|
435
959
|
bbto.whole_key_filtering = true;
|
|
960
|
+
bbto.index_type = GetParam();
|
|
436
961
|
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
437
962
|
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
438
963
|
TestComparator test_cmp(kTimestampSize);
|
|
@@ -440,26 +965,24 @@ TEST_F(DBBasicTestWithTimestamp, SeekWithPrefixLargerThanKey) {
|
|
|
440
965
|
DestroyAndReopen(options);
|
|
441
966
|
|
|
442
967
|
WriteOptions write_opts;
|
|
443
|
-
std::string
|
|
444
|
-
Slice ts = ts_str;
|
|
445
|
-
write_opts.timestamp = &ts;
|
|
968
|
+
std::string ts = Timestamp(1, 0);
|
|
446
969
|
|
|
447
|
-
ASSERT_OK(db_->Put(write_opts, "foo1", "bar"));
|
|
970
|
+
ASSERT_OK(db_->Put(write_opts, "foo1", ts, "bar"));
|
|
448
971
|
ASSERT_OK(Flush());
|
|
449
972
|
|
|
450
|
-
ASSERT_OK(db_->Put(write_opts, "foo2", "bar"));
|
|
973
|
+
ASSERT_OK(db_->Put(write_opts, "foo2", ts, "bar"));
|
|
451
974
|
ASSERT_OK(Flush());
|
|
452
975
|
|
|
453
976
|
// Move sst file to next level
|
|
454
977
|
ASSERT_OK(db_->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
455
978
|
|
|
456
|
-
ASSERT_OK(db_->Put(write_opts, "foo3", "bar"));
|
|
979
|
+
ASSERT_OK(db_->Put(write_opts, "foo3", ts, "bar"));
|
|
457
980
|
ASSERT_OK(Flush());
|
|
458
981
|
|
|
459
982
|
ReadOptions read_opts;
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
read_opts.timestamp = &
|
|
983
|
+
ts = Timestamp(2, 0);
|
|
984
|
+
Slice read_ts = ts;
|
|
985
|
+
read_opts.timestamp = &read_ts;
|
|
463
986
|
{
|
|
464
987
|
std::unique_ptr<Iterator> iter(db_->NewIterator(read_opts));
|
|
465
988
|
// Make sure the prefix extractor doesn't include timestamp, otherwise it
|
|
@@ -475,7 +998,7 @@ TEST_F(DBBasicTestWithTimestamp, SeekWithPrefixLargerThanKey) {
|
|
|
475
998
|
Close();
|
|
476
999
|
}
|
|
477
1000
|
|
|
478
|
-
|
|
1001
|
+
TEST_P(DBBasicTestWithTimestampTableOptions, SeekWithBound) {
|
|
479
1002
|
Options options = CurrentOptions();
|
|
480
1003
|
options.env = env_;
|
|
481
1004
|
options.create_if_missing = true;
|
|
@@ -484,6 +1007,7 @@ TEST_F(DBBasicTestWithTimestamp, SeekWithBound) {
|
|
|
484
1007
|
bbto.filter_policy.reset(NewBloomFilterPolicy(10, false));
|
|
485
1008
|
bbto.cache_index_and_filter_blocks = true;
|
|
486
1009
|
bbto.whole_key_filtering = true;
|
|
1010
|
+
bbto.index_type = GetParam();
|
|
487
1011
|
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
488
1012
|
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
489
1013
|
TestComparator test_cmp(kTimestampSize);
|
|
@@ -491,39 +1015,135 @@ TEST_F(DBBasicTestWithTimestamp, SeekWithBound) {
|
|
|
491
1015
|
DestroyAndReopen(options);
|
|
492
1016
|
|
|
493
1017
|
WriteOptions write_opts;
|
|
494
|
-
std::string
|
|
495
|
-
Slice ts = ts_str;
|
|
496
|
-
write_opts.timestamp = &ts;
|
|
1018
|
+
std::string ts = Timestamp(1, 0);
|
|
497
1019
|
|
|
498
|
-
ASSERT_OK(db_->Put(write_opts, "foo1", "
|
|
1020
|
+
ASSERT_OK(db_->Put(write_opts, "foo1", ts, "bar1"));
|
|
499
1021
|
ASSERT_OK(Flush());
|
|
500
1022
|
|
|
501
|
-
ASSERT_OK(db_->Put(write_opts, "foo2", "
|
|
1023
|
+
ASSERT_OK(db_->Put(write_opts, "foo2", ts, "bar2"));
|
|
502
1024
|
ASSERT_OK(Flush());
|
|
503
1025
|
|
|
504
1026
|
// Move sst file to next level
|
|
505
1027
|
ASSERT_OK(db_->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
506
1028
|
|
|
507
|
-
|
|
1029
|
+
for (int i = 3; i < 9; ++i) {
|
|
1030
|
+
ASSERT_OK(db_->Put(write_opts, "foo" + std::to_string(i), ts,
|
|
1031
|
+
"bar" + std::to_string(i)));
|
|
1032
|
+
}
|
|
508
1033
|
ASSERT_OK(Flush());
|
|
509
1034
|
|
|
510
1035
|
ReadOptions read_opts;
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
read_opts.timestamp = &
|
|
514
|
-
std::string up_bound = "foo5";
|
|
1036
|
+
ts = Timestamp(2, 0);
|
|
1037
|
+
Slice read_ts = ts;
|
|
1038
|
+
read_opts.timestamp = &read_ts;
|
|
1039
|
+
std::string up_bound = "foo5"; // exclusive
|
|
515
1040
|
Slice up_bound_slice = up_bound;
|
|
1041
|
+
std::string lo_bound = "foo2"; // inclusive
|
|
1042
|
+
Slice lo_bound_slice = lo_bound;
|
|
516
1043
|
read_opts.iterate_upper_bound = &up_bound_slice;
|
|
1044
|
+
read_opts.iterate_lower_bound = &lo_bound_slice;
|
|
517
1045
|
read_opts.auto_prefix_mode = true;
|
|
518
1046
|
{
|
|
519
1047
|
std::unique_ptr<Iterator> iter(db_->NewIterator(read_opts));
|
|
520
1048
|
// Make sure the prefix extractor doesn't include timestamp, otherwise it
|
|
521
1049
|
// may return invalid result.
|
|
522
1050
|
iter->Seek("foo");
|
|
523
|
-
|
|
524
|
-
|
|
1051
|
+
CheckIterUserEntry(iter.get(), lo_bound, kTypeValue, "bar2",
|
|
1052
|
+
Timestamp(1, 0));
|
|
1053
|
+
iter->SeekToFirst();
|
|
1054
|
+
CheckIterUserEntry(iter.get(), lo_bound, kTypeValue, "bar2",
|
|
1055
|
+
Timestamp(1, 0));
|
|
1056
|
+
iter->SeekForPrev("g");
|
|
1057
|
+
CheckIterUserEntry(iter.get(), "foo4", kTypeValue, "bar4", Timestamp(1, 0));
|
|
1058
|
+
iter->SeekToLast();
|
|
1059
|
+
CheckIterUserEntry(iter.get(), "foo4", kTypeValue, "bar4", Timestamp(1, 0));
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
Close();
|
|
1063
|
+
}
|
|
1064
|
+
|
|
1065
|
+
TEST_F(DBBasicTestWithTimestamp, ChangeIterationDirection) {
|
|
1066
|
+
Options options = GetDefaultOptions();
|
|
1067
|
+
options.create_if_missing = true;
|
|
1068
|
+
options.env = env_;
|
|
1069
|
+
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
1070
|
+
TestComparator test_cmp(kTimestampSize);
|
|
1071
|
+
options.comparator = &test_cmp;
|
|
1072
|
+
options.prefix_extractor.reset(NewFixedPrefixTransform(1));
|
|
1073
|
+
options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
|
|
1074
|
+
DestroyAndReopen(options);
|
|
1075
|
+
const std::vector<std::string> timestamps = {Timestamp(1, 1), Timestamp(0, 2),
|
|
1076
|
+
Timestamp(4, 3)};
|
|
1077
|
+
const std::vector<std::tuple<std::string, std::string>> kvs = {
|
|
1078
|
+
std::make_tuple("aa", "value1"), std::make_tuple("ab", "value2")};
|
|
1079
|
+
for (const auto& ts : timestamps) {
|
|
1080
|
+
WriteBatch wb(0, 0, 0, kTimestampSize);
|
|
1081
|
+
for (const auto& kv : kvs) {
|
|
1082
|
+
const std::string& key = std::get<0>(kv);
|
|
1083
|
+
const std::string& value = std::get<1>(kv);
|
|
1084
|
+
ASSERT_OK(wb.Put(key, value));
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
ASSERT_OK(wb.UpdateTimestamps(
|
|
1088
|
+
ts, [kTimestampSize](uint32_t) { return kTimestampSize; }));
|
|
1089
|
+
ASSERT_OK(db_->Write(WriteOptions(), &wb));
|
|
525
1090
|
}
|
|
1091
|
+
std::string read_ts_str = Timestamp(5, 3);
|
|
1092
|
+
Slice read_ts = read_ts_str;
|
|
1093
|
+
ReadOptions read_opts;
|
|
1094
|
+
read_opts.timestamp = &read_ts;
|
|
1095
|
+
std::unique_ptr<Iterator> it(db_->NewIterator(read_opts));
|
|
526
1096
|
|
|
1097
|
+
it->SeekToFirst();
|
|
1098
|
+
ASSERT_TRUE(it->Valid());
|
|
1099
|
+
it->Prev();
|
|
1100
|
+
ASSERT_FALSE(it->Valid());
|
|
1101
|
+
|
|
1102
|
+
it->SeekToLast();
|
|
1103
|
+
ASSERT_TRUE(it->Valid());
|
|
1104
|
+
uint64_t prev_reseek_count =
|
|
1105
|
+
options.statistics->getTickerCount(NUMBER_OF_RESEEKS_IN_ITERATION);
|
|
1106
|
+
ASSERT_EQ(0, prev_reseek_count);
|
|
1107
|
+
it->Next();
|
|
1108
|
+
ASSERT_FALSE(it->Valid());
|
|
1109
|
+
ASSERT_EQ(1 + prev_reseek_count,
|
|
1110
|
+
options.statistics->getTickerCount(NUMBER_OF_RESEEKS_IN_ITERATION));
|
|
1111
|
+
|
|
1112
|
+
it->Seek(std::get<0>(kvs[0]));
|
|
1113
|
+
CheckIterUserEntry(it.get(), std::get<0>(kvs[0]), kTypeValue,
|
|
1114
|
+
std::get<1>(kvs[0]), Timestamp(4, 3));
|
|
1115
|
+
it->Next();
|
|
1116
|
+
CheckIterUserEntry(it.get(), std::get<0>(kvs[1]), kTypeValue,
|
|
1117
|
+
std::get<1>(kvs[1]), Timestamp(4, 3));
|
|
1118
|
+
it->Prev();
|
|
1119
|
+
CheckIterUserEntry(it.get(), std::get<0>(kvs[0]), kTypeValue,
|
|
1120
|
+
std::get<1>(kvs[0]), Timestamp(4, 3));
|
|
1121
|
+
|
|
1122
|
+
prev_reseek_count =
|
|
1123
|
+
options.statistics->getTickerCount(NUMBER_OF_RESEEKS_IN_ITERATION);
|
|
1124
|
+
ASSERT_EQ(1, prev_reseek_count);
|
|
1125
|
+
it->Next();
|
|
1126
|
+
CheckIterUserEntry(it.get(), std::get<0>(kvs[1]), kTypeValue,
|
|
1127
|
+
std::get<1>(kvs[1]), Timestamp(4, 3));
|
|
1128
|
+
ASSERT_EQ(1 + prev_reseek_count,
|
|
1129
|
+
options.statistics->getTickerCount(NUMBER_OF_RESEEKS_IN_ITERATION));
|
|
1130
|
+
|
|
1131
|
+
it->SeekForPrev(std::get<0>(kvs[1]));
|
|
1132
|
+
CheckIterUserEntry(it.get(), std::get<0>(kvs[1]), kTypeValue,
|
|
1133
|
+
std::get<1>(kvs[1]), Timestamp(4, 3));
|
|
1134
|
+
it->Prev();
|
|
1135
|
+
CheckIterUserEntry(it.get(), std::get<0>(kvs[0]), kTypeValue,
|
|
1136
|
+
std::get<1>(kvs[0]), Timestamp(4, 3));
|
|
1137
|
+
|
|
1138
|
+
prev_reseek_count =
|
|
1139
|
+
options.statistics->getTickerCount(NUMBER_OF_RESEEKS_IN_ITERATION);
|
|
1140
|
+
it->Next();
|
|
1141
|
+
CheckIterUserEntry(it.get(), std::get<0>(kvs[1]), kTypeValue,
|
|
1142
|
+
std::get<1>(kvs[1]), Timestamp(4, 3));
|
|
1143
|
+
ASSERT_EQ(1 + prev_reseek_count,
|
|
1144
|
+
options.statistics->getTickerCount(NUMBER_OF_RESEEKS_IN_ITERATION));
|
|
1145
|
+
|
|
1146
|
+
it.reset();
|
|
527
1147
|
Close();
|
|
528
1148
|
}
|
|
529
1149
|
|
|
@@ -536,7 +1156,8 @@ TEST_F(DBBasicTestWithTimestamp, SimpleForwardIterateLowerTsBound) {
|
|
|
536
1156
|
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
537
1157
|
TestComparator test_cmp(kTimestampSize);
|
|
538
1158
|
options.comparator = &test_cmp;
|
|
539
|
-
options.memtable_factory.reset(
|
|
1159
|
+
options.memtable_factory.reset(
|
|
1160
|
+
test::NewSpecialSkipListFactory(kNumKeysPerFile));
|
|
540
1161
|
DestroyAndReopen(options);
|
|
541
1162
|
const std::vector<std::string> write_timestamps = {Timestamp(1, 0),
|
|
542
1163
|
Timestamp(3, 0)};
|
|
@@ -546,10 +1167,9 @@ TEST_F(DBBasicTestWithTimestamp, SimpleForwardIterateLowerTsBound) {
|
|
|
546
1167
|
Timestamp(1, 0)};
|
|
547
1168
|
for (size_t i = 0; i < write_timestamps.size(); ++i) {
|
|
548
1169
|
WriteOptions write_opts;
|
|
549
|
-
Slice write_ts = write_timestamps[i];
|
|
550
|
-
write_opts.timestamp = &write_ts;
|
|
551
1170
|
for (uint64_t key = 0; key <= kMaxKey; ++key) {
|
|
552
|
-
Status s = db_->Put(write_opts, Key1(key),
|
|
1171
|
+
Status s = db_->Put(write_opts, Key1(key), write_timestamps[i],
|
|
1172
|
+
"value" + std::to_string(i));
|
|
553
1173
|
ASSERT_OK(s);
|
|
554
1174
|
}
|
|
555
1175
|
}
|
|
@@ -579,10 +1199,8 @@ TEST_F(DBBasicTestWithTimestamp, SimpleForwardIterateLowerTsBound) {
|
|
|
579
1199
|
{
|
|
580
1200
|
std::string write_timestamp = Timestamp(5, 0);
|
|
581
1201
|
WriteOptions write_opts;
|
|
582
|
-
Slice write_ts = write_timestamp;
|
|
583
|
-
write_opts.timestamp = &write_ts;
|
|
584
1202
|
for (uint64_t key = 0; key < kMaxKey + 1; ++key) {
|
|
585
|
-
Status s = db_->Delete(write_opts, Key1(key));
|
|
1203
|
+
Status s = db_->Delete(write_opts, Key1(key), write_timestamp);
|
|
586
1204
|
ASSERT_OK(s);
|
|
587
1205
|
}
|
|
588
1206
|
|
|
@@ -598,7 +1216,7 @@ TEST_F(DBBasicTestWithTimestamp, SimpleForwardIterateLowerTsBound) {
|
|
|
598
1216
|
uint64_t key = 0;
|
|
599
1217
|
for (it->Seek(Key1(0)), key = 0; it->Valid(); it->Next(), ++count, ++key) {
|
|
600
1218
|
CheckIterEntry(it.get(), Key1(key), kTypeDeletionWithTimestamp, Slice(),
|
|
601
|
-
|
|
1219
|
+
write_timestamp);
|
|
602
1220
|
// Skip key@ts=3 and land on tombstone key@ts=5
|
|
603
1221
|
it->Next();
|
|
604
1222
|
}
|
|
@@ -607,93 +1225,6 @@ TEST_F(DBBasicTestWithTimestamp, SimpleForwardIterateLowerTsBound) {
|
|
|
607
1225
|
Close();
|
|
608
1226
|
}
|
|
609
1227
|
|
|
610
|
-
TEST_F(DBBasicTestWithTimestamp, ForwardIterateStartSeqnum) {
|
|
611
|
-
const int kNumKeysPerFile = 128;
|
|
612
|
-
const uint64_t kMaxKey = 0xffffffffffffffff;
|
|
613
|
-
const uint64_t kMinKey = kMaxKey - 1023;
|
|
614
|
-
Options options = CurrentOptions();
|
|
615
|
-
options.env = env_;
|
|
616
|
-
options.create_if_missing = true;
|
|
617
|
-
// Need to disable compaction to bottommost level when sequence number will be
|
|
618
|
-
// zeroed out, causing the verification of sequence number to fail in this
|
|
619
|
-
// test.
|
|
620
|
-
options.disable_auto_compactions = true;
|
|
621
|
-
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
622
|
-
TestComparator test_cmp(kTimestampSize);
|
|
623
|
-
options.comparator = &test_cmp;
|
|
624
|
-
options.memtable_factory.reset(new SpecialSkipListFactory(kNumKeysPerFile));
|
|
625
|
-
DestroyAndReopen(options);
|
|
626
|
-
std::vector<SequenceNumber> start_seqs;
|
|
627
|
-
|
|
628
|
-
const int kNumTimestamps = 4;
|
|
629
|
-
std::vector<std::string> write_ts_list;
|
|
630
|
-
for (int t = 0; t != kNumTimestamps; ++t) {
|
|
631
|
-
write_ts_list.push_back(Timestamp(2 * t, /*do not care*/ 17));
|
|
632
|
-
}
|
|
633
|
-
WriteOptions write_opts;
|
|
634
|
-
for (size_t i = 0; i != write_ts_list.size(); ++i) {
|
|
635
|
-
Slice write_ts = write_ts_list[i];
|
|
636
|
-
write_opts.timestamp = &write_ts;
|
|
637
|
-
for (uint64_t k = kMaxKey; k >= kMinKey; --k) {
|
|
638
|
-
Status s;
|
|
639
|
-
if (k % 2) {
|
|
640
|
-
s = db_->Put(write_opts, Key1(k), "value" + std::to_string(i));
|
|
641
|
-
} else {
|
|
642
|
-
s = db_->Delete(write_opts, Key1(k));
|
|
643
|
-
}
|
|
644
|
-
ASSERT_OK(s);
|
|
645
|
-
}
|
|
646
|
-
start_seqs.push_back(db_->GetLatestSequenceNumber());
|
|
647
|
-
}
|
|
648
|
-
std::vector<std::string> read_ts_list;
|
|
649
|
-
for (int t = 0; t != kNumTimestamps - 1; ++t) {
|
|
650
|
-
read_ts_list.push_back(Timestamp(2 * t + 3, /*do not care*/ 17));
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
ReadOptions read_opts;
|
|
654
|
-
// Scan with only read_opts.iter_start_seqnum set.
|
|
655
|
-
for (size_t i = 0; i != read_ts_list.size(); ++i) {
|
|
656
|
-
Slice read_ts = read_ts_list[i];
|
|
657
|
-
read_opts.timestamp = &read_ts;
|
|
658
|
-
read_opts.iter_start_seqnum = start_seqs[i] + 1;
|
|
659
|
-
std::unique_ptr<Iterator> iter(db_->NewIterator(read_opts));
|
|
660
|
-
SequenceNumber expected_seq = start_seqs[i] + (kMaxKey - kMinKey) + 1;
|
|
661
|
-
uint64_t key = kMinKey;
|
|
662
|
-
for (iter->Seek(Key1(kMinKey)); iter->Valid(); iter->Next()) {
|
|
663
|
-
CheckIterEntry(
|
|
664
|
-
iter.get(), Key1(key), expected_seq,
|
|
665
|
-
(key % 2) ? kTypeValue : kTypeDeletionWithTimestamp,
|
|
666
|
-
(key % 2) ? "value" + std::to_string(i + 1) : std::string(),
|
|
667
|
-
write_ts_list[i + 1]);
|
|
668
|
-
++key;
|
|
669
|
-
--expected_seq;
|
|
670
|
-
}
|
|
671
|
-
}
|
|
672
|
-
// Scan with both read_opts.iter_start_seqnum and read_opts.iter_start_ts set.
|
|
673
|
-
std::vector<std::string> read_ts_lb_list;
|
|
674
|
-
for (int t = 0; t < kNumTimestamps - 1; ++t) {
|
|
675
|
-
read_ts_lb_list.push_back(Timestamp(2 * t, /*do not care*/ 17));
|
|
676
|
-
}
|
|
677
|
-
for (size_t i = 0; i < read_ts_list.size(); ++i) {
|
|
678
|
-
Slice read_ts = read_ts_list[i];
|
|
679
|
-
Slice read_ts_lb = read_ts_lb_list[i];
|
|
680
|
-
read_opts.timestamp = &read_ts;
|
|
681
|
-
read_opts.iter_start_ts = &read_ts_lb;
|
|
682
|
-
read_opts.iter_start_seqnum = start_seqs[i] + 1;
|
|
683
|
-
std::unique_ptr<Iterator> it(db_->NewIterator(read_opts));
|
|
684
|
-
uint64_t key = kMinKey;
|
|
685
|
-
SequenceNumber expected_seq = start_seqs[i] + (kMaxKey - kMinKey) + 1;
|
|
686
|
-
for (it->Seek(Key1(kMinKey)); it->Valid(); it->Next()) {
|
|
687
|
-
CheckIterEntry(it.get(), Key1(key), expected_seq,
|
|
688
|
-
(key % 2) ? kTypeValue : kTypeDeletionWithTimestamp,
|
|
689
|
-
"value" + std::to_string(i + 1), write_ts_list[i + 1]);
|
|
690
|
-
++key;
|
|
691
|
-
--expected_seq;
|
|
692
|
-
}
|
|
693
|
-
}
|
|
694
|
-
Close();
|
|
695
|
-
}
|
|
696
|
-
|
|
697
1228
|
TEST_F(DBBasicTestWithTimestamp, ReseekToTargetTimestamp) {
|
|
698
1229
|
Options options = CurrentOptions();
|
|
699
1230
|
options.env = env_;
|
|
@@ -709,10 +1240,8 @@ TEST_F(DBBasicTestWithTimestamp, ReseekToTargetTimestamp) {
|
|
|
709
1240
|
WriteOptions write_opts;
|
|
710
1241
|
Status s;
|
|
711
1242
|
for (size_t i = 0; i != kNumKeys; ++i) {
|
|
712
|
-
std::string
|
|
713
|
-
|
|
714
|
-
write_opts.timestamp = &ts;
|
|
715
|
-
s = db_->Put(write_opts, "foo", "value" + std::to_string(i));
|
|
1243
|
+
std::string ts = Timestamp(static_cast<uint64_t>(i + 1), 0);
|
|
1244
|
+
s = db_->Put(write_opts, "foo", ts, "value" + std::to_string(i));
|
|
716
1245
|
ASSERT_OK(s);
|
|
717
1246
|
}
|
|
718
1247
|
{
|
|
@@ -725,6 +1254,16 @@ TEST_F(DBBasicTestWithTimestamp, ReseekToTargetTimestamp) {
|
|
|
725
1254
|
CheckIterUserEntry(iter.get(), "foo", kTypeValue, "value0", ts_str);
|
|
726
1255
|
ASSERT_EQ(
|
|
727
1256
|
1, options.statistics->getTickerCount(NUMBER_OF_RESEEKS_IN_ITERATION));
|
|
1257
|
+
|
|
1258
|
+
ts_str = Timestamp(kNumKeys, 0);
|
|
1259
|
+
ts = ts_str;
|
|
1260
|
+
read_opts.timestamp = &ts;
|
|
1261
|
+
iter.reset(db_->NewIterator(read_opts));
|
|
1262
|
+
iter->SeekToLast();
|
|
1263
|
+
CheckIterUserEntry(iter.get(), "foo", kTypeValue,
|
|
1264
|
+
"value" + std::to_string(kNumKeys - 1), ts_str);
|
|
1265
|
+
ASSERT_EQ(
|
|
1266
|
+
2, options.statistics->getTickerCount(NUMBER_OF_RESEEKS_IN_ITERATION));
|
|
728
1267
|
}
|
|
729
1268
|
Close();
|
|
730
1269
|
}
|
|
@@ -744,18 +1283,17 @@ TEST_F(DBBasicTestWithTimestamp, ReseekToNextUserKey) {
|
|
|
744
1283
|
WriteOptions write_opts;
|
|
745
1284
|
Status s;
|
|
746
1285
|
for (size_t i = 0; i != kNumKeys; ++i) {
|
|
747
|
-
std::string
|
|
748
|
-
|
|
749
|
-
write_opts.timestamp = &ts;
|
|
750
|
-
s = db_->Put(write_opts, "a", "value" + std::to_string(i));
|
|
1286
|
+
std::string ts = Timestamp(static_cast<uint64_t>(i + 1), 0);
|
|
1287
|
+
s = db_->Put(write_opts, "a", ts, "value" + std::to_string(i));
|
|
751
1288
|
ASSERT_OK(s);
|
|
752
1289
|
}
|
|
753
1290
|
{
|
|
754
1291
|
std::string ts_str = Timestamp(static_cast<uint64_t>(kNumKeys + 1), 0);
|
|
755
|
-
WriteBatch batch(0, 0, kTimestampSize);
|
|
756
|
-
ASSERT_OK(batch.Put("a", "new_value"));
|
|
757
|
-
ASSERT_OK(batch.Put("b", "new_value"));
|
|
758
|
-
s = batch.
|
|
1292
|
+
WriteBatch batch(0, 0, 0, kTimestampSize);
|
|
1293
|
+
{ ASSERT_OK(batch.Put("a", "new_value")); }
|
|
1294
|
+
{ ASSERT_OK(batch.Put("b", "new_value")); }
|
|
1295
|
+
s = batch.UpdateTimestamps(
|
|
1296
|
+
ts_str, [kTimestampSize](uint32_t) { return kTimestampSize; });
|
|
759
1297
|
ASSERT_OK(s);
|
|
760
1298
|
s = db_->Write(write_opts, &batch);
|
|
761
1299
|
ASSERT_OK(s);
|
|
@@ -775,6 +1313,43 @@ TEST_F(DBBasicTestWithTimestamp, ReseekToNextUserKey) {
|
|
|
775
1313
|
Close();
|
|
776
1314
|
}
|
|
777
1315
|
|
|
1316
|
+
TEST_F(DBBasicTestWithTimestamp, ReseekToUserKeyBeforeSavedKey) {
|
|
1317
|
+
Options options = GetDefaultOptions();
|
|
1318
|
+
options.env = env_;
|
|
1319
|
+
options.create_if_missing = true;
|
|
1320
|
+
constexpr size_t kNumKeys = 16;
|
|
1321
|
+
options.max_sequential_skip_in_iterations = kNumKeys / 2;
|
|
1322
|
+
options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
|
|
1323
|
+
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
1324
|
+
TestComparator test_cmp(kTimestampSize);
|
|
1325
|
+
options.comparator = &test_cmp;
|
|
1326
|
+
DestroyAndReopen(options);
|
|
1327
|
+
for (size_t i = 0; i < kNumKeys; ++i) {
|
|
1328
|
+
std::string ts = Timestamp(static_cast<uint64_t>(i + 1), 0);
|
|
1329
|
+
WriteOptions write_opts;
|
|
1330
|
+
Status s = db_->Put(write_opts, "b", ts, "value" + std::to_string(i));
|
|
1331
|
+
ASSERT_OK(s);
|
|
1332
|
+
}
|
|
1333
|
+
{
|
|
1334
|
+
std::string ts = Timestamp(1, 0);
|
|
1335
|
+
WriteOptions write_opts;
|
|
1336
|
+
ASSERT_OK(db_->Put(write_opts, "a", ts, "value"));
|
|
1337
|
+
}
|
|
1338
|
+
{
|
|
1339
|
+
ReadOptions read_opts;
|
|
1340
|
+
std::string ts_str = Timestamp(1, 0);
|
|
1341
|
+
Slice ts = ts_str;
|
|
1342
|
+
read_opts.timestamp = &ts;
|
|
1343
|
+
std::unique_ptr<Iterator> iter(db_->NewIterator(read_opts));
|
|
1344
|
+
iter->SeekToLast();
|
|
1345
|
+
iter->Prev();
|
|
1346
|
+
CheckIterUserEntry(iter.get(), "a", kTypeValue, "value", ts_str);
|
|
1347
|
+
ASSERT_EQ(
|
|
1348
|
+
1, options.statistics->getTickerCount(NUMBER_OF_RESEEKS_IN_ITERATION));
|
|
1349
|
+
}
|
|
1350
|
+
Close();
|
|
1351
|
+
}
|
|
1352
|
+
|
|
778
1353
|
TEST_F(DBBasicTestWithTimestamp, MultiGetWithFastLocalBloom) {
|
|
779
1354
|
Options options = CurrentOptions();
|
|
780
1355
|
options.env = env_;
|
|
@@ -791,17 +1366,16 @@ TEST_F(DBBasicTestWithTimestamp, MultiGetWithFastLocalBloom) {
|
|
|
791
1366
|
|
|
792
1367
|
// Write any value
|
|
793
1368
|
WriteOptions write_opts;
|
|
794
|
-
std::string
|
|
795
|
-
Slice ts = ts_str;
|
|
796
|
-
write_opts.timestamp = &ts;
|
|
1369
|
+
std::string ts = Timestamp(1, 0);
|
|
797
1370
|
|
|
798
|
-
ASSERT_OK(db_->Put(write_opts, "foo", "bar"));
|
|
1371
|
+
ASSERT_OK(db_->Put(write_opts, "foo", ts, "bar"));
|
|
799
1372
|
|
|
800
1373
|
ASSERT_OK(Flush());
|
|
801
1374
|
|
|
802
1375
|
// Read with MultiGet
|
|
803
1376
|
ReadOptions read_opts;
|
|
804
|
-
|
|
1377
|
+
Slice read_ts = ts;
|
|
1378
|
+
read_opts.timestamp = &read_ts;
|
|
805
1379
|
size_t batch_size = 1;
|
|
806
1380
|
std::vector<Slice> keys(batch_size);
|
|
807
1381
|
std::vector<PinnableSlice> values(batch_size);
|
|
@@ -815,7 +1389,7 @@ TEST_F(DBBasicTestWithTimestamp, MultiGetWithFastLocalBloom) {
|
|
|
815
1389
|
Close();
|
|
816
1390
|
}
|
|
817
1391
|
|
|
818
|
-
|
|
1392
|
+
TEST_P(DBBasicTestWithTimestampTableOptions, MultiGetWithPrefix) {
|
|
819
1393
|
Options options = CurrentOptions();
|
|
820
1394
|
options.env = env_;
|
|
821
1395
|
options.create_if_missing = true;
|
|
@@ -824,6 +1398,7 @@ TEST_F(DBBasicTestWithTimestamp, MultiGetWithPrefix) {
|
|
|
824
1398
|
bbto.filter_policy.reset(NewBloomFilterPolicy(10, false));
|
|
825
1399
|
bbto.cache_index_and_filter_blocks = true;
|
|
826
1400
|
bbto.whole_key_filtering = false;
|
|
1401
|
+
bbto.index_type = GetParam();
|
|
827
1402
|
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
828
1403
|
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
829
1404
|
TestComparator test_cmp(kTimestampSize);
|
|
@@ -832,17 +1407,16 @@ TEST_F(DBBasicTestWithTimestamp, MultiGetWithPrefix) {
|
|
|
832
1407
|
|
|
833
1408
|
// Write any value
|
|
834
1409
|
WriteOptions write_opts;
|
|
835
|
-
std::string
|
|
836
|
-
Slice ts = ts_str;
|
|
837
|
-
write_opts.timestamp = &ts;
|
|
1410
|
+
std::string ts = Timestamp(1, 0);
|
|
838
1411
|
|
|
839
|
-
ASSERT_OK(db_->Put(write_opts, "foo", "bar"));
|
|
1412
|
+
ASSERT_OK(db_->Put(write_opts, "foo", ts, "bar"));
|
|
840
1413
|
|
|
841
1414
|
ASSERT_OK(Flush());
|
|
842
1415
|
|
|
843
1416
|
// Read with MultiGet
|
|
844
1417
|
ReadOptions read_opts;
|
|
845
|
-
|
|
1418
|
+
Slice read_ts = ts;
|
|
1419
|
+
read_opts.timestamp = &read_ts;
|
|
846
1420
|
size_t batch_size = 1;
|
|
847
1421
|
std::vector<Slice> keys(batch_size);
|
|
848
1422
|
std::vector<PinnableSlice> values(batch_size);
|
|
@@ -856,7 +1430,7 @@ TEST_F(DBBasicTestWithTimestamp, MultiGetWithPrefix) {
|
|
|
856
1430
|
Close();
|
|
857
1431
|
}
|
|
858
1432
|
|
|
859
|
-
|
|
1433
|
+
TEST_P(DBBasicTestWithTimestampTableOptions, MultiGetWithMemBloomFilter) {
|
|
860
1434
|
Options options = CurrentOptions();
|
|
861
1435
|
options.env = env_;
|
|
862
1436
|
options.create_if_missing = true;
|
|
@@ -865,6 +1439,7 @@ TEST_F(DBBasicTestWithTimestamp, MultiGetWithMemBloomFilter) {
|
|
|
865
1439
|
bbto.filter_policy.reset(NewBloomFilterPolicy(10, false));
|
|
866
1440
|
bbto.cache_index_and_filter_blocks = true;
|
|
867
1441
|
bbto.whole_key_filtering = false;
|
|
1442
|
+
bbto.index_type = GetParam();
|
|
868
1443
|
options.memtable_prefix_bloom_size_ratio = 0.1;
|
|
869
1444
|
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
870
1445
|
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
@@ -874,17 +1449,15 @@ TEST_F(DBBasicTestWithTimestamp, MultiGetWithMemBloomFilter) {
|
|
|
874
1449
|
|
|
875
1450
|
// Write any value
|
|
876
1451
|
WriteOptions write_opts;
|
|
877
|
-
std::string
|
|
878
|
-
Slice ts = ts_str;
|
|
879
|
-
write_opts.timestamp = &ts;
|
|
1452
|
+
std::string ts = Timestamp(1, 0);
|
|
880
1453
|
|
|
881
|
-
ASSERT_OK(db_->Put(write_opts, "foo", "bar"));
|
|
1454
|
+
ASSERT_OK(db_->Put(write_opts, "foo", ts, "bar"));
|
|
882
1455
|
|
|
883
1456
|
// Read with MultiGet
|
|
884
|
-
|
|
885
|
-
|
|
1457
|
+
ts = Timestamp(2, 0);
|
|
1458
|
+
Slice read_ts = ts;
|
|
886
1459
|
ReadOptions read_opts;
|
|
887
|
-
read_opts.timestamp = &
|
|
1460
|
+
read_opts.timestamp = &read_ts;
|
|
888
1461
|
size_t batch_size = 1;
|
|
889
1462
|
std::vector<Slice> keys(batch_size);
|
|
890
1463
|
std::vector<PinnableSlice> values(batch_size);
|
|
@@ -915,9 +1488,7 @@ TEST_F(DBBasicTestWithTimestamp, MultiGetRangeFiltering) {
|
|
|
915
1488
|
|
|
916
1489
|
// Write any value
|
|
917
1490
|
WriteOptions write_opts;
|
|
918
|
-
std::string
|
|
919
|
-
Slice ts = ts_str;
|
|
920
|
-
write_opts.timestamp = &ts;
|
|
1491
|
+
std::string ts = Timestamp(1, 0);
|
|
921
1492
|
|
|
922
1493
|
// random data
|
|
923
1494
|
for (int i = 0; i < 3; i++) {
|
|
@@ -925,22 +1496,22 @@ TEST_F(DBBasicTestWithTimestamp, MultiGetRangeFiltering) {
|
|
|
925
1496
|
auto value = ToString(i * 10);
|
|
926
1497
|
Slice key_slice = key;
|
|
927
1498
|
Slice value_slice = value;
|
|
928
|
-
ASSERT_OK(db_->Put(write_opts, key_slice, value_slice));
|
|
1499
|
+
ASSERT_OK(db_->Put(write_opts, key_slice, ts, value_slice));
|
|
929
1500
|
ASSERT_OK(Flush());
|
|
930
1501
|
}
|
|
931
1502
|
|
|
932
1503
|
// Make num_levels to 2 to do key range filtering of sst files
|
|
933
1504
|
ASSERT_OK(db_->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
934
1505
|
|
|
935
|
-
ASSERT_OK(db_->Put(write_opts, "foo", "bar"));
|
|
1506
|
+
ASSERT_OK(db_->Put(write_opts, "foo", ts, "bar"));
|
|
936
1507
|
|
|
937
1508
|
ASSERT_OK(Flush());
|
|
938
1509
|
|
|
939
1510
|
// Read with MultiGet
|
|
940
|
-
|
|
941
|
-
|
|
1511
|
+
ts = Timestamp(2, 0);
|
|
1512
|
+
Slice read_ts = ts;
|
|
942
1513
|
ReadOptions read_opts;
|
|
943
|
-
read_opts.timestamp = &
|
|
1514
|
+
read_opts.timestamp = &read_ts;
|
|
944
1515
|
size_t batch_size = 1;
|
|
945
1516
|
std::vector<Slice> keys(batch_size);
|
|
946
1517
|
std::vector<PinnableSlice> values(batch_size);
|
|
@@ -954,15 +1525,16 @@ TEST_F(DBBasicTestWithTimestamp, MultiGetRangeFiltering) {
|
|
|
954
1525
|
Close();
|
|
955
1526
|
}
|
|
956
1527
|
|
|
957
|
-
|
|
1528
|
+
TEST_P(DBBasicTestWithTimestampTableOptions, MultiGetPrefixFilter) {
|
|
958
1529
|
Options options = CurrentOptions();
|
|
959
1530
|
options.env = env_;
|
|
960
1531
|
options.create_if_missing = true;
|
|
961
|
-
options.prefix_extractor.reset(NewCappedPrefixTransform(
|
|
1532
|
+
options.prefix_extractor.reset(NewCappedPrefixTransform(3));
|
|
962
1533
|
BlockBasedTableOptions bbto;
|
|
963
1534
|
bbto.filter_policy.reset(NewBloomFilterPolicy(10, false));
|
|
964
1535
|
bbto.cache_index_and_filter_blocks = true;
|
|
965
1536
|
bbto.whole_key_filtering = false;
|
|
1537
|
+
bbto.index_type = GetParam();
|
|
966
1538
|
options.memtable_prefix_bloom_size_ratio = 0.1;
|
|
967
1539
|
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
968
1540
|
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
@@ -971,18 +1543,16 @@ TEST_F(DBBasicTestWithTimestamp, MultiGetPrefixFilter) {
|
|
|
971
1543
|
DestroyAndReopen(options);
|
|
972
1544
|
|
|
973
1545
|
WriteOptions write_opts;
|
|
974
|
-
std::string
|
|
975
|
-
Slice ts = ts_str;
|
|
976
|
-
write_opts.timestamp = &ts;
|
|
1546
|
+
std::string ts = Timestamp(1, 0);
|
|
977
1547
|
|
|
978
|
-
ASSERT_OK(db_->Put(write_opts, "foo", "bar"));
|
|
1548
|
+
ASSERT_OK(db_->Put(write_opts, "foo", ts, "bar"));
|
|
979
1549
|
|
|
980
1550
|
ASSERT_OK(Flush());
|
|
981
1551
|
// Read with MultiGet
|
|
982
|
-
|
|
983
|
-
|
|
1552
|
+
ts = Timestamp(2, 0);
|
|
1553
|
+
Slice read_ts = ts;
|
|
984
1554
|
ReadOptions read_opts;
|
|
985
|
-
read_opts.timestamp = &
|
|
1555
|
+
read_opts.timestamp = &read_ts;
|
|
986
1556
|
size_t batch_size = 1;
|
|
987
1557
|
std::vector<Slice> keys(batch_size);
|
|
988
1558
|
std::vector<std::string> values(batch_size);
|
|
@@ -997,7 +1567,7 @@ TEST_F(DBBasicTestWithTimestamp, MultiGetPrefixFilter) {
|
|
|
997
1567
|
Close();
|
|
998
1568
|
}
|
|
999
1569
|
|
|
1000
|
-
TEST_F(DBBasicTestWithTimestamp,
|
|
1570
|
+
TEST_F(DBBasicTestWithTimestamp, MaxKeysSkippedDuringNext) {
|
|
1001
1571
|
Options options = CurrentOptions();
|
|
1002
1572
|
options.env = env_;
|
|
1003
1573
|
options.create_if_missing = true;
|
|
@@ -1010,16 +1580,12 @@ TEST_F(DBBasicTestWithTimestamp, MaxKeysSkipped) {
|
|
|
1010
1580
|
WriteOptions write_opts;
|
|
1011
1581
|
Status s;
|
|
1012
1582
|
{
|
|
1013
|
-
std::string
|
|
1014
|
-
|
|
1015
|
-
write_opts.timestamp = &ts;
|
|
1016
|
-
ASSERT_OK(db_->Put(write_opts, "a", "value"));
|
|
1583
|
+
std::string ts = Timestamp(1, 0);
|
|
1584
|
+
ASSERT_OK(db_->Put(write_opts, "a", ts, "value"));
|
|
1017
1585
|
}
|
|
1018
1586
|
for (size_t i = 0; i < kNumKeys; ++i) {
|
|
1019
|
-
std::string
|
|
1020
|
-
|
|
1021
|
-
write_opts.timestamp = &ts;
|
|
1022
|
-
s = db_->Put(write_opts, "b", "value" + std::to_string(i));
|
|
1587
|
+
std::string ts = Timestamp(static_cast<uint64_t>(i + 1), 0);
|
|
1588
|
+
s = db_->Put(write_opts, "b", ts, "value" + std::to_string(i));
|
|
1023
1589
|
ASSERT_OK(s);
|
|
1024
1590
|
}
|
|
1025
1591
|
{
|
|
@@ -1036,6 +1602,41 @@ TEST_F(DBBasicTestWithTimestamp, MaxKeysSkipped) {
|
|
|
1036
1602
|
Close();
|
|
1037
1603
|
}
|
|
1038
1604
|
|
|
1605
|
+
TEST_F(DBBasicTestWithTimestamp, MaxKeysSkippedDuringPrev) {
|
|
1606
|
+
Options options = GetDefaultOptions();
|
|
1607
|
+
options.env = env_;
|
|
1608
|
+
options.create_if_missing = true;
|
|
1609
|
+
const size_t kTimestampSize = Timestamp(0, 0).size();
|
|
1610
|
+
TestComparator test_cmp(kTimestampSize);
|
|
1611
|
+
options.comparator = &test_cmp;
|
|
1612
|
+
DestroyAndReopen(options);
|
|
1613
|
+
constexpr size_t max_skippable_internal_keys = 2;
|
|
1614
|
+
const size_t kNumKeys = max_skippable_internal_keys + 2;
|
|
1615
|
+
WriteOptions write_opts;
|
|
1616
|
+
Status s;
|
|
1617
|
+
{
|
|
1618
|
+
std::string ts = Timestamp(1, 0);
|
|
1619
|
+
ASSERT_OK(db_->Put(write_opts, "b", ts, "value"));
|
|
1620
|
+
}
|
|
1621
|
+
for (size_t i = 0; i < kNumKeys; ++i) {
|
|
1622
|
+
std::string ts = Timestamp(static_cast<uint64_t>(i + 1), 0);
|
|
1623
|
+
s = db_->Put(write_opts, "a", ts, "value" + std::to_string(i));
|
|
1624
|
+
ASSERT_OK(s);
|
|
1625
|
+
}
|
|
1626
|
+
{
|
|
1627
|
+
ReadOptions read_opts;
|
|
1628
|
+
read_opts.max_skippable_internal_keys = max_skippable_internal_keys;
|
|
1629
|
+
std::string ts_str = Timestamp(1, 0);
|
|
1630
|
+
Slice ts = ts_str;
|
|
1631
|
+
read_opts.timestamp = &ts;
|
|
1632
|
+
std::unique_ptr<Iterator> iter(db_->NewIterator(read_opts));
|
|
1633
|
+
iter->SeekToLast();
|
|
1634
|
+
iter->Prev();
|
|
1635
|
+
ASSERT_TRUE(iter->status().IsIncomplete());
|
|
1636
|
+
}
|
|
1637
|
+
Close();
|
|
1638
|
+
}
|
|
1639
|
+
|
|
1039
1640
|
// Create two L0, and compact them to a new L1. In this test, L1 is L_bottom.
|
|
1040
1641
|
// Two L0s:
|
|
1041
1642
|
// f1 f2
|
|
@@ -1053,53 +1654,49 @@ TEST_F(DBBasicTestWithTimestamp, CompactDeletionWithTimestampMarkerToBottom) {
|
|
|
1053
1654
|
options.level0_file_num_compaction_trigger = 2;
|
|
1054
1655
|
DestroyAndReopen(options);
|
|
1055
1656
|
WriteOptions write_opts;
|
|
1056
|
-
std::string
|
|
1057
|
-
|
|
1058
|
-
write_opts.timestamp = &ts;
|
|
1059
|
-
ASSERT_OK(db_->Put(write_opts, "a", "value0"));
|
|
1657
|
+
std::string ts = Timestamp(1, 0);
|
|
1658
|
+
ASSERT_OK(db_->Put(write_opts, "a", ts, "value0"));
|
|
1060
1659
|
ASSERT_OK(Flush());
|
|
1061
1660
|
|
|
1062
|
-
|
|
1063
|
-
ts
|
|
1064
|
-
|
|
1065
|
-
ASSERT_OK(db_->
|
|
1066
|
-
ts_str = Timestamp(3, 0);
|
|
1067
|
-
ts = ts_str;
|
|
1068
|
-
write_opts.timestamp = &ts;
|
|
1069
|
-
ASSERT_OK(db_->Delete(write_opts, "a"));
|
|
1661
|
+
ts = Timestamp(2, 0);
|
|
1662
|
+
ASSERT_OK(db_->Put(write_opts, "b", ts, "value0"));
|
|
1663
|
+
ts = Timestamp(3, 0);
|
|
1664
|
+
ASSERT_OK(db_->Delete(write_opts, "a", ts));
|
|
1070
1665
|
ASSERT_OK(Flush());
|
|
1071
1666
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
1072
1667
|
|
|
1073
1668
|
ReadOptions read_opts;
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
read_opts.timestamp = &
|
|
1669
|
+
ts = Timestamp(1, 0);
|
|
1670
|
+
Slice read_ts = ts;
|
|
1671
|
+
read_opts.timestamp = &read_ts;
|
|
1077
1672
|
std::string value;
|
|
1078
1673
|
Status s = db_->Get(read_opts, "a", &value);
|
|
1079
1674
|
ASSERT_OK(s);
|
|
1080
1675
|
ASSERT_EQ("value0", value);
|
|
1081
1676
|
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
read_opts.timestamp = &
|
|
1677
|
+
ts = Timestamp(3, 0);
|
|
1678
|
+
read_ts = ts;
|
|
1679
|
+
read_opts.timestamp = &read_ts;
|
|
1085
1680
|
s = db_->Get(read_opts, "a", &value);
|
|
1086
1681
|
ASSERT_TRUE(s.IsNotFound());
|
|
1087
1682
|
|
|
1088
1683
|
// Time-travel to the past before deletion
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
read_opts.timestamp = &
|
|
1684
|
+
ts = Timestamp(2, 0);
|
|
1685
|
+
read_ts = ts;
|
|
1686
|
+
read_opts.timestamp = &read_ts;
|
|
1092
1687
|
s = db_->Get(read_opts, "a", &value);
|
|
1093
1688
|
ASSERT_OK(s);
|
|
1094
1689
|
ASSERT_EQ("value0", value);
|
|
1095
1690
|
Close();
|
|
1096
1691
|
}
|
|
1097
1692
|
|
|
1693
|
+
#if !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
|
|
1098
1694
|
class DBBasicTestWithTimestampFilterPrefixSettings
|
|
1099
1695
|
: public DBBasicTestWithTimestampBase,
|
|
1100
1696
|
public testing::WithParamInterface<
|
|
1101
1697
|
std::tuple<std::shared_ptr<const FilterPolicy>, bool, bool,
|
|
1102
|
-
std::shared_ptr<const SliceTransform>, bool, double
|
|
1698
|
+
std::shared_ptr<const SliceTransform>, bool, double,
|
|
1699
|
+
BlockBasedTableOptions::IndexType>> {
|
|
1103
1700
|
public:
|
|
1104
1701
|
DBBasicTestWithTimestampFilterPrefixSettings()
|
|
1105
1702
|
: DBBasicTestWithTimestampBase(
|
|
@@ -1114,6 +1711,7 @@ TEST_P(DBBasicTestWithTimestampFilterPrefixSettings, GetAndMultiGet) {
|
|
|
1114
1711
|
bbto.filter_policy = std::get<0>(GetParam());
|
|
1115
1712
|
bbto.whole_key_filtering = std::get<1>(GetParam());
|
|
1116
1713
|
bbto.cache_index_and_filter_blocks = std::get<2>(GetParam());
|
|
1714
|
+
bbto.index_type = std::get<6>(GetParam());
|
|
1117
1715
|
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
1118
1716
|
options.prefix_extractor = std::get<3>(GetParam());
|
|
1119
1717
|
options.memtable_whole_key_filtering = std::get<4>(GetParam());
|
|
@@ -1127,38 +1725,33 @@ TEST_P(DBBasicTestWithTimestampFilterPrefixSettings, GetAndMultiGet) {
|
|
|
1127
1725
|
|
|
1128
1726
|
// Write any value
|
|
1129
1727
|
WriteOptions write_opts;
|
|
1130
|
-
std::string
|
|
1131
|
-
Slice ts = ts_str;
|
|
1132
|
-
write_opts.timestamp = &ts;
|
|
1728
|
+
std::string ts = Timestamp(1, 0);
|
|
1133
1729
|
|
|
1134
1730
|
int idx = 0;
|
|
1135
1731
|
for (; idx < kMaxKey / 4; idx++) {
|
|
1136
|
-
ASSERT_OK(db_->Put(write_opts, Key1(idx), "bar"));
|
|
1137
|
-
ASSERT_OK(db_->Put(write_opts, KeyWithPrefix("foo", idx), "bar"));
|
|
1732
|
+
ASSERT_OK(db_->Put(write_opts, Key1(idx), ts, "bar"));
|
|
1733
|
+
ASSERT_OK(db_->Put(write_opts, KeyWithPrefix("foo", idx), ts, "bar"));
|
|
1138
1734
|
}
|
|
1139
1735
|
|
|
1140
1736
|
ASSERT_OK(Flush());
|
|
1141
1737
|
ASSERT_OK(db_->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
1142
1738
|
|
|
1143
1739
|
for (; idx < kMaxKey / 2; idx++) {
|
|
1144
|
-
ASSERT_OK(db_->Put(write_opts, Key1(idx), "bar"));
|
|
1145
|
-
ASSERT_OK(db_->Put(write_opts, KeyWithPrefix("foo", idx), "bar"));
|
|
1740
|
+
ASSERT_OK(db_->Put(write_opts, Key1(idx), ts, "bar"));
|
|
1741
|
+
ASSERT_OK(db_->Put(write_opts, KeyWithPrefix("foo", idx), ts, "bar"));
|
|
1146
1742
|
}
|
|
1147
1743
|
|
|
1148
1744
|
ASSERT_OK(Flush());
|
|
1149
1745
|
|
|
1150
1746
|
for (; idx < kMaxKey; idx++) {
|
|
1151
|
-
ASSERT_OK(db_->Put(write_opts, Key1(idx), "bar"));
|
|
1152
|
-
ASSERT_OK(db_->Put(write_opts, KeyWithPrefix("foo", idx), "bar"));
|
|
1747
|
+
ASSERT_OK(db_->Put(write_opts, Key1(idx), ts, "bar"));
|
|
1748
|
+
ASSERT_OK(db_->Put(write_opts, KeyWithPrefix("foo", idx), ts, "bar"));
|
|
1153
1749
|
}
|
|
1154
1750
|
|
|
1155
1751
|
// Read with MultiGet
|
|
1156
1752
|
ReadOptions read_opts;
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
ReadOptions read_opts_total_order;
|
|
1160
|
-
read_opts_total_order.timestamp = &ts;
|
|
1161
|
-
read_opts_total_order.total_order_seek = true;
|
|
1753
|
+
Slice read_ts = ts;
|
|
1754
|
+
read_opts.timestamp = &read_ts;
|
|
1162
1755
|
|
|
1163
1756
|
for (idx = 0; idx < kMaxKey; idx++) {
|
|
1164
1757
|
size_t batch_size = 4;
|
|
@@ -1218,7 +1811,13 @@ INSTANTIATE_TEST_CASE_P(
|
|
|
1218
1811
|
std::shared_ptr<const SliceTransform>(NewFixedPrefixTransform(4)),
|
|
1219
1812
|
std::shared_ptr<const SliceTransform>(NewFixedPrefixTransform(7)),
|
|
1220
1813
|
std::shared_ptr<const SliceTransform>(NewFixedPrefixTransform(8))),
|
|
1221
|
-
::testing::Bool(), ::testing::Values(0, 0.1)
|
|
1814
|
+
::testing::Bool(), ::testing::Values(0, 0.1),
|
|
1815
|
+
::testing::Values(
|
|
1816
|
+
BlockBasedTableOptions::IndexType::kBinarySearch,
|
|
1817
|
+
BlockBasedTableOptions::IndexType::kHashSearch,
|
|
1818
|
+
BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch,
|
|
1819
|
+
BlockBasedTableOptions::IndexType::kBinarySearchWithFirstKey)));
|
|
1820
|
+
#endif // !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
|
|
1222
1821
|
|
|
1223
1822
|
class DataVisibilityTest : public DBBasicTestWithTimestampBase {
|
|
1224
1823
|
public:
|
|
@@ -1248,12 +1847,10 @@ class DataVisibilityTest : public DBBasicTestWithTimestampBase {
|
|
|
1248
1847
|
void PutTestData(int index, ColumnFamilyHandle* cfh = nullptr) {
|
|
1249
1848
|
ASSERT_LE(index, kTestDataSize);
|
|
1250
1849
|
WriteOptions write_opts;
|
|
1251
|
-
Slice ts_slice = test_data_[index].timestamp;
|
|
1252
|
-
write_opts.timestamp = &ts_slice;
|
|
1253
1850
|
|
|
1254
1851
|
if (cfh == nullptr) {
|
|
1255
|
-
ASSERT_OK(
|
|
1256
|
-
|
|
1852
|
+
ASSERT_OK(db_->Put(write_opts, test_data_[index].key,
|
|
1853
|
+
test_data_[index].timestamp, test_data_[index].value));
|
|
1257
1854
|
const Snapshot* snap = db_->GetSnapshot();
|
|
1258
1855
|
test_data_[index].seq_num = snap->GetSequenceNumber();
|
|
1259
1856
|
if (index > 0) {
|
|
@@ -1262,7 +1859,7 @@ class DataVisibilityTest : public DBBasicTestWithTimestampBase {
|
|
|
1262
1859
|
db_->ReleaseSnapshot(snap);
|
|
1263
1860
|
} else {
|
|
1264
1861
|
ASSERT_OK(db_->Put(write_opts, cfh, test_data_[index].key,
|
|
1265
|
-
test_data_[index].value));
|
|
1862
|
+
test_data_[index].timestamp, test_data_[index].value));
|
|
1266
1863
|
}
|
|
1267
1864
|
}
|
|
1268
1865
|
|
|
@@ -1374,13 +1971,11 @@ TEST_F(DataVisibilityTest, PointLookupWithoutSnapshot1) {
|
|
|
1374
1971
|
});
|
|
1375
1972
|
SyncPoint::GetInstance()->EnableProcessing();
|
|
1376
1973
|
port::Thread writer_thread([this]() {
|
|
1377
|
-
std::string
|
|
1378
|
-
Slice write_ts = write_ts_str;
|
|
1974
|
+
std::string write_ts = Timestamp(1, 0);
|
|
1379
1975
|
WriteOptions write_opts;
|
|
1380
|
-
write_opts.timestamp = &write_ts;
|
|
1381
1976
|
TEST_SYNC_POINT(
|
|
1382
1977
|
"DataVisibilityTest::PointLookupWithoutSnapshot1:BeforePut");
|
|
1383
|
-
Status s = db_->Put(write_opts, "foo", "value");
|
|
1978
|
+
Status s = db_->Put(write_opts, "foo", write_ts, "value");
|
|
1384
1979
|
ASSERT_OK(s);
|
|
1385
1980
|
TEST_SYNC_POINT("DataVisibilityTest::PointLookupWithoutSnapshot1:AfterPut");
|
|
1386
1981
|
});
|
|
@@ -1422,20 +2017,16 @@ TEST_F(DataVisibilityTest, PointLookupWithoutSnapshot2) {
|
|
|
1422
2017
|
});
|
|
1423
2018
|
SyncPoint::GetInstance()->EnableProcessing();
|
|
1424
2019
|
port::Thread writer_thread([this]() {
|
|
1425
|
-
std::string
|
|
1426
|
-
Slice write_ts = write_ts_str;
|
|
2020
|
+
std::string write_ts = Timestamp(1, 0);
|
|
1427
2021
|
WriteOptions write_opts;
|
|
1428
|
-
write_opts.timestamp = &write_ts;
|
|
1429
2022
|
TEST_SYNC_POINT(
|
|
1430
2023
|
"DataVisibilityTest::PointLookupWithoutSnapshot2:BeforePut");
|
|
1431
|
-
Status s = db_->Put(write_opts, "foo", "value");
|
|
2024
|
+
Status s = db_->Put(write_opts, "foo", write_ts, "value");
|
|
1432
2025
|
ASSERT_OK(s);
|
|
1433
2026
|
ASSERT_OK(Flush());
|
|
1434
2027
|
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
write_opts.timestamp = &write_ts;
|
|
1438
|
-
s = db_->Put(write_opts, "bar", "value");
|
|
2028
|
+
write_ts = Timestamp(2, 0);
|
|
2029
|
+
s = db_->Put(write_opts, "bar", write_ts, "value");
|
|
1439
2030
|
ASSERT_OK(s);
|
|
1440
2031
|
TEST_SYNC_POINT("DataVisibilityTest::PointLookupWithoutSnapshot2:AfterPut");
|
|
1441
2032
|
});
|
|
@@ -1476,12 +2067,10 @@ TEST_F(DataVisibilityTest, PointLookupWithSnapshot1) {
|
|
|
1476
2067
|
});
|
|
1477
2068
|
SyncPoint::GetInstance()->EnableProcessing();
|
|
1478
2069
|
port::Thread writer_thread([this]() {
|
|
1479
|
-
std::string
|
|
1480
|
-
Slice write_ts = write_ts_str;
|
|
2070
|
+
std::string write_ts = Timestamp(1, 0);
|
|
1481
2071
|
WriteOptions write_opts;
|
|
1482
|
-
write_opts.timestamp = &write_ts;
|
|
1483
2072
|
TEST_SYNC_POINT("DataVisibilityTest::PointLookupWithSnapshot1:BeforePut");
|
|
1484
|
-
Status s = db_->Put(write_opts, "foo", "value");
|
|
2073
|
+
Status s = db_->Put(write_opts, "foo", write_ts, "value");
|
|
1485
2074
|
TEST_SYNC_POINT("DataVisibilityTest::PointLookupWithSnapshot1:AfterPut");
|
|
1486
2075
|
ASSERT_OK(s);
|
|
1487
2076
|
});
|
|
@@ -1528,19 +2117,15 @@ TEST_F(DataVisibilityTest, PointLookupWithSnapshot2) {
|
|
|
1528
2117
|
});
|
|
1529
2118
|
SyncPoint::GetInstance()->EnableProcessing();
|
|
1530
2119
|
port::Thread writer_thread([this]() {
|
|
1531
|
-
std::string
|
|
1532
|
-
Slice write_ts = write_ts_str;
|
|
2120
|
+
std::string write_ts = Timestamp(1, 0);
|
|
1533
2121
|
WriteOptions write_opts;
|
|
1534
|
-
write_opts.timestamp = &write_ts;
|
|
1535
2122
|
TEST_SYNC_POINT("DataVisibilityTest::PointLookupWithSnapshot2:BeforePut");
|
|
1536
|
-
Status s = db_->Put(write_opts, "foo", "value1");
|
|
2123
|
+
Status s = db_->Put(write_opts, "foo", write_ts, "value1");
|
|
1537
2124
|
ASSERT_OK(s);
|
|
1538
2125
|
ASSERT_OK(Flush());
|
|
1539
2126
|
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
write_opts.timestamp = &write_ts;
|
|
1543
|
-
s = db_->Put(write_opts, "bar", "value2");
|
|
2127
|
+
write_ts = Timestamp(2, 0);
|
|
2128
|
+
s = db_->Put(write_opts, "bar", write_ts, "value2");
|
|
1544
2129
|
ASSERT_OK(s);
|
|
1545
2130
|
});
|
|
1546
2131
|
const Snapshot* snap = db_->GetSnapshot();
|
|
@@ -1585,10 +2170,8 @@ TEST_F(DataVisibilityTest, RangeScanWithoutSnapshot) {
|
|
|
1585
2170
|
WriteOptions write_opts;
|
|
1586
2171
|
TEST_SYNC_POINT("DataVisibilityTest::RangeScanWithoutSnapshot:BeforePut");
|
|
1587
2172
|
for (int i = 0; i < 3; ++i) {
|
|
1588
|
-
std::string
|
|
1589
|
-
|
|
1590
|
-
write_opts.timestamp = &write_ts;
|
|
1591
|
-
Status s = db_->Put(write_opts, "key" + std::to_string(i),
|
|
2173
|
+
std::string write_ts = Timestamp(i + 1, 0);
|
|
2174
|
+
Status s = db_->Put(write_opts, "key" + std::to_string(i), write_ts,
|
|
1592
2175
|
"value" + std::to_string(i));
|
|
1593
2176
|
ASSERT_OK(s);
|
|
1594
2177
|
}
|
|
@@ -1632,10 +2215,8 @@ TEST_F(DataVisibilityTest, RangeScanWithSnapshot) {
|
|
|
1632
2215
|
WriteOptions write_opts;
|
|
1633
2216
|
TEST_SYNC_POINT("DataVisibilityTest::RangeScanWithSnapshot:BeforePut");
|
|
1634
2217
|
for (int i = 0; i < 3; ++i) {
|
|
1635
|
-
std::string
|
|
1636
|
-
|
|
1637
|
-
write_opts.timestamp = &write_ts;
|
|
1638
|
-
Status s = db_->Put(write_opts, "key" + std::to_string(i),
|
|
2218
|
+
std::string write_ts = Timestamp(i + 1, 0);
|
|
2219
|
+
Status s = db_->Put(write_opts, "key" + std::to_string(i), write_ts,
|
|
1639
2220
|
"value" + std::to_string(i));
|
|
1640
2221
|
ASSERT_OK(s);
|
|
1641
2222
|
}
|
|
@@ -1809,6 +2390,7 @@ TEST_F(DataVisibilityTest, MultiGetCrossCF) {
|
|
|
1809
2390
|
Close();
|
|
1810
2391
|
}
|
|
1811
2392
|
|
|
2393
|
+
#if !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
|
|
1812
2394
|
class DBBasicTestWithTimestampCompressionSettings
|
|
1813
2395
|
: public DBBasicTestWithTimestampBase,
|
|
1814
2396
|
public testing::WithParamInterface<
|
|
@@ -1826,7 +2408,8 @@ TEST_P(DBBasicTestWithTimestampCompressionSettings, PutAndGet) {
|
|
|
1826
2408
|
Options options = CurrentOptions();
|
|
1827
2409
|
options.create_if_missing = true;
|
|
1828
2410
|
options.env = env_;
|
|
1829
|
-
options.memtable_factory.reset(
|
|
2411
|
+
options.memtable_factory.reset(
|
|
2412
|
+
test::NewSpecialSkipListFactory(kNumKeysPerFile));
|
|
1830
2413
|
size_t ts_sz = Timestamp(0, 0).size();
|
|
1831
2414
|
TestComparator test_cmp(ts_sz);
|
|
1832
2415
|
options.comparator = &test_cmp;
|
|
@@ -1867,12 +2450,11 @@ TEST_P(DBBasicTestWithTimestampCompressionSettings, PutAndGet) {
|
|
|
1867
2450
|
read_ts_list.push_back(Timestamp(1 + i * 2, 0));
|
|
1868
2451
|
const Slice write_ts = write_ts_list.back();
|
|
1869
2452
|
WriteOptions wopts;
|
|
1870
|
-
wopts.timestamp = &write_ts;
|
|
1871
2453
|
for (int cf = 0; cf != static_cast<int>(num_cfs); ++cf) {
|
|
1872
2454
|
for (size_t j = 0; j != (kNumKeysPerFile - 1) / kNumTimestamps; ++j) {
|
|
1873
|
-
ASSERT_OK(
|
|
1874
|
-
|
|
1875
|
-
|
|
2455
|
+
ASSERT_OK(
|
|
2456
|
+
db_->Put(wopts, handles_[cf], Key1(j), write_ts,
|
|
2457
|
+
"value_" + std::to_string(j) + "_" + std::to_string(i)));
|
|
1876
2458
|
}
|
|
1877
2459
|
}
|
|
1878
2460
|
}
|
|
@@ -1904,7 +2486,8 @@ TEST_P(DBBasicTestWithTimestampCompressionSettings, PutDeleteGet) {
|
|
|
1904
2486
|
TestComparator test_cmp(kTimestampSize);
|
|
1905
2487
|
options.comparator = &test_cmp;
|
|
1906
2488
|
const int kNumKeysPerFile = 1024;
|
|
1907
|
-
options.memtable_factory.reset(
|
|
2489
|
+
options.memtable_factory.reset(
|
|
2490
|
+
test::NewSpecialSkipListFactory(kNumKeysPerFile));
|
|
1908
2491
|
BlockBasedTableOptions bbto;
|
|
1909
2492
|
bbto.filter_policy = std::get<0>(GetParam());
|
|
1910
2493
|
bbto.whole_key_filtering = true;
|
|
@@ -1936,43 +2519,47 @@ TEST_P(DBBasicTestWithTimestampCompressionSettings, PutDeleteGet) {
|
|
|
1936
2519
|
const size_t kNumL0Files =
|
|
1937
2520
|
static_cast<size_t>(Options().level0_file_num_compaction_trigger);
|
|
1938
2521
|
{
|
|
1939
|
-
//
|
|
1940
|
-
|
|
1941
|
-
|
|
2522
|
+
// Half of the keys will go through Deletion and remaining half with
|
|
2523
|
+
// SingleDeletion. Generate enough L0 files with ts=1 to trigger compaction
|
|
2524
|
+
// to L1
|
|
2525
|
+
std::string ts = Timestamp(1, 0);
|
|
1942
2526
|
WriteOptions wopts;
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
ASSERT_OK(db_->Put(wopts, Key1(j), "value" + std::to_string(i)));
|
|
2527
|
+
for (size_t i = 0; i < kNumL0Files; ++i) {
|
|
2528
|
+
for (int j = 0; j < kNumKeysPerFile; ++j) {
|
|
2529
|
+
ASSERT_OK(db_->Put(wopts, Key1(j), ts, "value" + std::to_string(i)));
|
|
1947
2530
|
}
|
|
1948
2531
|
ASSERT_OK(db_->Flush(FlushOptions()));
|
|
1949
2532
|
}
|
|
1950
2533
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
1951
2534
|
// Generate another L0 at ts=3
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
wopts.timestamp = &ts;
|
|
1955
|
-
for (int i = 0; i != kNumKeysPerFile; ++i) {
|
|
2535
|
+
ts = Timestamp(3, 0);
|
|
2536
|
+
for (int i = 0; i < kNumKeysPerFile; ++i) {
|
|
1956
2537
|
std::string key_str = Key1(i);
|
|
1957
2538
|
Slice key(key_str);
|
|
1958
2539
|
if ((i % 3) == 0) {
|
|
1959
|
-
|
|
2540
|
+
if (i < kNumKeysPerFile / 2) {
|
|
2541
|
+
ASSERT_OK(db_->Delete(wopts, key, ts));
|
|
2542
|
+
} else {
|
|
2543
|
+
ASSERT_OK(db_->SingleDelete(wopts, key, ts));
|
|
2544
|
+
}
|
|
1960
2545
|
} else {
|
|
1961
|
-
ASSERT_OK(db_->Put(wopts, key, "new_value"));
|
|
2546
|
+
ASSERT_OK(db_->Put(wopts, key, ts, "new_value"));
|
|
1962
2547
|
}
|
|
1963
2548
|
}
|
|
1964
2549
|
ASSERT_OK(db_->Flush(FlushOptions()));
|
|
1965
2550
|
// Populate memtable at ts=5
|
|
1966
|
-
|
|
1967
|
-
ts = ts_str;
|
|
1968
|
-
wopts.timestamp = &ts;
|
|
2551
|
+
ts = Timestamp(5, 0);
|
|
1969
2552
|
for (int i = 0; i != kNumKeysPerFile; ++i) {
|
|
1970
2553
|
std::string key_str = Key1(i);
|
|
1971
2554
|
Slice key(key_str);
|
|
1972
2555
|
if ((i % 3) == 1) {
|
|
1973
|
-
|
|
2556
|
+
if (i < kNumKeysPerFile / 2) {
|
|
2557
|
+
ASSERT_OK(db_->Delete(wopts, key, ts));
|
|
2558
|
+
} else {
|
|
2559
|
+
ASSERT_OK(db_->SingleDelete(wopts, key, ts));
|
|
2560
|
+
}
|
|
1974
2561
|
} else if ((i % 3) == 2) {
|
|
1975
|
-
ASSERT_OK(db_->Put(wopts, key, "new_value_2"));
|
|
2562
|
+
ASSERT_OK(db_->Put(wopts, key, ts, "new_value_2"));
|
|
1976
2563
|
}
|
|
1977
2564
|
}
|
|
1978
2565
|
}
|
|
@@ -2033,7 +2620,8 @@ TEST_P(DBBasicTestWithTimestampCompressionSettings, PutAndGetWithCompaction) {
|
|
|
2033
2620
|
Options options = CurrentOptions();
|
|
2034
2621
|
options.create_if_missing = true;
|
|
2035
2622
|
options.env = env_;
|
|
2036
|
-
options.memtable_factory.reset(
|
|
2623
|
+
options.memtable_factory.reset(
|
|
2624
|
+
test::NewSpecialSkipListFactory(kNumKeysPerFile));
|
|
2037
2625
|
|
|
2038
2626
|
FlushedFileCollector* collector = new FlushedFileCollector();
|
|
2039
2627
|
options.listeners.emplace_back(collector);
|
|
@@ -2096,13 +2684,12 @@ TEST_P(DBBasicTestWithTimestampCompressionSettings, PutAndGetWithCompaction) {
|
|
|
2096
2684
|
read_ts_list.push_back(Timestamp(1 + i * 2, 0));
|
|
2097
2685
|
const Slice write_ts = write_ts_list.back();
|
|
2098
2686
|
WriteOptions wopts;
|
|
2099
|
-
wopts.timestamp = &write_ts;
|
|
2100
2687
|
for (int cf = 0; cf != static_cast<int>(num_cfs); ++cf) {
|
|
2101
2688
|
size_t memtable_get_start = 0;
|
|
2102
2689
|
for (size_t j = 0; j != kNumKeysPerTimestamp; ++j) {
|
|
2103
|
-
ASSERT_OK(
|
|
2104
|
-
|
|
2105
|
-
|
|
2690
|
+
ASSERT_OK(
|
|
2691
|
+
db_->Put(wopts, handles_[cf], Key1(j), write_ts,
|
|
2692
|
+
"value_" + std::to_string(j) + "_" + std::to_string(i)));
|
|
2106
2693
|
if (j == kSplitPosBase + i || j == kNumKeysPerTimestamp - 1) {
|
|
2107
2694
|
verify_records_func(i, memtable_get_start, j, handles_[cf]);
|
|
2108
2695
|
memtable_get_start = j + 1;
|
|
@@ -2111,6 +2698,8 @@ TEST_P(DBBasicTestWithTimestampCompressionSettings, PutAndGetWithCompaction) {
|
|
|
2111
2698
|
// incremental positions such that lowerlevel[1].smallest.userkey ==
|
|
2112
2699
|
// higherlevel[0].largest.userkey
|
|
2113
2700
|
ASSERT_OK(Flush(cf));
|
|
2701
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact()); // wait for flush (which
|
|
2702
|
+
// is also a compaction)
|
|
2114
2703
|
|
|
2115
2704
|
// compact files (2 at each level) to a lower level such that all
|
|
2116
2705
|
// keys with the same timestamp is at one level, with newer versions
|
|
@@ -2149,7 +2738,8 @@ TEST_F(DBBasicTestWithTimestamp, BatchWriteAndMultiGet) {
|
|
|
2149
2738
|
Options options = CurrentOptions();
|
|
2150
2739
|
options.create_if_missing = true;
|
|
2151
2740
|
options.env = env_;
|
|
2152
|
-
options.memtable_factory.reset(
|
|
2741
|
+
options.memtable_factory.reset(
|
|
2742
|
+
test::NewSpecialSkipListFactory(kNumKeysPerFile));
|
|
2153
2743
|
options.memtable_prefix_bloom_size_ratio = 0.1;
|
|
2154
2744
|
options.memtable_whole_key_filtering = true;
|
|
2155
2745
|
|
|
@@ -2198,19 +2788,22 @@ TEST_F(DBBasicTestWithTimestamp, BatchWriteAndMultiGet) {
|
|
|
2198
2788
|
}
|
|
2199
2789
|
};
|
|
2200
2790
|
|
|
2791
|
+
const std::string dummy_ts(ts_sz, '\0');
|
|
2201
2792
|
for (size_t i = 0; i != kNumTimestamps; ++i) {
|
|
2202
2793
|
write_ts_list.push_back(Timestamp(i * 2, 0));
|
|
2203
2794
|
read_ts_list.push_back(Timestamp(1 + i * 2, 0));
|
|
2204
2795
|
const Slice& write_ts = write_ts_list.back();
|
|
2205
2796
|
for (int cf = 0; cf != static_cast<int>(num_cfs); ++cf) {
|
|
2206
2797
|
WriteOptions wopts;
|
|
2207
|
-
WriteBatch batch(0, 0, ts_sz);
|
|
2798
|
+
WriteBatch batch(0, 0, 0, ts_sz);
|
|
2208
2799
|
for (size_t j = 0; j != kNumKeysPerTimestamp; ++j) {
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2800
|
+
const std::string key = Key1(j);
|
|
2801
|
+
const std::string value =
|
|
2802
|
+
"value_" + std::to_string(j) + "_" + std::to_string(i);
|
|
2803
|
+
ASSERT_OK(batch.Put(handles_[cf], key, value));
|
|
2212
2804
|
}
|
|
2213
|
-
ASSERT_OK(batch.
|
|
2805
|
+
ASSERT_OK(batch.UpdateTimestamps(write_ts,
|
|
2806
|
+
[ts_sz](uint32_t) { return ts_sz; }));
|
|
2214
2807
|
ASSERT_OK(db_->Write(wopts, &batch));
|
|
2215
2808
|
|
|
2216
2809
|
verify_records_func(i, handles_[cf]);
|
|
@@ -2242,18 +2835,16 @@ TEST_F(DBBasicTestWithTimestamp, MultiGetNoReturnTs) {
|
|
|
2242
2835
|
options.comparator = &test_cmp;
|
|
2243
2836
|
DestroyAndReopen(options);
|
|
2244
2837
|
WriteOptions write_opts;
|
|
2245
|
-
std::string
|
|
2246
|
-
|
|
2247
|
-
write_opts
|
|
2248
|
-
ASSERT_OK(db_->Put(write_opts, "
|
|
2249
|
-
ASSERT_OK(db_->Put(write_opts, "
|
|
2250
|
-
ASSERT_OK(db_->Put(write_opts, "fooxxxxxxxxxxxxxxxx", "value"));
|
|
2251
|
-
ASSERT_OK(db_->Put(write_opts, "barxxxxxxxxxxxxxxxx", "value"));
|
|
2838
|
+
std::string ts = Timestamp(1, 0);
|
|
2839
|
+
ASSERT_OK(db_->Put(write_opts, "foo", ts, "value"));
|
|
2840
|
+
ASSERT_OK(db_->Put(write_opts, "bar", ts, "value"));
|
|
2841
|
+
ASSERT_OK(db_->Put(write_opts, "fooxxxxxxxxxxxxxxxx", ts, "value"));
|
|
2842
|
+
ASSERT_OK(db_->Put(write_opts, "barxxxxxxxxxxxxxxxx", ts, "value"));
|
|
2252
2843
|
ColumnFamilyHandle* cfh = dbfull()->DefaultColumnFamily();
|
|
2253
|
-
|
|
2254
|
-
|
|
2844
|
+
ts = Timestamp(2, 0);
|
|
2845
|
+
Slice read_ts = ts;
|
|
2255
2846
|
ReadOptions read_opts;
|
|
2256
|
-
read_opts.timestamp = &
|
|
2847
|
+
read_opts.timestamp = &read_ts;
|
|
2257
2848
|
{
|
|
2258
2849
|
ColumnFamilyHandle* column_families[] = {cfh, cfh};
|
|
2259
2850
|
Slice keys[] = {"foo", "bar"};
|
|
@@ -2299,14 +2890,15 @@ class DBBasicTestWithTimestampPrefixSeek
|
|
|
2299
2890
|
: public DBBasicTestWithTimestampBase,
|
|
2300
2891
|
public testing::WithParamInterface<
|
|
2301
2892
|
std::tuple<std::shared_ptr<const SliceTransform>,
|
|
2302
|
-
std::shared_ptr<const FilterPolicy>, bool
|
|
2893
|
+
std::shared_ptr<const FilterPolicy>, bool,
|
|
2894
|
+
BlockBasedTableOptions::IndexType>> {
|
|
2303
2895
|
public:
|
|
2304
2896
|
DBBasicTestWithTimestampPrefixSeek()
|
|
2305
2897
|
: DBBasicTestWithTimestampBase(
|
|
2306
2898
|
"/db_basic_test_with_timestamp_prefix_seek") {}
|
|
2307
2899
|
};
|
|
2308
2900
|
|
|
2309
|
-
TEST_P(DBBasicTestWithTimestampPrefixSeek,
|
|
2901
|
+
TEST_P(DBBasicTestWithTimestampPrefixSeek, IterateWithPrefix) {
|
|
2310
2902
|
const size_t kNumKeysPerFile = 128;
|
|
2311
2903
|
Options options = CurrentOptions();
|
|
2312
2904
|
options.env = env_;
|
|
@@ -2315,9 +2907,11 @@ TEST_P(DBBasicTestWithTimestampPrefixSeek, ForwardIterateWithPrefix) {
|
|
|
2315
2907
|
TestComparator test_cmp(kTimestampSize);
|
|
2316
2908
|
options.comparator = &test_cmp;
|
|
2317
2909
|
options.prefix_extractor = std::get<0>(GetParam());
|
|
2318
|
-
options.memtable_factory.reset(
|
|
2910
|
+
options.memtable_factory.reset(
|
|
2911
|
+
test::NewSpecialSkipListFactory(kNumKeysPerFile));
|
|
2319
2912
|
BlockBasedTableOptions bbto;
|
|
2320
2913
|
bbto.filter_policy = std::get<1>(GetParam());
|
|
2914
|
+
bbto.index_type = std::get<3>(GetParam());
|
|
2321
2915
|
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
2322
2916
|
DestroyAndReopen(options);
|
|
2323
2917
|
|
|
@@ -2328,10 +2922,9 @@ TEST_P(DBBasicTestWithTimestampPrefixSeek, ForwardIterateWithPrefix) {
|
|
|
2328
2922
|
WriteOptions write_opts;
|
|
2329
2923
|
{
|
|
2330
2924
|
for (size_t i = 0; i != write_ts_list.size(); ++i) {
|
|
2331
|
-
Slice write_ts = write_ts_list[i];
|
|
2332
|
-
write_opts.timestamp = &write_ts;
|
|
2333
2925
|
for (uint64_t key = kMaxKey; key >= kMinKey; --key) {
|
|
2334
|
-
Status s = db_->Put(write_opts, Key1(key),
|
|
2926
|
+
Status s = db_->Put(write_opts, Key1(key), write_ts_list[i],
|
|
2927
|
+
"value" + std::to_string(i));
|
|
2335
2928
|
ASSERT_OK(s);
|
|
2336
2929
|
}
|
|
2337
2930
|
}
|
|
@@ -2356,6 +2949,13 @@ TEST_P(DBBasicTestWithTimestampPrefixSeek, ForwardIterateWithPrefix) {
|
|
|
2356
2949
|
"value" + std::to_string(i), write_ts_list[i]);
|
|
2357
2950
|
iter->Next();
|
|
2358
2951
|
ASSERT_FALSE(iter->Valid());
|
|
2952
|
+
|
|
2953
|
+
// Seek to kMinKey
|
|
2954
|
+
iter->Seek(Key1(kMinKey));
|
|
2955
|
+
CheckIterUserEntry(iter.get(), Key1(kMinKey), kTypeValue,
|
|
2956
|
+
"value" + std::to_string(i), write_ts_list[i]);
|
|
2957
|
+
iter->Prev();
|
|
2958
|
+
ASSERT_FALSE(iter->Valid());
|
|
2359
2959
|
}
|
|
2360
2960
|
const std::vector<uint64_t> targets = {kMinKey, kMinKey + 0x10,
|
|
2361
2961
|
kMinKey + 0x100, kMaxKey};
|
|
@@ -2371,6 +2971,7 @@ TEST_P(DBBasicTestWithTimestampPrefixSeek, ForwardIterateWithPrefix) {
|
|
|
2371
2971
|
Slice read_ts = read_ts_list[i];
|
|
2372
2972
|
read_opts.timestamp = &read_ts;
|
|
2373
2973
|
std::unique_ptr<Iterator> it(db_->NewIterator(read_opts));
|
|
2974
|
+
// Forward and backward iterate.
|
|
2374
2975
|
for (size_t j = 0; j != targets.size(); ++j) {
|
|
2375
2976
|
std::string start_key = Key1(targets[j]);
|
|
2376
2977
|
uint64_t expected_ub =
|
|
@@ -2394,6 +2995,24 @@ TEST_P(DBBasicTestWithTimestampPrefixSeek, ForwardIterateWithPrefix) {
|
|
|
2394
2995
|
it->Next();
|
|
2395
2996
|
}
|
|
2396
2997
|
ASSERT_EQ(expected_ub - targets[j] + 1, count);
|
|
2998
|
+
|
|
2999
|
+
count = 0;
|
|
3000
|
+
expected_key = targets[j];
|
|
3001
|
+
it->SeekForPrev(start_key);
|
|
3002
|
+
uint64_t expected_lb = (targets[j] & kPrefixMask);
|
|
3003
|
+
while (it->Valid()) {
|
|
3004
|
+
// Out of prefix
|
|
3005
|
+
if (!read_opts.prefix_same_as_start &&
|
|
3006
|
+
pe->Transform(it->key()) != pe->Transform(start_key)) {
|
|
3007
|
+
break;
|
|
3008
|
+
}
|
|
3009
|
+
CheckIterUserEntry(it.get(), Key1(expected_key), kTypeValue,
|
|
3010
|
+
"value" + std::to_string(i), write_ts_list[i]);
|
|
3011
|
+
++count;
|
|
3012
|
+
--expected_key;
|
|
3013
|
+
it->Prev();
|
|
3014
|
+
}
|
|
3015
|
+
ASSERT_EQ(targets[j] - std::max(expected_lb, kMinKey) + 1, count);
|
|
2397
3016
|
}
|
|
2398
3017
|
}
|
|
2399
3018
|
}
|
|
@@ -2416,19 +3035,25 @@ INSTANTIATE_TEST_CASE_P(
|
|
|
2416
3035
|
std::shared_ptr<const FilterPolicy>(
|
|
2417
3036
|
NewBloomFilterPolicy(20 /*bits_per_key*/,
|
|
2418
3037
|
false))),
|
|
2419
|
-
::testing::Bool()
|
|
3038
|
+
::testing::Bool(),
|
|
3039
|
+
::testing::Values(
|
|
3040
|
+
BlockBasedTableOptions::IndexType::kBinarySearch,
|
|
3041
|
+
BlockBasedTableOptions::IndexType::kHashSearch,
|
|
3042
|
+
BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch,
|
|
3043
|
+
BlockBasedTableOptions::IndexType::kBinarySearchWithFirstKey)));
|
|
2420
3044
|
|
|
2421
3045
|
class DBBasicTestWithTsIterTombstones
|
|
2422
3046
|
: public DBBasicTestWithTimestampBase,
|
|
2423
3047
|
public testing::WithParamInterface<
|
|
2424
3048
|
std::tuple<std::shared_ptr<const SliceTransform>,
|
|
2425
|
-
std::shared_ptr<const FilterPolicy>, int
|
|
3049
|
+
std::shared_ptr<const FilterPolicy>, int,
|
|
3050
|
+
BlockBasedTableOptions::IndexType>> {
|
|
2426
3051
|
public:
|
|
2427
3052
|
DBBasicTestWithTsIterTombstones()
|
|
2428
3053
|
: DBBasicTestWithTimestampBase("/db_basic_ts_iter_tombstones") {}
|
|
2429
3054
|
};
|
|
2430
3055
|
|
|
2431
|
-
TEST_P(DBBasicTestWithTsIterTombstones,
|
|
3056
|
+
TEST_P(DBBasicTestWithTsIterTombstones, IterWithDelete) {
|
|
2432
3057
|
constexpr size_t kNumKeysPerFile = 128;
|
|
2433
3058
|
Options options = CurrentOptions();
|
|
2434
3059
|
options.env = env_;
|
|
@@ -2436,9 +3061,11 @@ TEST_P(DBBasicTestWithTsIterTombstones, ForwardIterDelete) {
|
|
|
2436
3061
|
TestComparator test_cmp(kTimestampSize);
|
|
2437
3062
|
options.comparator = &test_cmp;
|
|
2438
3063
|
options.prefix_extractor = std::get<0>(GetParam());
|
|
2439
|
-
options.memtable_factory.reset(
|
|
3064
|
+
options.memtable_factory.reset(
|
|
3065
|
+
test::NewSpecialSkipListFactory(kNumKeysPerFile));
|
|
2440
3066
|
BlockBasedTableOptions bbto;
|
|
2441
3067
|
bbto.filter_policy = std::get<1>(GetParam());
|
|
3068
|
+
bbto.index_type = std::get<3>(GetParam());
|
|
2442
3069
|
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
|
2443
3070
|
options.num_levels = std::get<2>(GetParam());
|
|
2444
3071
|
DestroyAndReopen(options);
|
|
@@ -2449,24 +3076,23 @@ TEST_P(DBBasicTestWithTsIterTombstones, ForwardIterDelete) {
|
|
|
2449
3076
|
uint64_t key = kMinKey;
|
|
2450
3077
|
WriteOptions write_opts;
|
|
2451
3078
|
Slice ts = write_ts_strs[0];
|
|
2452
|
-
write_opts.timestamp = &ts;
|
|
2453
3079
|
do {
|
|
2454
|
-
Status s = db_->Put(write_opts, Key1(key),
|
|
3080
|
+
Status s = db_->Put(write_opts, Key1(key), write_ts_strs[0],
|
|
3081
|
+
"value" + std::to_string(key));
|
|
2455
3082
|
ASSERT_OK(s);
|
|
2456
3083
|
if (kMaxKey == key) {
|
|
2457
3084
|
break;
|
|
2458
3085
|
}
|
|
2459
3086
|
++key;
|
|
2460
3087
|
} while (true);
|
|
2461
|
-
|
|
2462
|
-
ts = write_ts_strs[1];
|
|
2463
|
-
write_opts.timestamp = &ts;
|
|
3088
|
+
|
|
2464
3089
|
for (key = kMaxKey; key >= kMinKey; --key) {
|
|
2465
3090
|
Status s;
|
|
2466
3091
|
if (0 != (key % 2)) {
|
|
2467
|
-
s = db_->Put(write_opts, Key1(key),
|
|
3092
|
+
s = db_->Put(write_opts, Key1(key), write_ts_strs[1],
|
|
3093
|
+
"value1" + std::to_string(key));
|
|
2468
3094
|
} else {
|
|
2469
|
-
s = db_->Delete(write_opts, Key1(key));
|
|
3095
|
+
s = db_->Delete(write_opts, Key1(key), write_ts_strs[1]);
|
|
2470
3096
|
}
|
|
2471
3097
|
ASSERT_OK(s);
|
|
2472
3098
|
}
|
|
@@ -2485,6 +3111,13 @@ TEST_P(DBBasicTestWithTsIterTombstones, ForwardIterDelete) {
|
|
|
2485
3111
|
ASSERT_EQ("value1" + std::to_string(key), iter->value());
|
|
2486
3112
|
}
|
|
2487
3113
|
ASSERT_EQ((kMaxKey - kMinKey + 1) / 2, count);
|
|
3114
|
+
|
|
3115
|
+
for (iter->SeekToLast(), count = 0, key = kMaxKey; iter->Valid();
|
|
3116
|
+
key -= 2, ++count, iter->Prev()) {
|
|
3117
|
+
ASSERT_EQ(Key1(key), iter->key());
|
|
3118
|
+
ASSERT_EQ("value1" + std::to_string(key), iter->value());
|
|
3119
|
+
}
|
|
3120
|
+
ASSERT_EQ((kMaxKey - kMinKey + 1) / 2, count);
|
|
2488
3121
|
}
|
|
2489
3122
|
Close();
|
|
2490
3123
|
}
|
|
@@ -2500,18 +3133,16 @@ INSTANTIATE_TEST_CASE_P(
|
|
|
2500
3133
|
NewBloomFilterPolicy(10, false)),
|
|
2501
3134
|
std::shared_ptr<const FilterPolicy>(
|
|
2502
3135
|
NewBloomFilterPolicy(20, false))),
|
|
2503
|
-
::testing::Values(2, 6)
|
|
3136
|
+
::testing::Values(2, 6),
|
|
3137
|
+
::testing::Values(
|
|
3138
|
+
BlockBasedTableOptions::IndexType::kBinarySearch,
|
|
3139
|
+
BlockBasedTableOptions::IndexType::kHashSearch,
|
|
3140
|
+
BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch,
|
|
3141
|
+
BlockBasedTableOptions::IndexType::kBinarySearchWithFirstKey)));
|
|
3142
|
+
#endif // !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
|
|
2504
3143
|
|
|
2505
3144
|
} // namespace ROCKSDB_NAMESPACE
|
|
2506
3145
|
|
|
2507
|
-
#ifdef ROCKSDB_UNITTESTS_WITH_CUSTOM_OBJECTS_FROM_STATIC_LIBS
|
|
2508
|
-
extern "C" {
|
|
2509
|
-
void RegisterCustomObjects(int argc, char** argv);
|
|
2510
|
-
}
|
|
2511
|
-
#else
|
|
2512
|
-
void RegisterCustomObjects(int /*argc*/, char** /*argv*/) {}
|
|
2513
|
-
#endif // !ROCKSDB_UNITTESTS_WITH_CUSTOM_OBJECTS_FROM_STATIC_LIBS
|
|
2514
|
-
|
|
2515
3146
|
int main(int argc, char** argv) {
|
|
2516
3147
|
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
2517
3148
|
::testing::InitGoogleTest(&argc, argv);
|