@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,44 +11,49 @@
|
|
|
11
11
|
|
|
12
12
|
#include <assert.h>
|
|
13
13
|
#include <stdio.h>
|
|
14
|
+
|
|
14
15
|
#include <atomic>
|
|
15
16
|
#include <list>
|
|
16
17
|
#include <map>
|
|
17
18
|
#include <memory>
|
|
19
|
+
#include <numeric>
|
|
18
20
|
#include <string>
|
|
19
21
|
#include <unordered_map>
|
|
20
22
|
#include <utility>
|
|
21
23
|
|
|
24
|
+
#include "cache/cache_entry_roles.h"
|
|
25
|
+
#include "cache/cache_key.h"
|
|
26
|
+
#include "cache/cache_reservation_manager.h"
|
|
22
27
|
#include "db/dbformat.h"
|
|
23
28
|
#include "index_builder.h"
|
|
24
|
-
|
|
29
|
+
#include "logging/logging.h"
|
|
30
|
+
#include "memory/memory_allocator.h"
|
|
25
31
|
#include "rocksdb/cache.h"
|
|
26
32
|
#include "rocksdb/comparator.h"
|
|
27
33
|
#include "rocksdb/env.h"
|
|
34
|
+
#include "rocksdb/filter_policy.h"
|
|
28
35
|
#include "rocksdb/flush_block_policy.h"
|
|
29
36
|
#include "rocksdb/merge_operator.h"
|
|
30
37
|
#include "rocksdb/table.h"
|
|
31
|
-
|
|
38
|
+
#include "rocksdb/types.h"
|
|
32
39
|
#include "table/block_based/block.h"
|
|
33
40
|
#include "table/block_based/block_based_filter_block.h"
|
|
34
41
|
#include "table/block_based/block_based_table_factory.h"
|
|
35
42
|
#include "table/block_based/block_based_table_reader.h"
|
|
36
43
|
#include "table/block_based/block_builder.h"
|
|
44
|
+
#include "table/block_based/block_like_traits.h"
|
|
37
45
|
#include "table/block_based/filter_block.h"
|
|
38
46
|
#include "table/block_based/filter_policy_internal.h"
|
|
39
47
|
#include "table/block_based/full_filter_block.h"
|
|
40
48
|
#include "table/block_based/partitioned_filter_block.h"
|
|
41
49
|
#include "table/format.h"
|
|
50
|
+
#include "table/meta_blocks.h"
|
|
42
51
|
#include "table/table_builder.h"
|
|
43
|
-
|
|
44
|
-
#include "memory/memory_allocator.h"
|
|
45
52
|
#include "util/coding.h"
|
|
46
53
|
#include "util/compression.h"
|
|
47
|
-
#include "util/crc32c.h"
|
|
48
54
|
#include "util/stop_watch.h"
|
|
49
55
|
#include "util/string_util.h"
|
|
50
56
|
#include "util/work_queue.h"
|
|
51
|
-
#include "util/xxhash.h"
|
|
52
57
|
|
|
53
58
|
namespace ROCKSDB_NAMESPACE {
|
|
54
59
|
|
|
@@ -59,6 +64,8 @@ extern const std::string kHashIndexPrefixesMetadataBlock;
|
|
|
59
64
|
// Without anonymous namespace here, we fail the warning -Wmissing-prototypes
|
|
60
65
|
namespace {
|
|
61
66
|
|
|
67
|
+
constexpr size_t kBlockTrailerSize = BlockBasedTable::kBlockTrailerSize;
|
|
68
|
+
|
|
62
69
|
// Create a filter block builder based on its type.
|
|
63
70
|
FilterBlockBuilder* CreateFilterBlockBuilder(
|
|
64
71
|
const ImmutableCFOptions& /*opt*/, const MutableCFOptions& mopt,
|
|
@@ -66,14 +73,24 @@ FilterBlockBuilder* CreateFilterBlockBuilder(
|
|
|
66
73
|
const bool use_delta_encoding_for_index_values,
|
|
67
74
|
PartitionedIndexBuilder* const p_index_builder) {
|
|
68
75
|
const BlockBasedTableOptions& table_opt = context.table_options;
|
|
69
|
-
|
|
76
|
+
assert(table_opt.filter_policy); // precondition
|
|
70
77
|
|
|
71
78
|
FilterBitsBuilder* filter_bits_builder =
|
|
72
79
|
BloomFilterPolicy::GetBuilderFromContext(context);
|
|
73
80
|
if (filter_bits_builder == nullptr) {
|
|
74
|
-
return
|
|
75
|
-
table_opt);
|
|
81
|
+
return nullptr;
|
|
76
82
|
} else {
|
|
83
|
+
// Check for backdoor deprecated block-based bloom config
|
|
84
|
+
size_t starting_est = filter_bits_builder->EstimateEntriesAdded();
|
|
85
|
+
constexpr auto kSecretStart =
|
|
86
|
+
DeprecatedBlockBasedBloomFilterPolicy::kSecretBitsPerKeyStart;
|
|
87
|
+
if (starting_est >= kSecretStart && starting_est < kSecretStart + 100) {
|
|
88
|
+
int bits_per_key = static_cast<int>(starting_est - kSecretStart);
|
|
89
|
+
delete filter_bits_builder;
|
|
90
|
+
return new BlockBasedFilterBlockBuilder(mopt.prefix_extractor.get(),
|
|
91
|
+
table_opt, bits_per_key);
|
|
92
|
+
}
|
|
93
|
+
// END check for backdoor deprecated block-based bloom config
|
|
77
94
|
if (table_opt.partition_filters) {
|
|
78
95
|
assert(p_index_builder != nullptr);
|
|
79
96
|
// Since after partition cut request from filter builder it takes time
|
|
@@ -211,9 +228,9 @@ class BlockBasedTableBuilder::BlockBasedTablePropertiesCollector
|
|
|
211
228
|
return Status::OK();
|
|
212
229
|
}
|
|
213
230
|
|
|
214
|
-
virtual void BlockAdd(uint64_t /*
|
|
215
|
-
uint64_t /*
|
|
216
|
-
uint64_t /*
|
|
231
|
+
virtual void BlockAdd(uint64_t /* block_raw_bytes */,
|
|
232
|
+
uint64_t /* block_compressed_bytes_fast */,
|
|
233
|
+
uint64_t /* block_compressed_bytes_slow */) override {
|
|
217
234
|
// Intentionally left blank. No interest in collecting stats for
|
|
218
235
|
// blocks.
|
|
219
236
|
return;
|
|
@@ -247,7 +264,7 @@ class BlockBasedTableBuilder::BlockBasedTablePropertiesCollector
|
|
|
247
264
|
};
|
|
248
265
|
|
|
249
266
|
struct BlockBasedTableBuilder::Rep {
|
|
250
|
-
const
|
|
267
|
+
const ImmutableOptions ioptions;
|
|
251
268
|
const MutableCFOptions moptions;
|
|
252
269
|
const BlockBasedTableOptions table_options;
|
|
253
270
|
const InternalKeyComparator& internal_comparator;
|
|
@@ -255,13 +272,10 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
255
272
|
std::atomic<uint64_t> offset;
|
|
256
273
|
size_t alignment;
|
|
257
274
|
BlockBuilder data_block;
|
|
258
|
-
// Buffers uncompressed data blocks
|
|
275
|
+
// Buffers uncompressed data blocks to replay later. Needed when
|
|
259
276
|
// compression dictionary is enabled so we can finalize the dictionary before
|
|
260
277
|
// compressing any data blocks.
|
|
261
|
-
|
|
262
|
-
// blocks as it's redundant, but it's easier to implement for now.
|
|
263
|
-
std::vector<std::pair<std::string, std::vector<std::string>>>
|
|
264
|
-
data_block_and_keys_buffers;
|
|
278
|
+
std::vector<std::string> data_block_buffers;
|
|
265
279
|
BlockBuilder range_del_block;
|
|
266
280
|
|
|
267
281
|
InternalKeySliceTransform internal_prefix_transform;
|
|
@@ -272,6 +286,11 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
272
286
|
const Slice* first_key_in_next_block = nullptr;
|
|
273
287
|
CompressionType compression_type;
|
|
274
288
|
uint64_t sample_for_compression;
|
|
289
|
+
std::atomic<uint64_t> compressible_input_data_bytes;
|
|
290
|
+
std::atomic<uint64_t> uncompressible_input_data_bytes;
|
|
291
|
+
std::atomic<uint64_t> sampled_input_data_bytes;
|
|
292
|
+
std::atomic<uint64_t> sampled_output_slow_data_bytes;
|
|
293
|
+
std::atomic<uint64_t> sampled_output_fast_data_bytes;
|
|
275
294
|
CompressionOptions compression_opts;
|
|
276
295
|
std::unique_ptr<CompressionDict> compression_dict;
|
|
277
296
|
std::vector<std::unique_ptr<CompressionContext>> compression_ctxs;
|
|
@@ -306,28 +325,20 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
306
325
|
kClosed,
|
|
307
326
|
};
|
|
308
327
|
State state;
|
|
309
|
-
|
|
328
|
+
// `kBuffered` state is allowed only as long as the buffering of uncompressed
|
|
329
|
+
// data blocks (see `data_block_buffers`) does not exceed `buffer_limit`.
|
|
330
|
+
uint64_t buffer_limit;
|
|
331
|
+
std::shared_ptr<CacheReservationManager>
|
|
332
|
+
compression_dict_buffer_cache_res_mgr;
|
|
310
333
|
const bool use_delta_encoding_for_index_values;
|
|
311
334
|
std::unique_ptr<FilterBlockBuilder> filter_builder;
|
|
312
|
-
|
|
313
|
-
|
|
335
|
+
OffsetableCacheKey base_cache_key;
|
|
336
|
+
const TableFileCreationReason reason;
|
|
314
337
|
|
|
315
338
|
BlockHandle pending_handle; // Handle to add to index block
|
|
316
339
|
|
|
317
340
|
std::string compressed_output;
|
|
318
341
|
std::unique_ptr<FlushBlockPolicy> flush_block_policy;
|
|
319
|
-
int level_at_creation;
|
|
320
|
-
uint32_t column_family_id;
|
|
321
|
-
const std::string& column_family_name;
|
|
322
|
-
uint64_t creation_time = 0;
|
|
323
|
-
uint64_t oldest_key_time = 0;
|
|
324
|
-
const uint64_t target_file_size;
|
|
325
|
-
uint64_t file_creation_time = 0;
|
|
326
|
-
|
|
327
|
-
// DB IDs
|
|
328
|
-
const std::string db_id;
|
|
329
|
-
const std::string db_session_id;
|
|
330
|
-
std::string db_host_id;
|
|
331
342
|
|
|
332
343
|
std::vector<std::unique_ptr<IntTblPropCollector>> table_properties_collectors;
|
|
333
344
|
|
|
@@ -385,6 +396,7 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
385
396
|
}
|
|
386
397
|
|
|
387
398
|
// Never erase an existing I/O status that is not OK.
|
|
399
|
+
// Calling this will also SetStatus(ios)
|
|
388
400
|
void SetIOStatus(IOStatus ios) {
|
|
389
401
|
if (!ios.ok() && io_status_ok.load(std::memory_order_relaxed)) {
|
|
390
402
|
// Locking is an overkill for non compression_opts.parallel_threads
|
|
@@ -394,67 +406,69 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
394
406
|
io_status = ios;
|
|
395
407
|
io_status_ok.store(false, std::memory_order_relaxed);
|
|
396
408
|
}
|
|
409
|
+
SetStatus(ios);
|
|
397
410
|
}
|
|
398
411
|
|
|
399
|
-
Rep(const
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
int_tbl_prop_collector_factories,
|
|
404
|
-
uint32_t _column_family_id, WritableFileWriter* f,
|
|
405
|
-
const CompressionType _compression_type,
|
|
406
|
-
const uint64_t _sample_for_compression,
|
|
407
|
-
const CompressionOptions& _compression_opts, const bool skip_filters,
|
|
408
|
-
const int _level_at_creation, const std::string& _column_family_name,
|
|
409
|
-
const uint64_t _creation_time, const uint64_t _oldest_key_time,
|
|
410
|
-
const uint64_t _target_file_size, const uint64_t _file_creation_time,
|
|
411
|
-
const std::string& _db_id, const std::string& _db_session_id)
|
|
412
|
-
: ioptions(_ioptions),
|
|
413
|
-
moptions(_moptions),
|
|
412
|
+
Rep(const BlockBasedTableOptions& table_opt, const TableBuilderOptions& tbo,
|
|
413
|
+
WritableFileWriter* f)
|
|
414
|
+
: ioptions(tbo.ioptions),
|
|
415
|
+
moptions(tbo.moptions),
|
|
414
416
|
table_options(table_opt),
|
|
415
|
-
internal_comparator(
|
|
417
|
+
internal_comparator(tbo.internal_comparator),
|
|
416
418
|
file(f),
|
|
417
419
|
offset(0),
|
|
418
420
|
alignment(table_options.block_align
|
|
419
|
-
? std::min(table_options.block_size,
|
|
421
|
+
? std::min(static_cast<size_t>(table_options.block_size),
|
|
422
|
+
kDefaultPageSize)
|
|
420
423
|
: 0),
|
|
421
424
|
data_block(table_options.block_restart_interval,
|
|
422
425
|
table_options.use_delta_encoding,
|
|
423
426
|
false /* use_value_delta_encoding */,
|
|
424
|
-
|
|
427
|
+
tbo.internal_comparator.user_comparator()
|
|
425
428
|
->CanKeysWithDifferentByteContentsBeEqual()
|
|
426
429
|
? BlockBasedTableOptions::kDataBlockBinarySearch
|
|
427
430
|
: table_options.data_block_index_type,
|
|
428
431
|
table_options.data_block_hash_table_util_ratio),
|
|
429
432
|
range_del_block(1 /* block_restart_interval */),
|
|
430
|
-
internal_prefix_transform(
|
|
431
|
-
compression_type(
|
|
432
|
-
sample_for_compression(
|
|
433
|
-
|
|
433
|
+
internal_prefix_transform(tbo.moptions.prefix_extractor.get()),
|
|
434
|
+
compression_type(tbo.compression_type),
|
|
435
|
+
sample_for_compression(tbo.moptions.sample_for_compression),
|
|
436
|
+
compressible_input_data_bytes(0),
|
|
437
|
+
uncompressible_input_data_bytes(0),
|
|
438
|
+
sampled_input_data_bytes(0),
|
|
439
|
+
sampled_output_slow_data_bytes(0),
|
|
440
|
+
sampled_output_fast_data_bytes(0),
|
|
441
|
+
compression_opts(tbo.compression_opts),
|
|
434
442
|
compression_dict(),
|
|
435
|
-
compression_ctxs(
|
|
436
|
-
verify_ctxs(
|
|
443
|
+
compression_ctxs(tbo.compression_opts.parallel_threads),
|
|
444
|
+
verify_ctxs(tbo.compression_opts.parallel_threads),
|
|
437
445
|
verify_dict(),
|
|
438
|
-
state((
|
|
439
|
-
|
|
446
|
+
state((tbo.compression_opts.max_dict_bytes > 0) ? State::kBuffered
|
|
447
|
+
: State::kUnbuffered),
|
|
440
448
|
use_delta_encoding_for_index_values(table_opt.format_version >= 4 &&
|
|
441
449
|
!table_opt.block_align),
|
|
442
|
-
|
|
450
|
+
reason(tbo.reason),
|
|
443
451
|
flush_block_policy(
|
|
444
452
|
table_options.flush_block_policy_factory->NewFlushBlockPolicy(
|
|
445
453
|
table_options, data_block)),
|
|
446
|
-
level_at_creation(_level_at_creation),
|
|
447
|
-
column_family_id(_column_family_id),
|
|
448
|
-
column_family_name(_column_family_name),
|
|
449
|
-
creation_time(_creation_time),
|
|
450
|
-
oldest_key_time(_oldest_key_time),
|
|
451
|
-
target_file_size(_target_file_size),
|
|
452
|
-
file_creation_time(_file_creation_time),
|
|
453
|
-
db_id(_db_id),
|
|
454
|
-
db_session_id(_db_session_id),
|
|
455
|
-
db_host_id(ioptions.db_host_id),
|
|
456
454
|
status_ok(true),
|
|
457
455
|
io_status_ok(true) {
|
|
456
|
+
if (tbo.target_file_size == 0) {
|
|
457
|
+
buffer_limit = compression_opts.max_dict_buffer_bytes;
|
|
458
|
+
} else if (compression_opts.max_dict_buffer_bytes == 0) {
|
|
459
|
+
buffer_limit = tbo.target_file_size;
|
|
460
|
+
} else {
|
|
461
|
+
buffer_limit = std::min(tbo.target_file_size,
|
|
462
|
+
compression_opts.max_dict_buffer_bytes);
|
|
463
|
+
}
|
|
464
|
+
if (table_options.no_block_cache || table_options.block_cache == nullptr) {
|
|
465
|
+
compression_dict_buffer_cache_res_mgr = nullptr;
|
|
466
|
+
} else {
|
|
467
|
+
compression_dict_buffer_cache_res_mgr =
|
|
468
|
+
std::make_shared<CacheReservationManagerImpl<
|
|
469
|
+
CacheEntryRole::kCompressionDictionaryBuildingBuffer>>(
|
|
470
|
+
table_options.block_cache);
|
|
471
|
+
}
|
|
458
472
|
for (uint32_t i = 0; i < compression_opts.parallel_threads; i++) {
|
|
459
473
|
compression_ctxs[i].reset(new CompressionContext(compression_type));
|
|
460
474
|
}
|
|
@@ -470,35 +484,74 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
470
484
|
&this->internal_prefix_transform, use_delta_encoding_for_index_values,
|
|
471
485
|
table_options));
|
|
472
486
|
}
|
|
473
|
-
if (
|
|
474
|
-
|
|
487
|
+
if (ioptions.optimize_filters_for_hits && tbo.is_bottommost) {
|
|
488
|
+
// Apply optimize_filters_for_hits setting here when applicable by
|
|
489
|
+
// skipping filter generation
|
|
490
|
+
filter_builder.reset();
|
|
491
|
+
} else if (tbo.skip_filters) {
|
|
492
|
+
// For SstFileWriter skip_filters
|
|
493
|
+
filter_builder.reset();
|
|
494
|
+
} else if (!table_options.filter_policy) {
|
|
495
|
+
// Null filter_policy -> no filter
|
|
496
|
+
filter_builder.reset();
|
|
475
497
|
} else {
|
|
476
|
-
FilterBuildingContext
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
498
|
+
FilterBuildingContext filter_context(table_options);
|
|
499
|
+
|
|
500
|
+
filter_context.info_log = ioptions.logger;
|
|
501
|
+
filter_context.column_family_name = tbo.column_family_name;
|
|
502
|
+
filter_context.reason = reason;
|
|
503
|
+
|
|
504
|
+
// Only populate other fields if known to be in LSM rather than
|
|
505
|
+
// generating external SST file
|
|
506
|
+
if (reason != TableFileCreationReason::kMisc) {
|
|
507
|
+
filter_context.compaction_style = ioptions.compaction_style;
|
|
508
|
+
filter_context.num_levels = ioptions.num_levels;
|
|
509
|
+
filter_context.level_at_creation = tbo.level_at_creation;
|
|
510
|
+
filter_context.is_bottommost = tbo.is_bottommost;
|
|
511
|
+
assert(filter_context.level_at_creation < filter_context.num_levels);
|
|
512
|
+
}
|
|
513
|
+
|
|
481
514
|
filter_builder.reset(CreateFilterBlockBuilder(
|
|
482
|
-
ioptions, moptions,
|
|
483
|
-
p_index_builder_));
|
|
515
|
+
ioptions, moptions, filter_context,
|
|
516
|
+
use_delta_encoding_for_index_values, p_index_builder_));
|
|
484
517
|
}
|
|
485
518
|
|
|
486
|
-
|
|
519
|
+
assert(tbo.int_tbl_prop_collector_factories);
|
|
520
|
+
for (auto& factory : *tbo.int_tbl_prop_collector_factories) {
|
|
521
|
+
assert(factory);
|
|
522
|
+
|
|
487
523
|
table_properties_collectors.emplace_back(
|
|
488
|
-
|
|
524
|
+
factory->CreateIntTblPropCollector(tbo.column_family_id,
|
|
525
|
+
tbo.level_at_creation));
|
|
489
526
|
}
|
|
490
527
|
table_properties_collectors.emplace_back(
|
|
491
528
|
new BlockBasedTablePropertiesCollector(
|
|
492
529
|
table_options.index_type, table_options.whole_key_filtering,
|
|
493
|
-
|
|
530
|
+
moptions.prefix_extractor != nullptr));
|
|
531
|
+
const Comparator* ucmp = tbo.internal_comparator.user_comparator();
|
|
532
|
+
assert(ucmp);
|
|
533
|
+
if (ucmp->timestamp_size() > 0) {
|
|
534
|
+
table_properties_collectors.emplace_back(
|
|
535
|
+
new TimestampTablePropertiesCollector(ucmp));
|
|
536
|
+
}
|
|
494
537
|
if (table_options.verify_compression) {
|
|
495
538
|
for (uint32_t i = 0; i < compression_opts.parallel_threads; i++) {
|
|
496
539
|
verify_ctxs[i].reset(new UncompressionContext(compression_type));
|
|
497
540
|
}
|
|
498
541
|
}
|
|
499
542
|
|
|
500
|
-
|
|
501
|
-
|
|
543
|
+
// These are only needed for populating table properties
|
|
544
|
+
props.column_family_id = tbo.column_family_id;
|
|
545
|
+
props.column_family_name = tbo.column_family_name;
|
|
546
|
+
props.creation_time = tbo.creation_time;
|
|
547
|
+
props.oldest_key_time = tbo.oldest_key_time;
|
|
548
|
+
props.file_creation_time = tbo.file_creation_time;
|
|
549
|
+
props.orig_file_number = tbo.cur_file_num;
|
|
550
|
+
props.db_id = tbo.db_id;
|
|
551
|
+
props.db_session_id = tbo.db_session_id;
|
|
552
|
+
props.db_host_id = ioptions.db_host_id;
|
|
553
|
+
if (!ReifyDbHostIdProperty(ioptions.env, &props.db_host_id).ok()) {
|
|
554
|
+
ROCKS_LOG_INFO(ioptions.logger, "db_host_id property will not be set");
|
|
502
555
|
}
|
|
503
556
|
}
|
|
504
557
|
|
|
@@ -568,11 +621,11 @@ struct BlockBasedTableBuilder::ParallelCompressionRep {
|
|
|
568
621
|
// Use a vector of BlockRep as a buffer for a determined number
|
|
569
622
|
// of BlockRep structures. All data referenced by pointers in
|
|
570
623
|
// BlockRep will be freed when this vector is destructed.
|
|
571
|
-
|
|
624
|
+
using BlockRepBuffer = std::vector<BlockRep>;
|
|
572
625
|
BlockRepBuffer block_rep_buf;
|
|
573
626
|
// Use a thread-safe queue for concurrent access from block
|
|
574
627
|
// building thread and writer thread.
|
|
575
|
-
|
|
628
|
+
using BlockRepPool = WorkQueue<BlockRep*>;
|
|
576
629
|
BlockRepPool block_rep_pool;
|
|
577
630
|
|
|
578
631
|
// Use BlockRepSlot to keep block order in write thread.
|
|
@@ -596,7 +649,7 @@ struct BlockBasedTableBuilder::ParallelCompressionRep {
|
|
|
596
649
|
// Compression queue will pass references to BlockRep in block_rep_buf,
|
|
597
650
|
// and those references are always valid before the destruction of
|
|
598
651
|
// block_rep_buf.
|
|
599
|
-
|
|
652
|
+
using CompressQueue = WorkQueue<BlockRep*>;
|
|
600
653
|
CompressQueue compress_queue;
|
|
601
654
|
std::vector<port::Thread> compress_thread_pool;
|
|
602
655
|
|
|
@@ -604,7 +657,7 @@ struct BlockBasedTableBuilder::ParallelCompressionRep {
|
|
|
604
657
|
// and those references are always valid before the corresponding
|
|
605
658
|
// BlockRep::slot is destructed, which is before the destruction of
|
|
606
659
|
// block_rep_buf.
|
|
607
|
-
|
|
660
|
+
using WriteQueue = WorkQueue<BlockRepSlot*>;
|
|
608
661
|
WriteQueue write_queue;
|
|
609
662
|
std::unique_ptr<port::Thread> write_thread;
|
|
610
663
|
|
|
@@ -825,24 +878,13 @@ struct BlockBasedTableBuilder::ParallelCompressionRep {
|
|
|
825
878
|
};
|
|
826
879
|
|
|
827
880
|
BlockBasedTableBuilder::BlockBasedTableBuilder(
|
|
828
|
-
const
|
|
829
|
-
|
|
830
|
-
const InternalKeyComparator& internal_comparator,
|
|
831
|
-
const std::vector<std::unique_ptr<IntTblPropCollectorFactory>>*
|
|
832
|
-
int_tbl_prop_collector_factories,
|
|
833
|
-
uint32_t column_family_id, WritableFileWriter* file,
|
|
834
|
-
const CompressionType compression_type,
|
|
835
|
-
const uint64_t sample_for_compression,
|
|
836
|
-
const CompressionOptions& compression_opts, const bool skip_filters,
|
|
837
|
-
const std::string& column_family_name, const int level_at_creation,
|
|
838
|
-
const uint64_t creation_time, const uint64_t oldest_key_time,
|
|
839
|
-
const uint64_t target_file_size, const uint64_t file_creation_time,
|
|
840
|
-
const std::string& db_id, const std::string& db_session_id) {
|
|
881
|
+
const BlockBasedTableOptions& table_options, const TableBuilderOptions& tbo,
|
|
882
|
+
WritableFileWriter* file) {
|
|
841
883
|
BlockBasedTableOptions sanitized_table_options(table_options);
|
|
842
884
|
if (sanitized_table_options.format_version == 0 &&
|
|
843
885
|
sanitized_table_options.checksum != kCRC32c) {
|
|
844
886
|
ROCKS_LOG_WARN(
|
|
845
|
-
ioptions.
|
|
887
|
+
tbo.ioptions.logger,
|
|
846
888
|
"Silently converting format_version to 1 because checksum is "
|
|
847
889
|
"non-default");
|
|
848
890
|
// silently convert format_version to 1 to keep consistent with current
|
|
@@ -850,22 +892,22 @@ BlockBasedTableBuilder::BlockBasedTableBuilder(
|
|
|
850
892
|
sanitized_table_options.format_version = 1;
|
|
851
893
|
}
|
|
852
894
|
|
|
853
|
-
rep_ = new Rep(
|
|
854
|
-
ioptions, moptions, sanitized_table_options, internal_comparator,
|
|
855
|
-
int_tbl_prop_collector_factories, column_family_id, file,
|
|
856
|
-
compression_type, sample_for_compression, compression_opts, skip_filters,
|
|
857
|
-
level_at_creation, column_family_name, creation_time, oldest_key_time,
|
|
858
|
-
target_file_size, file_creation_time, db_id, db_session_id);
|
|
895
|
+
rep_ = new Rep(sanitized_table_options, tbo, file);
|
|
859
896
|
|
|
860
897
|
if (rep_->filter_builder != nullptr) {
|
|
861
898
|
rep_->filter_builder->StartBlock(0);
|
|
862
899
|
}
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
900
|
+
|
|
901
|
+
TEST_SYNC_POINT_CALLBACK(
|
|
902
|
+
"BlockBasedTableBuilder::BlockBasedTableBuilder:PreSetupBaseCacheKey",
|
|
903
|
+
const_cast<TableProperties*>(&rep_->props));
|
|
904
|
+
|
|
905
|
+
// Extremely large files use atypical cache key encoding, and we don't
|
|
906
|
+
// know ahead of time how big the file will be. But assuming it's less
|
|
907
|
+
// than 4TB, we will correctly predict the cache keys.
|
|
908
|
+
BlockBasedTable::SetupBaseCacheKey(
|
|
909
|
+
&rep_->props, tbo.db_session_id, tbo.cur_file_num,
|
|
910
|
+
BlockBasedTable::kMaxFileSizeStandardEncoding, &rep_->base_cache_key);
|
|
869
911
|
|
|
870
912
|
if (rep_->IsParallelCompressionEnabled()) {
|
|
871
913
|
StartParallelCompression();
|
|
@@ -895,10 +937,25 @@ void BlockBasedTableBuilder::Add(const Slice& key, const Slice& value) {
|
|
|
895
937
|
assert(!r->data_block.empty());
|
|
896
938
|
r->first_key_in_next_block = &key;
|
|
897
939
|
Flush();
|
|
940
|
+
if (r->state == Rep::State::kBuffered) {
|
|
941
|
+
bool exceeds_buffer_limit =
|
|
942
|
+
(r->buffer_limit != 0 && r->data_begin_offset > r->buffer_limit);
|
|
943
|
+
bool exceeds_global_block_cache_limit = false;
|
|
944
|
+
|
|
945
|
+
// Increase cache reservation for the last buffered data block
|
|
946
|
+
// only if the block is not going to be unbuffered immediately
|
|
947
|
+
// and there exists a cache reservation manager
|
|
948
|
+
if (!exceeds_buffer_limit &&
|
|
949
|
+
r->compression_dict_buffer_cache_res_mgr != nullptr) {
|
|
950
|
+
Status s =
|
|
951
|
+
r->compression_dict_buffer_cache_res_mgr->UpdateCacheReservation(
|
|
952
|
+
r->data_begin_offset);
|
|
953
|
+
exceeds_global_block_cache_limit = s.IsIncomplete();
|
|
954
|
+
}
|
|
898
955
|
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
956
|
+
if (exceeds_buffer_limit || exceeds_global_block_cache_limit) {
|
|
957
|
+
EnterUnbuffered();
|
|
958
|
+
}
|
|
902
959
|
}
|
|
903
960
|
|
|
904
961
|
// Add item to index block.
|
|
@@ -933,15 +990,11 @@ void BlockBasedTableBuilder::Add(const Slice& key, const Slice& value) {
|
|
|
933
990
|
}
|
|
934
991
|
}
|
|
935
992
|
|
|
993
|
+
r->data_block.AddWithLastKey(key, value, r->last_key);
|
|
936
994
|
r->last_key.assign(key.data(), key.size());
|
|
937
|
-
r->data_block.Add(key, value);
|
|
938
995
|
if (r->state == Rep::State::kBuffered) {
|
|
939
|
-
//
|
|
940
|
-
// dictionary has been finalized.
|
|
941
|
-
if (r->data_block_and_keys_buffers.empty() || should_flush) {
|
|
942
|
-
r->data_block_and_keys_buffers.emplace_back();
|
|
943
|
-
}
|
|
944
|
-
r->data_block_and_keys_buffers.back().second.emplace_back(key.ToString());
|
|
996
|
+
// Buffered keys will be replayed from data_block_buffers during
|
|
997
|
+
// `Finish()` once compression dictionary has been finalized.
|
|
945
998
|
} else {
|
|
946
999
|
if (!r->IsParallelCompressionEnabled()) {
|
|
947
1000
|
r->index_builder->OnKeyAdded(key);
|
|
@@ -950,14 +1003,14 @@ void BlockBasedTableBuilder::Add(const Slice& key, const Slice& value) {
|
|
|
950
1003
|
// TODO offset passed in is not accurate for parallel compression case
|
|
951
1004
|
NotifyCollectTableCollectorsOnAdd(key, value, r->get_offset(),
|
|
952
1005
|
r->table_properties_collectors,
|
|
953
|
-
r->ioptions.
|
|
1006
|
+
r->ioptions.logger);
|
|
954
1007
|
|
|
955
1008
|
} else if (value_type == kTypeRangeDeletion) {
|
|
956
1009
|
r->range_del_block.Add(key, value);
|
|
957
1010
|
// TODO offset passed in is not accurate for parallel compression case
|
|
958
1011
|
NotifyCollectTableCollectorsOnAdd(key, value, r->get_offset(),
|
|
959
1012
|
r->table_properties_collectors,
|
|
960
|
-
r->ioptions.
|
|
1013
|
+
r->ioptions.logger);
|
|
961
1014
|
} else {
|
|
962
1015
|
assert(false);
|
|
963
1016
|
}
|
|
@@ -990,31 +1043,35 @@ void BlockBasedTableBuilder::Flush() {
|
|
|
990
1043
|
r->get_offset());
|
|
991
1044
|
r->pc_rep->EmitBlock(block_rep);
|
|
992
1045
|
} else {
|
|
993
|
-
WriteBlock(&r->data_block, &r->pending_handle,
|
|
1046
|
+
WriteBlock(&r->data_block, &r->pending_handle, BlockType::kData);
|
|
994
1047
|
}
|
|
995
1048
|
}
|
|
996
1049
|
|
|
997
1050
|
void BlockBasedTableBuilder::WriteBlock(BlockBuilder* block,
|
|
998
1051
|
BlockHandle* handle,
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1052
|
+
BlockType block_type) {
|
|
1053
|
+
block->Finish();
|
|
1054
|
+
std::string raw_block_contents;
|
|
1055
|
+
raw_block_contents.reserve(rep_->table_options.block_size);
|
|
1056
|
+
block->SwapAndReset(raw_block_contents);
|
|
1057
|
+
if (rep_->state == Rep::State::kBuffered) {
|
|
1058
|
+
assert(block_type == BlockType::kData);
|
|
1059
|
+
rep_->data_block_buffers.emplace_back(std::move(raw_block_contents));
|
|
1060
|
+
rep_->data_begin_offset += rep_->data_block_buffers.back().size();
|
|
1061
|
+
return;
|
|
1062
|
+
}
|
|
1063
|
+
WriteBlock(raw_block_contents, handle, block_type);
|
|
1002
1064
|
}
|
|
1003
1065
|
|
|
1004
1066
|
void BlockBasedTableBuilder::WriteBlock(const Slice& raw_block_contents,
|
|
1005
1067
|
BlockHandle* handle,
|
|
1006
|
-
|
|
1068
|
+
BlockType block_type) {
|
|
1007
1069
|
Rep* r = rep_;
|
|
1070
|
+
assert(r->state == Rep::State::kUnbuffered);
|
|
1008
1071
|
Slice block_contents;
|
|
1009
1072
|
CompressionType type;
|
|
1010
|
-
if (r->state == Rep::State::kBuffered) {
|
|
1011
|
-
assert(is_data_block);
|
|
1012
|
-
assert(!r->data_block_and_keys_buffers.empty());
|
|
1013
|
-
r->data_block_and_keys_buffers.back().first = raw_block_contents.ToString();
|
|
1014
|
-
r->data_begin_offset += r->data_block_and_keys_buffers.back().first.size();
|
|
1015
|
-
return;
|
|
1016
|
-
}
|
|
1017
1073
|
Status compress_status;
|
|
1074
|
+
bool is_data_block = block_type == BlockType::kData;
|
|
1018
1075
|
CompressAndVerifyBlock(raw_block_contents, is_data_block,
|
|
1019
1076
|
*(r->compression_ctxs[0]), r->verify_ctxs[0].get(),
|
|
1020
1077
|
&(r->compressed_output), &(block_contents), &type,
|
|
@@ -1023,7 +1080,8 @@ void BlockBasedTableBuilder::WriteBlock(const Slice& raw_block_contents,
|
|
|
1023
1080
|
if (!ok()) {
|
|
1024
1081
|
return;
|
|
1025
1082
|
}
|
|
1026
|
-
|
|
1083
|
+
|
|
1084
|
+
WriteRawBlock(block_contents, type, handle, block_type, &raw_block_contents);
|
|
1027
1085
|
r->compressed_output.clear();
|
|
1028
1086
|
if (is_data_block) {
|
|
1029
1087
|
if (r->filter_builder != nullptr) {
|
|
@@ -1069,10 +1127,14 @@ void BlockBasedTableBuilder::CompressAndVerifyBlock(
|
|
|
1069
1127
|
bool abort_compression = false;
|
|
1070
1128
|
|
|
1071
1129
|
StopWatchNano timer(
|
|
1072
|
-
r->ioptions.
|
|
1073
|
-
ShouldReportDetailedTime(r->ioptions.env, r->ioptions.
|
|
1130
|
+
r->ioptions.clock,
|
|
1131
|
+
ShouldReportDetailedTime(r->ioptions.env, r->ioptions.stats));
|
|
1074
1132
|
|
|
1075
1133
|
if (is_status_ok && raw_block_contents.size() < kCompressionSizeLimit) {
|
|
1134
|
+
if (is_data_block) {
|
|
1135
|
+
r->compressible_input_data_bytes.fetch_add(raw_block_contents.size(),
|
|
1136
|
+
std::memory_order_relaxed);
|
|
1137
|
+
}
|
|
1076
1138
|
const CompressionDict* compression_dict;
|
|
1077
1139
|
if (!is_data_block || r->compression_dict == nullptr) {
|
|
1078
1140
|
compression_dict = &CompressionDict::GetEmptyDict();
|
|
@@ -1091,6 +1153,16 @@ void BlockBasedTableBuilder::CompressAndVerifyBlock(
|
|
|
1091
1153
|
r->table_options.format_version, is_data_block /* do_sample */,
|
|
1092
1154
|
compressed_output, &sampled_output_fast, &sampled_output_slow);
|
|
1093
1155
|
|
|
1156
|
+
if (sampled_output_slow.size() > 0 || sampled_output_fast.size() > 0) {
|
|
1157
|
+
// Currently compression sampling is only enabled for data block.
|
|
1158
|
+
assert(is_data_block);
|
|
1159
|
+
r->sampled_input_data_bytes.fetch_add(raw_block_contents.size(),
|
|
1160
|
+
std::memory_order_relaxed);
|
|
1161
|
+
r->sampled_output_slow_data_bytes.fetch_add(sampled_output_slow.size(),
|
|
1162
|
+
std::memory_order_relaxed);
|
|
1163
|
+
r->sampled_output_fast_data_bytes.fetch_add(sampled_output_fast.size(),
|
|
1164
|
+
std::memory_order_relaxed);
|
|
1165
|
+
}
|
|
1094
1166
|
// notify collectors on block add
|
|
1095
1167
|
NotifyCollectTableCollectorsOnBlockAdd(
|
|
1096
1168
|
r->table_properties_collectors, raw_block_contents.size(),
|
|
@@ -1120,7 +1192,7 @@ void BlockBasedTableBuilder::CompressAndVerifyBlock(
|
|
|
1120
1192
|
if (!compressed_ok) {
|
|
1121
1193
|
// The result of the compression was invalid. abort.
|
|
1122
1194
|
abort_compression = true;
|
|
1123
|
-
ROCKS_LOG_ERROR(r->ioptions.
|
|
1195
|
+
ROCKS_LOG_ERROR(r->ioptions.logger,
|
|
1124
1196
|
"Decompressed block did not match raw block");
|
|
1125
1197
|
*out_status =
|
|
1126
1198
|
Status::Corruption("Decompressed block did not match raw block");
|
|
@@ -1134,124 +1206,141 @@ void BlockBasedTableBuilder::CompressAndVerifyBlock(
|
|
|
1134
1206
|
}
|
|
1135
1207
|
} else {
|
|
1136
1208
|
// Block is too big to be compressed.
|
|
1209
|
+
if (is_data_block) {
|
|
1210
|
+
r->uncompressible_input_data_bytes.fetch_add(raw_block_contents.size(),
|
|
1211
|
+
std::memory_order_relaxed);
|
|
1212
|
+
}
|
|
1137
1213
|
abort_compression = true;
|
|
1138
1214
|
}
|
|
1215
|
+
if (is_data_block) {
|
|
1216
|
+
r->uncompressible_input_data_bytes.fetch_add(kBlockTrailerSize,
|
|
1217
|
+
std::memory_order_relaxed);
|
|
1218
|
+
}
|
|
1139
1219
|
|
|
1140
1220
|
// Abort compression if the block is too big, or did not pass
|
|
1141
1221
|
// verification.
|
|
1142
1222
|
if (abort_compression) {
|
|
1143
|
-
RecordTick(r->ioptions.
|
|
1223
|
+
RecordTick(r->ioptions.stats, NUMBER_BLOCK_NOT_COMPRESSED);
|
|
1144
1224
|
*type = kNoCompression;
|
|
1145
1225
|
*block_contents = raw_block_contents;
|
|
1146
1226
|
} else if (*type != kNoCompression) {
|
|
1147
|
-
if (ShouldReportDetailedTime(r->ioptions.env, r->ioptions.
|
|
1148
|
-
RecordTimeToHistogram(r->ioptions.
|
|
1227
|
+
if (ShouldReportDetailedTime(r->ioptions.env, r->ioptions.stats)) {
|
|
1228
|
+
RecordTimeToHistogram(r->ioptions.stats, COMPRESSION_TIMES_NANOS,
|
|
1149
1229
|
timer.ElapsedNanos());
|
|
1150
1230
|
}
|
|
1151
|
-
RecordInHistogram(r->ioptions.
|
|
1231
|
+
RecordInHistogram(r->ioptions.stats, BYTES_COMPRESSED,
|
|
1152
1232
|
raw_block_contents.size());
|
|
1153
|
-
RecordTick(r->ioptions.
|
|
1233
|
+
RecordTick(r->ioptions.stats, NUMBER_BLOCK_COMPRESSED);
|
|
1154
1234
|
} else if (*type != r->compression_type) {
|
|
1155
|
-
RecordTick(r->ioptions.
|
|
1235
|
+
RecordTick(r->ioptions.stats, NUMBER_BLOCK_NOT_COMPRESSED);
|
|
1156
1236
|
}
|
|
1157
1237
|
}
|
|
1158
1238
|
|
|
1159
1239
|
void BlockBasedTableBuilder::WriteRawBlock(const Slice& block_contents,
|
|
1160
1240
|
CompressionType type,
|
|
1161
1241
|
BlockHandle* handle,
|
|
1162
|
-
|
|
1242
|
+
BlockType block_type,
|
|
1243
|
+
const Slice* raw_block_contents,
|
|
1244
|
+
bool is_top_level_filter_block) {
|
|
1163
1245
|
Rep* r = rep_;
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
StopWatch sw(r->ioptions.env, r->ioptions.statistics, WRITE_RAW_BLOCK_MICROS);
|
|
1246
|
+
bool is_data_block = block_type == BlockType::kData;
|
|
1247
|
+
StopWatch sw(r->ioptions.clock, r->ioptions.stats, WRITE_RAW_BLOCK_MICROS);
|
|
1167
1248
|
handle->set_offset(r->get_offset());
|
|
1168
1249
|
handle->set_size(block_contents.size());
|
|
1169
1250
|
assert(status().ok());
|
|
1170
1251
|
assert(io_status().ok());
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1252
|
+
|
|
1253
|
+
{
|
|
1254
|
+
IOStatus io_s = r->file->Append(block_contents);
|
|
1255
|
+
if (!io_s.ok()) {
|
|
1256
|
+
r->SetIOStatus(io_s);
|
|
1257
|
+
return;
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
std::array<char, kBlockTrailerSize> trailer;
|
|
1262
|
+
trailer[0] = type;
|
|
1263
|
+
uint32_t checksum = ComputeBuiltinChecksumWithLastByte(
|
|
1264
|
+
r->table_options.checksum, block_contents.data(), block_contents.size(),
|
|
1265
|
+
/*last_byte*/ type);
|
|
1266
|
+
|
|
1267
|
+
if (block_type == BlockType::kFilter) {
|
|
1268
|
+
Status s = r->filter_builder->MaybePostVerifyFilter(block_contents);
|
|
1269
|
+
if (!s.ok()) {
|
|
1270
|
+
r->SetStatus(s);
|
|
1271
|
+
return;
|
|
1272
|
+
}
|
|
1273
|
+
}
|
|
1274
|
+
|
|
1275
|
+
EncodeFixed32(trailer.data() + 1, checksum);
|
|
1276
|
+
TEST_SYNC_POINT_CALLBACK(
|
|
1277
|
+
"BlockBasedTableBuilder::WriteRawBlock:TamperWithChecksum",
|
|
1278
|
+
trailer.data());
|
|
1279
|
+
{
|
|
1280
|
+
IOStatus io_s = r->file->Append(Slice(trailer.data(), trailer.size()));
|
|
1281
|
+
if (!io_s.ok()) {
|
|
1282
|
+
r->SetIOStatus(io_s);
|
|
1283
|
+
return;
|
|
1284
|
+
}
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
|
+
{
|
|
1288
|
+
Status s = Status::OK();
|
|
1289
|
+
bool warm_cache;
|
|
1290
|
+
switch (r->table_options.prepopulate_block_cache) {
|
|
1291
|
+
case BlockBasedTableOptions::PrepopulateBlockCache::kFlushOnly:
|
|
1292
|
+
warm_cache = (r->reason == TableFileCreationReason::kFlush);
|
|
1195
1293
|
break;
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
XXH64_state_t* const state = XXH64_createState();
|
|
1199
|
-
XXH64_reset(state, 0);
|
|
1200
|
-
XXH64_update(state, block_contents.data(), block_contents.size());
|
|
1201
|
-
// Extend to cover compression type
|
|
1202
|
-
XXH64_update(state, trailer, 1);
|
|
1203
|
-
checksum = Lower32of64(XXH64_digest(state));
|
|
1204
|
-
XXH64_freeState(state);
|
|
1294
|
+
case BlockBasedTableOptions::PrepopulateBlockCache::kDisable:
|
|
1295
|
+
warm_cache = false;
|
|
1205
1296
|
break;
|
|
1206
|
-
}
|
|
1207
1297
|
default:
|
|
1298
|
+
// missing case
|
|
1208
1299
|
assert(false);
|
|
1209
|
-
|
|
1300
|
+
warm_cache = false;
|
|
1210
1301
|
}
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
s = InsertBlockInCache(block_contents, type, handle);
|
|
1302
|
+
if (warm_cache) {
|
|
1303
|
+
if (type == kNoCompression) {
|
|
1304
|
+
s = InsertBlockInCacheHelper(block_contents, handle, block_type,
|
|
1305
|
+
is_top_level_filter_block);
|
|
1306
|
+
} else if (raw_block_contents != nullptr) {
|
|
1307
|
+
s = InsertBlockInCacheHelper(*raw_block_contents, handle, block_type,
|
|
1308
|
+
is_top_level_filter_block);
|
|
1309
|
+
}
|
|
1220
1310
|
if (!s.ok()) {
|
|
1221
1311
|
r->SetStatus(s);
|
|
1312
|
+
return;
|
|
1222
1313
|
}
|
|
1314
|
+
}
|
|
1315
|
+
s = InsertBlockInCompressedCache(block_contents, type, handle);
|
|
1316
|
+
if (!s.ok()) {
|
|
1317
|
+
r->SetStatus(s);
|
|
1318
|
+
return;
|
|
1319
|
+
}
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
r->set_offset(r->get_offset() + block_contents.size() + kBlockTrailerSize);
|
|
1323
|
+
if (r->table_options.block_align && is_data_block) {
|
|
1324
|
+
size_t pad_bytes =
|
|
1325
|
+
(r->alignment -
|
|
1326
|
+
((block_contents.size() + kBlockTrailerSize) & (r->alignment - 1))) &
|
|
1327
|
+
(r->alignment - 1);
|
|
1328
|
+
IOStatus io_s = r->file->Pad(pad_bytes);
|
|
1329
|
+
if (io_s.ok()) {
|
|
1330
|
+
r->set_offset(r->get_offset() + pad_bytes);
|
|
1223
1331
|
} else {
|
|
1224
1332
|
r->SetIOStatus(io_s);
|
|
1333
|
+
return;
|
|
1225
1334
|
}
|
|
1226
|
-
if (s.ok() && io_s.ok()) {
|
|
1227
|
-
r->set_offset(r->get_offset() + block_contents.size() +
|
|
1228
|
-
kBlockTrailerSize);
|
|
1229
|
-
if (r->table_options.block_align && is_data_block) {
|
|
1230
|
-
size_t pad_bytes =
|
|
1231
|
-
(r->alignment - ((block_contents.size() + kBlockTrailerSize) &
|
|
1232
|
-
(r->alignment - 1))) &
|
|
1233
|
-
(r->alignment - 1);
|
|
1234
|
-
io_s = r->file->Pad(pad_bytes);
|
|
1235
|
-
if (io_s.ok()) {
|
|
1236
|
-
r->set_offset(r->get_offset() + pad_bytes);
|
|
1237
|
-
} else {
|
|
1238
|
-
r->SetIOStatus(io_s);
|
|
1239
|
-
}
|
|
1240
|
-
}
|
|
1241
|
-
if (r->IsParallelCompressionEnabled()) {
|
|
1242
|
-
if (is_data_block) {
|
|
1243
|
-
r->pc_rep->file_size_estimator.ReapBlock(block_contents.size(),
|
|
1244
|
-
r->get_offset());
|
|
1245
|
-
} else {
|
|
1246
|
-
r->pc_rep->file_size_estimator.SetEstimatedFileSize(r->get_offset());
|
|
1247
|
-
}
|
|
1248
|
-
}
|
|
1249
|
-
}
|
|
1250
|
-
} else {
|
|
1251
|
-
r->SetIOStatus(io_s);
|
|
1252
1335
|
}
|
|
1253
|
-
|
|
1254
|
-
|
|
1336
|
+
|
|
1337
|
+
if (r->IsParallelCompressionEnabled()) {
|
|
1338
|
+
if (is_data_block) {
|
|
1339
|
+
r->pc_rep->file_size_estimator.ReapBlock(block_contents.size(),
|
|
1340
|
+
r->get_offset());
|
|
1341
|
+
} else {
|
|
1342
|
+
r->pc_rep->file_size_estimator.SetEstimatedFileSize(r->get_offset());
|
|
1343
|
+
}
|
|
1255
1344
|
}
|
|
1256
1345
|
}
|
|
1257
1346
|
|
|
@@ -1284,7 +1373,7 @@ void BlockBasedTableBuilder::BGWorkWriteRawBlock() {
|
|
|
1284
1373
|
|
|
1285
1374
|
r->pc_rep->file_size_estimator.SetCurrBlockRawSize(block_rep->data->size());
|
|
1286
1375
|
WriteRawBlock(block_rep->compressed_contents, block_rep->compression_type,
|
|
1287
|
-
&r->pending_handle,
|
|
1376
|
+
&r->pending_handle, BlockType::kData, &block_rep->contents);
|
|
1288
1377
|
if (!ok()) {
|
|
1289
1378
|
break;
|
|
1290
1379
|
}
|
|
@@ -1340,20 +1429,24 @@ IOStatus BlockBasedTableBuilder::io_status() const {
|
|
|
1340
1429
|
return rep_->GetIOStatus();
|
|
1341
1430
|
}
|
|
1342
1431
|
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1432
|
+
namespace {
|
|
1433
|
+
// Delete the entry resided in the cache.
|
|
1434
|
+
template <class Entry>
|
|
1435
|
+
void DeleteEntryCached(const Slice& /*key*/, void* value) {
|
|
1436
|
+
auto entry = reinterpret_cast<Entry*>(value);
|
|
1437
|
+
delete entry;
|
|
1346
1438
|
}
|
|
1439
|
+
} // namespace
|
|
1347
1440
|
|
|
1348
1441
|
//
|
|
1349
1442
|
// Make a copy of the block contents and insert into compressed block cache
|
|
1350
1443
|
//
|
|
1351
|
-
Status BlockBasedTableBuilder::
|
|
1352
|
-
|
|
1353
|
-
|
|
1444
|
+
Status BlockBasedTableBuilder::InsertBlockInCompressedCache(
|
|
1445
|
+
const Slice& block_contents, const CompressionType type,
|
|
1446
|
+
const BlockHandle* handle) {
|
|
1354
1447
|
Rep* r = rep_;
|
|
1355
1448
|
Cache* block_cache_compressed = r->table_options.block_cache_compressed.get();
|
|
1356
|
-
|
|
1449
|
+
Status s;
|
|
1357
1450
|
if (type != kNoCompression && block_cache_compressed != nullptr) {
|
|
1358
1451
|
size_t size = block_contents.size();
|
|
1359
1452
|
|
|
@@ -1368,42 +1461,139 @@ Status BlockBasedTableBuilder::InsertBlockInCache(const Slice& block_contents,
|
|
|
1368
1461
|
block_contents_to_cache->is_raw_block = true;
|
|
1369
1462
|
#endif // NDEBUG
|
|
1370
1463
|
|
|
1371
|
-
|
|
1372
|
-
char* end = EncodeVarint64(
|
|
1373
|
-
r->compressed_cache_key_prefix + r->compressed_cache_key_prefix_size,
|
|
1374
|
-
handle->offset());
|
|
1375
|
-
Slice key(r->compressed_cache_key_prefix,
|
|
1376
|
-
static_cast<size_t>(end - r->compressed_cache_key_prefix));
|
|
1377
|
-
|
|
1378
|
-
// Insert into compressed block cache.
|
|
1379
|
-
// How should we deal with compressed cache full?
|
|
1380
|
-
block_cache_compressed
|
|
1381
|
-
->Insert(key, block_contents_to_cache,
|
|
1382
|
-
block_contents_to_cache->ApproximateMemoryUsage(),
|
|
1383
|
-
&DeleteCachedBlockContents)
|
|
1384
|
-
.PermitUncheckedError();
|
|
1464
|
+
CacheKey key = BlockBasedTable::GetCacheKey(rep_->base_cache_key, *handle);
|
|
1385
1465
|
|
|
1466
|
+
s = block_cache_compressed->Insert(
|
|
1467
|
+
key.AsSlice(), block_contents_to_cache,
|
|
1468
|
+
block_contents_to_cache->ApproximateMemoryUsage(),
|
|
1469
|
+
&DeleteEntryCached<BlockContents>);
|
|
1470
|
+
if (s.ok()) {
|
|
1471
|
+
RecordTick(rep_->ioptions.stats, BLOCK_CACHE_COMPRESSED_ADD);
|
|
1472
|
+
} else {
|
|
1473
|
+
RecordTick(rep_->ioptions.stats, BLOCK_CACHE_COMPRESSED_ADD_FAILURES);
|
|
1474
|
+
}
|
|
1386
1475
|
// Invalidate OS cache.
|
|
1387
1476
|
r->file->InvalidateCache(static_cast<size_t>(r->get_offset()), size)
|
|
1388
1477
|
.PermitUncheckedError();
|
|
1389
1478
|
}
|
|
1390
|
-
return
|
|
1479
|
+
return s;
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
Status BlockBasedTableBuilder::InsertBlockInCacheHelper(
|
|
1483
|
+
const Slice& block_contents, const BlockHandle* handle,
|
|
1484
|
+
BlockType block_type, bool is_top_level_filter_block) {
|
|
1485
|
+
Status s;
|
|
1486
|
+
if (block_type == BlockType::kData || block_type == BlockType::kIndex) {
|
|
1487
|
+
s = InsertBlockInCache<Block>(block_contents, handle, block_type);
|
|
1488
|
+
} else if (block_type == BlockType::kFilter) {
|
|
1489
|
+
if (rep_->filter_builder->IsBlockBased()) {
|
|
1490
|
+
// for block-based filter which is deprecated.
|
|
1491
|
+
s = InsertBlockInCache<BlockContents>(block_contents, handle, block_type);
|
|
1492
|
+
} else if (is_top_level_filter_block) {
|
|
1493
|
+
// for top level filter block in partitioned filter.
|
|
1494
|
+
s = InsertBlockInCache<Block>(block_contents, handle, block_type);
|
|
1495
|
+
} else {
|
|
1496
|
+
// for second level partitioned filters and full filters.
|
|
1497
|
+
s = InsertBlockInCache<ParsedFullFilterBlock>(block_contents, handle,
|
|
1498
|
+
block_type);
|
|
1499
|
+
}
|
|
1500
|
+
} else if (block_type == BlockType::kCompressionDictionary) {
|
|
1501
|
+
s = InsertBlockInCache<UncompressionDict>(block_contents, handle,
|
|
1502
|
+
block_type);
|
|
1503
|
+
}
|
|
1504
|
+
return s;
|
|
1505
|
+
}
|
|
1506
|
+
|
|
1507
|
+
template <typename TBlocklike>
|
|
1508
|
+
Status BlockBasedTableBuilder::InsertBlockInCache(const Slice& block_contents,
|
|
1509
|
+
const BlockHandle* handle,
|
|
1510
|
+
BlockType block_type) {
|
|
1511
|
+
// Uncompressed regular block cache
|
|
1512
|
+
Cache* block_cache = rep_->table_options.block_cache.get();
|
|
1513
|
+
Status s;
|
|
1514
|
+
if (block_cache != nullptr) {
|
|
1515
|
+
size_t size = block_contents.size();
|
|
1516
|
+
auto buf = AllocateBlock(size, block_cache->memory_allocator());
|
|
1517
|
+
memcpy(buf.get(), block_contents.data(), size);
|
|
1518
|
+
BlockContents results(std::move(buf), size);
|
|
1519
|
+
|
|
1520
|
+
CacheKey key = BlockBasedTable::GetCacheKey(rep_->base_cache_key, *handle);
|
|
1521
|
+
|
|
1522
|
+
const size_t read_amp_bytes_per_bit =
|
|
1523
|
+
rep_->table_options.read_amp_bytes_per_bit;
|
|
1524
|
+
|
|
1525
|
+
// TODO akanksha:: Dedup below code by calling
|
|
1526
|
+
// BlockBasedTable::PutDataBlockToCache.
|
|
1527
|
+
std::unique_ptr<TBlocklike> block_holder(
|
|
1528
|
+
BlocklikeTraits<TBlocklike>::Create(
|
|
1529
|
+
std::move(results), read_amp_bytes_per_bit,
|
|
1530
|
+
rep_->ioptions.statistics.get(),
|
|
1531
|
+
false /*rep_->blocks_definitely_zstd_compressed*/,
|
|
1532
|
+
rep_->table_options.filter_policy.get()));
|
|
1533
|
+
|
|
1534
|
+
assert(block_holder->own_bytes());
|
|
1535
|
+
size_t charge = block_holder->ApproximateMemoryUsage();
|
|
1536
|
+
s = block_cache->Insert(
|
|
1537
|
+
key.AsSlice(), block_holder.get(),
|
|
1538
|
+
BlocklikeTraits<TBlocklike>::GetCacheItemHelper(block_type), charge,
|
|
1539
|
+
nullptr, Cache::Priority::LOW);
|
|
1540
|
+
|
|
1541
|
+
if (s.ok()) {
|
|
1542
|
+
// Release ownership of block_holder.
|
|
1543
|
+
block_holder.release();
|
|
1544
|
+
BlockBasedTable::UpdateCacheInsertionMetrics(
|
|
1545
|
+
block_type, nullptr /*get_context*/, charge, s.IsOkOverwritten(),
|
|
1546
|
+
rep_->ioptions.stats);
|
|
1547
|
+
} else {
|
|
1548
|
+
RecordTick(rep_->ioptions.stats, BLOCK_CACHE_ADD_FAILURES);
|
|
1549
|
+
}
|
|
1550
|
+
}
|
|
1551
|
+
return s;
|
|
1391
1552
|
}
|
|
1392
1553
|
|
|
1393
1554
|
void BlockBasedTableBuilder::WriteFilterBlock(
|
|
1394
1555
|
MetaIndexBuilder* meta_index_builder) {
|
|
1395
1556
|
BlockHandle filter_block_handle;
|
|
1396
|
-
bool empty_filter_block =
|
|
1397
|
-
|
|
1557
|
+
bool empty_filter_block =
|
|
1558
|
+
(rep_->filter_builder == nullptr || rep_->filter_builder->IsEmpty());
|
|
1398
1559
|
if (ok() && !empty_filter_block) {
|
|
1560
|
+
rep_->props.num_filter_entries +=
|
|
1561
|
+
rep_->filter_builder->EstimateEntriesAdded();
|
|
1399
1562
|
Status s = Status::Incomplete();
|
|
1400
1563
|
while (ok() && s.IsIncomplete()) {
|
|
1564
|
+
// filter_data is used to store the transferred filter data payload from
|
|
1565
|
+
// FilterBlockBuilder and deallocate the payload by going out of scope.
|
|
1566
|
+
// Otherwise, the payload will unnecessarily remain until
|
|
1567
|
+
// BlockBasedTableBuilder is deallocated.
|
|
1568
|
+
//
|
|
1569
|
+
// See FilterBlockBuilder::Finish() for more on the difference in
|
|
1570
|
+
// transferred filter data payload among different FilterBlockBuilder
|
|
1571
|
+
// subtypes.
|
|
1572
|
+
std::unique_ptr<const char[]> filter_data;
|
|
1401
1573
|
Slice filter_content =
|
|
1402
|
-
rep_->filter_builder->Finish(filter_block_handle, &s);
|
|
1403
|
-
|
|
1574
|
+
rep_->filter_builder->Finish(filter_block_handle, &s, &filter_data);
|
|
1575
|
+
|
|
1576
|
+
assert(s.ok() || s.IsIncomplete() || s.IsCorruption());
|
|
1577
|
+
if (s.IsCorruption()) {
|
|
1578
|
+
rep_->SetStatus(s);
|
|
1579
|
+
break;
|
|
1580
|
+
}
|
|
1581
|
+
|
|
1404
1582
|
rep_->props.filter_size += filter_content.size();
|
|
1405
|
-
|
|
1583
|
+
|
|
1584
|
+
// TODO: Refactor code so that BlockType can determine both the C++ type
|
|
1585
|
+
// of a block cache entry (TBlocklike) and the CacheEntryRole while
|
|
1586
|
+
// inserting blocks in cache.
|
|
1587
|
+
bool top_level_filter_block = false;
|
|
1588
|
+
if (s.ok() && rep_->table_options.partition_filters &&
|
|
1589
|
+
!rep_->filter_builder->IsBlockBased()) {
|
|
1590
|
+
top_level_filter_block = true;
|
|
1591
|
+
}
|
|
1592
|
+
WriteRawBlock(filter_content, kNoCompression, &filter_block_handle,
|
|
1593
|
+
BlockType::kFilter, nullptr /*raw_contents*/,
|
|
1594
|
+
top_level_filter_block);
|
|
1406
1595
|
}
|
|
1596
|
+
rep_->filter_builder->ResetFilterBitsBuilder();
|
|
1407
1597
|
}
|
|
1408
1598
|
if (ok() && !empty_filter_block) {
|
|
1409
1599
|
// Add mapping from "<filter_block_prefix>.Name" to location
|
|
@@ -1416,13 +1606,16 @@ void BlockBasedTableBuilder::WriteFilterBlock(
|
|
|
1416
1606
|
? BlockBasedTable::kPartitionedFilterBlockPrefix
|
|
1417
1607
|
: BlockBasedTable::kFullFilterBlockPrefix;
|
|
1418
1608
|
}
|
|
1419
|
-
key.append(rep_->table_options.filter_policy->
|
|
1609
|
+
key.append(rep_->table_options.filter_policy->CompatibilityName());
|
|
1420
1610
|
meta_index_builder->Add(key, filter_block_handle);
|
|
1421
1611
|
}
|
|
1422
1612
|
}
|
|
1423
1613
|
|
|
1424
1614
|
void BlockBasedTableBuilder::WriteIndexBlock(
|
|
1425
1615
|
MetaIndexBuilder* meta_index_builder, BlockHandle* index_block_handle) {
|
|
1616
|
+
if (!ok()) {
|
|
1617
|
+
return;
|
|
1618
|
+
}
|
|
1426
1619
|
IndexBuilder::IndexBlocks index_blocks;
|
|
1427
1620
|
auto index_builder_status = rep_->index_builder->Finish(&index_blocks);
|
|
1428
1621
|
if (index_builder_status.IsIncomplete()) {
|
|
@@ -1436,7 +1629,7 @@ void BlockBasedTableBuilder::WriteIndexBlock(
|
|
|
1436
1629
|
if (ok()) {
|
|
1437
1630
|
for (const auto& item : index_blocks.meta_blocks) {
|
|
1438
1631
|
BlockHandle block_handle;
|
|
1439
|
-
WriteBlock(item.second, &block_handle,
|
|
1632
|
+
WriteBlock(item.second, &block_handle, BlockType::kIndex);
|
|
1440
1633
|
if (!ok()) {
|
|
1441
1634
|
break;
|
|
1442
1635
|
}
|
|
@@ -1445,27 +1638,36 @@ void BlockBasedTableBuilder::WriteIndexBlock(
|
|
|
1445
1638
|
}
|
|
1446
1639
|
if (ok()) {
|
|
1447
1640
|
if (rep_->table_options.enable_index_compression) {
|
|
1448
|
-
WriteBlock(index_blocks.index_block_contents, index_block_handle,
|
|
1641
|
+
WriteBlock(index_blocks.index_block_contents, index_block_handle,
|
|
1642
|
+
BlockType::kIndex);
|
|
1449
1643
|
} else {
|
|
1450
1644
|
WriteRawBlock(index_blocks.index_block_contents, kNoCompression,
|
|
1451
|
-
index_block_handle);
|
|
1645
|
+
index_block_handle, BlockType::kIndex);
|
|
1452
1646
|
}
|
|
1453
1647
|
}
|
|
1454
1648
|
// If there are more index partitions, finish them and write them out
|
|
1455
1649
|
if (index_builder_status.IsIncomplete()) {
|
|
1456
|
-
|
|
1457
|
-
while (ok() &&
|
|
1458
|
-
s =
|
|
1459
|
-
|
|
1650
|
+
bool index_building_finished = false;
|
|
1651
|
+
while (ok() && !index_building_finished) {
|
|
1652
|
+
Status s =
|
|
1653
|
+
rep_->index_builder->Finish(&index_blocks, *index_block_handle);
|
|
1654
|
+
if (s.ok()) {
|
|
1655
|
+
index_building_finished = true;
|
|
1656
|
+
} else if (s.IsIncomplete()) {
|
|
1657
|
+
// More partitioned index after this one
|
|
1658
|
+
assert(!index_building_finished);
|
|
1659
|
+
} else {
|
|
1660
|
+
// Error
|
|
1460
1661
|
rep_->SetStatus(s);
|
|
1461
1662
|
return;
|
|
1462
1663
|
}
|
|
1664
|
+
|
|
1463
1665
|
if (rep_->table_options.enable_index_compression) {
|
|
1464
1666
|
WriteBlock(index_blocks.index_block_contents, index_block_handle,
|
|
1465
|
-
|
|
1667
|
+
BlockType::kIndex);
|
|
1466
1668
|
} else {
|
|
1467
1669
|
WriteRawBlock(index_blocks.index_block_contents, kNoCompression,
|
|
1468
|
-
index_block_handle);
|
|
1670
|
+
index_block_handle, BlockType::kIndex);
|
|
1469
1671
|
}
|
|
1470
1672
|
// The last index_block_handle will be for the partition index block
|
|
1471
1673
|
}
|
|
@@ -1477,8 +1679,6 @@ void BlockBasedTableBuilder::WritePropertiesBlock(
|
|
|
1477
1679
|
BlockHandle properties_block_handle;
|
|
1478
1680
|
if (ok()) {
|
|
1479
1681
|
PropertyBlockBuilder property_block_builder;
|
|
1480
|
-
rep_->props.column_family_id = rep_->column_family_id;
|
|
1481
|
-
rep_->props.column_family_name = rep_->column_family_name;
|
|
1482
1682
|
rep_->props.filter_policy_name =
|
|
1483
1683
|
rep_->table_options.filter_policy != nullptr
|
|
1484
1684
|
? rep_->table_options.filter_policy->Name()
|
|
@@ -1498,9 +1698,8 @@ void BlockBasedTableBuilder::WritePropertiesBlock(
|
|
|
1498
1698
|
CompressionOptionsToString(rep_->compression_opts);
|
|
1499
1699
|
rep_->props.prefix_extractor_name =
|
|
1500
1700
|
rep_->moptions.prefix_extractor != nullptr
|
|
1501
|
-
? rep_->moptions.prefix_extractor->
|
|
1701
|
+
? rep_->moptions.prefix_extractor->AsString()
|
|
1502
1702
|
: "nullptr";
|
|
1503
|
-
|
|
1504
1703
|
std::string property_collectors_names = "[";
|
|
1505
1704
|
for (size_t i = 0;
|
|
1506
1705
|
i < rep_->ioptions.table_properties_collector_factories.size(); ++i) {
|
|
@@ -1523,23 +1722,41 @@ void BlockBasedTableBuilder::WritePropertiesBlock(
|
|
|
1523
1722
|
!rep_->index_builder->seperator_is_key_plus_seq();
|
|
1524
1723
|
rep_->props.index_value_is_delta_encoded =
|
|
1525
1724
|
rep_->use_delta_encoding_for_index_values;
|
|
1526
|
-
rep_->
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1725
|
+
if (rep_->sampled_input_data_bytes > 0) {
|
|
1726
|
+
rep_->props.slow_compression_estimated_data_size = static_cast<uint64_t>(
|
|
1727
|
+
static_cast<double>(rep_->sampled_output_slow_data_bytes) /
|
|
1728
|
+
rep_->sampled_input_data_bytes *
|
|
1729
|
+
rep_->compressible_input_data_bytes +
|
|
1730
|
+
rep_->uncompressible_input_data_bytes + 0.5);
|
|
1731
|
+
rep_->props.fast_compression_estimated_data_size = static_cast<uint64_t>(
|
|
1732
|
+
static_cast<double>(rep_->sampled_output_fast_data_bytes) /
|
|
1733
|
+
rep_->sampled_input_data_bytes *
|
|
1734
|
+
rep_->compressible_input_data_bytes +
|
|
1735
|
+
rep_->uncompressible_input_data_bytes + 0.5);
|
|
1736
|
+
} else if (rep_->sample_for_compression > 0) {
|
|
1737
|
+
// We tried to sample but none were found. Assume worst-case (compression
|
|
1738
|
+
// ratio 1.0) so data is complete and aggregatable.
|
|
1739
|
+
rep_->props.slow_compression_estimated_data_size =
|
|
1740
|
+
rep_->compressible_input_data_bytes +
|
|
1741
|
+
rep_->uncompressible_input_data_bytes;
|
|
1742
|
+
rep_->props.fast_compression_estimated_data_size =
|
|
1743
|
+
rep_->compressible_input_data_bytes +
|
|
1744
|
+
rep_->uncompressible_input_data_bytes;
|
|
1745
|
+
}
|
|
1532
1746
|
|
|
1533
1747
|
// Add basic properties
|
|
1534
1748
|
property_block_builder.AddTableProperty(rep_->props);
|
|
1535
1749
|
|
|
1536
1750
|
// Add use collected properties
|
|
1537
1751
|
NotifyCollectTableCollectorsOnFinish(rep_->table_properties_collectors,
|
|
1538
|
-
rep_->ioptions.
|
|
1752
|
+
rep_->ioptions.logger,
|
|
1539
1753
|
&property_block_builder);
|
|
1540
1754
|
|
|
1541
|
-
|
|
1542
|
-
|
|
1755
|
+
Slice block_data = property_block_builder.Finish();
|
|
1756
|
+
TEST_SYNC_POINT_CALLBACK(
|
|
1757
|
+
"BlockBasedTableBuilder::WritePropertiesBlock:BlockData", &block_data);
|
|
1758
|
+
WriteRawBlock(block_data, kNoCompression, &properties_block_handle,
|
|
1759
|
+
BlockType::kProperties);
|
|
1543
1760
|
}
|
|
1544
1761
|
if (ok()) {
|
|
1545
1762
|
#ifndef NDEBUG
|
|
@@ -1554,7 +1771,12 @@ void BlockBasedTableBuilder::WritePropertiesBlock(
|
|
|
1554
1771
|
&props_block_size);
|
|
1555
1772
|
}
|
|
1556
1773
|
#endif // !NDEBUG
|
|
1557
|
-
|
|
1774
|
+
|
|
1775
|
+
const std::string* properties_block_meta = &kPropertiesBlockName;
|
|
1776
|
+
TEST_SYNC_POINT_CALLBACK(
|
|
1777
|
+
"BlockBasedTableBuilder::WritePropertiesBlock:Meta",
|
|
1778
|
+
&properties_block_meta);
|
|
1779
|
+
meta_index_builder->Add(*properties_block_meta, properties_block_handle);
|
|
1558
1780
|
}
|
|
1559
1781
|
}
|
|
1560
1782
|
|
|
@@ -1565,7 +1787,8 @@ void BlockBasedTableBuilder::WriteCompressionDictBlock(
|
|
|
1565
1787
|
BlockHandle compression_dict_block_handle;
|
|
1566
1788
|
if (ok()) {
|
|
1567
1789
|
WriteRawBlock(rep_->compression_dict->GetRawDict(), kNoCompression,
|
|
1568
|
-
&compression_dict_block_handle
|
|
1790
|
+
&compression_dict_block_handle,
|
|
1791
|
+
BlockType::kCompressionDictionary);
|
|
1569
1792
|
#ifndef NDEBUG
|
|
1570
1793
|
Slice compression_dict = rep_->compression_dict->GetRawDict();
|
|
1571
1794
|
TEST_SYNC_POINT_CALLBACK(
|
|
@@ -1574,7 +1797,7 @@ void BlockBasedTableBuilder::WriteCompressionDictBlock(
|
|
|
1574
1797
|
#endif // NDEBUG
|
|
1575
1798
|
}
|
|
1576
1799
|
if (ok()) {
|
|
1577
|
-
meta_index_builder->Add(
|
|
1800
|
+
meta_index_builder->Add(kCompressionDictBlockName,
|
|
1578
1801
|
compression_dict_block_handle);
|
|
1579
1802
|
}
|
|
1580
1803
|
}
|
|
@@ -1585,40 +1808,28 @@ void BlockBasedTableBuilder::WriteRangeDelBlock(
|
|
|
1585
1808
|
if (ok() && !rep_->range_del_block.empty()) {
|
|
1586
1809
|
BlockHandle range_del_block_handle;
|
|
1587
1810
|
WriteRawBlock(rep_->range_del_block.Finish(), kNoCompression,
|
|
1588
|
-
&range_del_block_handle);
|
|
1589
|
-
meta_index_builder->Add(
|
|
1811
|
+
&range_del_block_handle, BlockType::kRangeDeletion);
|
|
1812
|
+
meta_index_builder->Add(kRangeDelBlockName, range_del_block_handle);
|
|
1590
1813
|
}
|
|
1591
1814
|
}
|
|
1592
1815
|
|
|
1593
1816
|
void BlockBasedTableBuilder::WriteFooter(BlockHandle& metaindex_block_handle,
|
|
1594
1817
|
BlockHandle& index_block_handle) {
|
|
1595
1818
|
Rep* r = rep_;
|
|
1596
|
-
// No need to write out new footer if we're using default checksum.
|
|
1597
|
-
// We're writing legacy magic number because we want old versions of RocksDB
|
|
1598
|
-
// be able to read files generated with new release (just in case if
|
|
1599
|
-
// somebody wants to roll back after an upgrade)
|
|
1600
|
-
// TODO(icanadi) at some point in the future, when we're absolutely sure
|
|
1601
|
-
// nobody will roll back to RocksDB 2.x versions, retire the legacy magic
|
|
1602
|
-
// number and always write new table files with new magic number
|
|
1603
|
-
bool legacy = (r->table_options.format_version == 0);
|
|
1604
1819
|
// this is guaranteed by BlockBasedTableBuilder's constructor
|
|
1605
1820
|
assert(r->table_options.checksum == kCRC32c ||
|
|
1606
1821
|
r->table_options.format_version != 0);
|
|
1607
|
-
Footer footer(
|
|
1608
|
-
legacy ? kLegacyBlockBasedTableMagicNumber : kBlockBasedTableMagicNumber,
|
|
1609
|
-
r->table_options.format_version);
|
|
1610
|
-
footer.set_metaindex_handle(metaindex_block_handle);
|
|
1611
|
-
footer.set_index_handle(index_block_handle);
|
|
1612
|
-
footer.set_checksum(r->table_options.checksum);
|
|
1613
|
-
std::string footer_encoding;
|
|
1614
|
-
footer.EncodeTo(&footer_encoding);
|
|
1615
1822
|
assert(ok());
|
|
1616
|
-
|
|
1823
|
+
|
|
1824
|
+
FooterBuilder footer;
|
|
1825
|
+
footer.Build(kBlockBasedTableMagicNumber, r->table_options.format_version,
|
|
1826
|
+
r->get_offset(), r->table_options.checksum,
|
|
1827
|
+
metaindex_block_handle, index_block_handle);
|
|
1828
|
+
IOStatus ios = r->file->Append(footer.GetSlice());
|
|
1617
1829
|
if (ios.ok()) {
|
|
1618
|
-
r->set_offset(r->get_offset() +
|
|
1830
|
+
r->set_offset(r->get_offset() + footer.GetSlice().size());
|
|
1619
1831
|
} else {
|
|
1620
1832
|
r->SetIOStatus(ios);
|
|
1621
|
-
r->SetStatus(ios);
|
|
1622
1833
|
}
|
|
1623
1834
|
}
|
|
1624
1835
|
|
|
@@ -1629,20 +1840,45 @@ void BlockBasedTableBuilder::EnterUnbuffered() {
|
|
|
1629
1840
|
const size_t kSampleBytes = r->compression_opts.zstd_max_train_bytes > 0
|
|
1630
1841
|
? r->compression_opts.zstd_max_train_bytes
|
|
1631
1842
|
: r->compression_opts.max_dict_bytes;
|
|
1632
|
-
|
|
1843
|
+
const size_t kNumBlocksBuffered = r->data_block_buffers.size();
|
|
1844
|
+
if (kNumBlocksBuffered == 0) {
|
|
1845
|
+
// The below code is neither safe nor necessary for handling zero data
|
|
1846
|
+
// blocks.
|
|
1847
|
+
return;
|
|
1848
|
+
}
|
|
1849
|
+
|
|
1850
|
+
// Abstract algebra teaches us that a finite cyclic group (such as the
|
|
1851
|
+
// additive group of integers modulo N) can be generated by a number that is
|
|
1852
|
+
// coprime with N. Since N is variable (number of buffered data blocks), we
|
|
1853
|
+
// must then pick a prime number in order to guarantee coprimeness with any N.
|
|
1854
|
+
//
|
|
1855
|
+
// One downside of this approach is the spread will be poor when
|
|
1856
|
+
// `kPrimeGeneratorRemainder` is close to zero or close to
|
|
1857
|
+
// `kNumBlocksBuffered`.
|
|
1858
|
+
//
|
|
1859
|
+
// Picked a random number between one and one trillion and then chose the
|
|
1860
|
+
// next prime number greater than or equal to it.
|
|
1861
|
+
const uint64_t kPrimeGenerator = 545055921143ull;
|
|
1862
|
+
// Can avoid repeated division by just adding the remainder repeatedly.
|
|
1863
|
+
const size_t kPrimeGeneratorRemainder = static_cast<size_t>(
|
|
1864
|
+
kPrimeGenerator % static_cast<uint64_t>(kNumBlocksBuffered));
|
|
1865
|
+
const size_t kInitSampleIdx = kNumBlocksBuffered / 2;
|
|
1866
|
+
|
|
1633
1867
|
std::string compression_dict_samples;
|
|
1634
1868
|
std::vector<size_t> compression_dict_sample_lens;
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1869
|
+
size_t buffer_idx = kInitSampleIdx;
|
|
1870
|
+
for (size_t i = 0;
|
|
1871
|
+
i < kNumBlocksBuffered && compression_dict_samples.size() < kSampleBytes;
|
|
1872
|
+
++i) {
|
|
1873
|
+
size_t copy_len = std::min(kSampleBytes - compression_dict_samples.size(),
|
|
1874
|
+
r->data_block_buffers[buffer_idx].size());
|
|
1875
|
+
compression_dict_samples.append(r->data_block_buffers[buffer_idx], 0,
|
|
1876
|
+
copy_len);
|
|
1877
|
+
compression_dict_sample_lens.emplace_back(copy_len);
|
|
1878
|
+
|
|
1879
|
+
buffer_idx += kPrimeGeneratorRemainder;
|
|
1880
|
+
if (buffer_idx >= kNumBlocksBuffered) {
|
|
1881
|
+
buffer_idx -= kNumBlocksBuffered;
|
|
1646
1882
|
}
|
|
1647
1883
|
}
|
|
1648
1884
|
|
|
@@ -1662,30 +1898,58 @@ void BlockBasedTableBuilder::EnterUnbuffered() {
|
|
|
1662
1898
|
dict, r->compression_type == kZSTD ||
|
|
1663
1899
|
r->compression_type == kZSTDNotFinalCompression));
|
|
1664
1900
|
|
|
1665
|
-
|
|
1666
|
-
auto& data_block = r->
|
|
1667
|
-
auto& keys = r->data_block_and_keys_buffers[i].second;
|
|
1901
|
+
auto get_iterator_for_block = [&r](size_t i) {
|
|
1902
|
+
auto& data_block = r->data_block_buffers[i];
|
|
1668
1903
|
assert(!data_block.empty());
|
|
1669
|
-
|
|
1904
|
+
|
|
1905
|
+
Block reader{BlockContents{data_block}};
|
|
1906
|
+
DataBlockIter* iter = reader.NewDataIterator(
|
|
1907
|
+
r->internal_comparator.user_comparator(), kDisableGlobalSequenceNumber);
|
|
1908
|
+
|
|
1909
|
+
iter->SeekToFirst();
|
|
1910
|
+
assert(iter->Valid());
|
|
1911
|
+
return std::unique_ptr<DataBlockIter>(iter);
|
|
1912
|
+
};
|
|
1913
|
+
|
|
1914
|
+
std::unique_ptr<DataBlockIter> iter = nullptr, next_block_iter = nullptr;
|
|
1915
|
+
|
|
1916
|
+
for (size_t i = 0; ok() && i < r->data_block_buffers.size(); ++i) {
|
|
1917
|
+
if (iter == nullptr) {
|
|
1918
|
+
iter = get_iterator_for_block(i);
|
|
1919
|
+
assert(iter != nullptr);
|
|
1920
|
+
};
|
|
1921
|
+
|
|
1922
|
+
if (i + 1 < r->data_block_buffers.size()) {
|
|
1923
|
+
next_block_iter = get_iterator_for_block(i + 1);
|
|
1924
|
+
}
|
|
1925
|
+
|
|
1926
|
+
auto& data_block = r->data_block_buffers[i];
|
|
1670
1927
|
|
|
1671
1928
|
if (r->IsParallelCompressionEnabled()) {
|
|
1672
1929
|
Slice first_key_in_next_block;
|
|
1673
1930
|
const Slice* first_key_in_next_block_ptr = &first_key_in_next_block;
|
|
1674
|
-
if (i + 1 < r->
|
|
1675
|
-
|
|
1676
|
-
|
|
1931
|
+
if (i + 1 < r->data_block_buffers.size()) {
|
|
1932
|
+
assert(next_block_iter != nullptr);
|
|
1933
|
+
first_key_in_next_block = next_block_iter->key();
|
|
1677
1934
|
} else {
|
|
1678
1935
|
first_key_in_next_block_ptr = r->first_key_in_next_block;
|
|
1679
1936
|
}
|
|
1680
1937
|
|
|
1938
|
+
std::vector<std::string> keys;
|
|
1939
|
+
for (; iter->Valid(); iter->Next()) {
|
|
1940
|
+
keys.emplace_back(iter->key().ToString());
|
|
1941
|
+
}
|
|
1942
|
+
|
|
1681
1943
|
ParallelCompressionRep::BlockRep* block_rep = r->pc_rep->PrepareBlock(
|
|
1682
1944
|
r->compression_type, first_key_in_next_block_ptr, &data_block, &keys);
|
|
1945
|
+
|
|
1683
1946
|
assert(block_rep != nullptr);
|
|
1684
1947
|
r->pc_rep->file_size_estimator.EmitBlock(block_rep->data->size(),
|
|
1685
1948
|
r->get_offset());
|
|
1686
1949
|
r->pc_rep->EmitBlock(block_rep);
|
|
1687
1950
|
} else {
|
|
1688
|
-
for (
|
|
1951
|
+
for (; iter->Valid(); iter->Next()) {
|
|
1952
|
+
Slice key = iter->key();
|
|
1689
1953
|
if (r->filter_builder != nullptr) {
|
|
1690
1954
|
size_t ts_sz =
|
|
1691
1955
|
r->internal_comparator.user_comparator()->timestamp_size();
|
|
@@ -1693,18 +1957,29 @@ void BlockBasedTableBuilder::EnterUnbuffered() {
|
|
|
1693
1957
|
}
|
|
1694
1958
|
r->index_builder->OnKeyAdded(key);
|
|
1695
1959
|
}
|
|
1696
|
-
WriteBlock(Slice(data_block), &r->pending_handle,
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
Slice first_key_in_next_block =
|
|
1700
|
-
|
|
1960
|
+
WriteBlock(Slice(data_block), &r->pending_handle, BlockType::kData);
|
|
1961
|
+
if (ok() && i + 1 < r->data_block_buffers.size()) {
|
|
1962
|
+
assert(next_block_iter != nullptr);
|
|
1963
|
+
Slice first_key_in_next_block = next_block_iter->key();
|
|
1964
|
+
|
|
1701
1965
|
Slice* first_key_in_next_block_ptr = &first_key_in_next_block;
|
|
1702
|
-
|
|
1703
|
-
|
|
1966
|
+
|
|
1967
|
+
iter->SeekToLast();
|
|
1968
|
+
std::string last_key = iter->key().ToString();
|
|
1969
|
+
r->index_builder->AddIndexEntry(&last_key, first_key_in_next_block_ptr,
|
|
1970
|
+
r->pending_handle);
|
|
1704
1971
|
}
|
|
1705
1972
|
}
|
|
1973
|
+
std::swap(iter, next_block_iter);
|
|
1974
|
+
}
|
|
1975
|
+
r->data_block_buffers.clear();
|
|
1976
|
+
r->data_begin_offset = 0;
|
|
1977
|
+
// Release all reserved cache for data block buffers
|
|
1978
|
+
if (r->compression_dict_buffer_cache_res_mgr != nullptr) {
|
|
1979
|
+
Status s = r->compression_dict_buffer_cache_res_mgr->UpdateCacheReservation(
|
|
1980
|
+
r->data_begin_offset);
|
|
1981
|
+
s.PermitUncheckedError();
|
|
1706
1982
|
}
|
|
1707
|
-
r->data_block_and_keys_buffers.clear();
|
|
1708
1983
|
}
|
|
1709
1984
|
|
|
1710
1985
|
Status BlockBasedTableBuilder::Finish() {
|
|
@@ -1750,7 +2025,7 @@ Status BlockBasedTableBuilder::Finish() {
|
|
|
1750
2025
|
if (ok()) {
|
|
1751
2026
|
// flush the meta index block
|
|
1752
2027
|
WriteRawBlock(meta_index_builder.Finish(), kNoCompression,
|
|
1753
|
-
&metaindex_block_handle);
|
|
2028
|
+
&metaindex_block_handle, BlockType::kMetaIndex);
|
|
1754
2029
|
}
|
|
1755
2030
|
if (ok()) {
|
|
1756
2031
|
WriteFooter(metaindex_block_handle, index_block_handle);
|