@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
|
@@ -11,11 +11,13 @@
|
|
|
11
11
|
// in Release build.
|
|
12
12
|
// which is a pity, it is a good test
|
|
13
13
|
#include <fcntl.h>
|
|
14
|
+
|
|
14
15
|
#include <algorithm>
|
|
15
16
|
#include <set>
|
|
16
17
|
#include <thread>
|
|
17
18
|
#include <unordered_set>
|
|
18
19
|
#include <utility>
|
|
20
|
+
|
|
19
21
|
#ifndef OS_WIN
|
|
20
22
|
#include <unistd.h>
|
|
21
23
|
#endif
|
|
@@ -25,6 +27,7 @@
|
|
|
25
27
|
|
|
26
28
|
#include "cache/lru_cache.h"
|
|
27
29
|
#include "db/blob/blob_index.h"
|
|
30
|
+
#include "db/blob/blob_log_format.h"
|
|
28
31
|
#include "db/db_impl/db_impl.h"
|
|
29
32
|
#include "db/db_test_util.h"
|
|
30
33
|
#include "db/dbformat.h"
|
|
@@ -33,7 +36,6 @@
|
|
|
33
36
|
#include "db/write_batch_internal.h"
|
|
34
37
|
#include "env/mock_env.h"
|
|
35
38
|
#include "file/filename.h"
|
|
36
|
-
#include "memtable/hash_linklist_rep.h"
|
|
37
39
|
#include "monitoring/thread_status_util.h"
|
|
38
40
|
#include "port/port.h"
|
|
39
41
|
#include "port/stack_trace.h"
|
|
@@ -52,6 +54,7 @@
|
|
|
52
54
|
#include "rocksdb/table.h"
|
|
53
55
|
#include "rocksdb/table_properties.h"
|
|
54
56
|
#include "rocksdb/thread_status.h"
|
|
57
|
+
#include "rocksdb/types.h"
|
|
55
58
|
#include "rocksdb/utilities/checkpoint.h"
|
|
56
59
|
#include "rocksdb/utilities/optimistic_transaction_db.h"
|
|
57
60
|
#include "rocksdb/utilities/write_batch_with_index.h"
|
|
@@ -74,7 +77,7 @@ namespace ROCKSDB_NAMESPACE {
|
|
|
74
77
|
// If fsync needs to be covered in a test, put it in other places.
|
|
75
78
|
class DBTest : public DBTestBase {
|
|
76
79
|
public:
|
|
77
|
-
DBTest() : DBTestBase("
|
|
80
|
+
DBTest() : DBTestBase("db_test", /*env_do_fsync=*/false) {}
|
|
78
81
|
};
|
|
79
82
|
|
|
80
83
|
class DBTestWithParam
|
|
@@ -95,7 +98,7 @@ class DBTestWithParam
|
|
|
95
98
|
};
|
|
96
99
|
|
|
97
100
|
TEST_F(DBTest, MockEnvTest) {
|
|
98
|
-
std::unique_ptr<MockEnv> env{
|
|
101
|
+
std::unique_ptr<MockEnv> env{MockEnv::Create(Env::Default())};
|
|
99
102
|
Options options;
|
|
100
103
|
options.create_if_missing = true;
|
|
101
104
|
options.env = env.get();
|
|
@@ -247,17 +250,21 @@ TEST_F(DBTest, SkipDelay) {
|
|
|
247
250
|
wo.sync = sync;
|
|
248
251
|
wo.disableWAL = disableWAL;
|
|
249
252
|
wo.no_slowdown = true;
|
|
250
|
-
|
|
253
|
+
// Large enough to exceed allowance for one time interval
|
|
254
|
+
std::string large_value(1024, 'x');
|
|
255
|
+
// Perhaps ideally this first write would fail because of delay, but
|
|
256
|
+
// the current implementation does not guarantee that.
|
|
257
|
+
dbfull()->Put(wo, "foo", large_value).PermitUncheckedError();
|
|
251
258
|
// We need the 2nd write to trigger delay. This is because delay is
|
|
252
259
|
// estimated based on the last write size which is 0 for the first write.
|
|
253
|
-
ASSERT_NOK(dbfull()->Put(wo, "foo2",
|
|
260
|
+
ASSERT_NOK(dbfull()->Put(wo, "foo2", large_value));
|
|
254
261
|
ASSERT_GE(sleep_count.load(), 0);
|
|
255
262
|
ASSERT_GE(wait_count.load(), 0);
|
|
256
263
|
token.reset();
|
|
257
264
|
|
|
258
|
-
token = dbfull()->TEST_write_controler().GetDelayToken(
|
|
265
|
+
token = dbfull()->TEST_write_controler().GetDelayToken(1000000);
|
|
259
266
|
wo.no_slowdown = false;
|
|
260
|
-
ASSERT_OK(dbfull()->Put(wo, "foo3",
|
|
267
|
+
ASSERT_OK(dbfull()->Put(wo, "foo3", large_value));
|
|
261
268
|
ASSERT_GE(sleep_count.load(), 1);
|
|
262
269
|
token.reset();
|
|
263
270
|
}
|
|
@@ -310,7 +317,7 @@ TEST_F(DBTest, MixedSlowdownOptions) {
|
|
|
310
317
|
wo.sync = false;
|
|
311
318
|
wo.disableWAL = false;
|
|
312
319
|
wo.no_slowdown = false;
|
|
313
|
-
dbfull()->Put(wo, "foo", "bar");
|
|
320
|
+
ASSERT_OK(dbfull()->Put(wo, "foo", "bar"));
|
|
314
321
|
// We need the 2nd write to trigger delay. This is because delay is
|
|
315
322
|
// estimated based on the last write size which is 0 for the first write.
|
|
316
323
|
ASSERT_OK(dbfull()->Put(wo, "foo2", "bar2"));
|
|
@@ -368,7 +375,7 @@ TEST_F(DBTest, MixedSlowdownOptionsInQueue) {
|
|
|
368
375
|
wo.sync = false;
|
|
369
376
|
wo.disableWAL = false;
|
|
370
377
|
wo.no_slowdown = false;
|
|
371
|
-
dbfull()->Put(wo, "foo", "bar");
|
|
378
|
+
ASSERT_OK(dbfull()->Put(wo, "foo", "bar"));
|
|
372
379
|
// We need the 2nd write to trigger delay. This is because delay is
|
|
373
380
|
// estimated based on the last write size which is 0 for the first write.
|
|
374
381
|
ASSERT_OK(dbfull()->Put(wo, "foo2", "bar2"));
|
|
@@ -437,7 +444,7 @@ TEST_F(DBTest, MixedSlowdownOptionsStop) {
|
|
|
437
444
|
wo.sync = false;
|
|
438
445
|
wo.disableWAL = false;
|
|
439
446
|
wo.no_slowdown = false;
|
|
440
|
-
dbfull()->Put(wo, "foo", "bar");
|
|
447
|
+
ASSERT_OK(dbfull()->Put(wo, "foo", "bar"));
|
|
441
448
|
// We need the 2nd write to trigger delay. This is because delay is
|
|
442
449
|
// estimated based on the last write size which is 0 for the first write.
|
|
443
450
|
ASSERT_OK(dbfull()->Put(wo, "foo2", "bar2"));
|
|
@@ -618,24 +625,24 @@ TEST_F(DBTest, SingleDeleteFlush) {
|
|
|
618
625
|
|
|
619
626
|
// Put values on second level (so that they will not be in the same
|
|
620
627
|
// compaction as the other operations.
|
|
621
|
-
Put(1, "foo", "first");
|
|
622
|
-
Put(1, "bar", "one");
|
|
628
|
+
ASSERT_OK(Put(1, "foo", "first"));
|
|
629
|
+
ASSERT_OK(Put(1, "bar", "one"));
|
|
623
630
|
ASSERT_OK(Flush(1));
|
|
624
631
|
MoveFilesToLevel(2, 1);
|
|
625
632
|
|
|
626
633
|
// (Single) delete hidden by a put
|
|
627
|
-
SingleDelete(1, "foo");
|
|
628
|
-
Put(1, "foo", "second");
|
|
629
|
-
Delete(1, "bar");
|
|
630
|
-
Put(1, "bar", "two");
|
|
634
|
+
ASSERT_OK(SingleDelete(1, "foo"));
|
|
635
|
+
ASSERT_OK(Put(1, "foo", "second"));
|
|
636
|
+
ASSERT_OK(Delete(1, "bar"));
|
|
637
|
+
ASSERT_OK(Put(1, "bar", "two"));
|
|
631
638
|
ASSERT_OK(Flush(1));
|
|
632
639
|
|
|
633
|
-
SingleDelete(1, "foo");
|
|
634
|
-
Delete(1, "bar");
|
|
640
|
+
ASSERT_OK(SingleDelete(1, "foo"));
|
|
641
|
+
ASSERT_OK(Delete(1, "bar"));
|
|
635
642
|
ASSERT_OK(Flush(1));
|
|
636
643
|
|
|
637
|
-
dbfull()->CompactRange(CompactRangeOptions(), handles_[1],
|
|
638
|
-
|
|
644
|
+
ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), handles_[1],
|
|
645
|
+
nullptr, nullptr));
|
|
639
646
|
|
|
640
647
|
ASSERT_EQ("NOT_FOUND", Get(1, "bar"));
|
|
641
648
|
ASSERT_EQ("NOT_FOUND", Get(1, "foo"));
|
|
@@ -656,9 +663,9 @@ TEST_F(DBTest, SingleDeletePutFlush) {
|
|
|
656
663
|
options.disable_auto_compactions = true;
|
|
657
664
|
CreateAndReopenWithCF({"pikachu"}, options);
|
|
658
665
|
|
|
659
|
-
Put(1, "foo", Slice());
|
|
660
|
-
Put(1, "a", Slice());
|
|
661
|
-
SingleDelete(1, "a");
|
|
666
|
+
ASSERT_OK(Put(1, "foo", Slice()));
|
|
667
|
+
ASSERT_OK(Put(1, "a", Slice()));
|
|
668
|
+
ASSERT_OK(SingleDelete(1, "a"));
|
|
662
669
|
ASSERT_OK(Flush(1));
|
|
663
670
|
|
|
664
671
|
ASSERT_EQ("[ ]", AllEntriesFor("a", 1));
|
|
@@ -766,8 +773,8 @@ TEST_F(DBTest, GetFromImmutableLayer) {
|
|
|
766
773
|
|
|
767
774
|
// Block sync calls
|
|
768
775
|
env_->delay_sstable_sync_.store(true, std::memory_order_release);
|
|
769
|
-
Put(1, "k1", std::string(100000, 'x')); // Fill memtable
|
|
770
|
-
Put(1, "k2", std::string(100000, 'y')); // Trigger flush
|
|
776
|
+
ASSERT_OK(Put(1, "k1", std::string(100000, 'x'))); // Fill memtable
|
|
777
|
+
ASSERT_OK(Put(1, "k2", std::string(100000, 'y'))); // Trigger flush
|
|
771
778
|
ASSERT_EQ("v1", Get(1, "foo"));
|
|
772
779
|
ASSERT_EQ("NOT_FOUND", Get(0, "foo"));
|
|
773
780
|
// Release sync calls
|
|
@@ -845,19 +852,19 @@ TEST_F(DBTest, GetEncountersEmptyLevel) {
|
|
|
845
852
|
// occurring at level 1 (instead of the correct level 0).
|
|
846
853
|
|
|
847
854
|
// Step 1: First place sstables in levels 0 and 2
|
|
848
|
-
Put(1, "a", "begin");
|
|
849
|
-
Put(1, "z", "end");
|
|
855
|
+
ASSERT_OK(Put(1, "a", "begin"));
|
|
856
|
+
ASSERT_OK(Put(1, "z", "end"));
|
|
850
857
|
ASSERT_OK(Flush(1));
|
|
851
|
-
dbfull()->TEST_CompactRange(0, nullptr, nullptr, handles_[1]);
|
|
852
|
-
dbfull()->TEST_CompactRange(1, nullptr, nullptr, handles_[1]);
|
|
853
|
-
Put(1, "a", "begin");
|
|
854
|
-
Put(1, "z", "end");
|
|
858
|
+
ASSERT_OK(dbfull()->TEST_CompactRange(0, nullptr, nullptr, handles_[1]));
|
|
859
|
+
ASSERT_OK(dbfull()->TEST_CompactRange(1, nullptr, nullptr, handles_[1]));
|
|
860
|
+
ASSERT_OK(Put(1, "a", "begin"));
|
|
861
|
+
ASSERT_OK(Put(1, "z", "end"));
|
|
855
862
|
ASSERT_OK(Flush(1));
|
|
856
863
|
ASSERT_GT(NumTableFilesAtLevel(0, 1), 0);
|
|
857
864
|
ASSERT_GT(NumTableFilesAtLevel(2, 1), 0);
|
|
858
865
|
|
|
859
866
|
// Step 2: clear level 1 if necessary.
|
|
860
|
-
dbfull()->TEST_CompactRange(1, nullptr, nullptr, handles_[1]);
|
|
867
|
+
ASSERT_OK(dbfull()->TEST_CompactRange(1, nullptr, nullptr, handles_[1]));
|
|
861
868
|
ASSERT_EQ(NumTableFilesAtLevel(0, 1), 1);
|
|
862
869
|
ASSERT_EQ(NumTableFilesAtLevel(1, 1), 0);
|
|
863
870
|
ASSERT_EQ(NumTableFilesAtLevel(2, 1), 1);
|
|
@@ -868,7 +875,7 @@ TEST_F(DBTest, GetEncountersEmptyLevel) {
|
|
|
868
875
|
}
|
|
869
876
|
|
|
870
877
|
// Step 4: Wait for compaction to finish
|
|
871
|
-
dbfull()->TEST_WaitForCompact();
|
|
878
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
872
879
|
|
|
873
880
|
ASSERT_EQ(NumTableFilesAtLevel(0, 1), 1); // XXX
|
|
874
881
|
} while (ChangeOptions(kSkipUniversalCompaction | kSkipFIFOCompaction));
|
|
@@ -904,6 +911,9 @@ TEST_F(DBTest, FlushSchedule) {
|
|
|
904
911
|
static_cast<int64_t>(options.write_buffer_size);
|
|
905
912
|
options.max_write_buffer_number = 2;
|
|
906
913
|
options.write_buffer_size = 120 * 1024;
|
|
914
|
+
auto flush_listener = std::make_shared<FlushCounterListener>();
|
|
915
|
+
flush_listener->expected_flush_reason = FlushReason::kWriteBufferFull;
|
|
916
|
+
options.listeners.push_back(flush_listener);
|
|
907
917
|
CreateAndReopenWithCF({"pikachu"}, options);
|
|
908
918
|
std::vector<port::Thread> threads;
|
|
909
919
|
|
|
@@ -1020,10 +1030,10 @@ TEST_F(DBTest, FailMoreDbPaths) {
|
|
|
1020
1030
|
}
|
|
1021
1031
|
|
|
1022
1032
|
void CheckColumnFamilyMeta(
|
|
1023
|
-
const ColumnFamilyMetaData& cf_meta,
|
|
1033
|
+
const ColumnFamilyMetaData& cf_meta, const std::string& cf_name,
|
|
1024
1034
|
const std::vector<std::vector<FileMetaData>>& files_by_level,
|
|
1025
1035
|
uint64_t start_time, uint64_t end_time) {
|
|
1026
|
-
ASSERT_EQ(cf_meta.name,
|
|
1036
|
+
ASSERT_EQ(cf_meta.name, cf_name);
|
|
1027
1037
|
ASSERT_EQ(cf_meta.levels.size(), files_by_level.size());
|
|
1028
1038
|
|
|
1029
1039
|
uint64_t cf_size = 0;
|
|
@@ -1068,6 +1078,11 @@ void CheckColumnFamilyMeta(
|
|
|
1068
1078
|
ASSERT_LE(file_meta_from_cf.file_creation_time, end_time);
|
|
1069
1079
|
ASSERT_GE(file_meta_from_cf.oldest_ancester_time, start_time);
|
|
1070
1080
|
ASSERT_LE(file_meta_from_cf.oldest_ancester_time, end_time);
|
|
1081
|
+
// More from FileStorageInfo
|
|
1082
|
+
ASSERT_EQ(file_meta_from_cf.file_type, kTableFile);
|
|
1083
|
+
ASSERT_EQ(file_meta_from_cf.name,
|
|
1084
|
+
"/" + file_meta_from_cf.relative_filename);
|
|
1085
|
+
ASSERT_EQ(file_meta_from_cf.directory, file_meta_from_cf.db_path);
|
|
1071
1086
|
}
|
|
1072
1087
|
|
|
1073
1088
|
ASSERT_EQ(level_meta_from_cf.size, level_size);
|
|
@@ -1112,11 +1127,63 @@ void CheckLiveFilesMeta(
|
|
|
1112
1127
|
ASSERT_EQ(meta.oldest_blob_file_number,
|
|
1113
1128
|
expected_meta.oldest_blob_file_number);
|
|
1114
1129
|
|
|
1130
|
+
// More from FileStorageInfo
|
|
1131
|
+
ASSERT_EQ(meta.file_type, kTableFile);
|
|
1132
|
+
ASSERT_EQ(meta.name, "/" + meta.relative_filename);
|
|
1133
|
+
ASSERT_EQ(meta.directory, meta.db_path);
|
|
1134
|
+
|
|
1115
1135
|
++i;
|
|
1116
1136
|
}
|
|
1117
1137
|
}
|
|
1118
1138
|
|
|
1119
1139
|
#ifndef ROCKSDB_LITE
|
|
1140
|
+
void AddBlobFile(const ColumnFamilyHandle* cfh, uint64_t blob_file_number,
|
|
1141
|
+
uint64_t total_blob_count, uint64_t total_blob_bytes,
|
|
1142
|
+
const std::string& checksum_method,
|
|
1143
|
+
const std::string& checksum_value,
|
|
1144
|
+
uint64_t garbage_blob_count = 0,
|
|
1145
|
+
uint64_t garbage_blob_bytes = 0) {
|
|
1146
|
+
ColumnFamilyData* cfd =
|
|
1147
|
+
(static_cast<const ColumnFamilyHandleImpl*>(cfh))->cfd();
|
|
1148
|
+
assert(cfd);
|
|
1149
|
+
|
|
1150
|
+
Version* const version = cfd->current();
|
|
1151
|
+
assert(version);
|
|
1152
|
+
|
|
1153
|
+
VersionStorageInfo* const storage_info = version->storage_info();
|
|
1154
|
+
assert(storage_info);
|
|
1155
|
+
|
|
1156
|
+
// Add a live blob file.
|
|
1157
|
+
|
|
1158
|
+
auto shared_meta = SharedBlobFileMetaData::Create(
|
|
1159
|
+
blob_file_number, total_blob_count, total_blob_bytes, checksum_method,
|
|
1160
|
+
checksum_value);
|
|
1161
|
+
|
|
1162
|
+
auto meta = BlobFileMetaData::Create(std::move(shared_meta),
|
|
1163
|
+
BlobFileMetaData::LinkedSsts(),
|
|
1164
|
+
garbage_blob_count, garbage_blob_bytes);
|
|
1165
|
+
|
|
1166
|
+
storage_info->AddBlobFile(std::move(meta));
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1169
|
+
static void CheckBlobMetaData(
|
|
1170
|
+
const BlobMetaData& bmd, uint64_t blob_file_number,
|
|
1171
|
+
uint64_t total_blob_count, uint64_t total_blob_bytes,
|
|
1172
|
+
const std::string& checksum_method, const std::string& checksum_value,
|
|
1173
|
+
uint64_t garbage_blob_count = 0, uint64_t garbage_blob_bytes = 0) {
|
|
1174
|
+
ASSERT_EQ(bmd.blob_file_number, blob_file_number);
|
|
1175
|
+
ASSERT_EQ(bmd.blob_file_name, BlobFileName("", blob_file_number));
|
|
1176
|
+
ASSERT_EQ(bmd.blob_file_size,
|
|
1177
|
+
total_blob_bytes + BlobLogHeader::kSize + BlobLogFooter::kSize);
|
|
1178
|
+
|
|
1179
|
+
ASSERT_EQ(bmd.total_blob_count, total_blob_count);
|
|
1180
|
+
ASSERT_EQ(bmd.total_blob_bytes, total_blob_bytes);
|
|
1181
|
+
ASSERT_EQ(bmd.garbage_blob_count, garbage_blob_count);
|
|
1182
|
+
ASSERT_EQ(bmd.garbage_blob_bytes, garbage_blob_bytes);
|
|
1183
|
+
ASSERT_EQ(bmd.checksum_method, checksum_method);
|
|
1184
|
+
ASSERT_EQ(bmd.checksum_value, checksum_value);
|
|
1185
|
+
}
|
|
1186
|
+
|
|
1120
1187
|
TEST_F(DBTest, MetaDataTest) {
|
|
1121
1188
|
Options options = CurrentOptions();
|
|
1122
1189
|
options.create_if_missing = true;
|
|
@@ -1146,7 +1213,7 @@ TEST_F(DBTest, MetaDataTest) {
|
|
|
1146
1213
|
// Fill up the rest of the file with random values.
|
|
1147
1214
|
GenerateNewFile(&rnd, &key_index, /* nowait */ true);
|
|
1148
1215
|
|
|
1149
|
-
Flush();
|
|
1216
|
+
ASSERT_OK(Flush());
|
|
1150
1217
|
}
|
|
1151
1218
|
|
|
1152
1219
|
std::vector<std::vector<FileMetaData>> files_by_level;
|
|
@@ -1157,13 +1224,71 @@ TEST_F(DBTest, MetaDataTest) {
|
|
|
1157
1224
|
|
|
1158
1225
|
ColumnFamilyMetaData cf_meta;
|
|
1159
1226
|
db_->GetColumnFamilyMetaData(&cf_meta);
|
|
1160
|
-
CheckColumnFamilyMeta(cf_meta,
|
|
1161
|
-
|
|
1227
|
+
CheckColumnFamilyMeta(cf_meta, kDefaultColumnFamilyName, files_by_level,
|
|
1228
|
+
start_time, end_time);
|
|
1162
1229
|
std::vector<LiveFileMetaData> live_file_meta;
|
|
1163
1230
|
db_->GetLiveFilesMetaData(&live_file_meta);
|
|
1164
1231
|
CheckLiveFilesMeta(live_file_meta, files_by_level);
|
|
1165
1232
|
}
|
|
1166
1233
|
|
|
1234
|
+
TEST_F(DBTest, AllMetaDataTest) {
|
|
1235
|
+
Options options = CurrentOptions();
|
|
1236
|
+
options.create_if_missing = true;
|
|
1237
|
+
options.disable_auto_compactions = true;
|
|
1238
|
+
DestroyAndReopen(options);
|
|
1239
|
+
CreateAndReopenWithCF({"pikachu"}, options);
|
|
1240
|
+
|
|
1241
|
+
constexpr uint64_t blob_file_number = 234;
|
|
1242
|
+
constexpr uint64_t total_blob_count = 555;
|
|
1243
|
+
constexpr uint64_t total_blob_bytes = 66666;
|
|
1244
|
+
constexpr char checksum_method[] = "CRC32";
|
|
1245
|
+
constexpr char checksum_value[] = "\x3d\x87\xff\x57";
|
|
1246
|
+
|
|
1247
|
+
int64_t temp_time = 0;
|
|
1248
|
+
options.env->GetCurrentTime(&temp_time).PermitUncheckedError();
|
|
1249
|
+
uint64_t start_time = static_cast<uint64_t>(temp_time);
|
|
1250
|
+
|
|
1251
|
+
Random rnd(301);
|
|
1252
|
+
dbfull()->TEST_LockMutex();
|
|
1253
|
+
for (int cf = 0; cf < 2; cf++) {
|
|
1254
|
+
AddBlobFile(handles_[cf], blob_file_number * (cf + 1),
|
|
1255
|
+
total_blob_count * (cf + 1), total_blob_bytes * (cf + 1),
|
|
1256
|
+
checksum_method, checksum_value);
|
|
1257
|
+
}
|
|
1258
|
+
dbfull()->TEST_UnlockMutex();
|
|
1259
|
+
|
|
1260
|
+
std::vector<ColumnFamilyMetaData> all_meta;
|
|
1261
|
+
db_->GetAllColumnFamilyMetaData(&all_meta);
|
|
1262
|
+
|
|
1263
|
+
std::vector<std::vector<FileMetaData>> default_files_by_level;
|
|
1264
|
+
std::vector<std::vector<FileMetaData>> pikachu_files_by_level;
|
|
1265
|
+
dbfull()->TEST_GetFilesMetaData(handles_[0], &default_files_by_level);
|
|
1266
|
+
dbfull()->TEST_GetFilesMetaData(handles_[1], &pikachu_files_by_level);
|
|
1267
|
+
|
|
1268
|
+
options.env->GetCurrentTime(&temp_time).PermitUncheckedError();
|
|
1269
|
+
uint64_t end_time = static_cast<uint64_t>(temp_time);
|
|
1270
|
+
|
|
1271
|
+
ASSERT_EQ(all_meta.size(), 2);
|
|
1272
|
+
for (int cf = 0; cf < 2; cf++) {
|
|
1273
|
+
const auto& cfmd = all_meta[cf];
|
|
1274
|
+
if (cf == 0) {
|
|
1275
|
+
CheckColumnFamilyMeta(cfmd, "default", default_files_by_level, start_time,
|
|
1276
|
+
end_time);
|
|
1277
|
+
} else {
|
|
1278
|
+
CheckColumnFamilyMeta(cfmd, "pikachu", pikachu_files_by_level, start_time,
|
|
1279
|
+
end_time);
|
|
1280
|
+
}
|
|
1281
|
+
ASSERT_EQ(cfmd.blob_files.size(), 1U);
|
|
1282
|
+
const auto& bmd = cfmd.blob_files[0];
|
|
1283
|
+
ASSERT_EQ(cfmd.blob_file_count, 1U);
|
|
1284
|
+
ASSERT_EQ(cfmd.blob_file_size, bmd.blob_file_size);
|
|
1285
|
+
ASSERT_EQ(NormalizePath(bmd.blob_file_path), NormalizePath(dbname_));
|
|
1286
|
+
CheckBlobMetaData(bmd, blob_file_number * (cf + 1),
|
|
1287
|
+
total_blob_count * (cf + 1), total_blob_bytes * (cf + 1),
|
|
1288
|
+
checksum_method, checksum_value);
|
|
1289
|
+
}
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1167
1292
|
namespace {
|
|
1168
1293
|
void MinLevelHelper(DBTest* self, Options& options) {
|
|
1169
1294
|
Random rnd(301);
|
|
@@ -1176,7 +1301,7 @@ void MinLevelHelper(DBTest* self, Options& options) {
|
|
|
1176
1301
|
values.push_back(rnd.RandomString(10000));
|
|
1177
1302
|
ASSERT_OK(self->Put(DBTestBase::Key(i), values[i]));
|
|
1178
1303
|
}
|
|
1179
|
-
self->dbfull()->TEST_WaitForFlushMemTable();
|
|
1304
|
+
ASSERT_OK(self->dbfull()->TEST_WaitForFlushMemTable());
|
|
1180
1305
|
ASSERT_EQ(self->NumTableFilesAtLevel(0), num + 1);
|
|
1181
1306
|
}
|
|
1182
1307
|
|
|
@@ -1186,7 +1311,7 @@ void MinLevelHelper(DBTest* self, Options& options) {
|
|
|
1186
1311
|
values.push_back(rnd.RandomString(10000));
|
|
1187
1312
|
ASSERT_OK(self->Put(DBTestBase::Key(i), values[i]));
|
|
1188
1313
|
}
|
|
1189
|
-
self->dbfull()->TEST_WaitForCompact();
|
|
1314
|
+
ASSERT_OK(self->dbfull()->TEST_WaitForCompact());
|
|
1190
1315
|
|
|
1191
1316
|
ASSERT_EQ(self->NumTableFilesAtLevel(0), 0);
|
|
1192
1317
|
ASSERT_EQ(self->NumTableFilesAtLevel(1), 1);
|
|
@@ -1335,7 +1460,7 @@ TEST_F(DBTest, ApproximateSizesMemTable) {
|
|
|
1335
1460
|
std::string end = Key(60);
|
|
1336
1461
|
Range r(start, end);
|
|
1337
1462
|
SizeApproximationOptions size_approx_options;
|
|
1338
|
-
size_approx_options.
|
|
1463
|
+
size_approx_options.include_memtables = true;
|
|
1339
1464
|
size_approx_options.include_files = true;
|
|
1340
1465
|
ASSERT_OK(
|
|
1341
1466
|
db_->GetApproximateSizes(size_approx_options, default_cf, &r, 1, &size));
|
|
@@ -1421,7 +1546,7 @@ TEST_F(DBTest, ApproximateSizesMemTable) {
|
|
|
1421
1546
|
ASSERT_OK(db_->GetApproximateSizes(&r, 1, &size_without_mt));
|
|
1422
1547
|
ASSERT_EQ(size_without_mt, 0);
|
|
1423
1548
|
|
|
1424
|
-
Flush();
|
|
1549
|
+
ASSERT_OK(Flush());
|
|
1425
1550
|
|
|
1426
1551
|
for (int i = 0; i < N; i++) {
|
|
1427
1552
|
ASSERT_OK(Put(Key(i + 1000), rnd.RandomString(1024)));
|
|
@@ -1436,8 +1561,8 @@ TEST_F(DBTest, ApproximateSizesMemTable) {
|
|
|
1436
1561
|
ASSERT_GT(size_with_mt, size_without_mt);
|
|
1437
1562
|
ASSERT_GT(size_without_mt, 6000);
|
|
1438
1563
|
|
|
1439
|
-
// Check that
|
|
1440
|
-
size_approx_options.
|
|
1564
|
+
// Check that include_memtables flag works as expected
|
|
1565
|
+
size_approx_options.include_memtables = false;
|
|
1441
1566
|
ASSERT_OK(
|
|
1442
1567
|
db_->GetApproximateSizes(size_approx_options, default_cf, &r, 1, &size));
|
|
1443
1568
|
ASSERT_EQ(size, size_without_mt);
|
|
@@ -1478,16 +1603,17 @@ TEST_F(DBTest, ApproximateSizesFilesWithErrorMargin) {
|
|
|
1478
1603
|
ASSERT_OK(Put(Key(i), rnd.RandomString(24)));
|
|
1479
1604
|
}
|
|
1480
1605
|
// Flush everything to files
|
|
1481
|
-
Flush();
|
|
1606
|
+
ASSERT_OK(Flush());
|
|
1482
1607
|
// Compact the entire key space into the next level
|
|
1483
|
-
|
|
1608
|
+
ASSERT_OK(
|
|
1609
|
+
db_->CompactRange(CompactRangeOptions(), default_cf, nullptr, nullptr));
|
|
1484
1610
|
|
|
1485
1611
|
// Write more keys
|
|
1486
1612
|
for (int i = N; i < (N + N / 4); i++) {
|
|
1487
1613
|
ASSERT_OK(Put(Key(i), rnd.RandomString(24)));
|
|
1488
1614
|
}
|
|
1489
1615
|
// Flush everything to files again
|
|
1490
|
-
Flush();
|
|
1616
|
+
ASSERT_OK(Flush());
|
|
1491
1617
|
|
|
1492
1618
|
// Wait for compaction to finish
|
|
1493
1619
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
@@ -1498,7 +1624,7 @@ TEST_F(DBTest, ApproximateSizesFilesWithErrorMargin) {
|
|
|
1498
1624
|
const Range r(start, end);
|
|
1499
1625
|
|
|
1500
1626
|
SizeApproximationOptions size_approx_options;
|
|
1501
|
-
size_approx_options.
|
|
1627
|
+
size_approx_options.include_memtables = false;
|
|
1502
1628
|
size_approx_options.include_files = true;
|
|
1503
1629
|
size_approx_options.files_size_error_margin = -1.0; // disabled
|
|
1504
1630
|
|
|
@@ -1567,7 +1693,7 @@ TEST_F(DBTest, GetApproximateMemTableStats) {
|
|
|
1567
1693
|
ASSERT_EQ(count, 0);
|
|
1568
1694
|
ASSERT_EQ(size, 0);
|
|
1569
1695
|
|
|
1570
|
-
Flush();
|
|
1696
|
+
ASSERT_OK(Flush());
|
|
1571
1697
|
|
|
1572
1698
|
start = Key(50);
|
|
1573
1699
|
end = Key(60);
|
|
@@ -1640,7 +1766,7 @@ TEST_F(DBTest, ApproximateSizes) {
|
|
|
1640
1766
|
std::string cend_str = Key(compact_start + 9);
|
|
1641
1767
|
Slice cstart = cstart_str;
|
|
1642
1768
|
Slice cend = cend_str;
|
|
1643
|
-
dbfull()->TEST_CompactRange(0, &cstart, &cend, handles_[1]);
|
|
1769
|
+
ASSERT_OK(dbfull()->TEST_CompactRange(0, &cstart, &cend, handles_[1]));
|
|
1644
1770
|
}
|
|
1645
1771
|
|
|
1646
1772
|
ASSERT_EQ(NumTableFilesAtLevel(0, 1), 0);
|
|
@@ -1696,7 +1822,7 @@ TEST_F(DBTest, ApproximateSizes_MixOfSmallAndLarge) {
|
|
|
1696
1822
|
ASSERT_OK(Size(Key(3), Key(5), 1, &size));
|
|
1697
1823
|
ASSERT_TRUE(Between(size, 110100, 111000));
|
|
1698
1824
|
|
|
1699
|
-
dbfull()->TEST_CompactRange(0, nullptr, nullptr, handles_[1]);
|
|
1825
|
+
ASSERT_OK(dbfull()->TEST_CompactRange(0, nullptr, nullptr, handles_[1]));
|
|
1700
1826
|
}
|
|
1701
1827
|
// ApproximateOffsetOf() is not yet implemented in plain table format.
|
|
1702
1828
|
} while (ChangeOptions(kSkipPlainTable));
|
|
@@ -1710,16 +1836,16 @@ TEST_F(DBTest, Snapshot) {
|
|
|
1710
1836
|
options_override.skip_policy = kSkipNoSnapshot;
|
|
1711
1837
|
do {
|
|
1712
1838
|
CreateAndReopenWithCF({"pikachu"}, CurrentOptions(options_override));
|
|
1713
|
-
Put(0, "foo", "0v1");
|
|
1714
|
-
Put(1, "foo", "1v1");
|
|
1839
|
+
ASSERT_OK(Put(0, "foo", "0v1"));
|
|
1840
|
+
ASSERT_OK(Put(1, "foo", "1v1"));
|
|
1715
1841
|
|
|
1716
1842
|
const Snapshot* s1 = db_->GetSnapshot();
|
|
1717
1843
|
ASSERT_EQ(1U, GetNumSnapshots());
|
|
1718
1844
|
uint64_t time_snap1 = GetTimeOldestSnapshots();
|
|
1719
1845
|
ASSERT_GT(time_snap1, 0U);
|
|
1720
1846
|
ASSERT_EQ(GetSequenceOldestSnapshots(), s1->GetSequenceNumber());
|
|
1721
|
-
Put(0, "foo", "0v2");
|
|
1722
|
-
Put(1, "foo", "1v2");
|
|
1847
|
+
ASSERT_OK(Put(0, "foo", "0v2"));
|
|
1848
|
+
ASSERT_OK(Put(1, "foo", "1v2"));
|
|
1723
1849
|
|
|
1724
1850
|
env_->MockSleepForSeconds(1);
|
|
1725
1851
|
|
|
@@ -1727,8 +1853,8 @@ TEST_F(DBTest, Snapshot) {
|
|
|
1727
1853
|
ASSERT_EQ(2U, GetNumSnapshots());
|
|
1728
1854
|
ASSERT_EQ(time_snap1, GetTimeOldestSnapshots());
|
|
1729
1855
|
ASSERT_EQ(GetSequenceOldestSnapshots(), s1->GetSequenceNumber());
|
|
1730
|
-
Put(0, "foo", "0v3");
|
|
1731
|
-
Put(1, "foo", "1v3");
|
|
1856
|
+
ASSERT_OK(Put(0, "foo", "0v3"));
|
|
1857
|
+
ASSERT_OK(Put(1, "foo", "1v3"));
|
|
1732
1858
|
|
|
1733
1859
|
{
|
|
1734
1860
|
ManagedSnapshot s3(db_);
|
|
@@ -1736,8 +1862,8 @@ TEST_F(DBTest, Snapshot) {
|
|
|
1736
1862
|
ASSERT_EQ(time_snap1, GetTimeOldestSnapshots());
|
|
1737
1863
|
ASSERT_EQ(GetSequenceOldestSnapshots(), s1->GetSequenceNumber());
|
|
1738
1864
|
|
|
1739
|
-
Put(0, "foo", "0v4");
|
|
1740
|
-
Put(1, "foo", "1v4");
|
|
1865
|
+
ASSERT_OK(Put(0, "foo", "0v4"));
|
|
1866
|
+
ASSERT_OK(Put(1, "foo", "1v4"));
|
|
1741
1867
|
ASSERT_EQ("0v1", Get(0, "foo", s1));
|
|
1742
1868
|
ASSERT_EQ("1v1", Get(1, "foo", s1));
|
|
1743
1869
|
ASSERT_EQ("0v2", Get(0, "foo", s2));
|
|
@@ -1786,11 +1912,11 @@ TEST_F(DBTest, HiddenValuesAreRemoved) {
|
|
|
1786
1912
|
FillLevels("a", "z", 1);
|
|
1787
1913
|
|
|
1788
1914
|
std::string big = rnd.RandomString(50000);
|
|
1789
|
-
Put(1, "foo", big);
|
|
1790
|
-
Put(1, "pastfoo", "v");
|
|
1915
|
+
ASSERT_OK(Put(1, "foo", big));
|
|
1916
|
+
ASSERT_OK(Put(1, "pastfoo", "v"));
|
|
1791
1917
|
const Snapshot* snapshot = db_->GetSnapshot();
|
|
1792
|
-
Put(1, "foo", "tiny");
|
|
1793
|
-
Put(1, "pastfoo2", "v2"); // Advance sequence number one more
|
|
1918
|
+
ASSERT_OK(Put(1, "foo", "tiny"));
|
|
1919
|
+
ASSERT_OK(Put(1, "pastfoo2", "v2")); // Advance sequence number one more
|
|
1794
1920
|
|
|
1795
1921
|
ASSERT_OK(Flush(1));
|
|
1796
1922
|
ASSERT_GT(NumTableFilesAtLevel(0, 1), 0);
|
|
@@ -1801,11 +1927,11 @@ TEST_F(DBTest, HiddenValuesAreRemoved) {
|
|
|
1801
1927
|
db_->ReleaseSnapshot(snapshot);
|
|
1802
1928
|
ASSERT_EQ(AllEntriesFor("foo", 1), "[ tiny, " + big + " ]");
|
|
1803
1929
|
Slice x("x");
|
|
1804
|
-
dbfull()->TEST_CompactRange(0, nullptr, &x, handles_[1]);
|
|
1930
|
+
ASSERT_OK(dbfull()->TEST_CompactRange(0, nullptr, &x, handles_[1]));
|
|
1805
1931
|
ASSERT_EQ(AllEntriesFor("foo", 1), "[ tiny ]");
|
|
1806
1932
|
ASSERT_EQ(NumTableFilesAtLevel(0, 1), 0);
|
|
1807
1933
|
ASSERT_GE(NumTableFilesAtLevel(1, 1), 1);
|
|
1808
|
-
dbfull()->TEST_CompactRange(1, nullptr, &x, handles_[1]);
|
|
1934
|
+
ASSERT_OK(dbfull()->TEST_CompactRange(1, nullptr, &x, handles_[1]));
|
|
1809
1935
|
ASSERT_EQ(AllEntriesFor("foo", 1), "[ tiny ]");
|
|
1810
1936
|
|
|
1811
1937
|
ASSERT_OK(Size("", "pastfoo", 1, &size));
|
|
@@ -1835,26 +1961,26 @@ TEST_F(DBTest, UnremovableSingleDelete) {
|
|
|
1835
1961
|
options.disable_auto_compactions = true;
|
|
1836
1962
|
CreateAndReopenWithCF({"pikachu"}, options);
|
|
1837
1963
|
|
|
1838
|
-
Put(1, "foo", "first");
|
|
1964
|
+
ASSERT_OK(Put(1, "foo", "first"));
|
|
1839
1965
|
const Snapshot* snapshot = db_->GetSnapshot();
|
|
1840
|
-
SingleDelete(1, "foo");
|
|
1841
|
-
Put(1, "foo", "second");
|
|
1966
|
+
ASSERT_OK(SingleDelete(1, "foo"));
|
|
1967
|
+
ASSERT_OK(Put(1, "foo", "second"));
|
|
1842
1968
|
ASSERT_OK(Flush(1));
|
|
1843
1969
|
|
|
1844
1970
|
ASSERT_EQ("first", Get(1, "foo", snapshot));
|
|
1845
1971
|
ASSERT_EQ("second", Get(1, "foo"));
|
|
1846
1972
|
|
|
1847
|
-
dbfull()->CompactRange(CompactRangeOptions(), handles_[1],
|
|
1848
|
-
|
|
1973
|
+
ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), handles_[1],
|
|
1974
|
+
nullptr, nullptr));
|
|
1849
1975
|
ASSERT_EQ("[ second, SDEL, first ]", AllEntriesFor("foo", 1));
|
|
1850
1976
|
|
|
1851
|
-
SingleDelete(1, "foo");
|
|
1977
|
+
ASSERT_OK(SingleDelete(1, "foo"));
|
|
1852
1978
|
|
|
1853
1979
|
ASSERT_EQ("first", Get(1, "foo", snapshot));
|
|
1854
1980
|
ASSERT_EQ("NOT_FOUND", Get(1, "foo"));
|
|
1855
1981
|
|
|
1856
|
-
dbfull()->CompactRange(CompactRangeOptions(), handles_[1],
|
|
1857
|
-
|
|
1982
|
+
ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), handles_[1],
|
|
1983
|
+
nullptr, nullptr));
|
|
1858
1984
|
|
|
1859
1985
|
ASSERT_EQ("first", Get(1, "foo", snapshot));
|
|
1860
1986
|
ASSERT_EQ("NOT_FOUND", Get(1, "foo"));
|
|
@@ -1870,7 +1996,7 @@ TEST_F(DBTest, UnremovableSingleDelete) {
|
|
|
1870
1996
|
TEST_F(DBTest, DeletionMarkers1) {
|
|
1871
1997
|
Options options = CurrentOptions();
|
|
1872
1998
|
CreateAndReopenWithCF({"pikachu"}, options);
|
|
1873
|
-
Put(1, "foo", "v1");
|
|
1999
|
+
ASSERT_OK(Put(1, "foo", "v1"));
|
|
1874
2000
|
ASSERT_OK(Flush(1));
|
|
1875
2001
|
const int last = 2;
|
|
1876
2002
|
MoveFilesToLevel(last, 1);
|
|
@@ -1878,24 +2004,25 @@ TEST_F(DBTest, DeletionMarkers1) {
|
|
|
1878
2004
|
ASSERT_EQ(NumTableFilesAtLevel(last, 1), 1);
|
|
1879
2005
|
|
|
1880
2006
|
// Place a table at level last-1 to prevent merging with preceding mutation
|
|
1881
|
-
Put(1, "a", "begin");
|
|
1882
|
-
Put(1, "z", "end");
|
|
1883
|
-
Flush(1);
|
|
2007
|
+
ASSERT_OK(Put(1, "a", "begin"));
|
|
2008
|
+
ASSERT_OK(Put(1, "z", "end"));
|
|
2009
|
+
ASSERT_OK(Flush(1));
|
|
1884
2010
|
MoveFilesToLevel(last - 1, 1);
|
|
1885
2011
|
ASSERT_EQ(NumTableFilesAtLevel(last, 1), 1);
|
|
1886
2012
|
ASSERT_EQ(NumTableFilesAtLevel(last - 1, 1), 1);
|
|
1887
2013
|
|
|
1888
|
-
Delete(1, "foo");
|
|
1889
|
-
Put(1, "foo", "v2");
|
|
2014
|
+
ASSERT_OK(Delete(1, "foo"));
|
|
2015
|
+
ASSERT_OK(Put(1, "foo", "v2"));
|
|
1890
2016
|
ASSERT_EQ(AllEntriesFor("foo", 1), "[ v2, DEL, v1 ]");
|
|
1891
2017
|
ASSERT_OK(Flush(1)); // Moves to level last-2
|
|
1892
2018
|
ASSERT_EQ(AllEntriesFor("foo", 1), "[ v2, v1 ]");
|
|
1893
2019
|
Slice z("z");
|
|
1894
|
-
dbfull()->TEST_CompactRange(last - 2, nullptr, &z, handles_[1]);
|
|
2020
|
+
ASSERT_OK(dbfull()->TEST_CompactRange(last - 2, nullptr, &z, handles_[1]));
|
|
1895
2021
|
// DEL eliminated, but v1 remains because we aren't compacting that level
|
|
1896
2022
|
// (DEL can be eliminated because v2 hides v1).
|
|
1897
2023
|
ASSERT_EQ(AllEntriesFor("foo", 1), "[ v2, v1 ]");
|
|
1898
|
-
|
|
2024
|
+
ASSERT_OK(
|
|
2025
|
+
dbfull()->TEST_CompactRange(last - 1, nullptr, nullptr, handles_[1]));
|
|
1899
2026
|
// Merging last-1 w/ last, so we are the base level for "foo", so
|
|
1900
2027
|
// DEL is removed. (as is v1).
|
|
1901
2028
|
ASSERT_EQ(AllEntriesFor("foo", 1), "[ v2 ]");
|
|
@@ -1904,7 +2031,7 @@ TEST_F(DBTest, DeletionMarkers1) {
|
|
|
1904
2031
|
TEST_F(DBTest, DeletionMarkers2) {
|
|
1905
2032
|
Options options = CurrentOptions();
|
|
1906
2033
|
CreateAndReopenWithCF({"pikachu"}, options);
|
|
1907
|
-
Put(1, "foo", "v1");
|
|
2034
|
+
ASSERT_OK(Put(1, "foo", "v1"));
|
|
1908
2035
|
ASSERT_OK(Flush(1));
|
|
1909
2036
|
const int last = 2;
|
|
1910
2037
|
MoveFilesToLevel(last, 1);
|
|
@@ -1912,21 +2039,23 @@ TEST_F(DBTest, DeletionMarkers2) {
|
|
|
1912
2039
|
ASSERT_EQ(NumTableFilesAtLevel(last, 1), 1);
|
|
1913
2040
|
|
|
1914
2041
|
// Place a table at level last-1 to prevent merging with preceding mutation
|
|
1915
|
-
Put(1, "a", "begin");
|
|
1916
|
-
Put(1, "z", "end");
|
|
1917
|
-
Flush(1);
|
|
2042
|
+
ASSERT_OK(Put(1, "a", "begin"));
|
|
2043
|
+
ASSERT_OK(Put(1, "z", "end"));
|
|
2044
|
+
ASSERT_OK(Flush(1));
|
|
1918
2045
|
MoveFilesToLevel(last - 1, 1);
|
|
1919
2046
|
ASSERT_EQ(NumTableFilesAtLevel(last, 1), 1);
|
|
1920
2047
|
ASSERT_EQ(NumTableFilesAtLevel(last - 1, 1), 1);
|
|
1921
2048
|
|
|
1922
|
-
Delete(1, "foo");
|
|
2049
|
+
ASSERT_OK(Delete(1, "foo"));
|
|
1923
2050
|
ASSERT_EQ(AllEntriesFor("foo", 1), "[ DEL, v1 ]");
|
|
1924
2051
|
ASSERT_OK(Flush(1)); // Moves to level last-2
|
|
1925
2052
|
ASSERT_EQ(AllEntriesFor("foo", 1), "[ DEL, v1 ]");
|
|
1926
|
-
|
|
2053
|
+
ASSERT_OK(
|
|
2054
|
+
dbfull()->TEST_CompactRange(last - 2, nullptr, nullptr, handles_[1]));
|
|
1927
2055
|
// DEL kept: "last" file overlaps
|
|
1928
2056
|
ASSERT_EQ(AllEntriesFor("foo", 1), "[ DEL, v1 ]");
|
|
1929
|
-
|
|
2057
|
+
ASSERT_OK(
|
|
2058
|
+
dbfull()->TEST_CompactRange(last - 1, nullptr, nullptr, handles_[1]));
|
|
1930
2059
|
// Merging last-1 w/ last, so we are the base level for "foo", so
|
|
1931
2060
|
// DEL is removed. (as is v1).
|
|
1932
2061
|
ASSERT_EQ(AllEntriesFor("foo", 1), "[ ]");
|
|
@@ -1941,11 +2070,11 @@ TEST_F(DBTest, OverlapInLevel0) {
|
|
|
1941
2070
|
// 0.
|
|
1942
2071
|
ASSERT_OK(Put(1, "100", "v100"));
|
|
1943
2072
|
ASSERT_OK(Put(1, "999", "v999"));
|
|
1944
|
-
Flush(1);
|
|
2073
|
+
ASSERT_OK(Flush(1));
|
|
1945
2074
|
MoveFilesToLevel(2, 1);
|
|
1946
2075
|
ASSERT_OK(Delete(1, "100"));
|
|
1947
2076
|
ASSERT_OK(Delete(1, "999"));
|
|
1948
|
-
Flush(1);
|
|
2077
|
+
ASSERT_OK(Flush(1));
|
|
1949
2078
|
MoveFilesToLevel(1, 1);
|
|
1950
2079
|
ASSERT_EQ("0,1,1", FilesPerLevel(1));
|
|
1951
2080
|
|
|
@@ -1955,23 +2084,30 @@ TEST_F(DBTest, OverlapInLevel0) {
|
|
|
1955
2084
|
// Note that files are sorted by smallest key.
|
|
1956
2085
|
ASSERT_OK(Put(1, "300", "v300"));
|
|
1957
2086
|
ASSERT_OK(Put(1, "500", "v500"));
|
|
1958
|
-
Flush(1);
|
|
2087
|
+
ASSERT_OK(Flush(1));
|
|
1959
2088
|
ASSERT_OK(Put(1, "200", "v200"));
|
|
1960
2089
|
ASSERT_OK(Put(1, "600", "v600"));
|
|
1961
2090
|
ASSERT_OK(Put(1, "900", "v900"));
|
|
1962
|
-
Flush(1);
|
|
2091
|
+
ASSERT_OK(Flush(1));
|
|
1963
2092
|
ASSERT_EQ("2,1,1", FilesPerLevel(1));
|
|
1964
2093
|
|
|
2094
|
+
// BEGIN addition to existing test
|
|
2095
|
+
// Take this opportunity to verify SST unique ids (including Plain table)
|
|
2096
|
+
TablePropertiesCollection tbc;
|
|
2097
|
+
ASSERT_OK(db_->GetPropertiesOfAllTables(handles_[1], &tbc));
|
|
2098
|
+
VerifySstUniqueIds(tbc);
|
|
2099
|
+
// END addition to existing test
|
|
2100
|
+
|
|
1965
2101
|
// Compact away the placeholder files we created initially
|
|
1966
|
-
dbfull()->TEST_CompactRange(1, nullptr, nullptr, handles_[1]);
|
|
1967
|
-
dbfull()->TEST_CompactRange(2, nullptr, nullptr, handles_[1]);
|
|
2102
|
+
ASSERT_OK(dbfull()->TEST_CompactRange(1, nullptr, nullptr, handles_[1]));
|
|
2103
|
+
ASSERT_OK(dbfull()->TEST_CompactRange(2, nullptr, nullptr, handles_[1]));
|
|
1968
2104
|
ASSERT_EQ("2", FilesPerLevel(1));
|
|
1969
2105
|
|
|
1970
2106
|
// Do a memtable compaction. Before bug-fix, the compaction would
|
|
1971
2107
|
// not detect the overlap with level-0 files and would incorrectly place
|
|
1972
2108
|
// the deletion in a deeper level.
|
|
1973
2109
|
ASSERT_OK(Delete(1, "600"));
|
|
1974
|
-
Flush(1);
|
|
2110
|
+
ASSERT_OK(Flush(1));
|
|
1975
2111
|
ASSERT_EQ("3", FilesPerLevel(1));
|
|
1976
2112
|
ASSERT_EQ("NOT_FOUND", Get(1, "600"));
|
|
1977
2113
|
} while (ChangeOptions(kSkipUniversalCompaction | kSkipFIFOCompaction));
|
|
@@ -2117,7 +2253,7 @@ TEST_F(DBTest, DBOpen_Change_NumLevels) {
|
|
|
2117
2253
|
|
|
2118
2254
|
ASSERT_OK(Put(1, "a", "123"));
|
|
2119
2255
|
ASSERT_OK(Put(1, "b", "234"));
|
|
2120
|
-
Flush(1);
|
|
2256
|
+
ASSERT_OK(Flush(1));
|
|
2121
2257
|
MoveFilesToLevel(3, 1);
|
|
2122
2258
|
Close();
|
|
2123
2259
|
|
|
@@ -2188,8 +2324,8 @@ TEST_F(DBTest, SnapshotFiles) {
|
|
|
2188
2324
|
uint64_t manifest_number = 0;
|
|
2189
2325
|
uint64_t manifest_size = 0;
|
|
2190
2326
|
std::vector<std::string> files;
|
|
2191
|
-
dbfull()->DisableFileDeletions();
|
|
2192
|
-
dbfull()->GetLiveFiles(files, &manifest_size);
|
|
2327
|
+
ASSERT_OK(dbfull()->DisableFileDeletions());
|
|
2328
|
+
ASSERT_OK(dbfull()->GetLiveFiles(files, &manifest_size));
|
|
2193
2329
|
|
|
2194
2330
|
// CURRENT, MANIFEST, OPTIONS, *.sst files (one for each CF)
|
|
2195
2331
|
ASSERT_EQ(files.size(), 5U);
|
|
@@ -2218,18 +2354,17 @@ TEST_F(DBTest, SnapshotFiles) {
|
|
|
2218
2354
|
// latest manifest file
|
|
2219
2355
|
if (ParseFileName(files[i].substr(1), &number, &type)) {
|
|
2220
2356
|
if (type == kDescriptorFile) {
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
}
|
|
2357
|
+
ASSERT_EQ(manifest_number, 0);
|
|
2358
|
+
manifest_number = number;
|
|
2359
|
+
ASSERT_GE(size, manifest_size);
|
|
2360
|
+
size = manifest_size; // copy only valid MANIFEST data
|
|
2226
2361
|
}
|
|
2227
2362
|
}
|
|
2228
2363
|
CopyFile(src, dest, size);
|
|
2229
2364
|
}
|
|
2230
2365
|
|
|
2231
2366
|
// release file snapshot
|
|
2232
|
-
dbfull()->
|
|
2367
|
+
ASSERT_OK(dbfull()->EnableFileDeletions(/*force*/ false));
|
|
2233
2368
|
// overwrite one key, this key should not appear in the snapshot
|
|
2234
2369
|
std::vector<std::string> extras;
|
|
2235
2370
|
for (unsigned int i = 0; i < 1; i++) {
|
|
@@ -2253,7 +2388,7 @@ TEST_F(DBTest, SnapshotFiles) {
|
|
|
2253
2388
|
ReadOptions roptions;
|
|
2254
2389
|
std::string val;
|
|
2255
2390
|
for (unsigned int i = 0; i < 80; i++) {
|
|
2256
|
-
|
|
2391
|
+
ASSERT_OK(snapdb->Get(roptions, cf_handles[i < 40], Key(i), &val));
|
|
2257
2392
|
ASSERT_EQ(values[i].compare(val), 0);
|
|
2258
2393
|
}
|
|
2259
2394
|
for (auto cfh : cf_handles) {
|
|
@@ -2266,8 +2401,8 @@ TEST_F(DBTest, SnapshotFiles) {
|
|
|
2266
2401
|
uint64_t new_manifest_number = 0;
|
|
2267
2402
|
uint64_t new_manifest_size = 0;
|
|
2268
2403
|
std::vector<std::string> newfiles;
|
|
2269
|
-
dbfull()->DisableFileDeletions();
|
|
2270
|
-
dbfull()->GetLiveFiles(newfiles, &new_manifest_size);
|
|
2404
|
+
ASSERT_OK(dbfull()->DisableFileDeletions());
|
|
2405
|
+
ASSERT_OK(dbfull()->GetLiveFiles(newfiles, &new_manifest_size));
|
|
2271
2406
|
|
|
2272
2407
|
// find the new manifest file. assert that this manifest file is
|
|
2273
2408
|
// the same one as in the previous snapshot. But its size should be
|
|
@@ -2279,20 +2414,41 @@ TEST_F(DBTest, SnapshotFiles) {
|
|
|
2279
2414
|
// latest manifest file
|
|
2280
2415
|
if (ParseFileName(newfiles[i].substr(1), &number, &type)) {
|
|
2281
2416
|
if (type == kDescriptorFile) {
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
}
|
|
2417
|
+
ASSERT_EQ(new_manifest_number, 0);
|
|
2418
|
+
uint64_t size;
|
|
2419
|
+
new_manifest_number = number;
|
|
2420
|
+
ASSERT_OK(env_->GetFileSize(src, &size));
|
|
2421
|
+
ASSERT_GE(size, new_manifest_size);
|
|
2288
2422
|
}
|
|
2289
2423
|
}
|
|
2290
2424
|
}
|
|
2291
2425
|
ASSERT_EQ(manifest_number, new_manifest_number);
|
|
2292
2426
|
ASSERT_GT(new_manifest_size, manifest_size);
|
|
2293
2427
|
|
|
2294
|
-
//
|
|
2295
|
-
|
|
2428
|
+
// Also test GetLiveFilesStorageInfo
|
|
2429
|
+
std::vector<LiveFileStorageInfo> new_infos;
|
|
2430
|
+
ASSERT_OK(dbfull()->GetLiveFilesStorageInfo(LiveFilesStorageInfoOptions(),
|
|
2431
|
+
&new_infos));
|
|
2432
|
+
|
|
2433
|
+
// Close DB (while deletions disabled)
|
|
2434
|
+
Close();
|
|
2435
|
+
|
|
2436
|
+
// Validate
|
|
2437
|
+
for (auto& info : new_infos) {
|
|
2438
|
+
std::string path = info.directory + "/" + info.relative_filename;
|
|
2439
|
+
uint64_t size;
|
|
2440
|
+
ASSERT_OK(env_->GetFileSize(path, &size));
|
|
2441
|
+
if (info.trim_to_size) {
|
|
2442
|
+
ASSERT_LE(info.size, size);
|
|
2443
|
+
} else if (!info.replacement_contents.empty()) {
|
|
2444
|
+
ASSERT_EQ(info.size, info.replacement_contents.size());
|
|
2445
|
+
} else {
|
|
2446
|
+
ASSERT_EQ(info.size, size);
|
|
2447
|
+
}
|
|
2448
|
+
if (info.file_type == kDescriptorFile) {
|
|
2449
|
+
ASSERT_EQ(info.file_number, manifest_number);
|
|
2450
|
+
}
|
|
2451
|
+
}
|
|
2296
2452
|
} while (ChangeCompactOptions());
|
|
2297
2453
|
}
|
|
2298
2454
|
|
|
@@ -2313,7 +2469,7 @@ TEST_F(DBTest, ReadonlyDBGetLiveManifestSize) {
|
|
|
2313
2469
|
|
|
2314
2470
|
uint64_t manifest_size = 0;
|
|
2315
2471
|
std::vector<std::string> files;
|
|
2316
|
-
dbfull()->GetLiveFiles(files, &manifest_size);
|
|
2472
|
+
ASSERT_OK(dbfull()->GetLiveFiles(files, &manifest_size));
|
|
2317
2473
|
|
|
2318
2474
|
for (const std::string& f : files) {
|
|
2319
2475
|
uint64_t number = 0;
|
|
@@ -2321,7 +2477,7 @@ TEST_F(DBTest, ReadonlyDBGetLiveManifestSize) {
|
|
|
2321
2477
|
if (ParseFileName(f.substr(1), &number, &type)) {
|
|
2322
2478
|
if (type == kDescriptorFile) {
|
|
2323
2479
|
uint64_t size_on_disk;
|
|
2324
|
-
env_->GetFileSize(dbname_ + "/" + f, &size_on_disk);
|
|
2480
|
+
ASSERT_OK(env_->GetFileSize(dbname_ + "/" + f, &size_on_disk));
|
|
2325
2481
|
ASSERT_EQ(manifest_size, size_on_disk);
|
|
2326
2482
|
break;
|
|
2327
2483
|
}
|
|
@@ -2332,39 +2488,24 @@ TEST_F(DBTest, ReadonlyDBGetLiveManifestSize) {
|
|
|
2332
2488
|
}
|
|
2333
2489
|
|
|
2334
2490
|
TEST_F(DBTest, GetLiveBlobFiles) {
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
ColumnFamilyData* const cfd = versions->GetColumnFamilySet()->GetDefault();
|
|
2340
|
-
assert(cfd);
|
|
2341
|
-
|
|
2342
|
-
Version* const version = cfd->current();
|
|
2343
|
-
assert(version);
|
|
2344
|
-
|
|
2345
|
-
VersionStorageInfo* const storage_info = version->storage_info();
|
|
2346
|
-
assert(storage_info);
|
|
2491
|
+
// Note: the following prevents an otherwise harmless data race between the
|
|
2492
|
+
// test setup code (AddBlobFile) below and the periodic stat dumping thread.
|
|
2493
|
+
Options options = CurrentOptions();
|
|
2494
|
+
options.stats_dump_period_sec = 0;
|
|
2347
2495
|
|
|
2348
|
-
// Add a live blob file.
|
|
2349
2496
|
constexpr uint64_t blob_file_number = 234;
|
|
2350
2497
|
constexpr uint64_t total_blob_count = 555;
|
|
2351
2498
|
constexpr uint64_t total_blob_bytes = 66666;
|
|
2352
2499
|
constexpr char checksum_method[] = "CRC32";
|
|
2353
|
-
constexpr char checksum_value[] = "
|
|
2354
|
-
|
|
2355
|
-
auto shared_meta = SharedBlobFileMetaData::Create(
|
|
2356
|
-
blob_file_number, total_blob_count, total_blob_bytes, checksum_method,
|
|
2357
|
-
checksum_value);
|
|
2358
|
-
|
|
2500
|
+
constexpr char checksum_value[] = "\x3d\x87\xff\x57";
|
|
2359
2501
|
constexpr uint64_t garbage_blob_count = 0;
|
|
2360
2502
|
constexpr uint64_t garbage_blob_bytes = 0;
|
|
2361
2503
|
|
|
2362
|
-
|
|
2363
|
-
BlobFileMetaData::LinkedSsts(),
|
|
2364
|
-
garbage_blob_count, garbage_blob_bytes);
|
|
2365
|
-
|
|
2366
|
-
storage_info->AddBlobFile(std::move(meta));
|
|
2504
|
+
Reopen(options);
|
|
2367
2505
|
|
|
2506
|
+
AddBlobFile(db_->DefaultColumnFamily(), blob_file_number, total_blob_count,
|
|
2507
|
+
total_blob_bytes, checksum_method, checksum_value,
|
|
2508
|
+
garbage_blob_count, garbage_blob_bytes);
|
|
2368
2509
|
// Make sure it appears in the results returned by GetLiveFiles.
|
|
2369
2510
|
uint64_t manifest_size = 0;
|
|
2370
2511
|
std::vector<std::string> files;
|
|
@@ -2372,6 +2513,19 @@ TEST_F(DBTest, GetLiveBlobFiles) {
|
|
|
2372
2513
|
|
|
2373
2514
|
ASSERT_FALSE(files.empty());
|
|
2374
2515
|
ASSERT_EQ(files[0], BlobFileName("", blob_file_number));
|
|
2516
|
+
|
|
2517
|
+
ColumnFamilyMetaData cfmd;
|
|
2518
|
+
|
|
2519
|
+
db_->GetColumnFamilyMetaData(&cfmd);
|
|
2520
|
+
ASSERT_EQ(cfmd.blob_files.size(), 1);
|
|
2521
|
+
const BlobMetaData& bmd = cfmd.blob_files[0];
|
|
2522
|
+
|
|
2523
|
+
CheckBlobMetaData(bmd, blob_file_number, total_blob_count, total_blob_bytes,
|
|
2524
|
+
checksum_method, checksum_value, garbage_blob_count,
|
|
2525
|
+
garbage_blob_bytes);
|
|
2526
|
+
ASSERT_EQ(NormalizePath(bmd.blob_file_path), NormalizePath(dbname_));
|
|
2527
|
+
ASSERT_EQ(cfmd.blob_file_count, 1U);
|
|
2528
|
+
ASSERT_EQ(cfmd.blob_file_size, bmd.blob_file_size);
|
|
2375
2529
|
}
|
|
2376
2530
|
#endif
|
|
2377
2531
|
|
|
@@ -2383,7 +2537,7 @@ TEST_F(DBTest, PurgeInfoLogs) {
|
|
|
2383
2537
|
for (int mode = 0; mode <= 1; mode++) {
|
|
2384
2538
|
if (mode == 1) {
|
|
2385
2539
|
options.db_log_dir = dbname_ + "_logs";
|
|
2386
|
-
env_->CreateDirIfMissing(options.db_log_dir);
|
|
2540
|
+
ASSERT_OK(env_->CreateDirIfMissing(options.db_log_dir));
|
|
2387
2541
|
} else {
|
|
2388
2542
|
options.db_log_dir = "";
|
|
2389
2543
|
}
|
|
@@ -2392,8 +2546,8 @@ TEST_F(DBTest, PurgeInfoLogs) {
|
|
|
2392
2546
|
}
|
|
2393
2547
|
|
|
2394
2548
|
std::vector<std::string> files;
|
|
2395
|
-
env_->GetChildren(
|
|
2396
|
-
|
|
2549
|
+
ASSERT_OK(env_->GetChildren(
|
|
2550
|
+
options.db_log_dir.empty() ? dbname_ : options.db_log_dir, &files));
|
|
2397
2551
|
int info_log_count = 0;
|
|
2398
2552
|
for (std::string file : files) {
|
|
2399
2553
|
if (file.find("LOG") != std::string::npos) {
|
|
@@ -2405,19 +2559,18 @@ TEST_F(DBTest, PurgeInfoLogs) {
|
|
|
2405
2559
|
Destroy(options);
|
|
2406
2560
|
// For mode (1), test DestroyDB() to delete all the logs under DB dir.
|
|
2407
2561
|
// For mode (2), no info log file should have been put under DB dir.
|
|
2562
|
+
// Since dbname_ has no children, there is no need to loop db_files
|
|
2408
2563
|
std::vector<std::string> db_files;
|
|
2409
|
-
env_->GetChildren(dbname_, &db_files);
|
|
2410
|
-
|
|
2411
|
-
ASSERT_TRUE(file.find("LOG") == std::string::npos);
|
|
2412
|
-
}
|
|
2564
|
+
ASSERT_TRUE(env_->GetChildren(dbname_, &db_files).IsNotFound());
|
|
2565
|
+
ASSERT_TRUE(db_files.empty());
|
|
2413
2566
|
|
|
2414
2567
|
if (mode == 1) {
|
|
2415
2568
|
// Cleaning up
|
|
2416
|
-
env_->GetChildren(options.db_log_dir, &files);
|
|
2569
|
+
ASSERT_OK(env_->GetChildren(options.db_log_dir, &files));
|
|
2417
2570
|
for (std::string file : files) {
|
|
2418
|
-
env_->DeleteFile(options.db_log_dir + "/" + file);
|
|
2571
|
+
ASSERT_OK(env_->DeleteFile(options.db_log_dir + "/" + file));
|
|
2419
2572
|
}
|
|
2420
|
-
env_->DeleteDir(options.db_log_dir);
|
|
2573
|
+
ASSERT_OK(env_->DeleteDir(options.db_log_dir));
|
|
2421
2574
|
}
|
|
2422
2575
|
}
|
|
2423
2576
|
}
|
|
@@ -2433,9 +2586,7 @@ static const int kNumKeys = 1000;
|
|
|
2433
2586
|
|
|
2434
2587
|
struct MTState {
|
|
2435
2588
|
DBTest* test;
|
|
2436
|
-
std::atomic<bool> stop;
|
|
2437
2589
|
std::atomic<int> counter[kNumThreads];
|
|
2438
|
-
std::atomic<bool> thread_done[kNumThreads];
|
|
2439
2590
|
};
|
|
2440
2591
|
|
|
2441
2592
|
struct MTThread {
|
|
@@ -2449,10 +2600,13 @@ static void MTThreadBody(void* arg) {
|
|
|
2449
2600
|
int id = t->id;
|
|
2450
2601
|
DB* db = t->state->test->db_;
|
|
2451
2602
|
int counter = 0;
|
|
2603
|
+
std::shared_ptr<SystemClock> clock = SystemClock::Default();
|
|
2604
|
+
auto end_micros = clock->NowMicros() + kTestSeconds * 1000000U;
|
|
2605
|
+
|
|
2452
2606
|
fprintf(stderr, "... starting thread %d\n", id);
|
|
2453
2607
|
Random rnd(1000 + id);
|
|
2454
2608
|
char valbuf[1500];
|
|
2455
|
-
while (
|
|
2609
|
+
while (clock->NowMicros() < end_micros) {
|
|
2456
2610
|
t->state->counter[id].store(counter, std::memory_order_release);
|
|
2457
2611
|
|
|
2458
2612
|
int key = rnd.Uniform(kNumKeys);
|
|
@@ -2472,7 +2626,8 @@ static void MTThreadBody(void* arg) {
|
|
|
2472
2626
|
for (int cf = 0; cf < kColumnFamilies; ++cf) {
|
|
2473
2627
|
snprintf(valbuf, sizeof(valbuf), "%d.%d.%d.%d.%-1000d", key, id,
|
|
2474
2628
|
static_cast<int>(counter), cf, unique_id);
|
|
2475
|
-
batch.Put(t->state->test->handles_[cf], Slice(keybuf),
|
|
2629
|
+
ASSERT_OK(batch.Put(t->state->test->handles_[cf], Slice(keybuf),
|
|
2630
|
+
Slice(valbuf)));
|
|
2476
2631
|
}
|
|
2477
2632
|
ASSERT_OK(db->Write(WriteOptions(), &batch));
|
|
2478
2633
|
} else {
|
|
@@ -2480,7 +2635,8 @@ static void MTThreadBody(void* arg) {
|
|
|
2480
2635
|
for (int cf = 0; cf < kColumnFamilies; ++cf) {
|
|
2481
2636
|
snprintf(valbuf, sizeof(valbuf), "%d.%d.%d.%d.%-1000d", key, id,
|
|
2482
2637
|
static_cast<int>(counter), cf, unique_id);
|
|
2483
|
-
batch.Put(t->state->test->handles_[cf], Slice(keybuf),
|
|
2638
|
+
ASSERT_OK(batch.Put(t->state->test->handles_[cf], Slice(keybuf),
|
|
2639
|
+
Slice(valbuf)));
|
|
2484
2640
|
}
|
|
2485
2641
|
ASSERT_OK(db->Write(WriteOptions(), batch.GetWriteBatch()));
|
|
2486
2642
|
}
|
|
@@ -2547,7 +2703,6 @@ static void MTThreadBody(void* arg) {
|
|
|
2547
2703
|
}
|
|
2548
2704
|
counter++;
|
|
2549
2705
|
}
|
|
2550
|
-
t->state->thread_done[id].store(true, std::memory_order_release);
|
|
2551
2706
|
fprintf(stderr, "... stopping thread %d after %d ops\n", id, int(counter));
|
|
2552
2707
|
}
|
|
2553
2708
|
|
|
@@ -2586,10 +2741,8 @@ TEST_P(MultiThreadedDBTest, MultiThreaded) {
|
|
|
2586
2741
|
// Initialize state
|
|
2587
2742
|
MTState mt;
|
|
2588
2743
|
mt.test = this;
|
|
2589
|
-
mt.stop.store(false, std::memory_order_release);
|
|
2590
2744
|
for (int id = 0; id < kNumThreads; id++) {
|
|
2591
2745
|
mt.counter[id].store(0, std::memory_order_release);
|
|
2592
|
-
mt.thread_done[id].store(false, std::memory_order_release);
|
|
2593
2746
|
}
|
|
2594
2747
|
|
|
2595
2748
|
// Start threads
|
|
@@ -2601,16 +2754,7 @@ TEST_P(MultiThreadedDBTest, MultiThreaded) {
|
|
|
2601
2754
|
env_->StartThread(MTThreadBody, &thread[id]);
|
|
2602
2755
|
}
|
|
2603
2756
|
|
|
2604
|
-
|
|
2605
|
-
env_->SleepForMicroseconds(kTestSeconds * 1000000);
|
|
2606
|
-
|
|
2607
|
-
// Stop the threads and wait for them to finish
|
|
2608
|
-
mt.stop.store(true, std::memory_order_release);
|
|
2609
|
-
for (int id = 0; id < kNumThreads; id++) {
|
|
2610
|
-
while (mt.thread_done[id].load(std::memory_order_acquire) == false) {
|
|
2611
|
-
env_->SleepForMicroseconds(100000);
|
|
2612
|
-
}
|
|
2613
|
-
}
|
|
2757
|
+
env_->WaitForJoin();
|
|
2614
2758
|
}
|
|
2615
2759
|
|
|
2616
2760
|
INSTANTIATE_TEST_CASE_P(
|
|
@@ -2701,7 +2845,7 @@ TEST_F(DBTest, GroupCommitTest) {
|
|
|
2701
2845
|
#endif // TRAVIS
|
|
2702
2846
|
|
|
2703
2847
|
namespace {
|
|
2704
|
-
|
|
2848
|
+
using KVMap = std::map<std::string, std::string>;
|
|
2705
2849
|
}
|
|
2706
2850
|
|
|
2707
2851
|
class ModelDB : public DB {
|
|
@@ -2722,30 +2866,55 @@ class ModelDB : public DB {
|
|
|
2722
2866
|
Status Put(const WriteOptions& o, ColumnFamilyHandle* cf, const Slice& k,
|
|
2723
2867
|
const Slice& v) override {
|
|
2724
2868
|
WriteBatch batch;
|
|
2725
|
-
batch.Put(cf, k, v);
|
|
2869
|
+
Status s = batch.Put(cf, k, v);
|
|
2870
|
+
if (!s.ok()) {
|
|
2871
|
+
return s;
|
|
2872
|
+
}
|
|
2726
2873
|
return Write(o, &batch);
|
|
2727
2874
|
}
|
|
2875
|
+
Status Put(const WriteOptions& /*o*/, ColumnFamilyHandle* /*cf*/,
|
|
2876
|
+
const Slice& /*k*/, const Slice& /*ts*/,
|
|
2877
|
+
const Slice& /*v*/) override {
|
|
2878
|
+
return Status::NotSupported();
|
|
2879
|
+
}
|
|
2728
2880
|
using DB::Close;
|
|
2729
2881
|
Status Close() override { return Status::OK(); }
|
|
2730
2882
|
using DB::Delete;
|
|
2731
2883
|
Status Delete(const WriteOptions& o, ColumnFamilyHandle* cf,
|
|
2732
2884
|
const Slice& key) override {
|
|
2733
2885
|
WriteBatch batch;
|
|
2734
|
-
batch.Delete(cf, key);
|
|
2886
|
+
Status s = batch.Delete(cf, key);
|
|
2887
|
+
if (!s.ok()) {
|
|
2888
|
+
return s;
|
|
2889
|
+
}
|
|
2735
2890
|
return Write(o, &batch);
|
|
2736
2891
|
}
|
|
2892
|
+
Status Delete(const WriteOptions& /*o*/, ColumnFamilyHandle* /*cf*/,
|
|
2893
|
+
const Slice& /*key*/, const Slice& /*ts*/) override {
|
|
2894
|
+
return Status::NotSupported();
|
|
2895
|
+
}
|
|
2737
2896
|
using DB::SingleDelete;
|
|
2738
2897
|
Status SingleDelete(const WriteOptions& o, ColumnFamilyHandle* cf,
|
|
2739
2898
|
const Slice& key) override {
|
|
2740
2899
|
WriteBatch batch;
|
|
2741
|
-
batch.SingleDelete(cf, key);
|
|
2900
|
+
Status s = batch.SingleDelete(cf, key);
|
|
2901
|
+
if (!s.ok()) {
|
|
2902
|
+
return s;
|
|
2903
|
+
}
|
|
2742
2904
|
return Write(o, &batch);
|
|
2743
2905
|
}
|
|
2906
|
+
Status SingleDelete(const WriteOptions& /*o*/, ColumnFamilyHandle* /*cf*/,
|
|
2907
|
+
const Slice& /*key*/, const Slice& /*ts*/) override {
|
|
2908
|
+
return Status::NotSupported();
|
|
2909
|
+
}
|
|
2744
2910
|
using DB::Merge;
|
|
2745
2911
|
Status Merge(const WriteOptions& o, ColumnFamilyHandle* cf, const Slice& k,
|
|
2746
2912
|
const Slice& v) override {
|
|
2747
2913
|
WriteBatch batch;
|
|
2748
|
-
batch.Merge(cf, k, v);
|
|
2914
|
+
Status s = batch.Merge(cf, k, v);
|
|
2915
|
+
if (!s.ok()) {
|
|
2916
|
+
return s;
|
|
2917
|
+
}
|
|
2749
2918
|
return Write(o, &batch);
|
|
2750
2919
|
}
|
|
2751
2920
|
using DB::Get;
|
|
@@ -3009,6 +3178,12 @@ class ModelDB : public DB {
|
|
|
3009
3178
|
return Status::OK();
|
|
3010
3179
|
}
|
|
3011
3180
|
|
|
3181
|
+
Status GetLiveFilesStorageInfo(
|
|
3182
|
+
const LiveFilesStorageInfoOptions& /*opts*/,
|
|
3183
|
+
std::vector<LiveFileStorageInfo>* /*files*/) override {
|
|
3184
|
+
return Status::OK();
|
|
3185
|
+
}
|
|
3186
|
+
|
|
3012
3187
|
Status GetSortedWalFiles(VectorLogPtr& /*files*/) override {
|
|
3013
3188
|
return Status::OK();
|
|
3014
3189
|
}
|
|
@@ -3047,8 +3222,14 @@ class ModelDB : public DB {
|
|
|
3047
3222
|
|
|
3048
3223
|
SequenceNumber GetLatestSequenceNumber() const override { return 0; }
|
|
3049
3224
|
|
|
3050
|
-
|
|
3051
|
-
|
|
3225
|
+
Status IncreaseFullHistoryTsLow(ColumnFamilyHandle* /*cf*/,
|
|
3226
|
+
std::string /*ts_low*/) override {
|
|
3227
|
+
return Status::OK();
|
|
3228
|
+
}
|
|
3229
|
+
|
|
3230
|
+
Status GetFullHistoryTsLow(ColumnFamilyHandle* /*cf*/,
|
|
3231
|
+
std::string* /*ts_low*/) override {
|
|
3232
|
+
return Status::OK();
|
|
3052
3233
|
}
|
|
3053
3234
|
|
|
3054
3235
|
ColumnFamilyHandle* DefaultColumnFamily() const override { return nullptr; }
|
|
@@ -3100,7 +3281,7 @@ class ModelDB : public DB {
|
|
|
3100
3281
|
std::string name_ = "";
|
|
3101
3282
|
};
|
|
3102
3283
|
|
|
3103
|
-
#
|
|
3284
|
+
#if !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
|
|
3104
3285
|
static std::string RandomKey(Random* rnd, int minimum = 0) {
|
|
3105
3286
|
int len;
|
|
3106
3287
|
do {
|
|
@@ -3220,9 +3401,9 @@ TEST_P(DBTestRandomized, Randomized) {
|
|
|
3220
3401
|
}
|
|
3221
3402
|
if (rnd.OneIn(2)) {
|
|
3222
3403
|
v = rnd.RandomString(rnd.Uniform(10));
|
|
3223
|
-
b.Put(k, v);
|
|
3404
|
+
ASSERT_OK(b.Put(k, v));
|
|
3224
3405
|
} else {
|
|
3225
|
-
b.Delete(k);
|
|
3406
|
+
ASSERT_OK(b.Delete(k));
|
|
3226
3407
|
}
|
|
3227
3408
|
}
|
|
3228
3409
|
ASSERT_OK(model.Write(WriteOptions(), &b));
|
|
@@ -3255,7 +3436,7 @@ TEST_P(DBTestRandomized, Randomized) {
|
|
|
3255
3436
|
if (model_snap != nullptr) model.ReleaseSnapshot(model_snap);
|
|
3256
3437
|
if (db_snap != nullptr) db_->ReleaseSnapshot(db_snap);
|
|
3257
3438
|
}
|
|
3258
|
-
#endif // ROCKSDB_VALGRIND_RUN
|
|
3439
|
+
#endif // !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
|
|
3259
3440
|
|
|
3260
3441
|
TEST_F(DBTest, BlockBasedTablePrefixIndexTest) {
|
|
3261
3442
|
// create a DB with block prefix index
|
|
@@ -3267,7 +3448,7 @@ TEST_F(DBTest, BlockBasedTablePrefixIndexTest) {
|
|
|
3267
3448
|
|
|
3268
3449
|
Reopen(options);
|
|
3269
3450
|
ASSERT_OK(Put("k1", "v1"));
|
|
3270
|
-
Flush();
|
|
3451
|
+
ASSERT_OK(Flush());
|
|
3271
3452
|
ASSERT_OK(Put("k2", "v2"));
|
|
3272
3453
|
|
|
3273
3454
|
// Reopen it without prefix extractor, make sure everything still works.
|
|
@@ -3280,6 +3461,27 @@ TEST_F(DBTest, BlockBasedTablePrefixIndexTest) {
|
|
|
3280
3461
|
ASSERT_EQ("v1", Get("k1"));
|
|
3281
3462
|
ASSERT_EQ("v2", Get("k2"));
|
|
3282
3463
|
}
|
|
3464
|
+
TEST_F(DBTest, BlockBasedTablePrefixHashIndexTest) {
|
|
3465
|
+
// create a DB with block prefix index
|
|
3466
|
+
BlockBasedTableOptions table_options;
|
|
3467
|
+
Options options = CurrentOptions();
|
|
3468
|
+
table_options.index_type = BlockBasedTableOptions::kHashSearch;
|
|
3469
|
+
options.table_factory.reset(NewBlockBasedTableFactory(table_options));
|
|
3470
|
+
options.prefix_extractor.reset(NewCappedPrefixTransform(2));
|
|
3471
|
+
|
|
3472
|
+
Reopen(options);
|
|
3473
|
+
ASSERT_OK(Put("kk1", "v1"));
|
|
3474
|
+
ASSERT_OK(Put("kk2", "v2"));
|
|
3475
|
+
ASSERT_OK(Put("kk", "v3"));
|
|
3476
|
+
ASSERT_OK(Put("k", "v4"));
|
|
3477
|
+
Flush();
|
|
3478
|
+
|
|
3479
|
+
ASSERT_EQ("v1", Get("kk1"));
|
|
3480
|
+
ASSERT_EQ("v2", Get("kk2"));
|
|
3481
|
+
|
|
3482
|
+
ASSERT_EQ("v3", Get("kk"));
|
|
3483
|
+
ASSERT_EQ("v4", Get("k"));
|
|
3484
|
+
}
|
|
3283
3485
|
|
|
3284
3486
|
TEST_F(DBTest, BlockBasedTablePrefixIndexTotalOrderSeek) {
|
|
3285
3487
|
// create a DB with block prefix index
|
|
@@ -3300,7 +3502,7 @@ TEST_F(DBTest, BlockBasedTablePrefixIndexTotalOrderSeek) {
|
|
|
3300
3502
|
|
|
3301
3503
|
Reopen(options);
|
|
3302
3504
|
ASSERT_OK(Put("k1", "v1"));
|
|
3303
|
-
Flush();
|
|
3505
|
+
ASSERT_OK(Flush());
|
|
3304
3506
|
|
|
3305
3507
|
CompactRangeOptions cro;
|
|
3306
3508
|
cro.change_level = true;
|
|
@@ -3429,7 +3631,7 @@ TEST_F(DBTest, FIFOCompactionTestWithCompaction) {
|
|
|
3429
3631
|
for (int j = 0; j < 20; j++) {
|
|
3430
3632
|
ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
|
|
3431
3633
|
}
|
|
3432
|
-
Flush();
|
|
3634
|
+
ASSERT_OK(Flush());
|
|
3433
3635
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
3434
3636
|
}
|
|
3435
3637
|
// It should be compacted to 10 files.
|
|
@@ -3440,7 +3642,7 @@ TEST_F(DBTest, FIFOCompactionTestWithCompaction) {
|
|
|
3440
3642
|
for (int j = 0; j < 20; j++) {
|
|
3441
3643
|
ASSERT_OK(Put(ToString(i * 20 + j + 2000), rnd.RandomString(980)));
|
|
3442
3644
|
}
|
|
3443
|
-
Flush();
|
|
3645
|
+
ASSERT_OK(Flush());
|
|
3444
3646
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
3445
3647
|
}
|
|
3446
3648
|
|
|
@@ -3471,7 +3673,7 @@ TEST_F(DBTest, FIFOCompactionStyleWithCompactionAndDelete) {
|
|
|
3471
3673
|
ASSERT_OK(Put("a" + ToString(i), rnd.RandomString(500)));
|
|
3472
3674
|
ASSERT_OK(Put("key" + ToString(i), ""));
|
|
3473
3675
|
ASSERT_OK(Put("z" + ToString(i), rnd.RandomString(500)));
|
|
3474
|
-
Flush();
|
|
3676
|
+
ASSERT_OK(Flush());
|
|
3475
3677
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
3476
3678
|
}
|
|
3477
3679
|
ASSERT_EQ(NumTableFilesAtLevel(0), 1);
|
|
@@ -3483,7 +3685,7 @@ TEST_F(DBTest, FIFOCompactionStyleWithCompactionAndDelete) {
|
|
|
3483
3685
|
ASSERT_OK(Put("a" + ToString(i), rnd.RandomString(500)));
|
|
3484
3686
|
ASSERT_OK(Delete("key" + ToString(i)));
|
|
3485
3687
|
ASSERT_OK(Put("z" + ToString(i), rnd.RandomString(500)));
|
|
3486
|
-
Flush();
|
|
3688
|
+
ASSERT_OK(Flush());
|
|
3487
3689
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
3488
3690
|
}
|
|
3489
3691
|
ASSERT_EQ(NumTableFilesAtLevel(0), 2);
|
|
@@ -3493,17 +3695,21 @@ TEST_F(DBTest, FIFOCompactionStyleWithCompactionAndDelete) {
|
|
|
3493
3695
|
}
|
|
3494
3696
|
|
|
3495
3697
|
// Check that FIFO-with-TTL is not supported with max_open_files != -1.
|
|
3698
|
+
// Github issue #8014
|
|
3496
3699
|
TEST_F(DBTest, FIFOCompactionWithTTLAndMaxOpenFilesTest) {
|
|
3497
|
-
Options options;
|
|
3700
|
+
Options options = CurrentOptions();
|
|
3498
3701
|
options.compaction_style = kCompactionStyleFIFO;
|
|
3499
3702
|
options.create_if_missing = true;
|
|
3500
3703
|
options.ttl = 600; // seconds
|
|
3501
3704
|
|
|
3502
|
-
// TTL is
|
|
3705
|
+
// TTL is not supported with max_open_files != -1.
|
|
3706
|
+
options.max_open_files = 0;
|
|
3707
|
+
ASSERT_TRUE(TryReopen(options).IsNotSupported());
|
|
3708
|
+
|
|
3503
3709
|
options.max_open_files = 100;
|
|
3504
|
-
|
|
3505
|
-
ASSERT_OK(TryReopen(options));
|
|
3710
|
+
ASSERT_TRUE(TryReopen(options).IsNotSupported());
|
|
3506
3711
|
|
|
3712
|
+
// TTL is supported with unlimited max_open_files
|
|
3507
3713
|
options.max_open_files = -1;
|
|
3508
3714
|
ASSERT_OK(TryReopen(options));
|
|
3509
3715
|
}
|
|
@@ -3555,7 +3761,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
|
|
|
3555
3761
|
for (int j = 0; j < 10; j++) {
|
|
3556
3762
|
ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
|
|
3557
3763
|
}
|
|
3558
|
-
Flush();
|
|
3764
|
+
ASSERT_OK(Flush());
|
|
3559
3765
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
3560
3766
|
}
|
|
3561
3767
|
ASSERT_EQ(NumTableFilesAtLevel(0), 10);
|
|
@@ -3568,7 +3774,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
|
|
|
3568
3774
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
3569
3775
|
ASSERT_EQ(NumTableFilesAtLevel(0), 10);
|
|
3570
3776
|
|
|
3571
|
-
dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr);
|
|
3777
|
+
ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
3572
3778
|
ASSERT_EQ(NumTableFilesAtLevel(0), 0);
|
|
3573
3779
|
}
|
|
3574
3780
|
|
|
@@ -3587,7 +3793,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
|
|
|
3587
3793
|
for (int j = 0; j < 10; j++) {
|
|
3588
3794
|
ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
|
|
3589
3795
|
}
|
|
3590
|
-
Flush();
|
|
3796
|
+
ASSERT_OK(Flush());
|
|
3591
3797
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
3592
3798
|
}
|
|
3593
3799
|
ASSERT_EQ(NumTableFilesAtLevel(0), 10);
|
|
@@ -3603,7 +3809,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
|
|
|
3603
3809
|
for (int j = 0; j < 10; j++) {
|
|
3604
3810
|
ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
|
|
3605
3811
|
}
|
|
3606
|
-
Flush();
|
|
3812
|
+
ASSERT_OK(Flush());
|
|
3607
3813
|
}
|
|
3608
3814
|
|
|
3609
3815
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
@@ -3629,7 +3835,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
|
|
|
3629
3835
|
for (int j = 0; j < 10; j++) {
|
|
3630
3836
|
ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
|
|
3631
3837
|
}
|
|
3632
|
-
Flush();
|
|
3838
|
+
ASSERT_OK(Flush());
|
|
3633
3839
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
3634
3840
|
}
|
|
3635
3841
|
ASSERT_EQ(NumTableFilesAtLevel(0), 3);
|
|
@@ -3644,7 +3850,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
|
|
|
3644
3850
|
for (int j = 0; j < 140; j++) {
|
|
3645
3851
|
ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
|
|
3646
3852
|
}
|
|
3647
|
-
Flush();
|
|
3853
|
+
ASSERT_OK(Flush());
|
|
3648
3854
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
3649
3855
|
}
|
|
3650
3856
|
// Size limit is still guaranteed.
|
|
@@ -3667,7 +3873,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
|
|
|
3667
3873
|
for (int j = 0; j < 10; j++) {
|
|
3668
3874
|
ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
|
|
3669
3875
|
}
|
|
3670
|
-
Flush();
|
|
3876
|
+
ASSERT_OK(Flush());
|
|
3671
3877
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
3672
3878
|
}
|
|
3673
3879
|
// With Intra-L0 compaction, out of 10 files, 6 files will be compacted to 1
|
|
@@ -3686,7 +3892,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
|
|
|
3686
3892
|
for (int j = 0; j < 10; j++) {
|
|
3687
3893
|
ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
|
|
3688
3894
|
}
|
|
3689
|
-
Flush();
|
|
3895
|
+
ASSERT_OK(Flush());
|
|
3690
3896
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
3691
3897
|
}
|
|
3692
3898
|
ASSERT_EQ(NumTableFilesAtLevel(0), 5);
|
|
@@ -3711,7 +3917,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
|
|
|
3711
3917
|
for (int j = 0; j < 20; j++) {
|
|
3712
3918
|
ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
|
|
3713
3919
|
}
|
|
3714
|
-
Flush();
|
|
3920
|
+
ASSERT_OK(Flush());
|
|
3715
3921
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
3716
3922
|
}
|
|
3717
3923
|
// It should be compacted to 10 files.
|
|
@@ -3722,7 +3928,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
|
|
|
3722
3928
|
for (int j = 0; j < 20; j++) {
|
|
3723
3929
|
ASSERT_OK(Put(ToString(i * 20 + j + 2000), rnd.RandomString(980)));
|
|
3724
3930
|
}
|
|
3725
|
-
Flush();
|
|
3931
|
+
ASSERT_OK(Flush());
|
|
3726
3932
|
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
3727
3933
|
}
|
|
3728
3934
|
|
|
@@ -3823,6 +4029,59 @@ TEST_F(DBTest, DISABLED_RateLimitingTest) {
|
|
|
3823
4029
|
ASSERT_LT(ratio, 0.6);
|
|
3824
4030
|
}
|
|
3825
4031
|
|
|
4032
|
+
// This is a mocked customed rate limiter without implementing optional APIs
|
|
4033
|
+
// (e.g, RateLimiter::GetTotalPendingRequests())
|
|
4034
|
+
class MockedRateLimiterWithNoOptionalAPIImpl : public RateLimiter {
|
|
4035
|
+
public:
|
|
4036
|
+
MockedRateLimiterWithNoOptionalAPIImpl() {}
|
|
4037
|
+
|
|
4038
|
+
~MockedRateLimiterWithNoOptionalAPIImpl() override {}
|
|
4039
|
+
|
|
4040
|
+
const char* Name() const override {
|
|
4041
|
+
return "MockedRateLimiterWithNoOptionalAPI";
|
|
4042
|
+
}
|
|
4043
|
+
void SetBytesPerSecond(int64_t bytes_per_second) override {
|
|
4044
|
+
(void)bytes_per_second;
|
|
4045
|
+
}
|
|
4046
|
+
|
|
4047
|
+
using RateLimiter::Request;
|
|
4048
|
+
void Request(const int64_t bytes, const Env::IOPriority pri,
|
|
4049
|
+
Statistics* stats) override {
|
|
4050
|
+
(void)bytes;
|
|
4051
|
+
(void)pri;
|
|
4052
|
+
(void)stats;
|
|
4053
|
+
}
|
|
4054
|
+
|
|
4055
|
+
int64_t GetSingleBurstBytes() const override { return 200; }
|
|
4056
|
+
|
|
4057
|
+
int64_t GetTotalBytesThrough(
|
|
4058
|
+
const Env::IOPriority pri = Env::IO_TOTAL) const override {
|
|
4059
|
+
(void)pri;
|
|
4060
|
+
return 0;
|
|
4061
|
+
}
|
|
4062
|
+
|
|
4063
|
+
int64_t GetTotalRequests(
|
|
4064
|
+
const Env::IOPriority pri = Env::IO_TOTAL) const override {
|
|
4065
|
+
(void)pri;
|
|
4066
|
+
return 0;
|
|
4067
|
+
}
|
|
4068
|
+
|
|
4069
|
+
int64_t GetBytesPerSecond() const override { return 0; }
|
|
4070
|
+
};
|
|
4071
|
+
|
|
4072
|
+
// To test that customed rate limiter not implementing optional APIs (e.g,
|
|
4073
|
+
// RateLimiter::GetTotalPendingRequests()) works fine with RocksDB basic
|
|
4074
|
+
// operations (e.g, Put, Get, Flush)
|
|
4075
|
+
TEST_F(DBTest, CustomedRateLimiterWithNoOptionalAPIImplTest) {
|
|
4076
|
+
Options options = CurrentOptions();
|
|
4077
|
+
options.rate_limiter.reset(new MockedRateLimiterWithNoOptionalAPIImpl());
|
|
4078
|
+
DestroyAndReopen(options);
|
|
4079
|
+
ASSERT_OK(Put("abc", "def"));
|
|
4080
|
+
ASSERT_EQ(Get("abc"), "def");
|
|
4081
|
+
ASSERT_OK(Flush());
|
|
4082
|
+
ASSERT_EQ(Get("abc"), "def");
|
|
4083
|
+
}
|
|
4084
|
+
|
|
3826
4085
|
TEST_F(DBTest, TableOptionsSanitizeTest) {
|
|
3827
4086
|
Options options = CurrentOptions();
|
|
3828
4087
|
options.create_if_missing = true;
|
|
@@ -3910,7 +4169,7 @@ TEST_F(DBTest, SanitizeNumThreads) {
|
|
|
3910
4169
|
|
|
3911
4170
|
ASSERT_OK(Put("abc", "def"));
|
|
3912
4171
|
ASSERT_EQ("def", Get("abc"));
|
|
3913
|
-
Flush();
|
|
4172
|
+
ASSERT_OK(Flush());
|
|
3914
4173
|
ASSERT_EQ("def", Get("abc"));
|
|
3915
4174
|
}
|
|
3916
4175
|
}
|
|
@@ -3919,9 +4178,9 @@ TEST_F(DBTest, WriteSingleThreadEntry) {
|
|
|
3919
4178
|
std::vector<port::Thread> threads;
|
|
3920
4179
|
dbfull()->TEST_LockMutex();
|
|
3921
4180
|
auto w = dbfull()->TEST_BeginWrite();
|
|
3922
|
-
threads.emplace_back([&] { Put("a", "b"); });
|
|
4181
|
+
threads.emplace_back([&] { ASSERT_OK(Put("a", "b")); });
|
|
3923
4182
|
env_->SleepForMicroseconds(10000);
|
|
3924
|
-
threads.emplace_back([&] { Flush(); });
|
|
4183
|
+
threads.emplace_back([&] { ASSERT_OK(Flush()); });
|
|
3925
4184
|
env_->SleepForMicroseconds(10000);
|
|
3926
4185
|
dbfull()->TEST_UnlockMutex();
|
|
3927
4186
|
dbfull()->TEST_LockMutex();
|
|
@@ -3949,7 +4208,8 @@ TEST_F(DBTest, ConcurrentFlushWAL) {
|
|
|
3949
4208
|
threads.emplace_back([&] {
|
|
3950
4209
|
for (size_t i = 0; i < cnt; i++) {
|
|
3951
4210
|
auto istr = ToString(i);
|
|
3952
|
-
db_->Put(wopt, db_->DefaultColumnFamily(), "a" + istr,
|
|
4211
|
+
ASSERT_OK(db_->Put(wopt, db_->DefaultColumnFamily(), "a" + istr,
|
|
4212
|
+
"b" + istr));
|
|
3953
4213
|
}
|
|
3954
4214
|
});
|
|
3955
4215
|
if (two_write_queues) {
|
|
@@ -3957,14 +4217,15 @@ TEST_F(DBTest, ConcurrentFlushWAL) {
|
|
|
3957
4217
|
for (size_t i = cnt; i < 2 * cnt; i++) {
|
|
3958
4218
|
auto istr = ToString(i);
|
|
3959
4219
|
WriteBatch batch;
|
|
3960
|
-
batch.Put("a" + istr, "b" + istr);
|
|
3961
|
-
|
|
4220
|
+
ASSERT_OK(batch.Put("a" + istr, "b" + istr));
|
|
4221
|
+
ASSERT_OK(
|
|
4222
|
+
dbfull()->WriteImpl(wopt, &batch, nullptr, nullptr, 0, true));
|
|
3962
4223
|
}
|
|
3963
4224
|
});
|
|
3964
4225
|
}
|
|
3965
4226
|
threads.emplace_back([&] {
|
|
3966
4227
|
for (size_t i = 0; i < cnt * 100; i++) { // FlushWAL is faster than Put
|
|
3967
|
-
db_->FlushWAL(false);
|
|
4228
|
+
ASSERT_OK(db_->FlushWAL(false));
|
|
3968
4229
|
}
|
|
3969
4230
|
});
|
|
3970
4231
|
for (auto& t : threads) {
|
|
@@ -3984,6 +4245,39 @@ TEST_F(DBTest, ConcurrentFlushWAL) {
|
|
|
3984
4245
|
}
|
|
3985
4246
|
}
|
|
3986
4247
|
|
|
4248
|
+
// This test failure will be caught with a probability
|
|
4249
|
+
TEST_F(DBTest, ManualFlushWalAndWriteRace) {
|
|
4250
|
+
Options options;
|
|
4251
|
+
options.env = env_;
|
|
4252
|
+
options.manual_wal_flush = true;
|
|
4253
|
+
options.create_if_missing = true;
|
|
4254
|
+
|
|
4255
|
+
DestroyAndReopen(options);
|
|
4256
|
+
|
|
4257
|
+
WriteOptions wopts;
|
|
4258
|
+
wopts.sync = true;
|
|
4259
|
+
|
|
4260
|
+
port::Thread writeThread([&]() {
|
|
4261
|
+
for (int i = 0; i < 100; i++) {
|
|
4262
|
+
auto istr = ToString(i);
|
|
4263
|
+
ASSERT_OK(dbfull()->Put(wopts, "key_" + istr, "value_" + istr));
|
|
4264
|
+
}
|
|
4265
|
+
});
|
|
4266
|
+
port::Thread flushThread([&]() {
|
|
4267
|
+
for (int i = 0; i < 100; i++) {
|
|
4268
|
+
ASSERT_OK(dbfull()->FlushWAL(false));
|
|
4269
|
+
}
|
|
4270
|
+
});
|
|
4271
|
+
|
|
4272
|
+
writeThread.join();
|
|
4273
|
+
flushThread.join();
|
|
4274
|
+
ASSERT_OK(dbfull()->Put(wopts, "foo1", "value1"));
|
|
4275
|
+
ASSERT_OK(dbfull()->Put(wopts, "foo2", "value2"));
|
|
4276
|
+
Reopen(options);
|
|
4277
|
+
ASSERT_EQ("value1", Get("foo1"));
|
|
4278
|
+
ASSERT_EQ("value2", Get("foo2"));
|
|
4279
|
+
}
|
|
4280
|
+
|
|
3987
4281
|
#ifndef ROCKSDB_LITE
|
|
3988
4282
|
TEST_F(DBTest, DynamicMemtableOptions) {
|
|
3989
4283
|
const uint64_t k64KB = 1 << 16;
|
|
@@ -4015,10 +4309,10 @@ TEST_F(DBTest, DynamicMemtableOptions) {
|
|
|
4015
4309
|
// multiple memtables are flushed into a single L0 file. This race
|
|
4016
4310
|
// condition affects assertion (A).
|
|
4017
4311
|
if (i % kNumPutsBeforeWaitForFlush == kNumPutsBeforeWaitForFlush - 1) {
|
|
4018
|
-
dbfull()->TEST_WaitForFlushMemTable();
|
|
4312
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
4019
4313
|
}
|
|
4020
4314
|
}
|
|
4021
|
-
dbfull()->TEST_WaitForFlushMemTable();
|
|
4315
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
4022
4316
|
};
|
|
4023
4317
|
|
|
4024
4318
|
// Test write_buffer_size
|
|
@@ -4028,7 +4322,7 @@ TEST_F(DBTest, DynamicMemtableOptions) {
|
|
|
4028
4322
|
ASSERT_GT(SizeAtLevel(0), k64KB - k5KB * 2);
|
|
4029
4323
|
|
|
4030
4324
|
// Clean up L0
|
|
4031
|
-
dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr);
|
|
4325
|
+
ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
4032
4326
|
ASSERT_EQ(NumTableFilesAtLevel(0), 0);
|
|
4033
4327
|
|
|
4034
4328
|
// Increase buffer size
|
|
@@ -4094,7 +4388,7 @@ TEST_F(DBTest, DynamicMemtableOptions) {
|
|
|
4094
4388
|
{"max_write_buffer_number", "8"},
|
|
4095
4389
|
}));
|
|
4096
4390
|
// Clean up memtable and L0
|
|
4097
|
-
dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr);
|
|
4391
|
+
ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
4098
4392
|
|
|
4099
4393
|
sleeping_task_low.Reset();
|
|
4100
4394
|
env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task_low,
|
|
@@ -4117,7 +4411,7 @@ TEST_F(DBTest, DynamicMemtableOptions) {
|
|
|
4117
4411
|
{"max_write_buffer_number", "4"},
|
|
4118
4412
|
}));
|
|
4119
4413
|
// Clean up memtable and L0
|
|
4120
|
-
dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr);
|
|
4414
|
+
ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
4121
4415
|
|
|
4122
4416
|
sleeping_task_low.Reset();
|
|
4123
4417
|
env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task_low,
|
|
@@ -4217,7 +4511,7 @@ TEST_F(DBTest, GetThreadStatus) {
|
|
|
4217
4511
|
true);
|
|
4218
4512
|
}
|
|
4219
4513
|
}
|
|
4220
|
-
db_->DropColumnFamily(handles_[2]);
|
|
4514
|
+
ASSERT_OK(db_->DropColumnFamily(handles_[2]));
|
|
4221
4515
|
delete handles_[2];
|
|
4222
4516
|
handles_.erase(handles_.begin() + 2);
|
|
4223
4517
|
env_->GetThreadStatusUpdater()->TEST_VerifyColumnFamilyInfoMap(handles_,
|
|
@@ -4259,17 +4553,19 @@ TEST_F(DBTest, ThreadStatusFlush) {
|
|
|
4259
4553
|
VerifyOperationCount(env_, ThreadStatus::OP_FLUSH, 0);
|
|
4260
4554
|
|
|
4261
4555
|
uint64_t num_running_flushes = 0;
|
|
4262
|
-
db_->GetIntProperty(DB::Properties::kNumRunningFlushes,
|
|
4556
|
+
ASSERT_TRUE(db_->GetIntProperty(DB::Properties::kNumRunningFlushes,
|
|
4557
|
+
&num_running_flushes));
|
|
4263
4558
|
ASSERT_EQ(num_running_flushes, 0);
|
|
4264
4559
|
|
|
4265
|
-
Put(1, "k1", std::string(100000, 'x')); // Fill memtable
|
|
4266
|
-
Put(1, "k2", std::string(100000, 'y')); // Trigger flush
|
|
4560
|
+
ASSERT_OK(Put(1, "k1", std::string(100000, 'x'))); // Fill memtable
|
|
4561
|
+
ASSERT_OK(Put(1, "k2", std::string(100000, 'y'))); // Trigger flush
|
|
4267
4562
|
|
|
4268
4563
|
// The first sync point is to make sure there's one flush job
|
|
4269
4564
|
// running when we perform VerifyOperationCount().
|
|
4270
4565
|
TEST_SYNC_POINT("DBTest::ThreadStatusFlush:1");
|
|
4271
4566
|
VerifyOperationCount(env_, ThreadStatus::OP_FLUSH, 1);
|
|
4272
|
-
db_->GetIntProperty(DB::Properties::kNumRunningFlushes,
|
|
4567
|
+
ASSERT_TRUE(db_->GetIntProperty(DB::Properties::kNumRunningFlushes,
|
|
4568
|
+
&num_running_flushes));
|
|
4273
4569
|
ASSERT_EQ(num_running_flushes, 1);
|
|
4274
4570
|
// This second sync point is to ensure the flush job will not
|
|
4275
4571
|
// be completed until we already perform VerifyOperationCount().
|
|
@@ -4314,13 +4610,13 @@ TEST_P(DBTestWithParam, ThreadStatusSingleCompaction) {
|
|
|
4314
4610
|
ASSERT_OK(Put(ToString(key + file * kEntriesPerBuffer),
|
|
4315
4611
|
rnd.RandomString(kTestValueSize)));
|
|
4316
4612
|
}
|
|
4317
|
-
Flush();
|
|
4613
|
+
ASSERT_OK(Flush());
|
|
4318
4614
|
}
|
|
4319
4615
|
// This makes sure a compaction won't be scheduled until
|
|
4320
4616
|
// we have done with the above Put Phase.
|
|
4321
4617
|
uint64_t num_running_compactions = 0;
|
|
4322
|
-
db_->GetIntProperty(DB::Properties::kNumRunningCompactions,
|
|
4323
|
-
|
|
4618
|
+
ASSERT_TRUE(db_->GetIntProperty(DB::Properties::kNumRunningCompactions,
|
|
4619
|
+
&num_running_compactions));
|
|
4324
4620
|
ASSERT_EQ(num_running_compactions, 0);
|
|
4325
4621
|
TEST_SYNC_POINT("DBTest::ThreadStatusSingleCompaction:0");
|
|
4326
4622
|
ASSERT_GE(NumTableFilesAtLevel(0),
|
|
@@ -4336,8 +4632,8 @@ TEST_P(DBTestWithParam, ThreadStatusSingleCompaction) {
|
|
|
4336
4632
|
// If thread tracking is not enabled, compaction count should be 0.
|
|
4337
4633
|
VerifyOperationCount(env_, ThreadStatus::OP_COMPACTION, 0);
|
|
4338
4634
|
}
|
|
4339
|
-
db_->GetIntProperty(DB::Properties::kNumRunningCompactions,
|
|
4340
|
-
|
|
4635
|
+
ASSERT_TRUE(db_->GetIntProperty(DB::Properties::kNumRunningCompactions,
|
|
4636
|
+
&num_running_compactions));
|
|
4341
4637
|
ASSERT_EQ(num_running_compactions, 1);
|
|
4342
4638
|
// TODO(yhchiang): adding assert to verify each compaction stage.
|
|
4343
4639
|
TEST_SYNC_POINT("DBTest::ThreadStatusSingleCompaction:2");
|
|
@@ -4383,7 +4679,9 @@ TEST_P(DBTestWithParam, PreShutdownManualCompaction) {
|
|
|
4383
4679
|
MakeTables(1, "a", "z", 1);
|
|
4384
4680
|
ASSERT_EQ("1,0,2", FilesPerLevel(1));
|
|
4385
4681
|
CancelAllBackgroundWork(db_);
|
|
4386
|
-
|
|
4682
|
+
ASSERT_TRUE(
|
|
4683
|
+
db_->CompactRange(CompactRangeOptions(), handles_[1], nullptr, nullptr)
|
|
4684
|
+
.IsShutdownInProgress());
|
|
4387
4685
|
ASSERT_EQ("1,0,2", FilesPerLevel(1));
|
|
4388
4686
|
|
|
4389
4687
|
if (iter == 0) {
|
|
@@ -4463,7 +4761,7 @@ TEST_P(DBTestWithParam, PreShutdownMultipleCompaction) {
|
|
|
4463
4761
|
ASSERT_OK(Put(ToString(key++), rnd.RandomString(kTestValueSize)));
|
|
4464
4762
|
}
|
|
4465
4763
|
|
|
4466
|
-
|
|
4764
|
+
ASSERT_OK(env_->GetThreadList(&thread_list));
|
|
4467
4765
|
for (auto thread : thread_list) {
|
|
4468
4766
|
operation_count[thread.operation_type]++;
|
|
4469
4767
|
}
|
|
@@ -4483,12 +4781,12 @@ TEST_P(DBTestWithParam, PreShutdownMultipleCompaction) {
|
|
|
4483
4781
|
ASSERT_GE(operation_count[ThreadStatus::OP_COMPACTION], 1);
|
|
4484
4782
|
CancelAllBackgroundWork(db_);
|
|
4485
4783
|
TEST_SYNC_POINT("DBTest::PreShutdownMultipleCompaction:VerifyPreshutdown");
|
|
4486
|
-
dbfull()->TEST_WaitForCompact();
|
|
4784
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4487
4785
|
// Record the number of compactions at a time.
|
|
4488
4786
|
for (int i = 0; i < ThreadStatus::NUM_OP_TYPES; ++i) {
|
|
4489
4787
|
operation_count[i] = 0;
|
|
4490
4788
|
}
|
|
4491
|
-
|
|
4789
|
+
ASSERT_OK(env_->GetThreadList(&thread_list));
|
|
4492
4790
|
for (auto thread : thread_list) {
|
|
4493
4791
|
operation_count[thread.operation_type]++;
|
|
4494
4792
|
}
|
|
@@ -4550,7 +4848,7 @@ TEST_P(DBTestWithParam, PreShutdownCompactionMiddle) {
|
|
|
4550
4848
|
ASSERT_OK(Put(ToString(key++), rnd.RandomString(kTestValueSize)));
|
|
4551
4849
|
}
|
|
4552
4850
|
|
|
4553
|
-
|
|
4851
|
+
ASSERT_OK(env_->GetThreadList(&thread_list));
|
|
4554
4852
|
for (auto thread : thread_list) {
|
|
4555
4853
|
operation_count[thread.operation_type]++;
|
|
4556
4854
|
}
|
|
@@ -4570,12 +4868,12 @@ TEST_P(DBTestWithParam, PreShutdownCompactionMiddle) {
|
|
|
4570
4868
|
CancelAllBackgroundWork(db_);
|
|
4571
4869
|
TEST_SYNC_POINT("DBTest::PreShutdownCompactionMiddle:Preshutdown");
|
|
4572
4870
|
TEST_SYNC_POINT("DBTest::PreShutdownCompactionMiddle:VerifyPreshutdown");
|
|
4573
|
-
dbfull()->TEST_WaitForCompact();
|
|
4871
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4574
4872
|
// Record the number of compactions at a time.
|
|
4575
4873
|
for (int i = 0; i < ThreadStatus::NUM_OP_TYPES; ++i) {
|
|
4576
4874
|
operation_count[i] = 0;
|
|
4577
4875
|
}
|
|
4578
|
-
|
|
4876
|
+
ASSERT_OK(env_->GetThreadList(&thread_list));
|
|
4579
4877
|
for (auto thread : thread_list) {
|
|
4580
4878
|
operation_count[thread.operation_type]++;
|
|
4581
4879
|
}
|
|
@@ -4635,8 +4933,8 @@ TEST_F(DBTest, DynamicLevelCompressionPerLevel) {
|
|
|
4635
4933
|
for (int i = 0; i < 20; i++) {
|
|
4636
4934
|
ASSERT_OK(Put(Key(keys[i]), CompressibleString(&rnd, 4000)));
|
|
4637
4935
|
}
|
|
4638
|
-
Flush();
|
|
4639
|
-
dbfull()->TEST_WaitForCompact();
|
|
4936
|
+
ASSERT_OK(Flush());
|
|
4937
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4640
4938
|
|
|
4641
4939
|
ASSERT_EQ(NumTableFilesAtLevel(1), 0);
|
|
4642
4940
|
ASSERT_EQ(NumTableFilesAtLevel(2), 0);
|
|
@@ -4648,10 +4946,11 @@ TEST_F(DBTest, DynamicLevelCompressionPerLevel) {
|
|
|
4648
4946
|
for (int i = 21; i < 120; i++) {
|
|
4649
4947
|
ASSERT_OK(Put(Key(keys[i]), CompressibleString(&rnd, 4000)));
|
|
4650
4948
|
}
|
|
4651
|
-
Flush();
|
|
4652
|
-
dbfull()->TEST_WaitForCompact();
|
|
4949
|
+
ASSERT_OK(Flush());
|
|
4950
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4653
4951
|
ASSERT_EQ(NumTableFilesAtLevel(1), 0);
|
|
4654
4952
|
ASSERT_EQ(NumTableFilesAtLevel(2), 0);
|
|
4953
|
+
|
|
4655
4954
|
ASSERT_LT(SizeAtLevel(0) + SizeAtLevel(3) + SizeAtLevel(4),
|
|
4656
4955
|
120U * 4000U + 50U * 24);
|
|
4657
4956
|
// Make sure data in files in L3 is not compacted by removing all files
|
|
@@ -4698,7 +4997,7 @@ TEST_F(DBTest, DynamicLevelCompressionPerLevel2) {
|
|
|
4698
4997
|
options.level0_stop_writes_trigger = 2;
|
|
4699
4998
|
options.soft_pending_compaction_bytes_limit = 1024 * 1024;
|
|
4700
4999
|
options.target_file_size_base = 20;
|
|
4701
|
-
|
|
5000
|
+
options.env = env_;
|
|
4702
5001
|
options.level_compaction_dynamic_level_bytes = true;
|
|
4703
5002
|
options.max_bytes_for_level_base = 200;
|
|
4704
5003
|
options.max_bytes_for_level_multiplier = 8;
|
|
@@ -4737,14 +5036,14 @@ TEST_F(DBTest, DynamicLevelCompressionPerLevel2) {
|
|
|
4737
5036
|
std::string value = rnd.RandomString(200);
|
|
4738
5037
|
ASSERT_OK(Put(Key(keys[i]), value));
|
|
4739
5038
|
if (i % 25 == 24) {
|
|
4740
|
-
Flush();
|
|
4741
|
-
dbfull()->TEST_WaitForCompact();
|
|
5039
|
+
ASSERT_OK(Flush());
|
|
5040
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4742
5041
|
}
|
|
4743
5042
|
}
|
|
4744
5043
|
|
|
4745
|
-
Flush();
|
|
4746
|
-
dbfull()->TEST_WaitForFlushMemTable();
|
|
4747
|
-
dbfull()->TEST_WaitForCompact();
|
|
5044
|
+
ASSERT_OK(Flush());
|
|
5045
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
5046
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4748
5047
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
|
|
4749
5048
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
4750
5049
|
|
|
@@ -4782,8 +5081,8 @@ TEST_F(DBTest, DynamicLevelCompressionPerLevel2) {
|
|
|
4782
5081
|
std::string value = rnd.RandomString(200);
|
|
4783
5082
|
ASSERT_OK(Put(Key(keys[i]), value));
|
|
4784
5083
|
if (i % 100 == 99) {
|
|
4785
|
-
Flush();
|
|
4786
|
-
dbfull()->TEST_WaitForCompact();
|
|
5084
|
+
ASSERT_OK(Flush());
|
|
5085
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4787
5086
|
}
|
|
4788
5087
|
}
|
|
4789
5088
|
|
|
@@ -4833,7 +5132,7 @@ TEST_F(DBTest, DynamicCompactionOptions) {
|
|
|
4833
5132
|
for (int i = 0; i < size; i++) {
|
|
4834
5133
|
ASSERT_OK(Put(Key(start + stride * i), rnd.RandomString(1024)));
|
|
4835
5134
|
}
|
|
4836
|
-
dbfull()->TEST_WaitForFlushMemTable();
|
|
5135
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
4837
5136
|
};
|
|
4838
5137
|
|
|
4839
5138
|
// Write 3 files that have the same key range.
|
|
@@ -4844,7 +5143,7 @@ TEST_F(DBTest, DynamicCompactionOptions) {
|
|
|
4844
5143
|
gen_l0_kb(0, 64, 1);
|
|
4845
5144
|
ASSERT_EQ(NumTableFilesAtLevel(0), 2);
|
|
4846
5145
|
gen_l0_kb(0, 64, 1);
|
|
4847
|
-
dbfull()->TEST_WaitForCompact();
|
|
5146
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4848
5147
|
ASSERT_EQ("0,1", FilesPerLevel());
|
|
4849
5148
|
std::vector<LiveFileMetaData> metadata;
|
|
4850
5149
|
db_->GetLiveFilesMetaData(&metadata);
|
|
@@ -4863,7 +5162,7 @@ TEST_F(DBTest, DynamicCompactionOptions) {
|
|
|
4863
5162
|
gen_l0_kb(0, 64, 1);
|
|
4864
5163
|
ASSERT_EQ("1,1", FilesPerLevel());
|
|
4865
5164
|
gen_l0_kb(0, 64, 1);
|
|
4866
|
-
dbfull()->TEST_WaitForCompact();
|
|
5165
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4867
5166
|
ASSERT_EQ("0,2", FilesPerLevel());
|
|
4868
5167
|
metadata.clear();
|
|
4869
5168
|
db_->GetLiveFilesMetaData(&metadata);
|
|
@@ -4885,7 +5184,7 @@ TEST_F(DBTest, DynamicCompactionOptions) {
|
|
|
4885
5184
|
for (int i = 0; i < 96; ++i) {
|
|
4886
5185
|
gen_l0_kb(i, 64, 96);
|
|
4887
5186
|
}
|
|
4888
|
-
dbfull()->TEST_WaitForCompact();
|
|
5187
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4889
5188
|
ASSERT_GT(SizeAtLevel(1), k1MB / 2);
|
|
4890
5189
|
ASSERT_LT(SizeAtLevel(1), k1MB + k1MB / 2);
|
|
4891
5190
|
|
|
@@ -4906,7 +5205,7 @@ TEST_F(DBTest, DynamicCompactionOptions) {
|
|
|
4906
5205
|
for (int i = 0; i < 20; ++i) {
|
|
4907
5206
|
gen_l0_kb(i, 64, 32);
|
|
4908
5207
|
}
|
|
4909
|
-
dbfull()->TEST_WaitForCompact();
|
|
5208
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4910
5209
|
uint64_t total_size = SizeAtLevel(1) + SizeAtLevel(2) + SizeAtLevel(3);
|
|
4911
5210
|
ASSERT_TRUE(total_size < k128KB * 7 * 1.5);
|
|
4912
5211
|
|
|
@@ -4914,8 +5213,8 @@ TEST_F(DBTest, DynamicCompactionOptions) {
|
|
|
4914
5213
|
// Clean up memtable and L0. Block compaction threads. If continue to write
|
|
4915
5214
|
// and flush memtables. We should see put stop after 8 memtable flushes
|
|
4916
5215
|
// since level0_stop_writes_trigger = 8
|
|
4917
|
-
dbfull()->TEST_FlushMemTable(true, true);
|
|
4918
|
-
dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr);
|
|
5216
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable(true, true));
|
|
5217
|
+
ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
4919
5218
|
// Block compaction
|
|
4920
5219
|
test::SleepingBackgroundTask sleeping_task_low;
|
|
4921
5220
|
env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task_low,
|
|
@@ -4927,7 +5226,7 @@ TEST_F(DBTest, DynamicCompactionOptions) {
|
|
|
4927
5226
|
WriteOptions wo;
|
|
4928
5227
|
while (count < 64) {
|
|
4929
5228
|
ASSERT_OK(Put(Key(count), rnd.RandomString(1024), wo));
|
|
4930
|
-
dbfull()->TEST_FlushMemTable(true, true);
|
|
5229
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable(true, true));
|
|
4931
5230
|
count++;
|
|
4932
5231
|
if (dbfull()->TEST_write_controler().IsStopped()) {
|
|
4933
5232
|
sleeping_task_low.WakeUp();
|
|
@@ -4943,8 +5242,8 @@ TEST_F(DBTest, DynamicCompactionOptions) {
|
|
|
4943
5242
|
// Block compaction thread again. Perform the put and memtable flushes
|
|
4944
5243
|
// until we see the stop after 6 memtable flushes.
|
|
4945
5244
|
ASSERT_OK(dbfull()->SetOptions({{"level0_stop_writes_trigger", "6"}}));
|
|
4946
|
-
dbfull()->TEST_FlushMemTable(true);
|
|
4947
|
-
dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr);
|
|
5245
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable(true));
|
|
5246
|
+
ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
4948
5247
|
ASSERT_EQ(NumTableFilesAtLevel(0), 0);
|
|
4949
5248
|
|
|
4950
5249
|
// Block compaction again
|
|
@@ -4955,7 +5254,7 @@ TEST_F(DBTest, DynamicCompactionOptions) {
|
|
|
4955
5254
|
count = 0;
|
|
4956
5255
|
while (count < 64) {
|
|
4957
5256
|
ASSERT_OK(Put(Key(count), rnd.RandomString(1024), wo));
|
|
4958
|
-
dbfull()->TEST_FlushMemTable(true, true);
|
|
5257
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable(true, true));
|
|
4959
5258
|
count++;
|
|
4960
5259
|
if (dbfull()->TEST_write_controler().IsStopped()) {
|
|
4961
5260
|
sleeping_task_low.WakeUp();
|
|
@@ -4972,29 +5271,29 @@ TEST_F(DBTest, DynamicCompactionOptions) {
|
|
|
4972
5271
|
// disabled, then TEST_WaitForCompact will be waiting for nothing. Number of
|
|
4973
5272
|
// L0 files do not change after the call.
|
|
4974
5273
|
ASSERT_OK(dbfull()->SetOptions({{"disable_auto_compactions", "true"}}));
|
|
4975
|
-
dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr);
|
|
5274
|
+
ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
4976
5275
|
ASSERT_EQ(NumTableFilesAtLevel(0), 0);
|
|
4977
5276
|
|
|
4978
5277
|
for (int i = 0; i < 4; ++i) {
|
|
4979
5278
|
ASSERT_OK(Put(Key(i), rnd.RandomString(1024)));
|
|
4980
5279
|
// Wait for compaction so that put won't stop
|
|
4981
|
-
dbfull()->TEST_FlushMemTable(true);
|
|
5280
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable(true));
|
|
4982
5281
|
}
|
|
4983
|
-
dbfull()->TEST_WaitForCompact();
|
|
5282
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4984
5283
|
ASSERT_EQ(NumTableFilesAtLevel(0), 4);
|
|
4985
5284
|
|
|
4986
5285
|
// Enable auto compaction and perform the same test, # of L0 files should be
|
|
4987
5286
|
// reduced after compaction.
|
|
4988
5287
|
ASSERT_OK(dbfull()->SetOptions({{"disable_auto_compactions", "false"}}));
|
|
4989
|
-
dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr);
|
|
5288
|
+
ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
|
|
4990
5289
|
ASSERT_EQ(NumTableFilesAtLevel(0), 0);
|
|
4991
5290
|
|
|
4992
5291
|
for (int i = 0; i < 4; ++i) {
|
|
4993
5292
|
ASSERT_OK(Put(Key(i), rnd.RandomString(1024)));
|
|
4994
5293
|
// Wait for compaction so that put won't stop
|
|
4995
|
-
dbfull()->TEST_FlushMemTable(true);
|
|
5294
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable(true));
|
|
4996
5295
|
}
|
|
4997
|
-
dbfull()->TEST_WaitForCompact();
|
|
5296
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
4998
5297
|
ASSERT_LT(NumTableFilesAtLevel(0), 4);
|
|
4999
5298
|
}
|
|
5000
5299
|
|
|
@@ -5180,8 +5479,8 @@ TEST_F(DBTest, FileCreationRandomFailure) {
|
|
|
5180
5479
|
}
|
|
5181
5480
|
|
|
5182
5481
|
// If rocksdb does not do the correct job, internal assert will fail here.
|
|
5183
|
-
dbfull()->TEST_WaitForFlushMemTable();
|
|
5184
|
-
dbfull()->TEST_WaitForCompact();
|
|
5482
|
+
ASSERT_TRUE(dbfull()->TEST_WaitForFlushMemTable().IsIOError());
|
|
5483
|
+
ASSERT_TRUE(dbfull()->TEST_WaitForCompact().IsIOError());
|
|
5185
5484
|
|
|
5186
5485
|
// verify we have the latest successful update
|
|
5187
5486
|
for (int k = 0; k < kTestSize; ++k) {
|
|
@@ -5235,14 +5534,14 @@ TEST_F(DBTest, DynamicMiscOptions) {
|
|
|
5235
5534
|
|
|
5236
5535
|
ASSERT_OK(dbfull()->SetOptions({{"max_sequential_skip_in_iterations", "4"}}));
|
|
5237
5536
|
// Clear memtable and make new option effective
|
|
5238
|
-
dbfull()->TEST_FlushMemTable(true);
|
|
5537
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable(true));
|
|
5239
5538
|
// Trigger reseek
|
|
5240
5539
|
assert_reseek_count(200, 1);
|
|
5241
5540
|
|
|
5242
5541
|
ASSERT_OK(
|
|
5243
5542
|
dbfull()->SetOptions({{"max_sequential_skip_in_iterations", "16"}}));
|
|
5244
5543
|
// Clear memtable and make new option effective
|
|
5245
|
-
dbfull()->TEST_FlushMemTable(true);
|
|
5544
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable(true));
|
|
5246
5545
|
// No reseek
|
|
5247
5546
|
assert_reseek_count(300, 1);
|
|
5248
5547
|
|
|
@@ -5296,41 +5595,45 @@ TEST_F(DBTest, DynamicMiscOptions) {
|
|
|
5296
5595
|
#endif // ROCKSDB_LITE
|
|
5297
5596
|
|
|
5298
5597
|
TEST_F(DBTest, L0L1L2AndUpHitCounter) {
|
|
5598
|
+
const int kNumLevels = 3;
|
|
5599
|
+
const int kNumKeysPerLevel = 10000;
|
|
5600
|
+
const int kNumKeysPerDb = kNumLevels * kNumKeysPerLevel;
|
|
5601
|
+
|
|
5299
5602
|
Options options = CurrentOptions();
|
|
5300
|
-
options.write_buffer_size = 32 * 1024;
|
|
5301
|
-
options.target_file_size_base = 32 * 1024;
|
|
5302
|
-
options.level0_file_num_compaction_trigger = 2;
|
|
5303
|
-
options.level0_slowdown_writes_trigger = 2;
|
|
5304
|
-
options.level0_stop_writes_trigger = 4;
|
|
5305
|
-
options.max_bytes_for_level_base = 64 * 1024;
|
|
5306
|
-
options.max_write_buffer_number = 2;
|
|
5307
|
-
options.max_background_compactions = 8;
|
|
5308
|
-
options.max_background_flushes = 8;
|
|
5309
5603
|
options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
|
|
5310
|
-
|
|
5604
|
+
Reopen(options);
|
|
5311
5605
|
|
|
5312
|
-
|
|
5313
|
-
|
|
5314
|
-
|
|
5606
|
+
// After the below loop there will be one file on each of L0, L1, and L2.
|
|
5607
|
+
int key = 0;
|
|
5608
|
+
for (int output_level = kNumLevels - 1; output_level >= 0; --output_level) {
|
|
5609
|
+
for (int i = 0; i < kNumKeysPerLevel; ++i) {
|
|
5610
|
+
ASSERT_OK(Put(Key(key), "val"));
|
|
5611
|
+
key++;
|
|
5612
|
+
}
|
|
5613
|
+
ASSERT_OK(Flush());
|
|
5614
|
+
for (int input_level = 0; input_level < output_level; ++input_level) {
|
|
5615
|
+
// `TEST_CompactRange(input_level, ...)` compacts from `input_level` to
|
|
5616
|
+
// `input_level + 1`.
|
|
5617
|
+
ASSERT_OK(dbfull()->TEST_CompactRange(input_level, nullptr, nullptr));
|
|
5618
|
+
}
|
|
5315
5619
|
}
|
|
5620
|
+
assert(key == kNumKeysPerDb);
|
|
5621
|
+
|
|
5316
5622
|
ASSERT_EQ(0, TestGetTickerCount(options, GET_HIT_L0));
|
|
5317
5623
|
ASSERT_EQ(0, TestGetTickerCount(options, GET_HIT_L1));
|
|
5318
5624
|
ASSERT_EQ(0, TestGetTickerCount(options, GET_HIT_L2_AND_UP));
|
|
5319
5625
|
|
|
5320
|
-
|
|
5321
|
-
|
|
5322
|
-
|
|
5323
|
-
for (int i = 0; i < numkeys; i++) {
|
|
5324
|
-
ASSERT_EQ(Get(1, Key(i)), "val");
|
|
5626
|
+
for (int i = 0; i < kNumKeysPerDb; i++) {
|
|
5627
|
+
ASSERT_EQ(Get(Key(i)), "val");
|
|
5325
5628
|
}
|
|
5326
5629
|
|
|
5327
|
-
|
|
5328
|
-
|
|
5329
|
-
|
|
5630
|
+
ASSERT_EQ(kNumKeysPerLevel, TestGetTickerCount(options, GET_HIT_L0));
|
|
5631
|
+
ASSERT_EQ(kNumKeysPerLevel, TestGetTickerCount(options, GET_HIT_L1));
|
|
5632
|
+
ASSERT_EQ(kNumKeysPerLevel, TestGetTickerCount(options, GET_HIT_L2_AND_UP));
|
|
5330
5633
|
|
|
5331
|
-
ASSERT_EQ(
|
|
5332
|
-
|
|
5333
|
-
|
|
5634
|
+
ASSERT_EQ(kNumKeysPerDb, TestGetTickerCount(options, GET_HIT_L0) +
|
|
5635
|
+
TestGetTickerCount(options, GET_HIT_L1) +
|
|
5636
|
+
TestGetTickerCount(options, GET_HIT_L2_AND_UP));
|
|
5334
5637
|
}
|
|
5335
5638
|
|
|
5336
5639
|
TEST_F(DBTest, EncodeDecompressedBlockSizeTest) {
|
|
@@ -5401,12 +5704,20 @@ TEST_F(DBTest, CloseSpeedup) {
|
|
|
5401
5704
|
&sleeping_task_high, Env::Priority::HIGH);
|
|
5402
5705
|
|
|
5403
5706
|
std::vector<std::string> filenames;
|
|
5404
|
-
env_->GetChildren(dbname_, &filenames);
|
|
5707
|
+
ASSERT_OK(env_->GetChildren(dbname_, &filenames));
|
|
5708
|
+
// In Windows, LOCK file cannot be deleted because it is locked by db_test
|
|
5709
|
+
// After closing db_test, the LOCK file is unlocked and can be deleted
|
|
5405
5710
|
// Delete archival files.
|
|
5711
|
+
bool deleteDir = true;
|
|
5406
5712
|
for (size_t i = 0; i < filenames.size(); ++i) {
|
|
5407
|
-
env_->DeleteFile(dbname_ + "/" + filenames[i]);
|
|
5713
|
+
Status s = env_->DeleteFile(dbname_ + "/" + filenames[i]);
|
|
5714
|
+
if (!s.ok()) {
|
|
5715
|
+
deleteDir = false;
|
|
5716
|
+
}
|
|
5717
|
+
}
|
|
5718
|
+
if (deleteDir) {
|
|
5719
|
+
ASSERT_OK(env_->DeleteDir(dbname_));
|
|
5408
5720
|
}
|
|
5409
|
-
env_->DeleteDir(dbname_);
|
|
5410
5721
|
DestroyAndReopen(options);
|
|
5411
5722
|
|
|
5412
5723
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
@@ -5470,7 +5781,7 @@ TEST_F(DBTest, MergeTestTime) {
|
|
|
5470
5781
|
// NOTE: Presumed unnecessary and removed: resetting mock time in env
|
|
5471
5782
|
|
|
5472
5783
|
ASSERT_EQ(TestGetTickerCount(options, MERGE_OPERATION_TOTAL_TIME), 0);
|
|
5473
|
-
db_->Put(WriteOptions(), "foo", one);
|
|
5784
|
+
ASSERT_OK(db_->Put(WriteOptions(), "foo", one));
|
|
5474
5785
|
ASSERT_OK(Flush());
|
|
5475
5786
|
ASSERT_OK(db_->Merge(WriteOptions(), "foo", two));
|
|
5476
5787
|
ASSERT_OK(Flush());
|
|
@@ -5481,7 +5792,7 @@ TEST_F(DBTest, MergeTestTime) {
|
|
|
5481
5792
|
opt.verify_checksums = true;
|
|
5482
5793
|
opt.snapshot = nullptr;
|
|
5483
5794
|
std::string result;
|
|
5484
|
-
db_->Get(opt, "foo", &result);
|
|
5795
|
+
ASSERT_OK(db_->Get(opt, "foo", &result));
|
|
5485
5796
|
|
|
5486
5797
|
ASSERT_EQ(2000000, TestGetTickerCount(options, MERGE_OPERATION_TOTAL_TIME));
|
|
5487
5798
|
|
|
@@ -5517,7 +5828,7 @@ TEST_P(DBTestWithParam, MergeCompactionTimeTest) {
|
|
|
5517
5828
|
ASSERT_OK(db_->Merge(WriteOptions(), "foo", "TEST"));
|
|
5518
5829
|
ASSERT_OK(Flush());
|
|
5519
5830
|
}
|
|
5520
|
-
dbfull()->TEST_WaitForFlushMemTable();
|
|
5831
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
5521
5832
|
|
|
5522
5833
|
CompactRangeOptions cro;
|
|
5523
5834
|
cro.exclusive_manual_compaction = exclusive_manual_compaction_;
|
|
@@ -5543,10 +5854,10 @@ TEST_P(DBTestWithParam, FilterCompactionTimeTest) {
|
|
|
5543
5854
|
// put some data
|
|
5544
5855
|
for (int table = 0; table < 4; ++table) {
|
|
5545
5856
|
for (int i = 0; i < 10 + table; ++i) {
|
|
5546
|
-
Put(ToString(table * 100 + i), "val");
|
|
5857
|
+
ASSERT_OK(Put(ToString(table * 100 + i), "val"));
|
|
5547
5858
|
++n;
|
|
5548
5859
|
}
|
|
5549
|
-
Flush();
|
|
5860
|
+
ASSERT_OK(Flush());
|
|
5550
5861
|
}
|
|
5551
5862
|
|
|
5552
5863
|
CompactRangeOptions cro;
|
|
@@ -5558,6 +5869,7 @@ TEST_P(DBTestWithParam, FilterCompactionTimeTest) {
|
|
|
5558
5869
|
|
|
5559
5870
|
Iterator* itr = db_->NewIterator(ReadOptions());
|
|
5560
5871
|
itr->SeekToFirst();
|
|
5872
|
+
ASSERT_OK(itr->status());
|
|
5561
5873
|
ASSERT_EQ(uint64_t{n} * 1000000U,
|
|
5562
5874
|
TestGetTickerCount(options, FILTER_OPERATION_TOTAL_TIME));
|
|
5563
5875
|
delete itr;
|
|
@@ -5572,7 +5884,7 @@ TEST_F(DBTest, TestLogCleanup) {
|
|
|
5572
5884
|
Reopen(options);
|
|
5573
5885
|
|
|
5574
5886
|
for (int i = 0; i < 100000; ++i) {
|
|
5575
|
-
Put(Key(i), "val");
|
|
5887
|
+
ASSERT_OK(Put(Key(i), "val"));
|
|
5576
5888
|
// only 2 memtables will be alive, so logs_to_free needs to always be below
|
|
5577
5889
|
// 2
|
|
5578
5890
|
ASSERT_LT(dbfull()->TEST_LogsToFreeSize(), static_cast<size_t>(3));
|
|
@@ -5613,8 +5925,8 @@ TEST_F(DBTest, DISABLED_SuggestCompactRangeTest) {
|
|
|
5613
5925
|
};
|
|
5614
5926
|
|
|
5615
5927
|
Options options = CurrentOptions();
|
|
5616
|
-
options.memtable_factory.reset(
|
|
5617
|
-
|
|
5928
|
+
options.memtable_factory.reset(test::NewSpecialSkipListFactory(
|
|
5929
|
+
DBTestBase::kNumKeysByGenerateNewRandomFile));
|
|
5618
5930
|
options.compaction_style = kCompactionStyleLevel;
|
|
5619
5931
|
options.compaction_filter_factory.reset(
|
|
5620
5932
|
new CompactionFilterFactoryGetContext());
|
|
@@ -5670,7 +5982,7 @@ TEST_F(DBTest, DISABLED_SuggestCompactRangeTest) {
|
|
|
5670
5982
|
// compact it three times
|
|
5671
5983
|
for (int i = 0; i < 3; ++i) {
|
|
5672
5984
|
ASSERT_OK(experimental::SuggestCompactRange(db_, nullptr, nullptr));
|
|
5673
|
-
dbfull()->TEST_WaitForCompact();
|
|
5985
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
5674
5986
|
}
|
|
5675
5987
|
|
|
5676
5988
|
// All files are compacted
|
|
@@ -5683,7 +5995,7 @@ TEST_F(DBTest, DISABLED_SuggestCompactRangeTest) {
|
|
|
5683
5995
|
// nonoverlapping with the file on level 0
|
|
5684
5996
|
Slice start("a"), end("b");
|
|
5685
5997
|
ASSERT_OK(experimental::SuggestCompactRange(db_, &start, &end));
|
|
5686
|
-
dbfull()->TEST_WaitForCompact();
|
|
5998
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
5687
5999
|
|
|
5688
6000
|
// should not compact the level 0 file
|
|
5689
6001
|
ASSERT_EQ(1, NumTableFilesAtLevel(0));
|
|
@@ -5691,7 +6003,7 @@ TEST_F(DBTest, DISABLED_SuggestCompactRangeTest) {
|
|
|
5691
6003
|
start = Slice("j");
|
|
5692
6004
|
end = Slice("m");
|
|
5693
6005
|
ASSERT_OK(experimental::SuggestCompactRange(db_, &start, &end));
|
|
5694
|
-
dbfull()->TEST_WaitForCompact();
|
|
6006
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
5695
6007
|
ASSERT_TRUE(CompactionFilterFactoryGetContext::IsManual(
|
|
5696
6008
|
options.compaction_filter_factory.get()));
|
|
5697
6009
|
|
|
@@ -5779,7 +6091,7 @@ TEST_F(DBTest, CompactRangeWithEmptyBottomLevel) {
|
|
|
5779
6091
|
Random rnd(301);
|
|
5780
6092
|
for (int i = 0; i < kNumL0Files; ++i) {
|
|
5781
6093
|
ASSERT_OK(Put(Key(0), rnd.RandomString(1024)));
|
|
5782
|
-
Flush();
|
|
6094
|
+
ASSERT_OK(Flush());
|
|
5783
6095
|
}
|
|
5784
6096
|
ASSERT_EQ(NumTableFilesAtLevel(0), kNumL0Files);
|
|
5785
6097
|
ASSERT_EQ(NumTableFilesAtLevel(1), 0);
|
|
@@ -5843,7 +6155,7 @@ TEST_F(DBTest, AutomaticConflictsWithManualCompaction) {
|
|
|
5843
6155
|
}
|
|
5844
6156
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
|
|
5845
6157
|
manual_compaction_thread.join();
|
|
5846
|
-
dbfull()->TEST_WaitForCompact();
|
|
6158
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
5847
6159
|
}
|
|
5848
6160
|
|
|
5849
6161
|
#ifndef ROCKSDB_LITE
|
|
@@ -5883,6 +6195,7 @@ TEST_F(DBTest, CompactFilesShouldTriggerAutoCompaction) {
|
|
|
5883
6195
|
port::Thread manual_compaction_thread([&]() {
|
|
5884
6196
|
auto s = db_->CompactFiles(CompactionOptions(),
|
|
5885
6197
|
db_->DefaultColumnFamily(), input_files, 0);
|
|
6198
|
+
ASSERT_OK(s);
|
|
5886
6199
|
});
|
|
5887
6200
|
|
|
5888
6201
|
TEST_SYNC_POINT(
|
|
@@ -5901,7 +6214,7 @@ TEST_F(DBTest, CompactFilesShouldTriggerAutoCompaction) {
|
|
|
5901
6214
|
"DBTest::CompactFilesShouldTriggerAutoCompaction:End");
|
|
5902
6215
|
|
|
5903
6216
|
manual_compaction_thread.join();
|
|
5904
|
-
dbfull()->TEST_WaitForCompact();
|
|
6217
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
5905
6218
|
|
|
5906
6219
|
db_->GetColumnFamilyMetaData(db_->DefaultColumnFamily(), &cf_meta_data);
|
|
5907
6220
|
ASSERT_LE(cf_meta_data.levels[0].files.size(),
|
|
@@ -5926,7 +6239,7 @@ TEST_F(DBTest, LargeBatchWithColumnFamilies) {
|
|
|
5926
6239
|
for (;;) {
|
|
5927
6240
|
std::string data(3000, j++ % 127 + 20);
|
|
5928
6241
|
data += ToString(j);
|
|
5929
|
-
batch.Put(handles_[0], Slice(data), Slice(data));
|
|
6242
|
+
ASSERT_OK(batch.Put(handles_[0], Slice(data), Slice(data)));
|
|
5930
6243
|
if (batch.GetDataSize() > write_size) {
|
|
5931
6244
|
break;
|
|
5932
6245
|
}
|
|
@@ -6019,7 +6332,7 @@ TEST_F(DBTest, DelayedWriteRate) {
|
|
|
6019
6332
|
options.level0_stop_writes_trigger = 999999;
|
|
6020
6333
|
options.delayed_write_rate = 20000000; // Start with 200MB/s
|
|
6021
6334
|
options.memtable_factory.reset(
|
|
6022
|
-
|
|
6335
|
+
test::NewSpecialSkipListFactory(kEntriesPerMemTable));
|
|
6023
6336
|
|
|
6024
6337
|
SetTimeElapseOnlySleepOnReopen(&options);
|
|
6025
6338
|
CreateAndReopenWithCF({"pikachu"}, options);
|
|
@@ -6030,14 +6343,14 @@ TEST_F(DBTest, DelayedWriteRate) {
|
|
|
6030
6343
|
Env::Priority::LOW);
|
|
6031
6344
|
|
|
6032
6345
|
for (int i = 0; i < 3; i++) {
|
|
6033
|
-
Put(Key(i), std::string(10000, 'x'));
|
|
6034
|
-
Flush();
|
|
6346
|
+
ASSERT_OK(Put(Key(i), std::string(10000, 'x')));
|
|
6347
|
+
ASSERT_OK(Flush());
|
|
6035
6348
|
}
|
|
6036
6349
|
|
|
6037
6350
|
// These writes will be slowed down to 1KB/s
|
|
6038
6351
|
uint64_t estimated_sleep_time = 0;
|
|
6039
6352
|
Random rnd(301);
|
|
6040
|
-
Put("", "");
|
|
6353
|
+
ASSERT_OK(Put("", ""));
|
|
6041
6354
|
uint64_t cur_rate = options.delayed_write_rate;
|
|
6042
6355
|
for (int i = 0; i < kTotalFlushes; i++) {
|
|
6043
6356
|
uint64_t size_memtable = 0;
|
|
@@ -6046,14 +6359,14 @@ TEST_F(DBTest, DelayedWriteRate) {
|
|
|
6046
6359
|
// Spread the size range to more.
|
|
6047
6360
|
size_t entry_size = rand_num * rand_num * rand_num;
|
|
6048
6361
|
WriteOptions wo;
|
|
6049
|
-
Put(Key(i), std::string(entry_size, 'x'), wo);
|
|
6362
|
+
ASSERT_OK(Put(Key(i), std::string(entry_size, 'x'), wo));
|
|
6050
6363
|
size_memtable += entry_size + 18;
|
|
6051
6364
|
// Occasionally sleep a while
|
|
6052
6365
|
if (rnd.Uniform(20) == 6) {
|
|
6053
6366
|
env_->SleepForMicroseconds(2666);
|
|
6054
6367
|
}
|
|
6055
6368
|
}
|
|
6056
|
-
dbfull()->TEST_WaitForFlushMemTable();
|
|
6369
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
6057
6370
|
estimated_sleep_time += size_memtable * 1000000u / cur_rate;
|
|
6058
6371
|
// Slow down twice. One for memtable switch and one for flush finishes.
|
|
6059
6372
|
cur_rate = static_cast<uint64_t>(static_cast<double>(cur_rate) *
|
|
@@ -6082,7 +6395,7 @@ TEST_F(DBTest, HardLimit) {
|
|
|
6082
6395
|
options.max_bytes_for_level_base = 10000000000u;
|
|
6083
6396
|
options.max_background_compactions = 1;
|
|
6084
6397
|
options.memtable_factory.reset(
|
|
6085
|
-
|
|
6398
|
+
test::NewSpecialSkipListFactory(KNumKeysByGenerateNewFile - 1));
|
|
6086
6399
|
|
|
6087
6400
|
env_->SetBackgroundThreads(1, Env::LOW);
|
|
6088
6401
|
test::SleepingBackgroundTask sleeping_task_low;
|
|
@@ -6103,14 +6416,14 @@ TEST_F(DBTest, HardLimit) {
|
|
|
6103
6416
|
int key_idx = 0;
|
|
6104
6417
|
for (int num = 0; num < 5; num++) {
|
|
6105
6418
|
GenerateNewFile(&rnd, &key_idx, true);
|
|
6106
|
-
dbfull()->TEST_WaitForFlushMemTable();
|
|
6419
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
6107
6420
|
}
|
|
6108
6421
|
|
|
6109
6422
|
ASSERT_EQ(0, callback_count.load());
|
|
6110
6423
|
|
|
6111
6424
|
for (int num = 0; num < 5; num++) {
|
|
6112
6425
|
GenerateNewFile(&rnd, &key_idx, true);
|
|
6113
|
-
dbfull()->TEST_WaitForFlushMemTable();
|
|
6426
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
6114
6427
|
}
|
|
6115
6428
|
ASSERT_GE(callback_count.load(), 1);
|
|
6116
6429
|
|
|
@@ -6192,25 +6505,25 @@ TEST_F(DBTest, SoftLimit) {
|
|
|
6192
6505
|
|
|
6193
6506
|
// Generating 360KB in Level 3
|
|
6194
6507
|
for (int i = 0; i < 72; i++) {
|
|
6195
|
-
Put(Key(i), std::string(5000, 'x'));
|
|
6508
|
+
ASSERT_OK(Put(Key(i), std::string(5000, 'x')));
|
|
6196
6509
|
if (i % 10 == 0) {
|
|
6197
|
-
dbfull()->TEST_FlushMemTable(true, true);
|
|
6510
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable(true, true));
|
|
6198
6511
|
}
|
|
6199
6512
|
}
|
|
6200
|
-
dbfull()->TEST_WaitForCompact();
|
|
6513
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
6201
6514
|
MoveFilesToLevel(3);
|
|
6202
6515
|
|
|
6203
6516
|
// Generating 360KB in Level 2
|
|
6204
6517
|
for (int i = 0; i < 72; i++) {
|
|
6205
|
-
Put(Key(i), std::string(5000, 'x'));
|
|
6518
|
+
ASSERT_OK(Put(Key(i), std::string(5000, 'x')));
|
|
6206
6519
|
if (i % 10 == 0) {
|
|
6207
|
-
dbfull()->TEST_FlushMemTable(true, true);
|
|
6520
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable(true, true));
|
|
6208
6521
|
}
|
|
6209
6522
|
}
|
|
6210
|
-
dbfull()->TEST_WaitForCompact();
|
|
6523
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
6211
6524
|
MoveFilesToLevel(2);
|
|
6212
6525
|
|
|
6213
|
-
Put(Key(0), "");
|
|
6526
|
+
ASSERT_OK(Put(Key(0), ""));
|
|
6214
6527
|
|
|
6215
6528
|
test::SleepingBackgroundTask sleeping_task_low;
|
|
6216
6529
|
// Block compactions
|
|
@@ -6220,11 +6533,11 @@ TEST_F(DBTest, SoftLimit) {
|
|
|
6220
6533
|
|
|
6221
6534
|
// Create 3 L0 files, making score of L0 to be 3.
|
|
6222
6535
|
for (int i = 0; i < 3; i++) {
|
|
6223
|
-
Put(Key(i), std::string(5000, 'x'));
|
|
6224
|
-
Put(Key(100 - i), std::string(5000, 'x'));
|
|
6536
|
+
ASSERT_OK(Put(Key(i), std::string(5000, 'x')));
|
|
6537
|
+
ASSERT_OK(Put(Key(100 - i), std::string(5000, 'x')));
|
|
6225
6538
|
// Flush the file. File size is around 30KB.
|
|
6226
6539
|
InstallFlushCallback();
|
|
6227
|
-
dbfull()->TEST_FlushMemTable(true, true);
|
|
6540
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable(true, true));
|
|
6228
6541
|
WaitForFlush();
|
|
6229
6542
|
}
|
|
6230
6543
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
|
@@ -6233,9 +6546,13 @@ TEST_F(DBTest, SoftLimit) {
|
|
|
6233
6546
|
sleeping_task_low.WakeUp();
|
|
6234
6547
|
sleeping_task_low.WaitUntilDone();
|
|
6235
6548
|
sleeping_task_low.Reset();
|
|
6236
|
-
dbfull()->TEST_WaitForCompact();
|
|
6549
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
6237
6550
|
|
|
6238
6551
|
// Now there is one L1 file but doesn't trigger soft_rate_limit
|
|
6552
|
+
//
|
|
6553
|
+
// TODO: soft_rate_limit is depreciated. If this test
|
|
6554
|
+
// relies on soft_rate_limit, then we need to change the test.
|
|
6555
|
+
//
|
|
6239
6556
|
// The L1 file size is around 30KB.
|
|
6240
6557
|
ASSERT_EQ(NumTableFilesAtLevel(1), 1);
|
|
6241
6558
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
|
@@ -6255,11 +6572,11 @@ TEST_F(DBTest, SoftLimit) {
|
|
|
6255
6572
|
sleeping_task_low.WaitUntilSleeping();
|
|
6256
6573
|
// Create 3 L0 files, making score of L0 to be 3
|
|
6257
6574
|
for (int i = 0; i < 3; i++) {
|
|
6258
|
-
Put(Key(10 + i), std::string(5000, 'x'));
|
|
6259
|
-
Put(Key(90 - i), std::string(5000, 'x'));
|
|
6575
|
+
ASSERT_OK(Put(Key(10 + i), std::string(5000, 'x')));
|
|
6576
|
+
ASSERT_OK(Put(Key(90 - i), std::string(5000, 'x')));
|
|
6260
6577
|
// Flush the file. File size is around 30KB.
|
|
6261
6578
|
InstallFlushCallback();
|
|
6262
|
-
dbfull()->TEST_FlushMemTable(true, true);
|
|
6579
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable(true, true));
|
|
6263
6580
|
WaitForFlush();
|
|
6264
6581
|
}
|
|
6265
6582
|
|
|
@@ -6278,11 +6595,11 @@ TEST_F(DBTest, SoftLimit) {
|
|
|
6278
6595
|
|
|
6279
6596
|
// Create 3 L0 files, making score of L0 to be 3, higher than L0.
|
|
6280
6597
|
for (int i = 0; i < 3; i++) {
|
|
6281
|
-
Put(Key(20 + i), std::string(5000, 'x'));
|
|
6282
|
-
Put(Key(80 - i), std::string(5000, 'x'));
|
|
6598
|
+
ASSERT_OK(Put(Key(20 + i), std::string(5000, 'x')));
|
|
6599
|
+
ASSERT_OK(Put(Key(80 - i), std::string(5000, 'x')));
|
|
6283
6600
|
// Flush the file. File size is around 30KB.
|
|
6284
6601
|
InstallFlushCallback();
|
|
6285
|
-
dbfull()->TEST_FlushMemTable(true, true);
|
|
6602
|
+
ASSERT_OK(dbfull()->TEST_FlushMemTable(true, true));
|
|
6286
6603
|
WaitForFlush();
|
|
6287
6604
|
}
|
|
6288
6605
|
// Wake up sleep task to enable compaction to run and waits
|
|
@@ -6310,8 +6627,8 @@ TEST_F(DBTest, SoftLimit) {
|
|
|
6310
6627
|
{"max_bytes_for_level_base", "5000"},
|
|
6311
6628
|
}));
|
|
6312
6629
|
|
|
6313
|
-
Put("", "");
|
|
6314
|
-
Flush();
|
|
6630
|
+
ASSERT_OK(Put("", ""));
|
|
6631
|
+
ASSERT_OK(Flush());
|
|
6315
6632
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
|
6316
6633
|
ASSERT_TRUE(listener->CheckCondition(WriteStallCondition::kDelayed));
|
|
6317
6634
|
|
|
@@ -6331,7 +6648,7 @@ TEST_F(DBTest, LastWriteBufferDelay) {
|
|
|
6331
6648
|
options.disable_auto_compactions = true;
|
|
6332
6649
|
int kNumKeysPerMemtable = 3;
|
|
6333
6650
|
options.memtable_factory.reset(
|
|
6334
|
-
|
|
6651
|
+
test::NewSpecialSkipListFactory(kNumKeysPerMemtable));
|
|
6335
6652
|
|
|
6336
6653
|
Reopen(options);
|
|
6337
6654
|
test::SleepingBackgroundTask sleeping_task;
|
|
@@ -6344,12 +6661,12 @@ TEST_F(DBTest, LastWriteBufferDelay) {
|
|
|
6344
6661
|
for (int i = 0; i < 3; i++) {
|
|
6345
6662
|
// Fill one mem table
|
|
6346
6663
|
for (int j = 0; j < kNumKeysPerMemtable; j++) {
|
|
6347
|
-
Put(Key(j), "");
|
|
6664
|
+
ASSERT_OK(Put(Key(j), ""));
|
|
6348
6665
|
}
|
|
6349
6666
|
ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
|
|
6350
6667
|
}
|
|
6351
6668
|
// Inserting a new entry would create a new mem table, triggering slow down.
|
|
6352
|
-
Put(Key(0), "");
|
|
6669
|
+
ASSERT_OK(Put(Key(0), ""));
|
|
6353
6670
|
ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
|
|
6354
6671
|
|
|
6355
6672
|
sleeping_task.WakeUp();
|
|
@@ -6494,18 +6811,18 @@ TEST_F(DBTest, PauseBackgroundWorkTest) {
|
|
|
6494
6811
|
|
|
6495
6812
|
std::vector<port::Thread> threads;
|
|
6496
6813
|
std::atomic<bool> done(false);
|
|
6497
|
-
db_->PauseBackgroundWork();
|
|
6814
|
+
ASSERT_OK(db_->PauseBackgroundWork());
|
|
6498
6815
|
threads.emplace_back([&]() {
|
|
6499
6816
|
Random rnd(301);
|
|
6500
6817
|
for (int i = 0; i < 10000; ++i) {
|
|
6501
|
-
Put(rnd.RandomString(10), rnd.RandomString(10));
|
|
6818
|
+
ASSERT_OK(Put(rnd.RandomString(10), rnd.RandomString(10)));
|
|
6502
6819
|
}
|
|
6503
6820
|
done.store(true);
|
|
6504
6821
|
});
|
|
6505
6822
|
env_->SleepForMicroseconds(200000);
|
|
6506
6823
|
// make sure the thread is not done
|
|
6507
6824
|
ASSERT_FALSE(done.load());
|
|
6508
|
-
db_->ContinueBackgroundWork();
|
|
6825
|
+
ASSERT_OK(db_->ContinueBackgroundWork());
|
|
6509
6826
|
for (auto& t : threads) {
|
|
6510
6827
|
t.join();
|
|
6511
6828
|
}
|
|
@@ -6540,6 +6857,7 @@ TEST_F(DBTest, ThreadLocalPtrDeadlock) {
|
|
|
6540
6857
|
{
|
|
6541
6858
|
port::Thread tmp_thread([&] {
|
|
6542
6859
|
auto it = db_->NewIterator(ReadOptions());
|
|
6860
|
+
ASSERT_OK(it->status());
|
|
6543
6861
|
delete it;
|
|
6544
6862
|
});
|
|
6545
6863
|
tmp_thread.join();
|
|
@@ -6631,7 +6949,7 @@ TEST_F(DBTest, CreationTimeOfOldestFile) {
|
|
|
6631
6949
|
ASSERT_OK(
|
|
6632
6950
|
Put(Key(i * kNumKeysPerFile + j), rnd.RandomString(kValueSize)));
|
|
6633
6951
|
}
|
|
6634
|
-
Flush();
|
|
6952
|
+
ASSERT_OK(Flush());
|
|
6635
6953
|
}
|
|
6636
6954
|
|
|
6637
6955
|
// At this point there should be 2 files, one with file_creation_time = 0 and
|
|
@@ -6656,7 +6974,7 @@ TEST_F(DBTest, CreationTimeOfOldestFile) {
|
|
|
6656
6974
|
ASSERT_OK(
|
|
6657
6975
|
Put(Key(i * kNumKeysPerFile + j), rnd.RandomString(kValueSize)));
|
|
6658
6976
|
}
|
|
6659
|
-
Flush();
|
|
6977
|
+
ASSERT_OK(Flush());
|
|
6660
6978
|
}
|
|
6661
6979
|
|
|
6662
6980
|
// At this point there should be 2 files with non-zero file creation time.
|
|
@@ -6683,20 +7001,19 @@ TEST_F(DBTest, MemoryUsageWithMaxWriteBufferSizeToMaintain) {
|
|
|
6683
7001
|
Reopen(options);
|
|
6684
7002
|
Random rnd(301);
|
|
6685
7003
|
bool memory_limit_exceeded = false;
|
|
6686
|
-
|
|
6687
|
-
|
|
7004
|
+
|
|
7005
|
+
ColumnFamilyData* cfd =
|
|
7006
|
+
static_cast<ColumnFamilyHandleImpl*>(db_->DefaultColumnFamily())->cfd();
|
|
7007
|
+
|
|
6688
7008
|
for (int i = 0; i < 1000; i++) {
|
|
6689
7009
|
std::string value = rnd.RandomString(1000);
|
|
6690
7010
|
ASSERT_OK(Put("keykey_" + std::to_string(i), value));
|
|
6691
7011
|
|
|
6692
|
-
dbfull()->TEST_WaitForFlushMemTable();
|
|
7012
|
+
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
6693
7013
|
|
|
6694
|
-
|
|
6695
|
-
|
|
6696
|
-
|
|
6697
|
-
ASSERT_TRUE(db_->GetIntProperty(db_->DefaultColumnFamily(),
|
|
6698
|
-
DB::Properties::kCurSizeActiveMemTable,
|
|
6699
|
-
&cur_active_mem));
|
|
7014
|
+
const uint64_t cur_active_mem = cfd->mem()->ApproximateMemoryUsage();
|
|
7015
|
+
const uint64_t size_all_mem_table =
|
|
7016
|
+
cur_active_mem + cfd->imm()->ApproximateMemoryUsage();
|
|
6700
7017
|
|
|
6701
7018
|
// Errors out if memory usage keeps on increasing beyond the limit.
|
|
6702
7019
|
// Once memory limit exceeds, memory_limit_exceeded is set and if
|
|
@@ -6706,8 +7023,9 @@ TEST_F(DBTest, MemoryUsageWithMaxWriteBufferSizeToMaintain) {
|
|
|
6706
7023
|
if ((size_all_mem_table > cur_active_mem) &&
|
|
6707
7024
|
(cur_active_mem >=
|
|
6708
7025
|
static_cast<uint64_t>(options.max_write_buffer_size_to_maintain)) &&
|
|
6709
|
-
(size_all_mem_table >
|
|
6710
|
-
|
|
7026
|
+
(size_all_mem_table >
|
|
7027
|
+
static_cast<uint64_t>(options.max_write_buffer_size_to_maintain) +
|
|
7028
|
+
options.write_buffer_size)) {
|
|
6711
7029
|
ASSERT_FALSE(memory_limit_exceeded);
|
|
6712
7030
|
memory_limit_exceeded = true;
|
|
6713
7031
|
} else {
|
|
@@ -6720,14 +7038,6 @@ TEST_F(DBTest, MemoryUsageWithMaxWriteBufferSizeToMaintain) {
|
|
|
6720
7038
|
|
|
6721
7039
|
} // namespace ROCKSDB_NAMESPACE
|
|
6722
7040
|
|
|
6723
|
-
#ifdef ROCKSDB_UNITTESTS_WITH_CUSTOM_OBJECTS_FROM_STATIC_LIBS
|
|
6724
|
-
extern "C" {
|
|
6725
|
-
void RegisterCustomObjects(int argc, char** argv);
|
|
6726
|
-
}
|
|
6727
|
-
#else
|
|
6728
|
-
void RegisterCustomObjects(int /*argc*/, char** /*argv*/) {}
|
|
6729
|
-
#endif // !ROCKSDB_UNITTESTS_WITH_CUSTOM_OBJECTS_FROM_STATIC_LIBS
|
|
6730
|
-
|
|
6731
7041
|
int main(int argc, char** argv) {
|
|
6732
7042
|
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
6733
7043
|
::testing::InitGoogleTest(&argc, argv);
|