@nxtedition/rocksdb 13.5.7 → 13.5.9
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 +248 -70
- package/binding.gyp +2 -2
- package/deps/rocksdb/rocksdb/BUCK +12 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -0
- package/deps/rocksdb/rocksdb/Makefile +28 -23
- package/deps/rocksdb/rocksdb/cache/cache.cc +0 -1
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +1 -2
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +43 -39
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +2 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +0 -1
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +2 -3
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -2
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +1 -3
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +11 -1
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +13 -5
- package/deps/rocksdb/rocksdb/crash_test.mk +61 -15
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +136 -45
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +34 -16
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +10 -7
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +12 -9
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/builder.cc +22 -8
- package/deps/rocksdb/rocksdb/db/builder.h +5 -4
- package/deps/rocksdb/rocksdb/db/c.cc +556 -15
- package/deps/rocksdb/rocksdb/db/c_test.c +133 -12
- package/deps/rocksdb/rocksdb/db/column_family.cc +114 -50
- package/deps/rocksdb/rocksdb/db/column_family.h +53 -36
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +95 -70
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +71 -51
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -86
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +26 -68
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +0 -122
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +453 -258
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +117 -92
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +38 -38
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +24 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +34 -45
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +32 -31
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +10 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +82 -34
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +267 -179
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +273 -89
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +300 -14
- package/deps/rocksdb/rocksdb/db/compaction/compaction_state.cc +4 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_state.h +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +28 -23
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +69 -51
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +522 -245
- package/deps/rocksdb/rocksdb/db/convenience.cc +15 -4
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +1 -3
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +196 -17
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +74 -62
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +48 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +682 -250
- package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +11 -16
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +57 -0
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +540 -490
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +347 -188
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +584 -217
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +13 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -7
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +40 -36
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +751 -372
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +35 -32
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +24 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +125 -63
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +311 -196
- package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +15 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +42 -29
- package/deps/rocksdb/rocksdb/db/db_iter.h +96 -31
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +168 -228
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +454 -0
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +90 -0
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +60 -2
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +7 -3
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +85 -27
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -1
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +114 -2
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +51 -3
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_test.cc +325 -18
- package/deps/rocksdb/rocksdb/db/db_test2.cc +644 -20
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
- package/deps/rocksdb/rocksdb/db/db_test_util.h +9 -0
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +64 -45
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +203 -14
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +259 -30
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +75 -1
- package/deps/rocksdb/rocksdb/db/dbformat.h +70 -6
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +0 -190
- package/deps/rocksdb/rocksdb/db/error_handler.cc +22 -7
- package/deps/rocksdb/rocksdb/db/error_handler.h +16 -1
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +41 -26
- package/deps/rocksdb/rocksdb/db/experimental.cc +4 -3
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +464 -78
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +166 -69
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +54 -25
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -3
- package/deps/rocksdb/rocksdb/db/flush_job.cc +98 -81
- package/deps/rocksdb/rocksdb/db/flush_job.h +4 -9
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +80 -84
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +2 -2
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +12 -19
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +41 -15
- package/deps/rocksdb/rocksdb/db/internal_stats.h +63 -52
- package/deps/rocksdb/rocksdb/db/job_context.h +59 -24
- package/deps/rocksdb/rocksdb/db/listener_test.cc +69 -10
- package/deps/rocksdb/rocksdb/db/log_format.h +11 -2
- package/deps/rocksdb/rocksdb/db/log_reader.cc +147 -34
- package/deps/rocksdb/rocksdb/db/log_reader.h +40 -11
- package/deps/rocksdb/rocksdb/db/log_test.cc +16 -3
- package/deps/rocksdb/rocksdb/db/log_writer.cc +102 -55
- package/deps/rocksdb/rocksdb/db/log_writer.h +21 -2
- package/deps/rocksdb/rocksdb/db/malloc_stats.h +0 -2
- package/deps/rocksdb/rocksdb/db/memtable.cc +16 -47
- package/deps/rocksdb/rocksdb/db/memtable.h +76 -12
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +23 -20
- package/deps/rocksdb/rocksdb/db/memtable_list.h +9 -11
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +18 -37
- package/deps/rocksdb/rocksdb/db/merge_context.h +2 -1
- package/deps/rocksdb/rocksdb/db/merge_test.cc +8 -0
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +3 -5
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +15 -7
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +6 -3
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +22 -4
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +41 -1
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/repair.cc +29 -34
- package/deps/rocksdb/rocksdb/db/repair_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +14 -15
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +1 -3
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +47 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +3 -3
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +1 -3
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_builder.cc +2 -2
- package/deps/rocksdb/rocksdb/db/version_edit.cc +8 -37
- package/deps/rocksdb/rocksdb/db/version_edit.h +32 -1
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +26 -18
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -5
- package/deps/rocksdb/rocksdb/db/version_set.cc +282 -197
- package/deps/rocksdb/rocksdb/db/version_set.h +54 -57
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +28 -35
- package/deps/rocksdb/rocksdb/db/version_util.h +2 -3
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +3 -2
- package/deps/rocksdb/rocksdb/db/wal_manager.h +0 -1
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +1 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +22 -8
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +5 -4
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +7 -6
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/write_thread.h +3 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +13 -5
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +9 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_service.h +39 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compression_manager.h +65 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +45 -22
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +7 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +22 -5
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +28 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -38
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +80 -32
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +51 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +23 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +305 -15
- package/deps/rocksdb/rocksdb/env/env.cc +32 -2
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +0 -2
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +2 -4
- package/deps/rocksdb/rocksdb/env/env_posix.cc +4 -2
- package/deps/rocksdb/rocksdb/env/env_test.cc +0 -1
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +20 -11
- package/deps/rocksdb/rocksdb/env/fs_readonly.h +0 -2
- package/deps/rocksdb/rocksdb/env/fs_remap.cc +0 -2
- package/deps/rocksdb/rocksdb/env/fs_remap.h +0 -2
- package/deps/rocksdb/rocksdb/env/io_posix.cc +6 -4
- package/deps/rocksdb/rocksdb/env/io_posix.h +3 -2
- package/deps/rocksdb/rocksdb/env/mock_env.cc +0 -1
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +2 -2
- package/deps/rocksdb/rocksdb/file/delete_scheduler.h +0 -2
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +0 -2
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +30 -21
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +16 -0
- package/deps/rocksdb/rocksdb/file/file_util.cc +32 -14
- package/deps/rocksdb/rocksdb/file/file_util.h +22 -5
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +229 -76
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +21 -12
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +10 -7
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +12 -8
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +1 -2
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +0 -2
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +598 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_iterator.h +36 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +70 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +232 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +149 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +17 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +132 -34
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +158 -79
- package/deps/rocksdb/rocksdb/include/rocksdb/db_bench_tool.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +4 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +1 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +275 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +50 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +10 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +5 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/multi_scan.h +237 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +230 -39
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +31 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +41 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_dump_tool.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +5 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +18 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +20 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +19 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +124 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +26 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +55 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/debug.h +3 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +0 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index.h +96 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index_faiss.h +117 -0
- package/deps/rocksdb/rocksdb/{utilities/secondary_index/faiss_ivf_index.h → include/rocksdb/utilities/secondary_index_simple.h} +11 -14
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +26 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +16 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +63 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +28 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +3 -3
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +0 -2
- package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -2
- package/deps/rocksdb/rocksdb/memory/memory_allocator_impl.h +1 -1
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +0 -1
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +0 -1
- package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +3 -1
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +2 -2
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +2 -4
- package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +69 -8
- package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.cc +32 -9
- package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.h +58 -45
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +5 -3
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +5 -0
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +1 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +3 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +44 -13
- package/deps/rocksdb/rocksdb/options/cf_options.h +21 -7
- package/deps/rocksdb/rocksdb/options/configurable.cc +5 -5
- package/deps/rocksdb/rocksdb/options/configurable_test.h +1 -2
- package/deps/rocksdb/rocksdb/options/customizable.cc +0 -1
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -11
- package/deps/rocksdb/rocksdb/options/db_options.cc +18 -15
- package/deps/rocksdb/rocksdb/options/db_options.h +2 -2
- package/deps/rocksdb/rocksdb/options/options.cc +296 -305
- package/deps/rocksdb/rocksdb/options/options_helper.cc +188 -62
- package/deps/rocksdb/rocksdb/options/options_helper.h +3 -3
- package/deps/rocksdb/rocksdb/options/options_parser.cc +2 -4
- package/deps/rocksdb/rocksdb/options/options_parser.h +0 -1
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +17 -4
- package/deps/rocksdb/rocksdb/options/options_test.cc +101 -76
- package/deps/rocksdb/rocksdb/port/lang.h +2 -1
- package/deps/rocksdb/rocksdb/port/port_posix.cc +2 -1
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +5 -4
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +3 -2
- package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +99 -1
- package/deps/rocksdb/rocksdb/port/win/xpress_win.h +6 -0
- package/deps/rocksdb/rocksdb/src.mk +17 -11
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1094 -929
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +6 -19
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +76 -22
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +221 -131
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +12 -9
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +23 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -38
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +7 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +5 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +10 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +6 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +35 -43
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +0 -4
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -5
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +4 -4
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +37 -35
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +11 -7
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +4 -3
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +31 -5
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.h +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +0 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +0 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +0 -1
- package/deps/rocksdb/rocksdb/table/external_table.cc +483 -0
- package/deps/rocksdb/rocksdb/table/format.cc +62 -44
- package/deps/rocksdb/rocksdb/table/format.h +35 -12
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +3 -13
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +6 -0
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +150 -141
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +5 -0
- package/deps/rocksdb/rocksdb/table/multiget_context.h +3 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +8 -0
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +0 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +0 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +0 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +6 -6
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +86 -7
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +88 -2
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +0 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +10 -1
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +3 -2
- package/deps/rocksdb/rocksdb/table/table_test.cc +899 -22
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +3 -4
- package/deps/rocksdb/rocksdb/test_util/testutil.h +132 -1
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +0 -1
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +0 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +163 -77
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +0 -2
- package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +120 -52
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +0 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +0 -2
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +2 -1
- package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +94 -0
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +0 -1
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +1 -1
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +2 -1
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +3 -5
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/util/async_file_reader.h +15 -8
- package/deps/rocksdb/rocksdb/util/auto_skip_compressor.cc +131 -0
- package/deps/rocksdb/rocksdb/util/auto_skip_compressor.h +90 -0
- package/deps/rocksdb/rocksdb/util/autovector.h +1 -1
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +2 -2
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +0 -2
- package/deps/rocksdb/rocksdb/util/compression.cc +936 -4
- package/deps/rocksdb/rocksdb/util/compression.h +348 -232
- package/deps/rocksdb/rocksdb/util/compression_test.cc +229 -0
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +10 -10
- package/deps/rocksdb/rocksdb/util/crc32c_ppc.c +1 -0
- package/deps/rocksdb/rocksdb/util/data_structure.cc +2 -0
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -3
- package/deps/rocksdb/rocksdb/util/ppc-opcode.h +5 -5
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +108 -0
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +67 -0
- package/deps/rocksdb/rocksdb/util/slice_test.cc +83 -0
- package/deps/rocksdb/rocksdb/util/string_util.cc +0 -2
- package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
- package/deps/rocksdb/rocksdb/util/udt_util.cc +18 -5
- package/deps/rocksdb/rocksdb/util/udt_util.h +10 -7
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +650 -154
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +438 -144
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +16 -17
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +2 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +7 -8
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +0 -48
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/debug.cc +7 -14
- package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/env_timed.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +5 -3
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +10 -9
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/lrulist.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.cc +183 -32
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index_test.cc +258 -12
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_helper.h +33 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_iterator.cc +99 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_mixin.h +280 -120
- package/deps/rocksdb/rocksdb/utilities/secondary_index/simple_secondary_index.cc +79 -0
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +52 -16
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +10 -6
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +55 -0
- package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +37 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +2 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +1 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +36 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +5 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +1 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1118 -37
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +4 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +0 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +125 -127
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +45 -23
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +54 -22
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +477 -58
- package/deps/rocksdb/rocksdb.gyp +9 -4
- package/index.js +50 -9
- package/package.json +8 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
|
@@ -22,7 +22,7 @@ namespace ROCKSDB_NAMESPACE::log {
|
|
|
22
22
|
|
|
23
23
|
Writer::Writer(std::unique_ptr<WritableFileWriter>&& dest, uint64_t log_number,
|
|
24
24
|
bool recycle_log_files, bool manual_flush,
|
|
25
|
-
CompressionType compression_type)
|
|
25
|
+
CompressionType compression_type, bool track_and_verify_wals)
|
|
26
26
|
: dest_(std::move(dest)),
|
|
27
27
|
block_offset_(0),
|
|
28
28
|
log_number_(log_number),
|
|
@@ -31,8 +31,10 @@ Writer::Writer(std::unique_ptr<WritableFileWriter>&& dest, uint64_t log_number,
|
|
|
31
31
|
header_size_(recycle_log_files ? kRecyclableHeaderSize : kHeaderSize),
|
|
32
32
|
manual_flush_(manual_flush),
|
|
33
33
|
compression_type_(compression_type),
|
|
34
|
-
compress_(nullptr)
|
|
35
|
-
|
|
34
|
+
compress_(nullptr),
|
|
35
|
+
track_and_verify_wals_(track_and_verify_wals),
|
|
36
|
+
last_seqno_recorded_(0) {
|
|
37
|
+
for (uint8_t i = 0; i <= kMaxRecordType; i++) {
|
|
36
38
|
char t = static_cast<char>(i);
|
|
37
39
|
type_crc_[i] = crc32c::Value(&t, 1);
|
|
38
40
|
}
|
|
@@ -52,19 +54,12 @@ Writer::~Writer() {
|
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
IOStatus Writer::WriteBuffer(const WriteOptions& write_options) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
std::stringstream msg;
|
|
59
|
-
msg << "Seen " << FaultInjectionTestFS::kInjected
|
|
60
|
-
<< " error. Skip writing buffer.";
|
|
61
|
-
return IOStatus::IOError(msg.str());
|
|
62
|
-
}
|
|
63
|
-
#endif // NDEBUG
|
|
64
|
-
return IOStatus::IOError("Seen error. Skip writing buffer.");
|
|
57
|
+
IOStatus s = MaybeHandleSeenFileWriterError();
|
|
58
|
+
if (!s.ok()) {
|
|
59
|
+
return s;
|
|
65
60
|
}
|
|
66
61
|
IOOptions opts;
|
|
67
|
-
|
|
62
|
+
s = WritableFileWriter::PrepareIOOptions(write_options, opts);
|
|
68
63
|
if (!s.ok()) {
|
|
69
64
|
return s;
|
|
70
65
|
}
|
|
@@ -92,17 +87,10 @@ bool Writer::PublishIfClosed() {
|
|
|
92
87
|
}
|
|
93
88
|
|
|
94
89
|
IOStatus Writer::AddRecord(const WriteOptions& write_options,
|
|
95
|
-
const Slice& slice) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
std::stringstream msg;
|
|
100
|
-
msg << "Seen " << FaultInjectionTestFS::kInjected
|
|
101
|
-
<< " error. Skip writing buffer.";
|
|
102
|
-
return IOStatus::IOError(msg.str());
|
|
103
|
-
}
|
|
104
|
-
#endif // NDEBUG
|
|
105
|
-
return IOStatus::IOError("Seen error. Skip writing buffer.");
|
|
90
|
+
const Slice& slice, const SequenceNumber& seqno) {
|
|
91
|
+
IOStatus s = MaybeHandleSeenFileWriterError();
|
|
92
|
+
if (!s.ok()) {
|
|
93
|
+
return s;
|
|
106
94
|
}
|
|
107
95
|
const char* ptr = slice.data();
|
|
108
96
|
size_t left = slice.size();
|
|
@@ -118,7 +106,6 @@ IOStatus Writer::AddRecord(const WriteOptions& write_options,
|
|
|
118
106
|
compress_start = true;
|
|
119
107
|
}
|
|
120
108
|
|
|
121
|
-
IOStatus s;
|
|
122
109
|
IOOptions opts;
|
|
123
110
|
s = WritableFileWriter::PrepareIOOptions(write_options, opts);
|
|
124
111
|
if (s.ok()) {
|
|
@@ -196,6 +183,10 @@ IOStatus Writer::AddRecord(const WriteOptions& write_options,
|
|
|
196
183
|
}
|
|
197
184
|
}
|
|
198
185
|
|
|
186
|
+
if (s.ok()) {
|
|
187
|
+
last_seqno_recorded_ = std::max(last_seqno_recorded_, seqno);
|
|
188
|
+
}
|
|
189
|
+
|
|
199
190
|
return s;
|
|
200
191
|
}
|
|
201
192
|
|
|
@@ -208,23 +199,16 @@ IOStatus Writer::AddCompressionTypeRecord(const WriteOptions& write_options) {
|
|
|
208
199
|
return IOStatus::OK();
|
|
209
200
|
}
|
|
210
201
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
std::stringstream msg;
|
|
215
|
-
msg << "Seen " << FaultInjectionTestFS::kInjected
|
|
216
|
-
<< " error. Skip writing buffer.";
|
|
217
|
-
return IOStatus::IOError(msg.str());
|
|
218
|
-
}
|
|
219
|
-
#endif // NDEBUG
|
|
220
|
-
return IOStatus::IOError("Seen error. Skip writing buffer.");
|
|
202
|
+
IOStatus s = MaybeHandleSeenFileWriterError();
|
|
203
|
+
if (!s.ok()) {
|
|
204
|
+
return s;
|
|
221
205
|
}
|
|
222
206
|
|
|
223
207
|
CompressionTypeRecord record(compression_type_);
|
|
224
208
|
std::string encode;
|
|
225
209
|
record.EncodeTo(&encode);
|
|
226
|
-
|
|
227
|
-
|
|
210
|
+
s = EmitPhysicalRecord(write_options, kSetCompressionType, encode.data(),
|
|
211
|
+
encode.size());
|
|
228
212
|
if (s.ok()) {
|
|
229
213
|
if (!manual_flush_) {
|
|
230
214
|
IOOptions io_opts;
|
|
@@ -251,6 +235,44 @@ IOStatus Writer::AddCompressionTypeRecord(const WriteOptions& write_options) {
|
|
|
251
235
|
return s;
|
|
252
236
|
}
|
|
253
237
|
|
|
238
|
+
IOStatus Writer::MaybeAddPredecessorWALInfo(const WriteOptions& write_options,
|
|
239
|
+
const PredecessorWALInfo& info) {
|
|
240
|
+
IOStatus s = MaybeHandleSeenFileWriterError();
|
|
241
|
+
|
|
242
|
+
if (!s.ok()) {
|
|
243
|
+
return s;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if (!track_and_verify_wals_ || !info.IsInitialized()) {
|
|
247
|
+
return IOStatus::OK();
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
std::string encode;
|
|
251
|
+
info.EncodeTo(&encode);
|
|
252
|
+
|
|
253
|
+
s = MaybeSwitchToNewBlock(write_options, encode);
|
|
254
|
+
if (!s.ok()) {
|
|
255
|
+
return s;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
RecordType type = recycle_log_files_ ? kRecyclePredecessorWALInfoType
|
|
259
|
+
: kPredecessorWALInfoType;
|
|
260
|
+
s = EmitPhysicalRecord(write_options, type, encode.data(), encode.size());
|
|
261
|
+
|
|
262
|
+
if (!s.ok()) {
|
|
263
|
+
return s;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
if (!manual_flush_) {
|
|
267
|
+
IOOptions io_opts;
|
|
268
|
+
s = WritableFileWriter::PrepareIOOptions(write_options, io_opts);
|
|
269
|
+
if (s.ok()) {
|
|
270
|
+
s = dest_->Flush(io_opts);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return s;
|
|
274
|
+
}
|
|
275
|
+
|
|
254
276
|
IOStatus Writer::MaybeAddUserDefinedTimestampSizeRecord(
|
|
255
277
|
const WriteOptions& write_options,
|
|
256
278
|
const UnorderedMap<uint32_t, size_t>& cf_to_ts_sz) {
|
|
@@ -275,22 +297,9 @@ IOStatus Writer::MaybeAddUserDefinedTimestampSizeRecord(
|
|
|
275
297
|
RecordType type = recycle_log_files_ ? kRecyclableUserDefinedTimestampSizeType
|
|
276
298
|
: kUserDefinedTimestampSizeType;
|
|
277
299
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
IOOptions opts;
|
|
282
|
-
IOStatus s = WritableFileWriter::PrepareIOOptions(write_options, opts);
|
|
283
|
-
if (!s.ok()) {
|
|
284
|
-
return s;
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
std::vector<char> trailer(leftover, '\x00');
|
|
288
|
-
s = dest_->Append(opts, Slice(trailer.data(), trailer.size()));
|
|
289
|
-
if (!s.ok()) {
|
|
290
|
-
return s;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
block_offset_ = 0;
|
|
300
|
+
IOStatus s = MaybeSwitchToNewBlock(write_options, encoded);
|
|
301
|
+
if (!s.ok()) {
|
|
302
|
+
return s;
|
|
294
303
|
}
|
|
295
304
|
|
|
296
305
|
return EmitPhysicalRecord(write_options, type, encoded.data(),
|
|
@@ -313,7 +322,7 @@ IOStatus Writer::EmitPhysicalRecord(const WriteOptions& write_options,
|
|
|
313
322
|
|
|
314
323
|
uint32_t crc = type_crc_[t];
|
|
315
324
|
if (t < kRecyclableFullType || t == kSetCompressionType ||
|
|
316
|
-
t == kUserDefinedTimestampSizeType) {
|
|
325
|
+
t == kPredecessorWALInfoType || t == kUserDefinedTimestampSizeType) {
|
|
317
326
|
// Legacy record format
|
|
318
327
|
assert(block_offset_ + kHeaderSize + n <= kBlockSize);
|
|
319
328
|
header_size = kHeaderSize;
|
|
@@ -352,4 +361,42 @@ IOStatus Writer::EmitPhysicalRecord(const WriteOptions& write_options,
|
|
|
352
361
|
return s;
|
|
353
362
|
}
|
|
354
363
|
|
|
364
|
+
IOStatus Writer::MaybeHandleSeenFileWriterError() {
|
|
365
|
+
if (dest_->seen_error()) {
|
|
366
|
+
#ifndef NDEBUG
|
|
367
|
+
if (dest_->seen_injected_error()) {
|
|
368
|
+
std::stringstream msg;
|
|
369
|
+
msg << "Seen " << FaultInjectionTestFS::kInjected
|
|
370
|
+
<< " error. Skip writing buffer.";
|
|
371
|
+
return IOStatus::IOError(msg.str());
|
|
372
|
+
}
|
|
373
|
+
#endif // NDEBUG
|
|
374
|
+
return IOStatus::IOError("Seen error. Skip writing buffer.");
|
|
375
|
+
}
|
|
376
|
+
return IOStatus::OK();
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
IOStatus Writer::MaybeSwitchToNewBlock(const WriteOptions& write_options,
|
|
380
|
+
const std::string& content_to_write) {
|
|
381
|
+
IOStatus s;
|
|
382
|
+
const int64_t leftover = kBlockSize - block_offset_;
|
|
383
|
+
// If there's not enough space for this record, switch to a new block.
|
|
384
|
+
if (leftover < header_size_ + (int)content_to_write.size()) {
|
|
385
|
+
IOOptions opts;
|
|
386
|
+
s = WritableFileWriter::PrepareIOOptions(write_options, opts);
|
|
387
|
+
if (!s.ok()) {
|
|
388
|
+
return s;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
std::vector<char> trailer(leftover, '\x00');
|
|
392
|
+
s = dest_->Append(opts, Slice(trailer.data(), trailer.size()));
|
|
393
|
+
if (!s.ok()) {
|
|
394
|
+
return s;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
block_offset_ = 0;
|
|
398
|
+
}
|
|
399
|
+
return s;
|
|
400
|
+
}
|
|
401
|
+
|
|
355
402
|
} // namespace ROCKSDB_NAMESPACE::log
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
#include <unordered_map>
|
|
14
14
|
#include <vector>
|
|
15
15
|
|
|
16
|
+
#include "db/dbformat.h"
|
|
16
17
|
#include "db/log_format.h"
|
|
17
18
|
#include "rocksdb/compression_type.h"
|
|
18
19
|
#include "rocksdb/env.h"
|
|
@@ -76,18 +77,24 @@ class Writer {
|
|
|
76
77
|
// Create a writer that will append data to "*dest".
|
|
77
78
|
// "*dest" must be initially empty.
|
|
78
79
|
// "*dest" must remain live while this Writer is in use.
|
|
80
|
+
// TODO(hx235): seperate WAL related parameters from general `Reader`
|
|
81
|
+
// parameters
|
|
79
82
|
explicit Writer(std::unique_ptr<WritableFileWriter>&& dest,
|
|
80
83
|
uint64_t log_number, bool recycle_log_files,
|
|
81
84
|
bool manual_flush = false,
|
|
82
|
-
CompressionType compressionType = kNoCompression
|
|
85
|
+
CompressionType compressionType = kNoCompression,
|
|
86
|
+
bool track_and_verify_wals = false);
|
|
83
87
|
// No copying allowed
|
|
84
88
|
Writer(const Writer&) = delete;
|
|
85
89
|
void operator=(const Writer&) = delete;
|
|
86
90
|
|
|
87
91
|
~Writer();
|
|
88
92
|
|
|
89
|
-
IOStatus AddRecord(const WriteOptions& write_options, const Slice& slice
|
|
93
|
+
IOStatus AddRecord(const WriteOptions& write_options, const Slice& slice,
|
|
94
|
+
const SequenceNumber& seqno = 0);
|
|
90
95
|
IOStatus AddCompressionTypeRecord(const WriteOptions& write_options);
|
|
96
|
+
IOStatus MaybeAddPredecessorWALInfo(const WriteOptions& write_options,
|
|
97
|
+
const PredecessorWALInfo& info);
|
|
91
98
|
|
|
92
99
|
// If there are column families in `cf_to_ts_sz` not included in
|
|
93
100
|
// `recorded_cf_to_ts_sz_` and its user-defined timestamp size is non-zero,
|
|
@@ -116,6 +123,8 @@ class Writer {
|
|
|
116
123
|
|
|
117
124
|
size_t TEST_block_offset() const { return block_offset_; }
|
|
118
125
|
|
|
126
|
+
SequenceNumber GetLastSeqnoRecorded() const { return last_seqno_recorded_; };
|
|
127
|
+
|
|
119
128
|
private:
|
|
120
129
|
std::unique_ptr<WritableFileWriter> dest_;
|
|
121
130
|
size_t block_offset_; // Current offset in block
|
|
@@ -131,6 +140,11 @@ class Writer {
|
|
|
131
140
|
IOStatus EmitPhysicalRecord(const WriteOptions& write_options,
|
|
132
141
|
RecordType type, const char* ptr, size_t length);
|
|
133
142
|
|
|
143
|
+
IOStatus MaybeHandleSeenFileWriterError();
|
|
144
|
+
|
|
145
|
+
IOStatus MaybeSwitchToNewBlock(const WriteOptions& write_options,
|
|
146
|
+
const std::string& content_to_write);
|
|
147
|
+
|
|
134
148
|
// If true, it does not flush after each write. Instead it relies on the upper
|
|
135
149
|
// layer to manually does the flush by calling ::WriteBuffer()
|
|
136
150
|
bool manual_flush_;
|
|
@@ -145,6 +159,11 @@ class Writer {
|
|
|
145
159
|
// Since the user-defined timestamp size cannot be changed while the DB is
|
|
146
160
|
// running, existing entry in this map cannot be updated.
|
|
147
161
|
UnorderedMap<uint32_t, size_t> recorded_cf_to_ts_sz_;
|
|
162
|
+
|
|
163
|
+
// See `Options::track_and_verify_wals`
|
|
164
|
+
bool track_and_verify_wals_;
|
|
165
|
+
|
|
166
|
+
SequenceNumber last_seqno_recorded_;
|
|
148
167
|
};
|
|
149
168
|
|
|
150
169
|
} // namespace log
|
|
@@ -147,7 +147,6 @@ MemTable::MemTable(const InternalKeyComparator& cmp,
|
|
|
147
147
|
const Comparator* ucmp = cmp.user_comparator();
|
|
148
148
|
assert(ucmp);
|
|
149
149
|
ts_sz_ = ucmp->timestamp_size();
|
|
150
|
-
persist_user_defined_timestamps_ = ioptions.persist_user_defined_timestamps;
|
|
151
150
|
}
|
|
152
151
|
|
|
153
152
|
MemTable::~MemTable() {
|
|
@@ -175,6 +174,11 @@ size_t MemTable::ApproximateMemoryUsage() {
|
|
|
175
174
|
}
|
|
176
175
|
|
|
177
176
|
bool MemTable::ShouldFlushNow() {
|
|
177
|
+
if (IsMarkedForFlush()) {
|
|
178
|
+
// TODO: dedicated flush reason when marked for flush
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
|
|
178
182
|
// This is set if memtable_max_range_deletions is > 0,
|
|
179
183
|
// and that many range deletions are done
|
|
180
184
|
if (memtable_max_range_deletions_ > 0 &&
|
|
@@ -192,10 +196,11 @@ bool MemTable::ShouldFlushNow() {
|
|
|
192
196
|
// allocate one more block.
|
|
193
197
|
const double kAllowOverAllocationRatio = 0.6;
|
|
194
198
|
|
|
199
|
+
// range deletion use skip list which allocates all memeory through `arena_`
|
|
200
|
+
assert(range_del_table_->ApproximateMemoryUsage() == 0);
|
|
195
201
|
// If arena still have room for new block allocation, we can safely say it
|
|
196
202
|
// shouldn't flush.
|
|
197
203
|
auto allocated_memory = table_->ApproximateMemoryUsage() +
|
|
198
|
-
range_del_table_->ApproximateMemoryUsage() +
|
|
199
204
|
arena_.MemoryAllocatedBytes();
|
|
200
205
|
|
|
201
206
|
approximate_memory_usage_.store(allocated_memory, std::memory_order_relaxed);
|
|
@@ -618,8 +623,8 @@ class TimestampStrippingIterator : public InternalIterator {
|
|
|
618
623
|
const SliceTransform* cf_prefix_extractor, size_t ts_sz)
|
|
619
624
|
: arena_mode_(arena != nullptr), kind_(kind), ts_sz_(ts_sz) {
|
|
620
625
|
assert(ts_sz_ != 0);
|
|
621
|
-
void* mem = arena ? arena->AllocateAligned(sizeof(MemTableIterator))
|
|
622
|
-
operator new(sizeof(MemTableIterator));
|
|
626
|
+
void* mem = arena ? arena->AllocateAligned(sizeof(MemTableIterator))
|
|
627
|
+
: operator new(sizeof(MemTableIterator));
|
|
623
628
|
iter_ = new (mem)
|
|
624
629
|
MemTableIterator(kind, memtable, read_options, seqno_to_time_mapping,
|
|
625
630
|
arena, cf_prefix_extractor);
|
|
@@ -1325,47 +1330,13 @@ static bool SaveValue(void* arg, const char* entry) {
|
|
|
1325
1330
|
return false;
|
|
1326
1331
|
}
|
|
1327
1332
|
case kTypeMerge: {
|
|
1328
|
-
if (!merge_operator) {
|
|
1329
|
-
*(s->status) = Status::InvalidArgument(
|
|
1330
|
-
"merge_operator is not properly initialized.");
|
|
1331
|
-
// Normally we continue the loop (return true) when we see a merge
|
|
1332
|
-
// operand. But in case of an error, we should stop the loop
|
|
1333
|
-
// immediately and pretend we have found the value to stop further
|
|
1334
|
-
// seek. Otherwise, the later call will override this error status.
|
|
1335
|
-
*(s->found_final_value) = true;
|
|
1336
|
-
return false;
|
|
1337
|
-
}
|
|
1338
1333
|
Slice v = GetLengthPrefixedSlice(key_ptr + key_length);
|
|
1339
1334
|
*(s->merge_in_progress) = true;
|
|
1340
|
-
|
|
1341
|
-
v, s->inplace_update_support == false
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
merge_context->GetOperandsDirectionBackward())) {
|
|
1346
|
-
if (s->value || s->columns) {
|
|
1347
|
-
// `op_failure_scope` (an output parameter) is not provided (set to
|
|
1348
|
-
// nullptr) since a failure must be propagated regardless of its
|
|
1349
|
-
// value.
|
|
1350
|
-
*(s->status) = MergeHelper::TimedFullMerge(
|
|
1351
|
-
merge_operator, s->key->user_key(), MergeHelper::kNoBaseValue,
|
|
1352
|
-
merge_context->GetOperands(), s->logger, s->statistics,
|
|
1353
|
-
s->clock, /* update_num_ops_stats */ true,
|
|
1354
|
-
/* op_failure_scope */ nullptr, s->value, s->columns);
|
|
1355
|
-
}
|
|
1356
|
-
|
|
1357
|
-
*(s->found_final_value) = true;
|
|
1358
|
-
return false;
|
|
1359
|
-
}
|
|
1360
|
-
if (merge_context->get_merge_operands_options != nullptr &&
|
|
1361
|
-
merge_context->get_merge_operands_options->continue_cb != nullptr &&
|
|
1362
|
-
!merge_context->get_merge_operands_options->continue_cb(v)) {
|
|
1363
|
-
// We were told not to continue.
|
|
1364
|
-
*(s->found_final_value) = true;
|
|
1365
|
-
return false;
|
|
1366
|
-
}
|
|
1367
|
-
|
|
1368
|
-
return true;
|
|
1335
|
+
*(s->found_final_value) = ReadOnlyMemTable::HandleTypeMerge(
|
|
1336
|
+
s->key->user_key(), v, s->inplace_update_support == false,
|
|
1337
|
+
s->do_merge, merge_context, s->merge_operator, s->clock,
|
|
1338
|
+
s->statistics, s->logger, s->status, s->value, s->columns);
|
|
1339
|
+
return !*(s->found_final_value);
|
|
1369
1340
|
}
|
|
1370
1341
|
default: {
|
|
1371
1342
|
std::string msg("Corrupted value not expected.");
|
|
@@ -1835,7 +1806,7 @@ uint64_t MemTable::GetMinLogContainingPrepSection() {
|
|
|
1835
1806
|
}
|
|
1836
1807
|
|
|
1837
1808
|
void MemTable::MaybeUpdateNewestUDT(const Slice& user_key) {
|
|
1838
|
-
if (ts_sz_ == 0
|
|
1809
|
+
if (ts_sz_ == 0) {
|
|
1839
1810
|
return;
|
|
1840
1811
|
}
|
|
1841
1812
|
const Comparator* ucmp = GetInternalKeyComparator().user_comparator();
|
|
@@ -1846,9 +1817,7 @@ void MemTable::MaybeUpdateNewestUDT(const Slice& user_key) {
|
|
|
1846
1817
|
}
|
|
1847
1818
|
|
|
1848
1819
|
const Slice& MemTable::GetNewestUDT() const {
|
|
1849
|
-
|
|
1850
|
-
// in Memtable only feature.
|
|
1851
|
-
assert(ts_sz_ > 0 && !persist_user_defined_timestamps_);
|
|
1820
|
+
assert(ts_sz_ > 0);
|
|
1852
1821
|
return newest_udt_;
|
|
1853
1822
|
}
|
|
1854
1823
|
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
#include "rocksdb/db.h"
|
|
31
31
|
#include "rocksdb/memtablerep.h"
|
|
32
32
|
#include "table/multiget_context.h"
|
|
33
|
+
#include "util/atomic.h"
|
|
33
34
|
#include "util/cast_util.h"
|
|
34
35
|
#include "util/dynamic_bloom.h"
|
|
35
36
|
#include "util/hash.h"
|
|
@@ -186,10 +187,13 @@ class ReadOnlyMemTable {
|
|
|
186
187
|
SequenceNumber read_seq,
|
|
187
188
|
size_t ts_sz) = 0;
|
|
188
189
|
|
|
189
|
-
// Used to
|
|
190
|
-
// with key.
|
|
191
|
-
//
|
|
190
|
+
// Used to get value associated with `key`, or Merge operands associated
|
|
191
|
+
// with key, or get the latest sequence number of `key` (e.g. transaction
|
|
192
|
+
// conflict checking).
|
|
193
|
+
//
|
|
194
|
+
// Keys are considered if they are no smaller than the parameter `key` in
|
|
192
195
|
// the order defined by comparator and share the save user key with `key`.
|
|
196
|
+
//
|
|
193
197
|
// If do_merge = true the default behavior which is Get value for key is
|
|
194
198
|
// executed. Expected behavior is described right below.
|
|
195
199
|
// If memtable contains a value for key, store it in *value and return true.
|
|
@@ -207,6 +211,7 @@ class ReadOnlyMemTable {
|
|
|
207
211
|
// returned). Otherwise, *seq will be set to kMaxSequenceNumber.
|
|
208
212
|
// On success, *s may be set to OK, NotFound, or MergeInProgress. Any other
|
|
209
213
|
// status returned indicates a corruption or other unexpected error.
|
|
214
|
+
//
|
|
210
215
|
// If do_merge = false then any Merge Operands encountered for key are simply
|
|
211
216
|
// stored in merge_context.operands_list and never actually merged to get a
|
|
212
217
|
// final value. The raw Merge Operands are eventually returned to the user.
|
|
@@ -215,6 +220,9 @@ class ReadOnlyMemTable {
|
|
|
215
220
|
// @param column If not null and memtable contains a value/WideColumn for key,
|
|
216
221
|
// `column` will be set to the result value/WideColumn.
|
|
217
222
|
// Note: only one of `value` and `column` can be non-nullptr.
|
|
223
|
+
// To only query for key existence or the latest sequence number of a key,
|
|
224
|
+
// `value` and `column` can be both nullptr. In this case, returned status can
|
|
225
|
+
// be OK, NotFound or MergeInProgress if a key is found.
|
|
218
226
|
// @param immutable_memtable Whether this memtable is immutable. Used
|
|
219
227
|
// internally by NewRangeTombstoneIterator(). See comment above
|
|
220
228
|
// NewRangeTombstoneIterator() for more detail.
|
|
@@ -347,13 +355,13 @@ class ReadOnlyMemTable {
|
|
|
347
355
|
// be flushed to storage
|
|
348
356
|
// REQUIRES: external synchronization to prevent simultaneous
|
|
349
357
|
// operations on the same MemTable.
|
|
350
|
-
uint64_t GetNextLogNumber() const { return
|
|
358
|
+
uint64_t GetNextLogNumber() const { return mem_next_walfile_number_; }
|
|
351
359
|
|
|
352
360
|
// Sets the next active logfile number when this memtable is about to
|
|
353
361
|
// be flushed to storage
|
|
354
362
|
// REQUIRES: external synchronization to prevent simultaneous
|
|
355
363
|
// operations on the same MemTable.
|
|
356
|
-
void SetNextLogNumber(uint64_t num) {
|
|
364
|
+
void SetNextLogNumber(uint64_t num) { mem_next_walfile_number_ = num; }
|
|
357
365
|
|
|
358
366
|
// REQUIRES: db_mutex held.
|
|
359
367
|
void SetID(uint64_t id) { id_ = id; }
|
|
@@ -394,7 +402,6 @@ class ReadOnlyMemTable {
|
|
|
394
402
|
// can also be retained.
|
|
395
403
|
merge_context->PushOperand(value, value_pinned);
|
|
396
404
|
} else if (merge_in_progress) {
|
|
397
|
-
assert(do_merge);
|
|
398
405
|
// `op_failure_scope` (an output parameter) is not provided (set to
|
|
399
406
|
// nullptr) since a failure must be propagated regardless of its
|
|
400
407
|
// value.
|
|
@@ -442,6 +449,58 @@ class ReadOnlyMemTable {
|
|
|
442
449
|
}
|
|
443
450
|
}
|
|
444
451
|
|
|
452
|
+
// Returns if a final value is found.
|
|
453
|
+
static bool HandleTypeMerge(const Slice& lookup_user_key, const Slice& value,
|
|
454
|
+
bool value_pinned, bool do_merge,
|
|
455
|
+
MergeContext* merge_context,
|
|
456
|
+
const MergeOperator* merge_operator,
|
|
457
|
+
SystemClock* clock, Statistics* statistics,
|
|
458
|
+
Logger* logger, Status* s, std::string* out_value,
|
|
459
|
+
PinnableWideColumns* out_columns) {
|
|
460
|
+
if (!merge_operator) {
|
|
461
|
+
*s = Status::InvalidArgument(
|
|
462
|
+
"merge_operator is not properly initialized.");
|
|
463
|
+
// Normally we continue the loop (return true) when we see a merge
|
|
464
|
+
// operand. But in case of an error, we should stop the loop
|
|
465
|
+
// immediately and pretend we have found the value to stop further
|
|
466
|
+
// seek. Otherwise, the later call will override this error status.
|
|
467
|
+
return true;
|
|
468
|
+
}
|
|
469
|
+
merge_context->PushOperand(value, value_pinned /* operand_pinned */);
|
|
470
|
+
PERF_COUNTER_ADD(internal_merge_point_lookup_count, 1);
|
|
471
|
+
|
|
472
|
+
if (do_merge && merge_operator->ShouldMerge(
|
|
473
|
+
merge_context->GetOperandsDirectionBackward())) {
|
|
474
|
+
if (out_value || out_columns) {
|
|
475
|
+
// `op_failure_scope` (an output parameter) is not provided (set to
|
|
476
|
+
// nullptr) since a failure must be propagated regardless of its
|
|
477
|
+
// value.
|
|
478
|
+
*s = MergeHelper::TimedFullMerge(
|
|
479
|
+
merge_operator, lookup_user_key, MergeHelper::kNoBaseValue,
|
|
480
|
+
merge_context->GetOperands(), logger, statistics, clock,
|
|
481
|
+
/* update_num_ops_stats */ true,
|
|
482
|
+
/* op_failure_scope */ nullptr, out_value, out_columns);
|
|
483
|
+
}
|
|
484
|
+
return true;
|
|
485
|
+
}
|
|
486
|
+
if (merge_context->get_merge_operands_options != nullptr &&
|
|
487
|
+
merge_context->get_merge_operands_options->continue_cb != nullptr &&
|
|
488
|
+
!merge_context->get_merge_operands_options->continue_cb(value)) {
|
|
489
|
+
// We were told not to continue. `status` may be MergeInProress(),
|
|
490
|
+
// overwrite to signal the end of successful get. This status
|
|
491
|
+
// will be checked at the end of GetImpl().
|
|
492
|
+
*s = Status::OK();
|
|
493
|
+
return true;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
// no final value found yet
|
|
497
|
+
return false;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
void MarkForFlush() { marked_for_flush_.StoreRelaxed(true); }
|
|
501
|
+
|
|
502
|
+
bool IsMarkedForFlush() const { return marked_for_flush_.LoadRelaxed(); }
|
|
503
|
+
|
|
445
504
|
protected:
|
|
446
505
|
friend class MemTableList;
|
|
447
506
|
|
|
@@ -457,7 +516,7 @@ class ReadOnlyMemTable {
|
|
|
457
516
|
VersionEdit edit_;
|
|
458
517
|
|
|
459
518
|
// The log files earlier than this number can be deleted.
|
|
460
|
-
uint64_t
|
|
519
|
+
uint64_t mem_next_walfile_number_{0};
|
|
461
520
|
|
|
462
521
|
// Memtable id to track flush.
|
|
463
522
|
uint64_t id_ = 0;
|
|
@@ -470,6 +529,8 @@ class ReadOnlyMemTable {
|
|
|
470
529
|
|
|
471
530
|
// Flush job info of the current memtable.
|
|
472
531
|
std::unique_ptr<FlushJobInfo> flush_job_info_;
|
|
532
|
+
|
|
533
|
+
RelaxedAtomic<bool> marked_for_flush_{false};
|
|
473
534
|
};
|
|
474
535
|
|
|
475
536
|
class MemTable final : public ReadOnlyMemTable {
|
|
@@ -627,6 +688,7 @@ class MemTable final : public ReadOnlyMemTable {
|
|
|
627
688
|
// Update counters and flush status after inserting a whole write batch
|
|
628
689
|
// Used in concurrent memtable inserts.
|
|
629
690
|
void BatchPostProcess(const MemTablePostProcessInfo& update_counters) {
|
|
691
|
+
table_->BatchPostProcess();
|
|
630
692
|
num_entries_.fetch_add(update_counters.num_entries,
|
|
631
693
|
std::memory_order_relaxed);
|
|
632
694
|
data_size_.fetch_add(update_counters.data_size, std::memory_order_relaxed);
|
|
@@ -637,6 +699,10 @@ class MemTable final : public ReadOnlyMemTable {
|
|
|
637
699
|
if (update_counters.num_range_deletes > 0) {
|
|
638
700
|
num_range_deletes_.fetch_add(update_counters.num_range_deletes,
|
|
639
701
|
std::memory_order_relaxed);
|
|
702
|
+
// noop for skip-list memtable
|
|
703
|
+
// Besides correctness test in stress test, memtable flush record count
|
|
704
|
+
// check will catch this if it were not noop.
|
|
705
|
+
// range_del_table_->BatchPostProcess();
|
|
640
706
|
}
|
|
641
707
|
UpdateFlushState();
|
|
642
708
|
}
|
|
@@ -764,6 +830,8 @@ class MemTable final : public ReadOnlyMemTable {
|
|
|
764
830
|
is_range_del_table_empty_;
|
|
765
831
|
}
|
|
766
832
|
|
|
833
|
+
// Gets the newest user defined timestamps in the memtable. This should only
|
|
834
|
+
// be called when user defined timestamp is enabled.
|
|
767
835
|
const Slice& GetNewestUDT() const override;
|
|
768
836
|
|
|
769
837
|
// Returns Corruption status if verification fails.
|
|
@@ -839,14 +907,10 @@ class MemTable final : public ReadOnlyMemTable {
|
|
|
839
907
|
// Size in bytes for the user-defined timestamps.
|
|
840
908
|
size_t ts_sz_;
|
|
841
909
|
|
|
842
|
-
// Whether to persist user-defined timestamps
|
|
843
|
-
bool persist_user_defined_timestamps_;
|
|
844
|
-
|
|
845
910
|
// Newest user-defined timestamp contained in this MemTable. For ts1, and ts2
|
|
846
911
|
// if Comparator::CompareTimestamp(ts1, ts2) > 0, ts1 is considered newer than
|
|
847
912
|
// ts2. We track this field for a MemTable if its column family has UDT
|
|
848
|
-
// feature enabled
|
|
849
|
-
// Otherwise, this field just contains an empty Slice.
|
|
913
|
+
// feature enabled.
|
|
850
914
|
Slice newest_udt_;
|
|
851
915
|
|
|
852
916
|
// Updates flush_state_ using ShouldFlushNow()
|