@nxtedition/rocksdb 15.4.0 → 15.5.0
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 +24 -19
- package/cache.js +1 -1
- package/chained-batch.js +12 -3
- package/deps/rocksdb/rocksdb/.clang-tidy +86 -0
- package/deps/rocksdb/rocksdb/BUCK +42 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +11 -0
- package/deps/rocksdb/rocksdb/Makefile +59 -32
- package/deps/rocksdb/rocksdb/cache/cache.cc +0 -5
- package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +9 -9
- package/deps/rocksdb/rocksdb/cache/cache_key.cc +3 -3
- package/deps/rocksdb/rocksdb/cache/cache_key.h +5 -5
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +16 -16
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +258 -294
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +98 -49
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +1 -5
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +2 -3
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +18 -18
- package/deps/rocksdb/rocksdb/crash_test.mk +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +23 -22
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +6 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +14 -16
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +38 -26
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +101 -18
- package/deps/rocksdb/rocksdb/db/blob/blob_index.h +12 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +6 -9
- package/deps/rocksdb/rocksdb/db/builder.cc +23 -0
- package/deps/rocksdb/rocksdb/db/builder.h +7 -0
- package/deps/rocksdb/rocksdb/db/c.cc +373 -57
- package/deps/rocksdb/rocksdb/db/c_test.c +101 -1
- package/deps/rocksdb/rocksdb/db/column_family.cc +31 -3
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +10 -13
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +35 -48
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +13 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +201 -39
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +2 -455
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +4 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +19 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +72 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +405 -83
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +25 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +1410 -106
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +12 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +19 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +505 -45
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +9 -1
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +7 -9
- package/deps/rocksdb/rocksdb/db/convenience.cc +4 -4
- package/deps/rocksdb/rocksdb/db/convenience_impl.h +2 -1
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +60 -88
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +10 -12
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +471 -40
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +116 -2
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +5 -15
- package/deps/rocksdb/rocksdb/db/db_compaction_abort_test.cc +993 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +329 -29
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +155 -13
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +54 -31
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +232 -70
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +57 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +224 -31
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +4 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +164 -8
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +47 -35
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +22 -9
- package/deps/rocksdb/rocksdb/db/db_iter.cc +9 -0
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +371 -6
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +7 -5
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +22 -23
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +40 -0
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +32 -13
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +68 -15
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +2 -3
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -21
- package/deps/rocksdb/rocksdb/db/db_test.cc +644 -128
- package/deps/rocksdb/rocksdb/db/db_test2.cc +198 -81
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +35 -10
- package/deps/rocksdb/rocksdb/db/db_test_util.h +8 -2
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +36 -32
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +11 -7
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +499 -0
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +284 -20
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/dbformat.h +0 -5
- package/deps/rocksdb/rocksdb/db/error_handler.cc +24 -0
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +12 -14
- package/deps/rocksdb/rocksdb/db/experimental.cc +13 -10
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +22 -3
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +21 -15
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +4 -6
- package/deps/rocksdb/rocksdb/db/flush_job.cc +11 -3
- package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +5 -6
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +4 -2
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +17 -17
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +154 -27
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/memtable.cc +197 -51
- package/deps/rocksdb/rocksdb/db/memtable.h +6 -0
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/merge_test.cc +37 -35
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/options_file_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +9 -11
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +10 -1
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +292 -15
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +10 -17
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +6 -8
- package/deps/rocksdb/rocksdb/db/repair.cc +10 -10
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/table_cache.cc +142 -135
- package/deps/rocksdb/rocksdb/db/table_cache.h +30 -6
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +7 -7
- package/deps/rocksdb/rocksdb/db/version_builder.cc +11 -50
- package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/version_edit.cc +51 -2
- package/deps/rocksdb/rocksdb/db/version_edit.h +91 -29
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -7
- package/deps/rocksdb/rocksdb/db/version_set.cc +211 -50
- package/deps/rocksdb/rocksdb/db/version_set.h +40 -3
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +5 -0
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +294 -21
- package/deps/rocksdb/rocksdb/db/version_util.cc +96 -0
- package/deps/rocksdb/rocksdb/db/version_util.h +24 -0
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +647 -31
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +219 -1
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +549 -12
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +21 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +32 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +74 -22
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +9 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -61
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +15 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +76 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +92 -72
- package/deps/rocksdb/rocksdb/env/env.cc +1 -0
- package/deps/rocksdb/rocksdb/env/env_test.cc +365 -2
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +31 -30
- package/deps/rocksdb/rocksdb/env/io_posix.cc +8 -11
- package/deps/rocksdb/rocksdb/env/io_posix.h +30 -1
- package/deps/rocksdb/rocksdb/env/io_posix_test.cc +43 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -1
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +108 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +32 -4
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +4 -4
- package/deps/rocksdb/rocksdb/file/file_util.cc +8 -2
- package/deps/rocksdb/rocksdb/file/file_util.h +2 -1
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +331 -12
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +52 -35
- package/deps/rocksdb/rocksdb/folly.mk +22 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +100 -54
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +67 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +149 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +78 -97
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +17 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/io_dispatcher.h +358 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +43 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +20 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +63 -21
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +10 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +2 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -14
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +49 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +77 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +16 -10
- package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +5 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +2 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/user_defined_index.h +106 -46
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/db_ttl.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +14 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +5 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -2
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +2 -2
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +226 -8
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +490 -0
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +3 -3
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +11 -0
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +4 -12
- package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +5 -5
- package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +21 -4
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +9 -3
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +21 -2
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +21 -1
- package/deps/rocksdb/rocksdb/options/cf_options.h +2 -0
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +0 -2
- package/deps/rocksdb/rocksdb/options/db_options.cc +26 -5
- package/deps/rocksdb/rocksdb/options/db_options.h +3 -1
- package/deps/rocksdb/rocksdb/options/options.cc +5 -1
- package/deps/rocksdb/rocksdb/options/options_helper.cc +7 -2
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +109 -103
- package/deps/rocksdb/rocksdb/options/options_test.cc +14 -0
- package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +15 -17
- package/deps/rocksdb/rocksdb/port/lang.h +4 -0
- package/deps/rocksdb/rocksdb/port/port_example.h +0 -23
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +36 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.h +9 -0
- package/deps/rocksdb/rocksdb/src.mk +12 -0
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +571 -292
- package/deps/rocksdb/rocksdb/table/block_based/block.h +143 -53
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +154 -90
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +5 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +51 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +0 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +147 -734
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +30 -233
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +178 -108
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +13 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +17 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +5 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +70 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +168 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -9
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +7 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +9 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +548 -169
- package/deps/rocksdb/rocksdb/table/block_based/block_type.h +30 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_util.h +156 -0
- package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.cc +73 -30
- package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.h +74 -7
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +20 -14
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +22 -12
- package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.cc +332 -0
- package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.h +133 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +4 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +126 -46
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +31 -3
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +1 -2
- package/deps/rocksdb/rocksdb/table/cleanable_test.cc +3 -1
- package/deps/rocksdb/rocksdb/table/external_table.cc +25 -4
- package/deps/rocksdb/rocksdb/table/format.cc +27 -15
- package/deps/rocksdb/rocksdb/table/format.h +41 -15
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +1 -0
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +22 -12
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +7 -21
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +88 -13
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +53 -42
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +3 -12
- package/deps/rocksdb/rocksdb/table/table_builder.h +0 -4
- package/deps/rocksdb/rocksdb/table/table_properties.cc +18 -0
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +2 -3
- package/deps/rocksdb/rocksdb/table/table_test.cc +848 -172
- package/deps/rocksdb/rocksdb/table/unique_id.cc +24 -20
- package/deps/rocksdb/rocksdb/table/unique_id_impl.h +8 -8
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +5 -4
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -1
- package/deps/rocksdb/rocksdb/test_util/testutil.h +2 -2
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +2 -1
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +238 -120
- package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +2 -4
- package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +4 -8
- package/deps/rocksdb/rocksdb/tools/dump/rocksdb_undump.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +2 -3
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +82 -20
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +41 -47
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +9 -0
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +5 -6
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +6 -5
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +4 -4
- package/deps/rocksdb/rocksdb/tools/write_stress.cc +1 -3
- package/deps/rocksdb/rocksdb/util/atomic.h +30 -23
- package/deps/rocksdb/rocksdb/util/auto_tune_compressor.cc +6 -7
- package/deps/rocksdb/rocksdb/util/auto_tune_compressor.h +3 -3
- package/deps/rocksdb/rocksdb/util/bit_fields.h +68 -46
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +16 -16
- package/deps/rocksdb/rocksdb/util/coding.h +14 -27
- package/deps/rocksdb/rocksdb/util/compression.cc +365 -207
- package/deps/rocksdb/rocksdb/util/compression.h +16 -1298
- package/deps/rocksdb/rocksdb/util/compression_test.cc +347 -61
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +8 -9
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +1 -1
- package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +1 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +3 -3
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +18 -18
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +3 -3
- package/deps/rocksdb/rocksdb/util/hash_test.cc +19 -7
- package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.cc +1099 -0
- package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.h +36 -0
- package/deps/rocksdb/rocksdb/util/io_dispatcher_test.cc +1919 -0
- package/deps/rocksdb/rocksdb/util/math.h +3 -1
- package/deps/rocksdb/rocksdb/util/mutexlock.h +19 -19
- package/deps/rocksdb/rocksdb/util/ribbon_alg.h +25 -25
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +5 -7
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +4 -5
- package/deps/rocksdb/rocksdb/util/slice.cc +0 -10
- package/deps/rocksdb/rocksdb/util/slice_test.cc +35 -1
- package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +5 -7
- package/deps/rocksdb/rocksdb/util/status.cc +3 -1
- package/deps/rocksdb/rocksdb/util/stop_watch.h +2 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +4 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +123 -78
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +12 -93
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +0 -21
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +6 -48
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +94 -307
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +12 -58
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +2 -8
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +2 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +205 -811
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +18 -9
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +2 -7
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +1 -9
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +17 -11
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +68 -61
- package/deps/rocksdb/rocksdb/utilities/debug.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +105 -59
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +274 -7
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs_test.cc +94 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +13 -17
- package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +16 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +25 -25
- package/deps/rocksdb/rocksdb/utilities/object_registry.cc +40 -40
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +2 -5
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +17 -19
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +4 -13
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_seqno_test.cc +431 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +91 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.cc +562 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.h +615 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.cc +2575 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.h +685 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_db_test.cc +2843 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.cc +567 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.h +275 -0
- package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_test.cc +5183 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +3 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +93 -88
- package/deps/rocksdb/rocksdb.gyp +7 -0
- package/index.js +11 -2
- package/iterator.js +15 -7
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_custom_library.h +0 -43
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h +0 -55
|
@@ -5,13 +5,35 @@
|
|
|
5
5
|
|
|
6
6
|
#include "db/wide/wide_column_serialization.h"
|
|
7
7
|
|
|
8
|
+
#include <chrono>
|
|
9
|
+
#include <limits>
|
|
10
|
+
|
|
11
|
+
#include "db/blob/blob_index.h"
|
|
8
12
|
#include "db/wide/wide_columns_helper.h"
|
|
9
13
|
#include "test_util/testharness.h"
|
|
10
14
|
#include "util/coding.h"
|
|
15
|
+
#include "util/random.h"
|
|
11
16
|
|
|
12
17
|
namespace ROCKSDB_NAMESPACE {
|
|
13
18
|
|
|
14
|
-
|
|
19
|
+
class WideColumnSerializationTest : public testing::Test {
|
|
20
|
+
protected:
|
|
21
|
+
// Wrappers for private methods accessible via friend declaration.
|
|
22
|
+
static Status GetVersion(const Slice& input, uint32_t& version) {
|
|
23
|
+
return WideColumnSerialization::GetVersion(input, version);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
static Status SerializeResolvedEntity(
|
|
27
|
+
const std::vector<WideColumn>& columns,
|
|
28
|
+
const std::vector<std::pair<size_t, BlobIndex>>& blob_columns,
|
|
29
|
+
const std::vector<std::string>& resolved_blob_values,
|
|
30
|
+
std::string& output) {
|
|
31
|
+
return WideColumnSerialization::SerializeResolvedEntity(
|
|
32
|
+
columns, blob_columns, resolved_blob_values, output);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
TEST_F(WideColumnSerializationTest, Construct) {
|
|
15
37
|
constexpr char foo[] = "foo";
|
|
16
38
|
constexpr char bar[] = "bar";
|
|
17
39
|
|
|
@@ -87,7 +109,7 @@ TEST(WideColumnSerializationTest, Construct) {
|
|
|
87
109
|
}
|
|
88
110
|
}
|
|
89
111
|
|
|
90
|
-
|
|
112
|
+
TEST_F(WideColumnSerializationTest, SerializeDeserialize) {
|
|
91
113
|
WideColumns columns{{"foo", "bar"}, {"hello", "world"}};
|
|
92
114
|
std::string output;
|
|
93
115
|
|
|
@@ -126,7 +148,7 @@ TEST(WideColumnSerializationTest, SerializeDeserialize) {
|
|
|
126
148
|
}
|
|
127
149
|
}
|
|
128
150
|
|
|
129
|
-
|
|
151
|
+
TEST_F(WideColumnSerializationTest, SerializeDuplicateError) {
|
|
130
152
|
WideColumns columns{{"foo", "bar"}, {"foo", "baz"}};
|
|
131
153
|
std::string output;
|
|
132
154
|
|
|
@@ -134,7 +156,7 @@ TEST(WideColumnSerializationTest, SerializeDuplicateError) {
|
|
|
134
156
|
WideColumnSerialization::Serialize(columns, output).IsCorruption());
|
|
135
157
|
}
|
|
136
158
|
|
|
137
|
-
|
|
159
|
+
TEST_F(WideColumnSerializationTest, SerializeOutOfOrderError) {
|
|
138
160
|
WideColumns columns{{"hello", "world"}, {"foo", "bar"}};
|
|
139
161
|
std::string output;
|
|
140
162
|
|
|
@@ -142,7 +164,7 @@ TEST(WideColumnSerializationTest, SerializeOutOfOrderError) {
|
|
|
142
164
|
WideColumnSerialization::Serialize(columns, output).IsCorruption());
|
|
143
165
|
}
|
|
144
166
|
|
|
145
|
-
|
|
167
|
+
TEST_F(WideColumnSerializationTest, DeserializeVersionError) {
|
|
146
168
|
// Can't decode version
|
|
147
169
|
|
|
148
170
|
std::string buf;
|
|
@@ -155,7 +177,7 @@ TEST(WideColumnSerializationTest, DeserializeVersionError) {
|
|
|
155
177
|
ASSERT_TRUE(std::strstr(s.getState(), "version"));
|
|
156
178
|
}
|
|
157
179
|
|
|
158
|
-
|
|
180
|
+
TEST_F(WideColumnSerializationTest, DeserializeUnsupportedVersion) {
|
|
159
181
|
// Unsupported version
|
|
160
182
|
constexpr uint32_t future_version = 1000;
|
|
161
183
|
|
|
@@ -170,11 +192,11 @@ TEST(WideColumnSerializationTest, DeserializeUnsupportedVersion) {
|
|
|
170
192
|
ASSERT_TRUE(std::strstr(s.getState(), "version"));
|
|
171
193
|
}
|
|
172
194
|
|
|
173
|
-
|
|
195
|
+
TEST_F(WideColumnSerializationTest, DeserializeNumberOfColumnsError) {
|
|
174
196
|
// Can't decode number of columns
|
|
175
197
|
|
|
176
198
|
std::string buf;
|
|
177
|
-
PutVarint32(&buf, WideColumnSerialization::
|
|
199
|
+
PutVarint32(&buf, WideColumnSerialization::kVersion1);
|
|
178
200
|
|
|
179
201
|
Slice input(buf);
|
|
180
202
|
WideColumns columns;
|
|
@@ -184,10 +206,10 @@ TEST(WideColumnSerializationTest, DeserializeNumberOfColumnsError) {
|
|
|
184
206
|
ASSERT_TRUE(std::strstr(s.getState(), "number"));
|
|
185
207
|
}
|
|
186
208
|
|
|
187
|
-
|
|
209
|
+
TEST_F(WideColumnSerializationTest, DeserializeV2Error) {
|
|
188
210
|
std::string buf;
|
|
189
211
|
|
|
190
|
-
PutVarint32(&buf, WideColumnSerialization::
|
|
212
|
+
PutVarint32(&buf, WideColumnSerialization::kVersion1);
|
|
191
213
|
|
|
192
214
|
constexpr uint32_t num_columns = 2;
|
|
193
215
|
PutVarint32(&buf, num_columns);
|
|
@@ -277,10 +299,10 @@ TEST(WideColumnSerializationTest, DeserializeColumnsError) {
|
|
|
277
299
|
}
|
|
278
300
|
}
|
|
279
301
|
|
|
280
|
-
|
|
302
|
+
TEST_F(WideColumnSerializationTest, DeserializeV2OutOfOrder) {
|
|
281
303
|
std::string buf;
|
|
282
304
|
|
|
283
|
-
PutVarint32(&buf, WideColumnSerialization::
|
|
305
|
+
PutVarint32(&buf, WideColumnSerialization::kVersion1);
|
|
284
306
|
|
|
285
307
|
constexpr uint32_t num_columns = 2;
|
|
286
308
|
PutVarint32(&buf, num_columns);
|
|
@@ -302,6 +324,521 @@ TEST(WideColumnSerializationTest, DeserializeColumnsOutOfOrder) {
|
|
|
302
324
|
ASSERT_TRUE(std::strstr(s.getState(), "order"));
|
|
303
325
|
}
|
|
304
326
|
|
|
327
|
+
TEST_F(WideColumnSerializationTest, DeserializeV2RejectsRecursiveType) {
|
|
328
|
+
// Manually construct a V2 entity where one column has type
|
|
329
|
+
// kTypeWideColumnEntity, which would create recursive nesting.
|
|
330
|
+
// Deserialization must reject this.
|
|
331
|
+
std::string buf;
|
|
332
|
+
|
|
333
|
+
PutVarint32(&buf, WideColumnSerialization::kVersion2);
|
|
334
|
+
|
|
335
|
+
constexpr uint32_t num_columns = 2;
|
|
336
|
+
PutVarint32(&buf, num_columns);
|
|
337
|
+
|
|
338
|
+
// Section 2: COLUMN TYPES -- first column inline, second recursive
|
|
339
|
+
buf.push_back(static_cast<char>(kTypeValue));
|
|
340
|
+
buf.push_back(static_cast<char>(kTypeWideColumnEntity));
|
|
341
|
+
|
|
342
|
+
// Section 3: SKIP INFO
|
|
343
|
+
PutVarint32(&buf, 2); // name_sizes_bytes (varint(1) + varint(1))
|
|
344
|
+
PutVarint32(&buf, 2); // value_sizes_bytes (varint(3) + varint(5))
|
|
345
|
+
PutVarint32(&buf, 2); // names_bytes ("a" + "b")
|
|
346
|
+
|
|
347
|
+
// Section 4: NAME SIZES
|
|
348
|
+
PutVarint32(&buf, 1); // "a"
|
|
349
|
+
PutVarint32(&buf, 1); // "b"
|
|
350
|
+
|
|
351
|
+
// Section 5: VALUE SIZES
|
|
352
|
+
PutVarint32(&buf, 3);
|
|
353
|
+
PutVarint32(&buf, 5);
|
|
354
|
+
|
|
355
|
+
// Section 6: NAMES
|
|
356
|
+
buf.append("ab");
|
|
357
|
+
|
|
358
|
+
// Section 7: VALUES (8 bytes of placeholder data)
|
|
359
|
+
buf.append(8, 'x');
|
|
360
|
+
|
|
361
|
+
// DeserializeV2 should reject with Corruption
|
|
362
|
+
{
|
|
363
|
+
Slice input(buf);
|
|
364
|
+
std::vector<WideColumn> columns;
|
|
365
|
+
std::vector<std::pair<size_t, BlobIndex>> blob_columns;
|
|
366
|
+
const Status s =
|
|
367
|
+
WideColumnSerialization::DeserializeV2(input, columns, blob_columns);
|
|
368
|
+
ASSERT_TRUE(s.IsCorruption());
|
|
369
|
+
ASSERT_TRUE(std::strstr(s.getState(), "Unsupported wide column ValueType"));
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
// Deserialize (V1-only API) should also reject
|
|
373
|
+
{
|
|
374
|
+
Slice input(buf);
|
|
375
|
+
WideColumns columns;
|
|
376
|
+
const Status s = WideColumnSerialization::Deserialize(input, columns);
|
|
377
|
+
ASSERT_TRUE(s.IsCorruption());
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
// Helper: create a BlobIndex from EncodeBlob parameters.
|
|
382
|
+
static BlobIndex MakeBlobIndex(uint64_t file_number, uint64_t offset,
|
|
383
|
+
uint64_t size,
|
|
384
|
+
CompressionType compression = kNoCompression) {
|
|
385
|
+
std::string encoded;
|
|
386
|
+
BlobIndex::EncodeBlob(&encoded, file_number, offset, size, compression);
|
|
387
|
+
BlobIndex bi;
|
|
388
|
+
Slice s(encoded);
|
|
389
|
+
assert(bi.DecodeFrom(s).ok());
|
|
390
|
+
return bi;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// Helper: V2 serialize → DeserializeV2 round-trip, returning
|
|
394
|
+
// deserialized columns and blob column info.
|
|
395
|
+
static void V2SerializeAndDeserialize(
|
|
396
|
+
const std::vector<std::pair<std::string, std::string>>& columns,
|
|
397
|
+
const std::vector<std::pair<size_t, BlobIndex>>& blob_columns_in,
|
|
398
|
+
std::vector<WideColumn>* deserialized,
|
|
399
|
+
std::vector<std::pair<size_t, BlobIndex>>* blob_columns_out,
|
|
400
|
+
std::string* serialized_out) {
|
|
401
|
+
ASSERT_OK(WideColumnSerialization::SerializeV2(columns, blob_columns_in,
|
|
402
|
+
*serialized_out));
|
|
403
|
+
|
|
404
|
+
Slice input(*serialized_out);
|
|
405
|
+
ASSERT_OK(WideColumnSerialization::DeserializeV2(input, *deserialized,
|
|
406
|
+
*blob_columns_out));
|
|
407
|
+
ASSERT_EQ(deserialized->size(), columns.size());
|
|
408
|
+
for (size_t i = 0; i < columns.size(); ++i) {
|
|
409
|
+
ASSERT_EQ((*deserialized)[i].name(), columns[i].first);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
// Helper: build WideColumns from string pairs.
|
|
414
|
+
static WideColumns ToWideColumns(
|
|
415
|
+
const std::vector<std::pair<std::string, std::string>>& columns) {
|
|
416
|
+
WideColumns wc;
|
|
417
|
+
wc.reserve(columns.size());
|
|
418
|
+
for (const auto& col : columns) {
|
|
419
|
+
wc.emplace_back(Slice(col.first), Slice(col.second));
|
|
420
|
+
}
|
|
421
|
+
return wc;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
// Helper: deserialize and verify column names match expected.first
|
|
425
|
+
// and column values match expected_values[i].
|
|
426
|
+
static void VerifyDeserialize(
|
|
427
|
+
const std::string& serialized,
|
|
428
|
+
const std::vector<std::pair<std::string, std::string>>& expected,
|
|
429
|
+
const std::vector<std::string>& expected_values) {
|
|
430
|
+
Slice input(serialized);
|
|
431
|
+
WideColumns deserialized;
|
|
432
|
+
ASSERT_OK(WideColumnSerialization::Deserialize(input, deserialized));
|
|
433
|
+
ASSERT_EQ(deserialized.size(), expected.size());
|
|
434
|
+
for (size_t i = 0; i < expected.size(); ++i) {
|
|
435
|
+
ASSERT_EQ(deserialized[i].name(), expected[i].first);
|
|
436
|
+
ASSERT_EQ(deserialized[i].value(), expected_values[i]);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
// Convenience overload: values come from expected[i].second.
|
|
441
|
+
static void VerifyDeserialize(
|
|
442
|
+
const std::string& serialized,
|
|
443
|
+
const std::vector<std::pair<std::string, std::string>>& expected) {
|
|
444
|
+
std::vector<std::string> values;
|
|
445
|
+
values.reserve(expected.size());
|
|
446
|
+
for (const auto& col : expected) {
|
|
447
|
+
values.push_back(col.second);
|
|
448
|
+
}
|
|
449
|
+
VerifyDeserialize(serialized, expected, values);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
// Helper: create a random non-inlined BlobIndex using the given RNG.
|
|
453
|
+
// Only creates Blob or BlobTTL types (not InlinedTTL), because InlinedTTL
|
|
454
|
+
// stores a Slice pointing into the encoded string, which would become a
|
|
455
|
+
// dangling reference after this function returns.
|
|
456
|
+
static BlobIndex MakeRandomBlobIndex(Random& rng) {
|
|
457
|
+
std::string bi_str;
|
|
458
|
+
if (rng.Uniform(2) == 0) {
|
|
459
|
+
BlobIndex::EncodeBlob(&bi_str, rng.Uniform(1000), rng.Uniform(10000),
|
|
460
|
+
rng.Uniform(5000), kNoCompression);
|
|
461
|
+
} else {
|
|
462
|
+
BlobIndex::EncodeBlobTTL(&bi_str, rng.Uniform(1000000), rng.Uniform(1000),
|
|
463
|
+
rng.Uniform(10000), rng.Uniform(5000),
|
|
464
|
+
kSnappyCompression);
|
|
465
|
+
}
|
|
466
|
+
BlobIndex bi;
|
|
467
|
+
Slice s(bi_str);
|
|
468
|
+
assert(bi.DecodeFrom(s).ok());
|
|
469
|
+
return bi;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
// Helper: V2 serialize with no blobs then GetValueOfDefaultColumn.
|
|
473
|
+
static void VerifyGetDefaultColumn(
|
|
474
|
+
const std::vector<std::pair<std::string, std::string>>& columns,
|
|
475
|
+
const Slice& expected_value) {
|
|
476
|
+
std::vector<std::pair<size_t, BlobIndex>> no_blobs;
|
|
477
|
+
std::string serialized;
|
|
478
|
+
ASSERT_OK(
|
|
479
|
+
WideColumnSerialization::SerializeV2(columns, no_blobs, serialized));
|
|
480
|
+
|
|
481
|
+
Slice input(serialized);
|
|
482
|
+
Slice value;
|
|
483
|
+
ASSERT_OK(WideColumnSerialization::GetValueOfDefaultColumn(input, value));
|
|
484
|
+
ASSERT_EQ(value, expected_value);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
TEST_F(WideColumnSerializationTest, SerializeResolvedEntity) {
|
|
488
|
+
// Test resolve with mixed, all-blob, and no-blob configurations
|
|
489
|
+
struct TestCase {
|
|
490
|
+
std::vector<std::pair<std::string, std::string>> columns;
|
|
491
|
+
std::vector<std::pair<size_t, BlobIndex>> blob_cols;
|
|
492
|
+
std::vector<std::string> resolved_values;
|
|
493
|
+
std::vector<std::string> expected_values;
|
|
494
|
+
};
|
|
495
|
+
|
|
496
|
+
std::vector<TestCase> cases = {
|
|
497
|
+
// Mixed inline and blob
|
|
498
|
+
{.columns = {{"a", "inline_a"}, {"b", "ph"}, {"c", "inline_c"}},
|
|
499
|
+
.blob_cols = {{1, MakeBlobIndex(50, 500, 100)}},
|
|
500
|
+
.resolved_values = {"resolved_b"},
|
|
501
|
+
.expected_values = {"inline_a", "resolved_b", "inline_c"}},
|
|
502
|
+
// All blob columns
|
|
503
|
+
{.columns = {{"x", "ph1"}, {"y", "ph2"}, {"z", "ph3"}},
|
|
504
|
+
.blob_cols = {{0, MakeBlobIndex(10, 100, 50)},
|
|
505
|
+
{1, MakeBlobIndex(20, 200, 60)},
|
|
506
|
+
{2, MakeBlobIndex(30, 300, 70)}},
|
|
507
|
+
.resolved_values = {"val_x", "val_y", "val_z"},
|
|
508
|
+
.expected_values = {"val_x", "val_y", "val_z"}},
|
|
509
|
+
// No blob columns
|
|
510
|
+
{.columns = {{"alpha", "val_alpha"}, {"beta", "val_beta"}},
|
|
511
|
+
.blob_cols = {},
|
|
512
|
+
.resolved_values = {},
|
|
513
|
+
.expected_values = {"val_alpha", "val_beta"}},
|
|
514
|
+
};
|
|
515
|
+
|
|
516
|
+
for (const auto& tc : cases) {
|
|
517
|
+
std::string serialized;
|
|
518
|
+
std::vector<WideColumn> deserialized;
|
|
519
|
+
std::vector<std::pair<size_t, BlobIndex>> blob_out;
|
|
520
|
+
V2SerializeAndDeserialize(tc.columns, tc.blob_cols, &deserialized,
|
|
521
|
+
&blob_out, &serialized);
|
|
522
|
+
|
|
523
|
+
std::string resolved_output;
|
|
524
|
+
ASSERT_OK(WideColumnSerializationTest::SerializeResolvedEntity(
|
|
525
|
+
deserialized, blob_out, tc.resolved_values, resolved_output));
|
|
526
|
+
|
|
527
|
+
uint32_t v = 0;
|
|
528
|
+
ASSERT_OK(GetVersion(Slice(resolved_output), v));
|
|
529
|
+
ASSERT_EQ(v, WideColumnSerialization::kVersion1);
|
|
530
|
+
|
|
531
|
+
VerifyDeserialize(resolved_output, tc.columns, tc.expected_values);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
TEST_F(WideColumnSerializationTest, V2GetValueOfDefaultColumn) {
|
|
536
|
+
// V2 with default column present
|
|
537
|
+
VerifyGetDefaultColumn({{"", "default_value"}, {"col1", "value1"}},
|
|
538
|
+
"default_value");
|
|
539
|
+
// V2 without default column
|
|
540
|
+
VerifyGetDefaultColumn({{"col1", "value1"}, {"col2", "value2"}}, Slice());
|
|
541
|
+
// V2 with zero columns
|
|
542
|
+
VerifyGetDefaultColumn({}, Slice());
|
|
543
|
+
|
|
544
|
+
// V1 fallback
|
|
545
|
+
{
|
|
546
|
+
WideColumns columns{{"", "v1_default"}, {"col1", "v1"}};
|
|
547
|
+
std::string serialized;
|
|
548
|
+
ASSERT_OK(WideColumnSerialization::Serialize(columns, serialized));
|
|
549
|
+
|
|
550
|
+
Slice input(serialized);
|
|
551
|
+
Slice value;
|
|
552
|
+
ASSERT_OK(WideColumnSerialization::GetValueOfDefaultColumn(input, value));
|
|
553
|
+
ASSERT_EQ(value, "v1_default");
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
TEST_F(WideColumnSerializationTest, V2BlobColumnRejectsDeserialize) {
|
|
558
|
+
std::vector<std::pair<std::string, std::string>> columns = {
|
|
559
|
+
{"a", "inline"}, {"b", "placeholder"}};
|
|
560
|
+
std::vector<std::pair<size_t, BlobIndex>> blob_columns = {
|
|
561
|
+
{1, MakeBlobIndex(1, 2, 3)}};
|
|
562
|
+
|
|
563
|
+
std::string serialized;
|
|
564
|
+
ASSERT_OK(
|
|
565
|
+
WideColumnSerialization::SerializeV2(columns, blob_columns, serialized));
|
|
566
|
+
|
|
567
|
+
Slice input(serialized);
|
|
568
|
+
WideColumns deserialized;
|
|
569
|
+
ASSERT_TRUE(WideColumnSerialization::Deserialize(input, deserialized)
|
|
570
|
+
.IsNotSupported());
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
TEST_F(WideColumnSerializationTest, V2GetValueOfDefaultColumnBlobRef) {
|
|
574
|
+
// When default column (index 0) is a blob reference,
|
|
575
|
+
// GetValueOfDefaultColumn should return NotSupported.
|
|
576
|
+
std::vector<std::pair<std::string, std::string>> columns = {
|
|
577
|
+
{"", "placeholder"}, {"col1", "value1"}};
|
|
578
|
+
std::vector<std::pair<size_t, BlobIndex>> blob_columns = {
|
|
579
|
+
{0, MakeBlobIndex(10, 100, 500)}};
|
|
580
|
+
|
|
581
|
+
std::string serialized;
|
|
582
|
+
ASSERT_OK(
|
|
583
|
+
WideColumnSerialization::SerializeV2(columns, blob_columns, serialized));
|
|
584
|
+
|
|
585
|
+
Slice input(serialized);
|
|
586
|
+
Slice value;
|
|
587
|
+
ASSERT_TRUE(WideColumnSerialization::GetValueOfDefaultColumn(input, value)
|
|
588
|
+
.IsNotSupported());
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
TEST_F(WideColumnSerializationTest, SerializeV2Errors) {
|
|
592
|
+
// Blob column index out of range
|
|
593
|
+
{
|
|
594
|
+
std::vector<std::pair<std::string, std::string>> columns = {{"a", "val"}};
|
|
595
|
+
std::vector<std::pair<size_t, BlobIndex>> blob_columns = {
|
|
596
|
+
{5, MakeBlobIndex(1, 2, 3)}}; // index 5 but only 1 column
|
|
597
|
+
|
|
598
|
+
std::string output;
|
|
599
|
+
ASSERT_TRUE(
|
|
600
|
+
WideColumnSerialization::SerializeV2(columns, blob_columns, output)
|
|
601
|
+
.IsInvalidArgument());
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
// Columns out of order (V2)
|
|
605
|
+
{
|
|
606
|
+
std::vector<std::pair<std::string, std::string>> columns = {{"b", "val_b"},
|
|
607
|
+
{"a", "val_a"}};
|
|
608
|
+
std::vector<std::pair<size_t, BlobIndex>> no_blobs;
|
|
609
|
+
|
|
610
|
+
std::string output;
|
|
611
|
+
ASSERT_TRUE(WideColumnSerialization::SerializeV2(columns, no_blobs, output)
|
|
612
|
+
.IsCorruption());
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
// Duplicate column names (V2)
|
|
616
|
+
{
|
|
617
|
+
std::vector<std::pair<std::string, std::string>> columns = {{"a", "val1"},
|
|
618
|
+
{"a", "val2"}};
|
|
619
|
+
std::vector<std::pair<size_t, BlobIndex>> no_blobs;
|
|
620
|
+
|
|
621
|
+
std::string output;
|
|
622
|
+
ASSERT_TRUE(WideColumnSerialization::SerializeV2(columns, no_blobs, output)
|
|
623
|
+
.IsCorruption());
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
TEST_F(WideColumnSerializationTest, BlobIndexEncodeToRoundTrip) {
|
|
628
|
+
// Test EncodeTo produces identical output to static Encode methods
|
|
629
|
+
// for all three blob index types.
|
|
630
|
+
auto verify_encode_to = [](const std::string& encoded_static) {
|
|
631
|
+
BlobIndex bi;
|
|
632
|
+
Slice s(encoded_static);
|
|
633
|
+
ASSERT_OK(bi.DecodeFrom(s));
|
|
634
|
+
std::string encoded_instance;
|
|
635
|
+
bi.EncodeTo(&encoded_instance);
|
|
636
|
+
ASSERT_EQ(encoded_static, encoded_instance);
|
|
637
|
+
};
|
|
638
|
+
|
|
639
|
+
std::string blob_str;
|
|
640
|
+
std::string blob_ttl_str;
|
|
641
|
+
std::string inlined_str;
|
|
642
|
+
BlobIndex::EncodeBlob(&blob_str, 42, 1024, 2048, kSnappyCompression);
|
|
643
|
+
BlobIndex::EncodeBlobTTL(&blob_ttl_str, 9999, 10, 200, 3000,
|
|
644
|
+
kZlibCompression);
|
|
645
|
+
BlobIndex::EncodeInlinedTTL(&inlined_str, 12345, "inline_data");
|
|
646
|
+
|
|
647
|
+
verify_encode_to(blob_str);
|
|
648
|
+
verify_encode_to(blob_ttl_str);
|
|
649
|
+
verify_encode_to(inlined_str);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
TEST_F(WideColumnSerializationTest, V2LayoutStructureVerification) {
|
|
653
|
+
// Verify the V2 binary layout structure by manually parsing sections
|
|
654
|
+
std::vector<std::pair<std::string, std::string>> columns = {
|
|
655
|
+
{"aa", "val_aa"}, {"bbb", "val_bbb"}};
|
|
656
|
+
std::vector<std::pair<size_t, BlobIndex>> empty_blob_columns;
|
|
657
|
+
|
|
658
|
+
std::string serialized;
|
|
659
|
+
ASSERT_OK(WideColumnSerialization::SerializeV2(columns, empty_blob_columns,
|
|
660
|
+
serialized));
|
|
661
|
+
|
|
662
|
+
Slice data(serialized);
|
|
663
|
+
|
|
664
|
+
// Section 1: HEADER
|
|
665
|
+
uint32_t version = 0;
|
|
666
|
+
ASSERT_TRUE(GetVarint32(&data, &version));
|
|
667
|
+
ASSERT_EQ(version, WideColumnSerialization::kVersion2);
|
|
668
|
+
|
|
669
|
+
uint32_t num_columns = 0;
|
|
670
|
+
ASSERT_TRUE(GetVarint32(&data, &num_columns));
|
|
671
|
+
ASSERT_EQ(num_columns, 2u);
|
|
672
|
+
|
|
673
|
+
// Section 2: SKIP INFO (3 varints)
|
|
674
|
+
uint32_t name_sizes_bytes = 0;
|
|
675
|
+
uint32_t value_sizes_bytes = 0;
|
|
676
|
+
uint32_t names_bytes = 0;
|
|
677
|
+
ASSERT_TRUE(GetVarint32(&data, &name_sizes_bytes));
|
|
678
|
+
ASSERT_TRUE(GetVarint32(&data, &value_sizes_bytes));
|
|
679
|
+
ASSERT_TRUE(GetVarint32(&data, &names_bytes));
|
|
680
|
+
// name sizes: varint(2) + varint(3) = 1 + 1 = 2 bytes
|
|
681
|
+
ASSERT_EQ(name_sizes_bytes, 2u);
|
|
682
|
+
// value sizes: varint(6) + varint(7) = 1 + 1 = 2 bytes
|
|
683
|
+
ASSERT_EQ(value_sizes_bytes, 2u);
|
|
684
|
+
// names: "aa" + "bbb" = 2 + 3 = 5 bytes
|
|
685
|
+
ASSERT_EQ(names_bytes, 5u);
|
|
686
|
+
|
|
687
|
+
// Section 3: COLUMN TYPES (2 bytes, both inline)
|
|
688
|
+
ASSERT_GE(data.size(), 2u);
|
|
689
|
+
ASSERT_EQ(static_cast<uint8_t>(data[0]), static_cast<uint8_t>(kTypeValue));
|
|
690
|
+
ASSERT_EQ(static_cast<uint8_t>(data[1]), static_cast<uint8_t>(kTypeValue));
|
|
691
|
+
data.remove_prefix(2);
|
|
692
|
+
|
|
693
|
+
// Section 4: NAME SIZES
|
|
694
|
+
uint32_t ns0 = 0;
|
|
695
|
+
uint32_t ns1 = 0;
|
|
696
|
+
ASSERT_TRUE(GetVarint32(&data, &ns0));
|
|
697
|
+
ASSERT_TRUE(GetVarint32(&data, &ns1));
|
|
698
|
+
ASSERT_EQ(ns0, 2u);
|
|
699
|
+
ASSERT_EQ(ns1, 3u);
|
|
700
|
+
|
|
701
|
+
// Section 5: VALUE SIZES
|
|
702
|
+
uint32_t vs0 = 0;
|
|
703
|
+
uint32_t vs1 = 0;
|
|
704
|
+
ASSERT_TRUE(GetVarint32(&data, &vs0));
|
|
705
|
+
ASSERT_TRUE(GetVarint32(&data, &vs1));
|
|
706
|
+
ASSERT_EQ(vs0, 6u); // "val_aa" = 6
|
|
707
|
+
ASSERT_EQ(vs1, 7u); // "val_bbb" = 7
|
|
708
|
+
|
|
709
|
+
// Section 6: COLUMN NAMES
|
|
710
|
+
ASSERT_GE(data.size(), 5u);
|
|
711
|
+
ASSERT_EQ(Slice(data.data(), 2), "aa");
|
|
712
|
+
ASSERT_EQ(Slice(data.data() + 2, 3), "bbb");
|
|
713
|
+
data.remove_prefix(5);
|
|
714
|
+
|
|
715
|
+
// Section 7: COLUMN VALUES
|
|
716
|
+
ASSERT_GE(data.size(), 13u);
|
|
717
|
+
ASSERT_EQ(Slice(data.data(), 6), "val_aa");
|
|
718
|
+
ASSERT_EQ(Slice(data.data() + 6, 7), "val_bbb");
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
// Randomized correctness test: serialize and deserialize with random column
|
|
722
|
+
// counts, name sizes, value sizes, and randomly chosen blob columns.
|
|
723
|
+
// Validates the full round-trip for both V1 (Serialize) and V2
|
|
724
|
+
// (SerializeV2) formats.
|
|
725
|
+
TEST_F(WideColumnSerializationTest, RandomizedSerializeDeserializeRoundTrip) {
|
|
726
|
+
uint32_t seed = static_cast<uint32_t>(
|
|
727
|
+
std::chrono::system_clock::now().time_since_epoch().count());
|
|
728
|
+
Random rng(seed);
|
|
729
|
+
SCOPED_TRACE("seed=" + std::to_string(seed));
|
|
730
|
+
|
|
731
|
+
constexpr int kNumIterations = 100;
|
|
732
|
+
|
|
733
|
+
for (int iter = 0; iter < kNumIterations; ++iter) {
|
|
734
|
+
int num_cols = rng.Uniform(17); // 0..16
|
|
735
|
+
int name_sz = 1 + rng.Uniform(64); // 1..64
|
|
736
|
+
int val_sz = rng.Uniform(1025); // 0..1024
|
|
737
|
+
|
|
738
|
+
// Generate sorted column names and random values
|
|
739
|
+
std::vector<std::pair<std::string, std::string>> columns;
|
|
740
|
+
columns.reserve(num_cols);
|
|
741
|
+
for (int c = 0; c < num_cols; ++c) {
|
|
742
|
+
// Build a sorted, unique name of exactly name_sz bytes.
|
|
743
|
+
// Use hex-encoded index as prefix to guarantee sort order,
|
|
744
|
+
// then pad with random characters.
|
|
745
|
+
char idx_str[16];
|
|
746
|
+
snprintf(idx_str, sizeof(idx_str), "%04x", c);
|
|
747
|
+
std::string name(idx_str);
|
|
748
|
+
if (static_cast<int>(name.size()) < name_sz) {
|
|
749
|
+
name.append(name_sz - name.size(),
|
|
750
|
+
static_cast<char>('a' + rng.Uniform(26)));
|
|
751
|
+
}
|
|
752
|
+
// Ensure exactly name_sz bytes. For name_sz < 4, use just the
|
|
753
|
+
// low-order hex digits to maintain sort order.
|
|
754
|
+
if (static_cast<int>(name.size()) > name_sz) {
|
|
755
|
+
name = name.substr(name.size() - name_sz);
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
// Random value content
|
|
759
|
+
std::string value(val_sz, '\0');
|
|
760
|
+
for (int j = 0; j < val_sz; ++j) {
|
|
761
|
+
value[j] = static_cast<char>(rng.Uniform(256));
|
|
762
|
+
}
|
|
763
|
+
columns.emplace_back(std::move(name), std::move(value));
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
// Randomly select some columns as blob columns
|
|
767
|
+
std::vector<std::pair<size_t, BlobIndex>> blob_columns;
|
|
768
|
+
for (int c = 0; c < num_cols; ++c) {
|
|
769
|
+
if (rng.Uniform(3) == 0) { // ~33% chance of being a blob column
|
|
770
|
+
blob_columns.emplace_back(c, MakeRandomBlobIndex(rng));
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
// V2 serialize → DeserializeV2 round-trip
|
|
775
|
+
std::string serialized;
|
|
776
|
+
std::vector<WideColumn> deserialized;
|
|
777
|
+
std::vector<std::pair<size_t, BlobIndex>> blob_out;
|
|
778
|
+
V2SerializeAndDeserialize(columns, blob_columns, &deserialized, &blob_out,
|
|
779
|
+
&serialized);
|
|
780
|
+
|
|
781
|
+
// Verify version and HasBlobColumns
|
|
782
|
+
uint32_t v = 0;
|
|
783
|
+
ASSERT_OK(GetVersion(Slice(serialized), v));
|
|
784
|
+
ASSERT_EQ(v, WideColumnSerialization::kVersion2);
|
|
785
|
+
|
|
786
|
+
bool hb = false;
|
|
787
|
+
ASSERT_OK(WideColumnSerialization::HasBlobColumns(Slice(serialized), hb));
|
|
788
|
+
ASSERT_EQ(hb, !blob_columns.empty());
|
|
789
|
+
|
|
790
|
+
// Verify blob column round-trip
|
|
791
|
+
ASSERT_EQ(blob_out.size(), blob_columns.size());
|
|
792
|
+
for (size_t b = 0; b < blob_columns.size(); ++b) {
|
|
793
|
+
ASSERT_EQ(blob_out[b].first, blob_columns[b].first);
|
|
794
|
+
const BlobIndex& orig = blob_columns[b].second;
|
|
795
|
+
const BlobIndex& decoded = blob_out[b].second;
|
|
796
|
+
ASSERT_EQ(decoded.IsInlined(), orig.IsInlined());
|
|
797
|
+
ASSERT_EQ(decoded.HasTTL(), orig.HasTTL());
|
|
798
|
+
if (!decoded.IsInlined()) {
|
|
799
|
+
ASSERT_EQ(decoded.file_number(), orig.file_number());
|
|
800
|
+
ASSERT_EQ(decoded.offset(), orig.offset());
|
|
801
|
+
ASSERT_EQ(decoded.size(), orig.size());
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
// Verify inline column values
|
|
806
|
+
size_t blob_idx = 0;
|
|
807
|
+
for (int c = 0; c < num_cols; ++c) {
|
|
808
|
+
if (blob_idx < blob_columns.size() &&
|
|
809
|
+
blob_columns[blob_idx].first == static_cast<size_t>(c)) {
|
|
810
|
+
++blob_idx;
|
|
811
|
+
} else {
|
|
812
|
+
ASSERT_EQ(deserialized[c].value(), columns[c].second);
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
// If no blob columns, also verify Deserialize() and both overloads
|
|
817
|
+
if (blob_columns.empty()) {
|
|
818
|
+
VerifyDeserialize(serialized, columns);
|
|
819
|
+
|
|
820
|
+
// WideColumns overload should produce identical output
|
|
821
|
+
std::string serialized2;
|
|
822
|
+
WideColumns wc = ToWideColumns(columns);
|
|
823
|
+
ASSERT_OK(
|
|
824
|
+
WideColumnSerialization::SerializeV2(wc, blob_columns, serialized2));
|
|
825
|
+
ASSERT_EQ(serialized, serialized2);
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
// V1 Serialize round-trip
|
|
829
|
+
{
|
|
830
|
+
WideColumns wc = ToWideColumns(columns);
|
|
831
|
+
std::string serialized_v1;
|
|
832
|
+
ASSERT_OK(WideColumnSerialization::Serialize(wc, serialized_v1));
|
|
833
|
+
|
|
834
|
+
ASSERT_OK(GetVersion(Slice(serialized_v1), v));
|
|
835
|
+
ASSERT_EQ(v, WideColumnSerialization::kVersion1);
|
|
836
|
+
|
|
837
|
+
VerifyDeserialize(serialized_v1, columns);
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
|
|
305
842
|
} // namespace ROCKSDB_NAMESPACE
|
|
306
843
|
|
|
307
844
|
int main(int argc, char** argv) {
|
|
@@ -419,7 +419,7 @@ TEST_F(WriteCallbackTest, WriteCallBackTest) {
|
|
|
419
419
|
WriteOptions write_options;
|
|
420
420
|
ReadOptions read_options;
|
|
421
421
|
string value;
|
|
422
|
-
DB
|
|
422
|
+
std::unique_ptr<DB> db;
|
|
423
423
|
DBImpl* db_impl;
|
|
424
424
|
|
|
425
425
|
ASSERT_OK(DestroyDB(dbname, options));
|
|
@@ -428,7 +428,7 @@ TEST_F(WriteCallbackTest, WriteCallBackTest) {
|
|
|
428
428
|
Status s = DB::Open(options, dbname, &db);
|
|
429
429
|
ASSERT_OK(s);
|
|
430
430
|
|
|
431
|
-
db_impl = dynamic_cast<DBImpl*>(db);
|
|
431
|
+
db_impl = dynamic_cast<DBImpl*>(db.get());
|
|
432
432
|
ASSERT_TRUE(db_impl);
|
|
433
433
|
|
|
434
434
|
WriteBatch wb;
|
|
@@ -481,7 +481,7 @@ TEST_F(WriteCallbackTest, WriteCallBackTest) {
|
|
|
481
481
|
ASSERT_TRUE(user_write_cb.write_enqueued_.load());
|
|
482
482
|
ASSERT_TRUE(user_write_cb.wal_write_done_.load());
|
|
483
483
|
|
|
484
|
-
|
|
484
|
+
db.reset();
|
|
485
485
|
ASSERT_OK(DestroyDB(dbname, options));
|
|
486
486
|
}
|
|
487
487
|
|
|
@@ -1047,7 +1047,7 @@ class CfConsistencyStressTest : public StressTest {
|
|
|
1047
1047
|
assert(thread);
|
|
1048
1048
|
Status status;
|
|
1049
1049
|
|
|
1050
|
-
DB* db_ptr = secondary_db_ ? secondary_db_ : db_;
|
|
1050
|
+
DB* db_ptr = secondary_db_ ? secondary_db_.get() : db_;
|
|
1051
1051
|
const auto& cfhs = secondary_db_ ? secondary_cfhs_ : column_families_;
|
|
1052
1052
|
|
|
1053
1053
|
// Take a snapshot to preserve the state of primary db.
|
|
@@ -877,5 +877,24 @@ Status DestroyUnverifiedSubdir(const std::string& dirname) {
|
|
|
877
877
|
return s;
|
|
878
878
|
}
|
|
879
879
|
|
|
880
|
+
Status DbStressDestroyDb(const std::string& db_path) {
|
|
881
|
+
Status s;
|
|
882
|
+
Options options;
|
|
883
|
+
// NOTE: using db_stress_listener_env in order to see obsolete MANIFEST files
|
|
884
|
+
options.env = db_stress_listener_env;
|
|
885
|
+
// Remove DB files in a principled way to avoid issues
|
|
886
|
+
if (FLAGS_use_blob_db) {
|
|
887
|
+
s = blob_db::DestroyBlobDB(db_path, options, blob_db::BlobDBOptions());
|
|
888
|
+
} else {
|
|
889
|
+
s = DestroyDB(db_path, options);
|
|
890
|
+
}
|
|
891
|
+
if (!s.ok()) {
|
|
892
|
+
return s;
|
|
893
|
+
}
|
|
894
|
+
// Remove everything else recursively, only reporting success if able to
|
|
895
|
+
// delete everything
|
|
896
|
+
return DestroyDir(db_stress_listener_env, db_path);
|
|
897
|
+
}
|
|
898
|
+
|
|
880
899
|
} // namespace ROCKSDB_NAMESPACE
|
|
881
900
|
#endif // GFLAGS
|