@nxtedition/rocksdb 13.5.8 → 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 +209 -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 +5 -0
- package/index.js +47 -2
- package/package.json +8 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
// This source code is licensed under both the GPLv2 (found in the
|
|
3
|
+
// COPYING file in the root directory) and Apache 2.0 License
|
|
4
|
+
// (found in the LICENSE.Apache file in the root directory).
|
|
5
|
+
|
|
6
|
+
#include "rocksdb/utilities/secondary_index.h"
|
|
7
|
+
#include "utilities/secondary_index/secondary_index_helper.h"
|
|
8
|
+
|
|
9
|
+
namespace ROCKSDB_NAMESPACE {
|
|
10
|
+
|
|
11
|
+
SecondaryIndexIterator::SecondaryIndexIterator(
|
|
12
|
+
const SecondaryIndex* index, std::unique_ptr<Iterator>&& underlying_it)
|
|
13
|
+
: index_(index), underlying_it_(std::move(underlying_it)) {
|
|
14
|
+
assert(index_);
|
|
15
|
+
assert(underlying_it_);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
bool SecondaryIndexIterator::Valid() const {
|
|
19
|
+
return status_.ok() && underlying_it_->Valid() &&
|
|
20
|
+
underlying_it_->key().starts_with(prefix_);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
Status SecondaryIndexIterator::status() const {
|
|
24
|
+
if (!status_.ok()) {
|
|
25
|
+
return status_;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return underlying_it_->status();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
void SecondaryIndexIterator::Seek(const Slice& target) {
|
|
32
|
+
status_ = Status::OK();
|
|
33
|
+
|
|
34
|
+
std::variant<Slice, std::string> prefix = target;
|
|
35
|
+
|
|
36
|
+
const Status s = index_->FinalizeSecondaryKeyPrefix(&prefix);
|
|
37
|
+
if (!s.ok()) {
|
|
38
|
+
status_ = s;
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
prefix_ = SecondaryIndexHelper::AsString(prefix);
|
|
43
|
+
|
|
44
|
+
// FIXME: this works for BytewiseComparator but not for all comparators in
|
|
45
|
+
// general
|
|
46
|
+
underlying_it_->Seek(prefix_);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
void SecondaryIndexIterator::Next() {
|
|
50
|
+
assert(Valid());
|
|
51
|
+
|
|
52
|
+
underlying_it_->Next();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
void SecondaryIndexIterator::Prev() {
|
|
56
|
+
assert(Valid());
|
|
57
|
+
|
|
58
|
+
underlying_it_->Prev();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
bool SecondaryIndexIterator::PrepareValue() {
|
|
62
|
+
assert(Valid());
|
|
63
|
+
|
|
64
|
+
return underlying_it_->PrepareValue();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
Slice SecondaryIndexIterator::key() const {
|
|
68
|
+
assert(Valid());
|
|
69
|
+
|
|
70
|
+
Slice key = underlying_it_->key();
|
|
71
|
+
key.remove_prefix(prefix_.size());
|
|
72
|
+
|
|
73
|
+
return key;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
Slice SecondaryIndexIterator::value() const {
|
|
77
|
+
assert(Valid());
|
|
78
|
+
|
|
79
|
+
return underlying_it_->value();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const WideColumns& SecondaryIndexIterator::columns() const {
|
|
83
|
+
assert(Valid());
|
|
84
|
+
|
|
85
|
+
return underlying_it_->columns();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
Slice SecondaryIndexIterator::timestamp() const {
|
|
89
|
+
assert(Valid());
|
|
90
|
+
|
|
91
|
+
return underlying_it_->timestamp();
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
Status SecondaryIndexIterator::GetProperty(std::string prop_name,
|
|
95
|
+
std::string* prop) const {
|
|
96
|
+
return underlying_it_->GetProperty(std::move(prop_name), prop);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
#include "rocksdb/utilities/secondary_index.h"
|
|
18
18
|
#include "rocksdb/wide_columns.h"
|
|
19
19
|
#include "util/autovector.h"
|
|
20
|
-
#include "
|
|
20
|
+
#include "utilities/secondary_index/secondary_index_helper.h"
|
|
21
21
|
|
|
22
22
|
namespace ROCKSDB_NAMESPACE {
|
|
23
23
|
|
|
@@ -35,15 +35,23 @@ class SecondaryIndexMixin : public Txn {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
using Txn::Put;
|
|
38
|
-
Status Put(ColumnFamilyHandle*
|
|
39
|
-
const Slice&
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
Status Put(ColumnFamilyHandle* column_family, const Slice& key,
|
|
39
|
+
const Slice& value, const bool assume_tracked = false) override {
|
|
40
|
+
return PerformWithSavePoint([&]() {
|
|
41
|
+
const bool do_validate = !assume_tracked;
|
|
42
|
+
return PutWithSecondaryIndices(column_family, key, value, do_validate);
|
|
43
|
+
});
|
|
42
44
|
}
|
|
43
|
-
Status Put(ColumnFamilyHandle*
|
|
44
|
-
const SliceParts&
|
|
45
|
-
const bool
|
|
46
|
-
|
|
45
|
+
Status Put(ColumnFamilyHandle* column_family, const SliceParts& key,
|
|
46
|
+
const SliceParts& value,
|
|
47
|
+
const bool assume_tracked = false) override {
|
|
48
|
+
std::string key_str;
|
|
49
|
+
const Slice key_slice(key, &key_str);
|
|
50
|
+
|
|
51
|
+
std::string value_str;
|
|
52
|
+
const Slice value_slice(value, &value_str);
|
|
53
|
+
|
|
54
|
+
return Put(column_family, key_slice, value_slice, assume_tracked);
|
|
47
55
|
}
|
|
48
56
|
|
|
49
57
|
Status PutEntity(ColumnFamilyHandle* column_family, const Slice& key,
|
|
@@ -65,44 +73,54 @@ class SecondaryIndexMixin : public Txn {
|
|
|
65
73
|
}
|
|
66
74
|
|
|
67
75
|
using Txn::Delete;
|
|
68
|
-
Status Delete(ColumnFamilyHandle*
|
|
69
|
-
const bool
|
|
70
|
-
return
|
|
71
|
-
|
|
76
|
+
Status Delete(ColumnFamilyHandle* column_family, const Slice& key,
|
|
77
|
+
const bool assume_tracked = false) override {
|
|
78
|
+
return PerformWithSavePoint([&]() {
|
|
79
|
+
const bool do_validate = !assume_tracked;
|
|
80
|
+
return DeleteWithSecondaryIndices(column_family, key, do_validate);
|
|
81
|
+
});
|
|
72
82
|
}
|
|
73
|
-
Status Delete(ColumnFamilyHandle*
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
83
|
+
Status Delete(ColumnFamilyHandle* column_family, const SliceParts& key,
|
|
84
|
+
const bool assume_tracked = false) override {
|
|
85
|
+
std::string key_str;
|
|
86
|
+
const Slice key_slice(key, &key_str);
|
|
87
|
+
|
|
88
|
+
return Delete(column_family, key_slice, assume_tracked);
|
|
78
89
|
}
|
|
79
90
|
|
|
80
91
|
using Txn::SingleDelete;
|
|
81
|
-
Status SingleDelete(ColumnFamilyHandle*
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
92
|
+
Status SingleDelete(ColumnFamilyHandle* column_family, const Slice& key,
|
|
93
|
+
const bool assume_tracked = false) override {
|
|
94
|
+
return PerformWithSavePoint([&]() {
|
|
95
|
+
const bool do_validate = !assume_tracked;
|
|
96
|
+
return SingleDeleteWithSecondaryIndices(column_family, key, do_validate);
|
|
97
|
+
});
|
|
86
98
|
}
|
|
87
|
-
Status SingleDelete(ColumnFamilyHandle*
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
99
|
+
Status SingleDelete(ColumnFamilyHandle* column_family, const SliceParts& key,
|
|
100
|
+
const bool assume_tracked = false) override {
|
|
101
|
+
std::string key_str;
|
|
102
|
+
const Slice key_slice(key, &key_str);
|
|
103
|
+
|
|
104
|
+
return SingleDelete(column_family, key_slice, assume_tracked);
|
|
92
105
|
}
|
|
93
106
|
|
|
94
107
|
using Txn::PutUntracked;
|
|
95
|
-
Status PutUntracked(ColumnFamilyHandle*
|
|
96
|
-
const Slice&
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
108
|
+
Status PutUntracked(ColumnFamilyHandle* column_family, const Slice& key,
|
|
109
|
+
const Slice& value) override {
|
|
110
|
+
return PerformWithSavePoint([&]() {
|
|
111
|
+
constexpr bool do_validate = false;
|
|
112
|
+
return PutWithSecondaryIndices(column_family, key, value, do_validate);
|
|
113
|
+
});
|
|
100
114
|
}
|
|
101
|
-
Status PutUntracked(ColumnFamilyHandle*
|
|
102
|
-
const SliceParts&
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
115
|
+
Status PutUntracked(ColumnFamilyHandle* column_family, const SliceParts& key,
|
|
116
|
+
const SliceParts& value) override {
|
|
117
|
+
std::string key_str;
|
|
118
|
+
const Slice key_slice(key, &key_str);
|
|
119
|
+
|
|
120
|
+
std::string value_str;
|
|
121
|
+
const Slice value_slice(value, &value_str);
|
|
122
|
+
|
|
123
|
+
return PutUntracked(column_family, key_slice, value_slice);
|
|
106
124
|
}
|
|
107
125
|
|
|
108
126
|
Status PutEntityUntracked(ColumnFamilyHandle* column_family, const Slice& key,
|
|
@@ -123,22 +141,28 @@ class SecondaryIndexMixin : public Txn {
|
|
|
123
141
|
}
|
|
124
142
|
|
|
125
143
|
using Txn::DeleteUntracked;
|
|
126
|
-
Status DeleteUntracked(ColumnFamilyHandle*
|
|
127
|
-
const Slice&
|
|
128
|
-
return
|
|
129
|
-
|
|
144
|
+
Status DeleteUntracked(ColumnFamilyHandle* column_family,
|
|
145
|
+
const Slice& key) override {
|
|
146
|
+
return PerformWithSavePoint([&]() {
|
|
147
|
+
constexpr bool do_validate = false;
|
|
148
|
+
return DeleteWithSecondaryIndices(column_family, key, do_validate);
|
|
149
|
+
});
|
|
130
150
|
}
|
|
131
|
-
Status DeleteUntracked(ColumnFamilyHandle*
|
|
132
|
-
const SliceParts&
|
|
133
|
-
|
|
134
|
-
|
|
151
|
+
Status DeleteUntracked(ColumnFamilyHandle* column_family,
|
|
152
|
+
const SliceParts& key) override {
|
|
153
|
+
std::string key_str;
|
|
154
|
+
const Slice key_slice(key, &key_str);
|
|
155
|
+
|
|
156
|
+
return DeleteUntracked(column_family, key_slice);
|
|
135
157
|
}
|
|
136
158
|
|
|
137
159
|
using Txn::SingleDeleteUntracked;
|
|
138
|
-
Status SingleDeleteUntracked(ColumnFamilyHandle*
|
|
139
|
-
const Slice&
|
|
140
|
-
return
|
|
141
|
-
|
|
160
|
+
Status SingleDeleteUntracked(ColumnFamilyHandle* column_family,
|
|
161
|
+
const Slice& key) override {
|
|
162
|
+
return PerformWithSavePoint([&]() {
|
|
163
|
+
constexpr bool do_validate = false;
|
|
164
|
+
return SingleDeleteWithSecondaryIndices(column_family, key, do_validate);
|
|
165
|
+
});
|
|
142
166
|
}
|
|
143
167
|
|
|
144
168
|
private:
|
|
@@ -157,8 +181,9 @@ class SecondaryIndexMixin : public Txn {
|
|
|
157
181
|
return updated_column_value_;
|
|
158
182
|
}
|
|
159
183
|
Slice primary_column_value() const {
|
|
160
|
-
return updated_column_value_.has_value()
|
|
161
|
-
|
|
184
|
+
return updated_column_value_.has_value()
|
|
185
|
+
? SecondaryIndexHelper::AsSlice(*updated_column_value_)
|
|
186
|
+
: previous_column_value_;
|
|
162
187
|
}
|
|
163
188
|
|
|
164
189
|
private:
|
|
@@ -167,33 +192,6 @@ class SecondaryIndexMixin : public Txn {
|
|
|
167
192
|
std::optional<std::variant<Slice, std::string>> updated_column_value_;
|
|
168
193
|
};
|
|
169
194
|
|
|
170
|
-
static Slice AsSlice(const std::variant<Slice, std::string>& var) {
|
|
171
|
-
return std::visit([](const auto& value) -> Slice { return value; }, var);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
static std::string AsString(const std::variant<Slice, std::string>& var) {
|
|
175
|
-
return std::visit(
|
|
176
|
-
overload{
|
|
177
|
-
[](const Slice& value) -> std::string { return value.ToString(); },
|
|
178
|
-
[](const std::string& value) -> std::string { return value; }},
|
|
179
|
-
var);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
template <typename Iterator>
|
|
183
|
-
static Iterator FindPrimaryColumn(const SecondaryIndex* secondary_index,
|
|
184
|
-
ColumnFamilyHandle* column_family,
|
|
185
|
-
Iterator begin, Iterator end) {
|
|
186
|
-
assert(secondary_index);
|
|
187
|
-
assert(column_family);
|
|
188
|
-
|
|
189
|
-
if (column_family != secondary_index->GetPrimaryColumnFamily()) {
|
|
190
|
-
return end;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
return WideColumnsHelper::Find(begin, end,
|
|
194
|
-
secondary_index->GetPrimaryColumnName());
|
|
195
|
-
}
|
|
196
|
-
|
|
197
195
|
template <typename Operation>
|
|
198
196
|
Status PerformWithSavePoint(Operation&& operation) {
|
|
199
197
|
Txn::SetSavePoint();
|
|
@@ -234,19 +232,39 @@ class SecondaryIndexMixin : public Txn {
|
|
|
234
232
|
|
|
235
233
|
std::variant<Slice, std::string> secondary_key_prefix;
|
|
236
234
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
235
|
+
{
|
|
236
|
+
const Status s = secondary_index->GetSecondaryKeyPrefix(
|
|
237
|
+
primary_key, existing_primary_column_value, &secondary_key_prefix);
|
|
238
|
+
if (!s.ok()) {
|
|
239
|
+
return s;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
{
|
|
244
|
+
const Status s =
|
|
245
|
+
secondary_index->FinalizeSecondaryKeyPrefix(&secondary_key_prefix);
|
|
246
|
+
if (!s.ok()) {
|
|
247
|
+
return s;
|
|
248
|
+
}
|
|
241
249
|
}
|
|
242
250
|
|
|
243
251
|
const std::string secondary_key =
|
|
244
|
-
AsString(secondary_key_prefix) +
|
|
252
|
+
SecondaryIndexHelper::AsString(secondary_key_prefix) +
|
|
253
|
+
primary_key.ToString();
|
|
245
254
|
|
|
246
255
|
return Txn::SingleDelete(secondary_index->GetSecondaryColumnFamily(),
|
|
247
256
|
secondary_key);
|
|
248
257
|
}
|
|
249
258
|
|
|
259
|
+
Status AddPrimaryEntry(ColumnFamilyHandle* column_family,
|
|
260
|
+
const Slice& primary_key, const Slice& primary_value) {
|
|
261
|
+
assert(column_family);
|
|
262
|
+
|
|
263
|
+
constexpr bool assume_tracked = true;
|
|
264
|
+
|
|
265
|
+
return Txn::Put(column_family, primary_key, primary_value, assume_tracked);
|
|
266
|
+
}
|
|
267
|
+
|
|
250
268
|
Status AddPrimaryEntry(ColumnFamilyHandle* column_family,
|
|
251
269
|
const Slice& primary_key,
|
|
252
270
|
const WideColumns& primary_columns) {
|
|
@@ -274,6 +292,14 @@ class SecondaryIndexMixin : public Txn {
|
|
|
274
292
|
}
|
|
275
293
|
}
|
|
276
294
|
|
|
295
|
+
{
|
|
296
|
+
const Status s =
|
|
297
|
+
secondary_index->FinalizeSecondaryKeyPrefix(&secondary_key_prefix);
|
|
298
|
+
if (!s.ok()) {
|
|
299
|
+
return s;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
277
303
|
std::optional<std::variant<Slice, std::string>> secondary_value;
|
|
278
304
|
|
|
279
305
|
{
|
|
@@ -287,11 +313,14 @@ class SecondaryIndexMixin : public Txn {
|
|
|
287
313
|
|
|
288
314
|
{
|
|
289
315
|
const std::string secondary_key =
|
|
290
|
-
AsString(secondary_key_prefix) +
|
|
316
|
+
SecondaryIndexHelper::AsString(secondary_key_prefix) +
|
|
317
|
+
primary_key.ToString();
|
|
291
318
|
|
|
292
|
-
const Status s =
|
|
293
|
-
secondary_index->GetSecondaryColumnFamily(), secondary_key,
|
|
294
|
-
|
|
319
|
+
const Status s =
|
|
320
|
+
Txn::Put(secondary_index->GetSecondaryColumnFamily(), secondary_key,
|
|
321
|
+
secondary_value.has_value()
|
|
322
|
+
? SecondaryIndexHelper::AsSlice(*secondary_value)
|
|
323
|
+
: Slice());
|
|
295
324
|
if (!s.ok()) {
|
|
296
325
|
return s;
|
|
297
326
|
}
|
|
@@ -301,26 +330,20 @@ class SecondaryIndexMixin : public Txn {
|
|
|
301
330
|
}
|
|
302
331
|
|
|
303
332
|
Status RemoveSecondaryEntries(ColumnFamilyHandle* column_family,
|
|
304
|
-
const Slice& primary_key,
|
|
333
|
+
const Slice& primary_key,
|
|
334
|
+
const WideColumns& existing_columns) {
|
|
305
335
|
assert(column_family);
|
|
306
336
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
const Status s = GetPrimaryEntryForUpdate(
|
|
310
|
-
column_family, primary_key, &existing_primary_columns, do_validate);
|
|
311
|
-
if (s.IsNotFound()) {
|
|
312
|
-
return Status::OK();
|
|
313
|
-
}
|
|
314
|
-
if (!s.ok()) {
|
|
315
|
-
return s;
|
|
316
|
-
}
|
|
337
|
+
for (const auto& secondary_index : *secondary_indices_) {
|
|
338
|
+
assert(secondary_index);
|
|
317
339
|
|
|
318
|
-
|
|
340
|
+
if (secondary_index->GetPrimaryColumnFamily() != column_family) {
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
319
343
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
existing_columns.cbegin(), existing_columns.cend());
|
|
344
|
+
const auto it = WideColumnsHelper::Find(
|
|
345
|
+
existing_columns.cbegin(), existing_columns.cend(),
|
|
346
|
+
secondary_index->GetPrimaryColumnName());
|
|
324
347
|
if (it == existing_columns.cend()) {
|
|
325
348
|
continue;
|
|
326
349
|
}
|
|
@@ -335,18 +358,67 @@ class SecondaryIndexMixin : public Txn {
|
|
|
335
358
|
return Status::OK();
|
|
336
359
|
}
|
|
337
360
|
|
|
361
|
+
Status UpdatePrimaryColumnValues(ColumnFamilyHandle* column_family,
|
|
362
|
+
const Slice& primary_key,
|
|
363
|
+
Slice& primary_value,
|
|
364
|
+
autovector<IndexData>& applicable_indices) {
|
|
365
|
+
assert(column_family);
|
|
366
|
+
assert(applicable_indices.empty());
|
|
367
|
+
|
|
368
|
+
applicable_indices.reserve(secondary_indices_->size());
|
|
369
|
+
|
|
370
|
+
for (const auto& secondary_index : *secondary_indices_) {
|
|
371
|
+
assert(secondary_index);
|
|
372
|
+
|
|
373
|
+
if (secondary_index->GetPrimaryColumnFamily() != column_family) {
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
if (secondary_index->GetPrimaryColumnName() != kDefaultWideColumnName) {
|
|
378
|
+
continue;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
applicable_indices.emplace_back(
|
|
382
|
+
IndexData(secondary_index.get(), primary_value));
|
|
383
|
+
|
|
384
|
+
auto& index_data = applicable_indices.back();
|
|
385
|
+
|
|
386
|
+
const Status s = secondary_index->UpdatePrimaryColumnValue(
|
|
387
|
+
primary_key, index_data.previous_column_value(),
|
|
388
|
+
&index_data.updated_column_value());
|
|
389
|
+
if (!s.ok()) {
|
|
390
|
+
return s;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
primary_value = index_data.primary_column_value();
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
return Status::OK();
|
|
397
|
+
}
|
|
398
|
+
|
|
338
399
|
Status UpdatePrimaryColumnValues(ColumnFamilyHandle* column_family,
|
|
339
400
|
const Slice& primary_key,
|
|
340
401
|
WideColumns& primary_columns,
|
|
341
402
|
autovector<IndexData>& applicable_indices) {
|
|
403
|
+
assert(column_family);
|
|
342
404
|
assert(applicable_indices.empty());
|
|
343
405
|
|
|
406
|
+
// TODO: as an optimization, we can avoid calling SortColumns a second time
|
|
407
|
+
// in WriteBatchInternal::PutEntity
|
|
408
|
+
WideColumnsHelper::SortColumns(primary_columns);
|
|
409
|
+
|
|
344
410
|
applicable_indices.reserve(secondary_indices_->size());
|
|
345
411
|
|
|
346
412
|
for (const auto& secondary_index : *secondary_indices_) {
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
413
|
+
assert(secondary_index);
|
|
414
|
+
|
|
415
|
+
if (secondary_index->GetPrimaryColumnFamily() != column_family) {
|
|
416
|
+
continue;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
const auto it = WideColumnsHelper::Find(
|
|
420
|
+
primary_columns.begin(), primary_columns.end(),
|
|
421
|
+
secondary_index->GetPrimaryColumnName());
|
|
350
422
|
if (it == primary_columns.end()) {
|
|
351
423
|
continue;
|
|
352
424
|
}
|
|
@@ -383,10 +455,11 @@ class SecondaryIndexMixin : public Txn {
|
|
|
383
455
|
return Status::OK();
|
|
384
456
|
}
|
|
385
457
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
458
|
+
template <typename Value>
|
|
459
|
+
Status PutWithSecondaryIndicesImpl(ColumnFamilyHandle* column_family,
|
|
460
|
+
const Slice& key,
|
|
461
|
+
const Value& value_or_columns,
|
|
462
|
+
bool do_validate) {
|
|
390
463
|
// TODO: we could avoid removing and recreating secondary entries for
|
|
391
464
|
// which neither the secondary key prefix nor the value has changed
|
|
392
465
|
|
|
@@ -397,21 +470,30 @@ class SecondaryIndexMixin : public Txn {
|
|
|
397
470
|
const Slice& primary_key = key;
|
|
398
471
|
|
|
399
472
|
{
|
|
400
|
-
|
|
401
|
-
|
|
473
|
+
PinnableWideColumns existing_primary_columns;
|
|
474
|
+
|
|
475
|
+
const Status s = GetPrimaryEntryForUpdate(
|
|
476
|
+
column_family, primary_key, &existing_primary_columns, do_validate);
|
|
402
477
|
if (!s.ok()) {
|
|
403
|
-
|
|
478
|
+
if (!s.IsNotFound()) {
|
|
479
|
+
return s;
|
|
480
|
+
}
|
|
481
|
+
} else {
|
|
482
|
+
const Status st = RemoveSecondaryEntries(
|
|
483
|
+
column_family, primary_key, existing_primary_columns.columns());
|
|
484
|
+
if (!st.ok()) {
|
|
485
|
+
return st;
|
|
486
|
+
}
|
|
404
487
|
}
|
|
405
488
|
}
|
|
406
489
|
|
|
490
|
+
auto primary_value_or_columns = value_or_columns;
|
|
407
491
|
autovector<IndexData> applicable_indices;
|
|
408
492
|
|
|
409
|
-
WideColumns primary_columns(columns);
|
|
410
|
-
WideColumnsHelper::SortColumns(primary_columns);
|
|
411
|
-
|
|
412
493
|
{
|
|
413
|
-
const Status s = UpdatePrimaryColumnValues(
|
|
414
|
-
|
|
494
|
+
const Status s = UpdatePrimaryColumnValues(column_family, primary_key,
|
|
495
|
+
primary_value_or_columns,
|
|
496
|
+
applicable_indices);
|
|
415
497
|
if (!s.ok()) {
|
|
416
498
|
return s;
|
|
417
499
|
}
|
|
@@ -419,7 +501,7 @@ class SecondaryIndexMixin : public Txn {
|
|
|
419
501
|
|
|
420
502
|
{
|
|
421
503
|
const Status s =
|
|
422
|
-
AddPrimaryEntry(column_family, primary_key,
|
|
504
|
+
AddPrimaryEntry(column_family, primary_key, primary_value_or_columns);
|
|
423
505
|
if (!s.ok()) {
|
|
424
506
|
return s;
|
|
425
507
|
}
|
|
@@ -435,6 +517,84 @@ class SecondaryIndexMixin : public Txn {
|
|
|
435
517
|
return Status::OK();
|
|
436
518
|
}
|
|
437
519
|
|
|
520
|
+
Status PutWithSecondaryIndices(ColumnFamilyHandle* column_family,
|
|
521
|
+
const Slice& key, const Slice& value,
|
|
522
|
+
bool do_validate) {
|
|
523
|
+
return PutWithSecondaryIndicesImpl(column_family, key, value, do_validate);
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
Status PutEntityWithSecondaryIndices(ColumnFamilyHandle* column_family,
|
|
527
|
+
const Slice& key,
|
|
528
|
+
const WideColumns& columns,
|
|
529
|
+
bool do_validate) {
|
|
530
|
+
return PutWithSecondaryIndicesImpl(column_family, key, columns,
|
|
531
|
+
do_validate);
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
template <typename Operation>
|
|
535
|
+
Status DeleteWithSecondaryIndicesImpl(ColumnFamilyHandle* column_family,
|
|
536
|
+
const Slice& key, bool do_validate,
|
|
537
|
+
Operation&& operation) {
|
|
538
|
+
if (!column_family) {
|
|
539
|
+
column_family = Txn::DefaultColumnFamily();
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
{
|
|
543
|
+
PinnableWideColumns existing_primary_columns;
|
|
544
|
+
|
|
545
|
+
const Status s = GetPrimaryEntryForUpdate(
|
|
546
|
+
column_family, key, &existing_primary_columns, do_validate);
|
|
547
|
+
if (!s.ok()) {
|
|
548
|
+
if (!s.IsNotFound()) {
|
|
549
|
+
return s;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
return Status::OK();
|
|
553
|
+
} else {
|
|
554
|
+
const Status st = RemoveSecondaryEntries(
|
|
555
|
+
column_family, key, existing_primary_columns.columns());
|
|
556
|
+
if (!st.ok()) {
|
|
557
|
+
return st;
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
{
|
|
563
|
+
const Status s = operation(column_family, key);
|
|
564
|
+
if (!s.ok()) {
|
|
565
|
+
return s;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
return Status::OK();
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
Status DeleteWithSecondaryIndices(ColumnFamilyHandle* column_family,
|
|
573
|
+
const Slice& key, bool do_validate) {
|
|
574
|
+
return DeleteWithSecondaryIndicesImpl(
|
|
575
|
+
column_family, key, do_validate,
|
|
576
|
+
[&](ColumnFamilyHandle* cfh, const Slice& primary_key) {
|
|
577
|
+
assert(cfh);
|
|
578
|
+
|
|
579
|
+
constexpr bool assume_tracked = true;
|
|
580
|
+
|
|
581
|
+
return Txn::Delete(cfh, primary_key, assume_tracked);
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
Status SingleDeleteWithSecondaryIndices(ColumnFamilyHandle* column_family,
|
|
586
|
+
const Slice& key, bool do_validate) {
|
|
587
|
+
return DeleteWithSecondaryIndicesImpl(
|
|
588
|
+
column_family, key, do_validate,
|
|
589
|
+
[&](ColumnFamilyHandle* cfh, const Slice& primary_key) {
|
|
590
|
+
assert(cfh);
|
|
591
|
+
|
|
592
|
+
constexpr bool assume_tracked = true;
|
|
593
|
+
|
|
594
|
+
return Txn::SingleDelete(cfh, primary_key, assume_tracked);
|
|
595
|
+
});
|
|
596
|
+
}
|
|
597
|
+
|
|
438
598
|
const std::vector<std::shared_ptr<SecondaryIndex>>* secondary_indices_;
|
|
439
599
|
};
|
|
440
600
|
|