@nxtedition/rocksdb 7.1.20 → 7.1.21
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/deps/rocksdb/rocksdb/CMakeLists.txt +13 -6
- package/deps/rocksdb/rocksdb/Makefile +1 -1
- package/deps/rocksdb/rocksdb/TARGETS +2 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +4 -4
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +139 -161
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +92 -82
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +16 -3
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -3
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +73 -30
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +25 -67
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +41 -40
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +109 -155
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +127 -149
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +75 -80
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +22 -172
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +272 -85
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +12 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +13 -4
- package/deps/rocksdb/rocksdb/db/builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/column_family.cc +15 -1
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +25 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +10 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +22 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +14 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +38 -12
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +9 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +408 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +244 -54
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +27 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +25 -30
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +87 -26
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +294 -21
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -10
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +272 -0
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +38 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +69 -25
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +7 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +29 -12
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +0 -12
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +10 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +35 -22
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +5 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +40 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +22 -0
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +72 -5
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +60 -21
- package/deps/rocksdb/rocksdb/db/db_test.cc +170 -1
- package/deps/rocksdb/rocksdb/db/db_test2.cc +9 -3
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +19 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.h +32 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +444 -3
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/dbformat.cc +13 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +59 -4
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +3 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +24 -3
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/filename_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/flush_job.cc +4 -3
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +85 -43
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +3 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +33 -6
- package/deps/rocksdb/rocksdb/db/internal_stats.h +6 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/log_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/db/log_writer.h +1 -1
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +158 -56
- package/deps/rocksdb/rocksdb/db/memtable.h +2 -0
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/options_file_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +52 -9
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +31 -2
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +81 -42
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +78 -12
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +154 -27
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +21 -4
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +4 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +18 -6
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_set.cc +15 -7
- package/deps/rocksdb/rocksdb/db/version_set.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/version_util.h +3 -1
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +28 -9
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +21 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +30 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +4 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +30 -7
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +24 -13
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/write_controller_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +104 -60
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +199 -108
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +39 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +8 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +3 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +19 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +26 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -118
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +24 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +18 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +129 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +22 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +312 -117
- package/deps/rocksdb/rocksdb/env/env_basic_test.cc +1 -0
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +10 -2
- package/deps/rocksdb/rocksdb/env/io_posix_test.cc +1 -0
- package/deps/rocksdb/rocksdb/env/mock_env_test.cc +1 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +5 -1
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +1 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1 -0
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +49 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +44 -18
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +8 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +6 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -6
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memory/arena.cc +23 -88
- package/deps/rocksdb/rocksdb/memory/arena.h +25 -31
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +61 -0
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +1 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
- package/deps/rocksdb/rocksdb/options/cf_options.h +8 -0
- package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -0
- package/deps/rocksdb/rocksdb/options/options.cc +7 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -0
- package/deps/rocksdb/rocksdb/options/options_test.cc +63 -40
- package/deps/rocksdb/rocksdb/port/mmap.cc +98 -0
- package/deps/rocksdb/rocksdb/port/mmap.h +70 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +7 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.h +4 -1
- package/deps/rocksdb/rocksdb/port/win/port_win.h +2 -7
- package/deps/rocksdb/rocksdb/src.mk +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +7 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/get_context.cc +19 -1
- package/deps/rocksdb/rocksdb/table/get_context.h +9 -0
- package/deps/rocksdb/rocksdb/table/merger_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -11
- package/deps/rocksdb/rocksdb/table/mock_table.cc +37 -19
- package/deps/rocksdb/rocksdb/table/mock_table.h +5 -1
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +6 -0
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +33 -0
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +45 -6
- package/deps/rocksdb/rocksdb/test_util/testharness.h +2 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +5 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +36 -0
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/coding_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/crc32c_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +12 -7
- package/deps/rocksdb/rocksdb/util/hash_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/heap_test.cc +4 -2
- package/deps/rocksdb/rocksdb/util/random_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/thread_local_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/timer_test.cc +1 -0
- package/deps/rocksdb/rocksdb/util/work_queue_test.cc +4 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +13 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +9 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +8 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +7 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +20 -0
- package/index.js +12 -4
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -124,6 +124,25 @@ TEST(WideColumnSerializationTest, SerializeDeserialize) {
|
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
+
TEST(WideColumnSerializationTest, SerializeWithPrepend) {
|
|
128
|
+
Slice value_of_default("baz");
|
|
129
|
+
WideColumns other_columns{{"foo", "bar"}, {"hello", "world"}};
|
|
130
|
+
|
|
131
|
+
std::string output;
|
|
132
|
+
ASSERT_OK(WideColumnSerialization::Serialize(value_of_default, other_columns,
|
|
133
|
+
output));
|
|
134
|
+
|
|
135
|
+
Slice input(output);
|
|
136
|
+
|
|
137
|
+
WideColumns deserialized_columns;
|
|
138
|
+
ASSERT_OK(WideColumnSerialization::Deserialize(input, deserialized_columns));
|
|
139
|
+
|
|
140
|
+
WideColumns expected_columns{{kDefaultWideColumnName, value_of_default},
|
|
141
|
+
other_columns[0],
|
|
142
|
+
other_columns[1]};
|
|
143
|
+
ASSERT_EQ(deserialized_columns, expected_columns);
|
|
144
|
+
}
|
|
145
|
+
|
|
127
146
|
TEST(WideColumnSerializationTest, SerializeDuplicateError) {
|
|
128
147
|
WideColumns columns{{"foo", "bar"}, {"foo", "baz"}};
|
|
129
148
|
std::string output;
|
|
@@ -132,6 +151,16 @@ TEST(WideColumnSerializationTest, SerializeDuplicateError) {
|
|
|
132
151
|
WideColumnSerialization::Serialize(columns, output).IsCorruption());
|
|
133
152
|
}
|
|
134
153
|
|
|
154
|
+
TEST(WideColumnSerializationTest, SerializeWithPrependDuplicateError) {
|
|
155
|
+
Slice value_of_default("baz");
|
|
156
|
+
WideColumns other_columns{{kDefaultWideColumnName, "dup"}, {"foo", "bar"}};
|
|
157
|
+
|
|
158
|
+
std::string output;
|
|
159
|
+
ASSERT_TRUE(WideColumnSerialization::Serialize(value_of_default,
|
|
160
|
+
other_columns, output)
|
|
161
|
+
.IsCorruption());
|
|
162
|
+
}
|
|
163
|
+
|
|
135
164
|
TEST(WideColumnSerializationTest, SerializeOutOfOrderError) {
|
|
136
165
|
WideColumns columns{{"hello", "world"}, {"foo", "bar"}};
|
|
137
166
|
std::string output;
|
|
@@ -303,6 +332,7 @@ TEST(WideColumnSerializationTest, DeserializeColumnsOutOfOrder) {
|
|
|
303
332
|
} // namespace ROCKSDB_NAMESPACE
|
|
304
333
|
|
|
305
334
|
int main(int argc, char** argv) {
|
|
335
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
306
336
|
::testing::InitGoogleTest(&argc, argv);
|
|
307
337
|
return RUN_ALL_TESTS();
|
|
308
338
|
}
|
|
@@ -1353,8 +1353,31 @@ Status WriteBatch::DeleteRange(ColumnFamilyHandle* column_family,
|
|
|
1353
1353
|
return WriteBatchInternal::DeleteRange(this, cf_id, begin_key, end_key);
|
|
1354
1354
|
}
|
|
1355
1355
|
|
|
1356
|
-
|
|
1357
|
-
|
|
1356
|
+
needs_in_place_update_ts_ = true;
|
|
1357
|
+
has_key_with_ts_ = true;
|
|
1358
|
+
std::string dummy_ts(ts_sz, '\0');
|
|
1359
|
+
std::array<Slice, 2> begin_key_with_ts{{begin_key, dummy_ts}};
|
|
1360
|
+
std::array<Slice, 2> end_key_with_ts{{end_key, dummy_ts}};
|
|
1361
|
+
return WriteBatchInternal::DeleteRange(
|
|
1362
|
+
this, cf_id, SliceParts(begin_key_with_ts.data(), 2),
|
|
1363
|
+
SliceParts(end_key_with_ts.data(), 2));
|
|
1364
|
+
}
|
|
1365
|
+
|
|
1366
|
+
Status WriteBatch::DeleteRange(ColumnFamilyHandle* column_family,
|
|
1367
|
+
const Slice& begin_key, const Slice& end_key,
|
|
1368
|
+
const Slice& ts) {
|
|
1369
|
+
const Status s = CheckColumnFamilyTimestampSize(column_family, ts);
|
|
1370
|
+
if (!s.ok()) {
|
|
1371
|
+
return s;
|
|
1372
|
+
}
|
|
1373
|
+
assert(column_family);
|
|
1374
|
+
has_key_with_ts_ = true;
|
|
1375
|
+
uint32_t cf_id = column_family->GetID();
|
|
1376
|
+
std::array<Slice, 2> key_with_ts{{begin_key, ts}};
|
|
1377
|
+
std::array<Slice, 2> end_key_with_ts{{end_key, ts}};
|
|
1378
|
+
return WriteBatchInternal::DeleteRange(this, cf_id,
|
|
1379
|
+
SliceParts(key_with_ts.data(), 2),
|
|
1380
|
+
SliceParts(end_key_with_ts.data(), 2));
|
|
1358
1381
|
}
|
|
1359
1382
|
|
|
1360
1383
|
Status WriteBatchInternal::DeleteRange(WriteBatch* b, uint32_t column_family_id,
|
|
@@ -1928,10 +1951,9 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
1928
1951
|
// always 0 in
|
|
1929
1952
|
// non-recovery, regular write code-path)
|
|
1930
1953
|
// * If recovering_log_number_ < cf_mems_->GetLogNumber(), this means that
|
|
1931
|
-
// column
|
|
1932
|
-
//
|
|
1933
|
-
//
|
|
1934
|
-
// update
|
|
1954
|
+
// column family already contains updates from this log. We can't apply
|
|
1955
|
+
// updates twice because of update-in-place or merge workloads -- ignore
|
|
1956
|
+
// the update
|
|
1935
1957
|
*s = Status::OK();
|
|
1936
1958
|
return false;
|
|
1937
1959
|
}
|
|
@@ -2331,7 +2353,8 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
2331
2353
|
cfd->ioptions()->table_factory->Name() + " in CF " +
|
|
2332
2354
|
cfd->GetName());
|
|
2333
2355
|
}
|
|
2334
|
-
int cmp =
|
|
2356
|
+
int cmp =
|
|
2357
|
+
cfd->user_comparator()->CompareWithoutTimestamp(begin_key, end_key);
|
|
2335
2358
|
if (cmp > 0) {
|
|
2336
2359
|
// TODO(ajkr): refactor `SeekToColumnFamily()` so it returns a `Status`.
|
|
2337
2360
|
ret_status.PermitUncheckedError();
|
|
@@ -314,8 +314,12 @@ class TimestampUpdater : public WriteBatch::Handler {
|
|
|
314
314
|
}
|
|
315
315
|
|
|
316
316
|
Status DeleteRangeCF(uint32_t cf, const Slice& begin_key,
|
|
317
|
-
const Slice&) override {
|
|
318
|
-
|
|
317
|
+
const Slice& end_key) override {
|
|
318
|
+
Status s = UpdateTimestamp(cf, begin_key, true /* is_key */);
|
|
319
|
+
if (s.ok()) {
|
|
320
|
+
s = UpdateTimestamp(cf, end_key, false /* is_key */);
|
|
321
|
+
}
|
|
322
|
+
return s;
|
|
319
323
|
}
|
|
320
324
|
|
|
321
325
|
Status MergeCF(uint32_t cf, const Slice& key, const Slice&) override {
|
|
@@ -341,13 +345,15 @@ class TimestampUpdater : public WriteBatch::Handler {
|
|
|
341
345
|
Status MarkNoop(bool /*empty_batch*/) override { return Status::OK(); }
|
|
342
346
|
|
|
343
347
|
private:
|
|
344
|
-
|
|
345
|
-
|
|
348
|
+
// @param is_key specifies whether the update is for key or value.
|
|
349
|
+
Status UpdateTimestamp(uint32_t cf, const Slice& buf, bool is_key = true) {
|
|
350
|
+
Status s = UpdateTimestampImpl(cf, buf, idx_, is_key);
|
|
346
351
|
++idx_;
|
|
347
352
|
return s;
|
|
348
353
|
}
|
|
349
354
|
|
|
350
|
-
Status UpdateTimestampImpl(uint32_t cf, const Slice&
|
|
355
|
+
Status UpdateTimestampImpl(uint32_t cf, const Slice& buf, size_t /*idx*/,
|
|
356
|
+
bool is_key) {
|
|
351
357
|
if (timestamp_.empty()) {
|
|
352
358
|
return Status::InvalidArgument("Timestamp is empty");
|
|
353
359
|
}
|
|
@@ -361,22 +367,27 @@ class TimestampUpdater : public WriteBatch::Handler {
|
|
|
361
367
|
} else if (cf_ts_sz != timestamp_.size()) {
|
|
362
368
|
return Status::InvalidArgument("timestamp size mismatch");
|
|
363
369
|
}
|
|
364
|
-
UpdateProtectionInformationIfNeeded(
|
|
370
|
+
UpdateProtectionInformationIfNeeded(buf, timestamp_, is_key);
|
|
365
371
|
|
|
366
|
-
char* ptr = const_cast<char*>(
|
|
372
|
+
char* ptr = const_cast<char*>(buf.data() + buf.size() - cf_ts_sz);
|
|
367
373
|
assert(ptr);
|
|
368
374
|
memcpy(ptr, timestamp_.data(), timestamp_.size());
|
|
369
375
|
return Status::OK();
|
|
370
376
|
}
|
|
371
377
|
|
|
372
|
-
void UpdateProtectionInformationIfNeeded(const Slice&
|
|
378
|
+
void UpdateProtectionInformationIfNeeded(const Slice& buf, const Slice& ts,
|
|
379
|
+
bool is_key) {
|
|
373
380
|
if (prot_info_ != nullptr) {
|
|
374
381
|
const size_t ts_sz = ts.size();
|
|
375
|
-
SliceParts
|
|
376
|
-
Slice
|
|
377
|
-
std::array<Slice, 2> new_key_cmpts{{
|
|
378
|
-
SliceParts
|
|
379
|
-
|
|
382
|
+
SliceParts old(&buf, 1);
|
|
383
|
+
Slice old_no_ts(buf.data(), buf.size() - ts_sz);
|
|
384
|
+
std::array<Slice, 2> new_key_cmpts{{old_no_ts, ts}};
|
|
385
|
+
SliceParts new_parts(new_key_cmpts.data(), 2);
|
|
386
|
+
if (is_key) {
|
|
387
|
+
prot_info_->entries_[idx_].UpdateK(old, new_parts);
|
|
388
|
+
} else {
|
|
389
|
+
prot_info_->entries_[idx_].UpdateV(old, new_parts);
|
|
390
|
+
}
|
|
380
391
|
}
|
|
381
392
|
}
|
|
382
393
|
|
|
@@ -962,15 +962,15 @@ TEST_F(WriteBatchTest, SanityChecks) {
|
|
|
962
962
|
ASSERT_TRUE(wb.Delete(nullptr, "key", "ts").IsInvalidArgument());
|
|
963
963
|
ASSERT_TRUE(wb.SingleDelete(nullptr, "key", "ts").IsInvalidArgument());
|
|
964
964
|
ASSERT_TRUE(wb.Merge(nullptr, "key", "ts", "value").IsNotSupported());
|
|
965
|
-
ASSERT_TRUE(
|
|
966
|
-
|
|
965
|
+
ASSERT_TRUE(wb.DeleteRange(nullptr, "begin_key", "end_key", "ts")
|
|
966
|
+
.IsInvalidArgument());
|
|
967
967
|
|
|
968
968
|
ASSERT_TRUE(wb.Put(&cf4, "key", "ts", "value").IsInvalidArgument());
|
|
969
969
|
ASSERT_TRUE(wb.Delete(&cf4, "key", "ts").IsInvalidArgument());
|
|
970
970
|
ASSERT_TRUE(wb.SingleDelete(&cf4, "key", "ts").IsInvalidArgument());
|
|
971
971
|
ASSERT_TRUE(wb.Merge(&cf4, "key", "ts", "value").IsNotSupported());
|
|
972
972
|
ASSERT_TRUE(
|
|
973
|
-
wb.DeleteRange(&cf4, "begin_key", "end_key", "ts").
|
|
973
|
+
wb.DeleteRange(&cf4, "begin_key", "end_key", "ts").IsInvalidArgument());
|
|
974
974
|
|
|
975
975
|
constexpr size_t wrong_ts_sz = 1 + sizeof(uint64_t);
|
|
976
976
|
std::string ts(wrong_ts_sz, '\0');
|
|
@@ -980,7 +980,7 @@ TEST_F(WriteBatchTest, SanityChecks) {
|
|
|
980
980
|
ASSERT_TRUE(wb.SingleDelete(&cf0, "key", ts).IsInvalidArgument());
|
|
981
981
|
ASSERT_TRUE(wb.Merge(&cf0, "key", ts, "value").IsNotSupported());
|
|
982
982
|
ASSERT_TRUE(
|
|
983
|
-
wb.DeleteRange(&cf0, "begin_key", "end_key", ts).
|
|
983
|
+
wb.DeleteRange(&cf0, "begin_key", "end_key", ts).IsInvalidArgument());
|
|
984
984
|
|
|
985
985
|
// Sanity checks for the new WriteBatch APIs without extra 'ts' arg.
|
|
986
986
|
WriteBatch wb1(0, 0, 0, wrong_ts_sz);
|
|
@@ -1107,6 +1107,7 @@ TEST_F(WriteBatchTest, CommitWithTimestamp) {
|
|
|
1107
1107
|
} // namespace ROCKSDB_NAMESPACE
|
|
1108
1108
|
|
|
1109
1109
|
int main(int argc, char** argv) {
|
|
1110
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
1110
1111
|
::testing::InitGoogleTest(&argc, argv);
|
|
1111
1112
|
return RUN_ALL_TESTS();
|
|
1112
1113
|
}
|
|
@@ -447,6 +447,7 @@ TEST_F(WriteCallbackTest, WriteCallBackTest) {
|
|
|
447
447
|
} // namespace ROCKSDB_NAMESPACE
|
|
448
448
|
|
|
449
449
|
int main(int argc, char** argv) {
|
|
450
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
450
451
|
::testing::InitGoogleTest(&argc, argv);
|
|
451
452
|
return RUN_ALL_TESTS();
|
|
452
453
|
}
|
|
@@ -242,6 +242,7 @@ TEST_F(WriteControllerTest, CreditAccumulation) {
|
|
|
242
242
|
} // namespace ROCKSDB_NAMESPACE
|
|
243
243
|
|
|
244
244
|
int main(int argc, char** argv) {
|
|
245
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
245
246
|
::testing::InitGoogleTest(&argc, argv);
|
|
246
247
|
return RUN_ALL_TESTS();
|
|
247
248
|
}
|
|
@@ -26,31 +26,41 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
26
26
|
const std::vector<int>& rand_column_families,
|
|
27
27
|
const std::vector<int64_t>& rand_keys,
|
|
28
28
|
char (&value)[100]) override {
|
|
29
|
-
|
|
29
|
+
assert(!rand_column_families.empty());
|
|
30
|
+
assert(!rand_keys.empty());
|
|
31
|
+
|
|
32
|
+
const std::string key_suffix = Key(rand_keys[0]);
|
|
33
|
+
|
|
34
|
+
const uint32_t value_base =
|
|
30
35
|
thread->rand.Next() % thread->shared->UNKNOWN_SENTINEL;
|
|
31
|
-
size_t sz = GenerateValue(value_base, value, sizeof(value));
|
|
32
|
-
Slice
|
|
33
|
-
|
|
34
|
-
std::string values[10] = {"9", "8", "7", "6", "5", "4", "3", "2", "1", "0"};
|
|
35
|
-
Slice value_slices[10];
|
|
36
|
+
const size_t sz = GenerateValue(value_base, value, sizeof(value));
|
|
37
|
+
const std::string value_suffix = Slice(value, sz).ToString();
|
|
38
|
+
|
|
36
39
|
WriteBatch batch(0 /* reserved_bytes */, 0 /* max_bytes */,
|
|
37
40
|
FLAGS_batch_protection_bytes_per_key,
|
|
38
41
|
FLAGS_user_timestamp_size);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
|
|
43
|
+
ColumnFamilyHandle* const cfh = column_families_[rand_column_families[0]];
|
|
44
|
+
assert(cfh);
|
|
45
|
+
|
|
46
|
+
for (int i = 9; i >= 0; --i) {
|
|
47
|
+
const std::string prefix = std::to_string(i);
|
|
48
|
+
|
|
49
|
+
const std::string k = prefix + key_suffix;
|
|
50
|
+
const std::string v = prefix + value_suffix;
|
|
51
|
+
|
|
46
52
|
if (FLAGS_use_merge) {
|
|
47
|
-
batch.Merge(cfh,
|
|
53
|
+
batch.Merge(cfh, k, v);
|
|
54
|
+
} else if (FLAGS_use_put_entity_one_in > 0 &&
|
|
55
|
+
(value_base % FLAGS_use_put_entity_one_in) == 0) {
|
|
56
|
+
batch.PutEntity(cfh, k, GenerateWideColumns(value_base, v));
|
|
48
57
|
} else {
|
|
49
|
-
batch.Put(cfh,
|
|
58
|
+
batch.Put(cfh, k, v);
|
|
50
59
|
}
|
|
51
60
|
}
|
|
52
61
|
|
|
53
|
-
s = db_->Write(write_opts, &batch);
|
|
62
|
+
const Status s = db_->Write(write_opts, &batch);
|
|
63
|
+
|
|
54
64
|
if (!s.ok()) {
|
|
55
65
|
fprintf(stderr, "multiput error: %s\n", s.ToString().c_str());
|
|
56
66
|
thread->stats.AddErrors(1);
|
|
@@ -254,88 +264,122 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
254
264
|
Status TestPrefixScan(ThreadState* thread, const ReadOptions& readoptions,
|
|
255
265
|
const std::vector<int>& rand_column_families,
|
|
256
266
|
const std::vector<int64_t>& rand_keys) override {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
std::
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
267
|
+
assert(!rand_column_families.empty());
|
|
268
|
+
assert(!rand_keys.empty());
|
|
269
|
+
|
|
270
|
+
const std::string key = Key(rand_keys[0]);
|
|
271
|
+
|
|
272
|
+
assert(FLAGS_prefix_size > 0);
|
|
273
|
+
const size_t prefix_to_use = static_cast<size_t>(FLAGS_prefix_size);
|
|
274
|
+
|
|
275
|
+
constexpr size_t num_prefixes = 10;
|
|
276
|
+
|
|
277
|
+
std::array<std::string, num_prefixes> prefixes;
|
|
278
|
+
std::array<Slice, num_prefixes> prefix_slices;
|
|
279
|
+
std::array<ReadOptions, num_prefixes> ro_copies;
|
|
280
|
+
std::array<std::string, num_prefixes> upper_bounds;
|
|
281
|
+
std::array<Slice, num_prefixes> ub_slices;
|
|
282
|
+
std::array<std::unique_ptr<Iterator>, num_prefixes> iters;
|
|
283
|
+
|
|
284
|
+
const Snapshot* const snapshot = db_->GetSnapshot();
|
|
285
|
+
|
|
286
|
+
ColumnFamilyHandle* const cfh = column_families_[rand_column_families[0]];
|
|
287
|
+
assert(cfh);
|
|
288
|
+
|
|
289
|
+
for (size_t i = 0; i < num_prefixes; ++i) {
|
|
290
|
+
prefixes[i] = std::to_string(i) + key;
|
|
291
|
+
prefix_slices[i] = Slice(prefixes[i].data(), prefix_to_use);
|
|
292
|
+
|
|
293
|
+
ro_copies[i] = readoptions;
|
|
294
|
+
ro_copies[i].snapshot = snapshot;
|
|
277
295
|
if (thread->rand.OneIn(2) &&
|
|
278
296
|
GetNextPrefix(prefix_slices[i], &(upper_bounds[i]))) {
|
|
279
297
|
// For half of the time, set the upper bound to the next prefix
|
|
280
|
-
ub_slices[i] =
|
|
281
|
-
|
|
298
|
+
ub_slices[i] = upper_bounds[i];
|
|
299
|
+
ro_copies[i].iterate_upper_bound = &(ub_slices[i]);
|
|
282
300
|
}
|
|
283
|
-
|
|
301
|
+
|
|
302
|
+
iters[i].reset(db_->NewIterator(ro_copies[i], cfh));
|
|
284
303
|
iters[i]->Seek(prefix_slices[i]);
|
|
285
304
|
}
|
|
286
305
|
|
|
287
|
-
|
|
306
|
+
uint64_t count = 0;
|
|
307
|
+
|
|
288
308
|
while (iters[0]->Valid() && iters[0]->key().starts_with(prefix_slices[0])) {
|
|
289
|
-
count
|
|
290
|
-
|
|
309
|
+
++count;
|
|
310
|
+
|
|
311
|
+
std::array<std::string, num_prefixes> values;
|
|
312
|
+
|
|
291
313
|
// get list of all values for this iteration
|
|
292
|
-
for (
|
|
314
|
+
for (size_t i = 0; i < num_prefixes; ++i) {
|
|
293
315
|
// no iterator should finish before the first one
|
|
294
316
|
assert(iters[i]->Valid() &&
|
|
295
317
|
iters[i]->key().starts_with(prefix_slices[i]));
|
|
296
318
|
values[i] = iters[i]->value().ToString();
|
|
297
319
|
|
|
298
|
-
|
|
299
|
-
char
|
|
320
|
+
// make sure the first character of the value is the expected digit
|
|
321
|
+
const char expected_first = prefixes[i][0];
|
|
322
|
+
const char actual_first = values[i][0];
|
|
300
323
|
|
|
301
324
|
if (actual_first != expected_first) {
|
|
302
325
|
fprintf(stderr, "error expected first = %c actual = %c\n",
|
|
303
326
|
expected_first, actual_first);
|
|
304
327
|
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
328
|
+
|
|
329
|
+
values[i][0] = ' '; // blank out the differing character
|
|
330
|
+
|
|
331
|
+
// make sure all values are equivalent
|
|
309
332
|
if (values[i] != values[0]) {
|
|
310
333
|
fprintf(stderr,
|
|
311
|
-
"error : %
|
|
312
|
-
|
|
334
|
+
"error : %" ROCKSDB_PRIszt
|
|
335
|
+
", inconsistent values for prefix %s: %s, %s\n",
|
|
336
|
+
i, prefix_slices[i].ToString(/* hex */ true).c_str(),
|
|
337
|
+
StringToHex(values[0]).c_str(),
|
|
313
338
|
StringToHex(values[i]).c_str());
|
|
314
339
|
// we continue after error rather than exiting so that we can
|
|
315
340
|
// find more errors if any
|
|
316
341
|
}
|
|
342
|
+
|
|
343
|
+
// make sure value() and columns() are consistent
|
|
344
|
+
// note: in these tests, value base is stored after a single-digit
|
|
345
|
+
// prefix
|
|
346
|
+
Slice value_base_slice = iters[i]->value();
|
|
347
|
+
value_base_slice.remove_prefix(1);
|
|
348
|
+
|
|
349
|
+
const WideColumns expected_columns = GenerateExpectedWideColumns(
|
|
350
|
+
GetValueBase(value_base_slice), iters[i]->value());
|
|
351
|
+
if (iters[i]->columns() != expected_columns) {
|
|
352
|
+
fprintf(stderr,
|
|
353
|
+
"error : %" ROCKSDB_PRIszt
|
|
354
|
+
", value and columns inconsistent for prefix %s: %s\n",
|
|
355
|
+
i, prefix_slices[i].ToString(/* hex */ true).c_str(),
|
|
356
|
+
DebugString(iters[i]->value(), iters[i]->columns(),
|
|
357
|
+
expected_columns)
|
|
358
|
+
.c_str());
|
|
359
|
+
}
|
|
360
|
+
|
|
317
361
|
iters[i]->Next();
|
|
318
362
|
}
|
|
319
363
|
}
|
|
320
364
|
|
|
321
365
|
// cleanup iterators and snapshot
|
|
322
|
-
for (
|
|
366
|
+
for (size_t i = 0; i < num_prefixes; ++i) {
|
|
323
367
|
// if the first iterator finished, they should have all finished
|
|
324
368
|
assert(!iters[i]->Valid() ||
|
|
325
369
|
!iters[i]->key().starts_with(prefix_slices[i]));
|
|
326
370
|
assert(iters[i]->status().ok());
|
|
327
|
-
delete iters[i];
|
|
328
371
|
}
|
|
372
|
+
|
|
329
373
|
db_->ReleaseSnapshot(snapshot);
|
|
330
374
|
|
|
331
|
-
|
|
332
|
-
thread->stats.AddPrefixes(1, count);
|
|
333
|
-
} else {
|
|
334
|
-
fprintf(stderr, "TestPrefixScan error: %s\n", s.ToString().c_str());
|
|
335
|
-
thread->stats.AddErrors(1);
|
|
336
|
-
}
|
|
375
|
+
thread->stats.AddPrefixes(1, count);
|
|
337
376
|
|
|
338
|
-
return
|
|
377
|
+
return Status::OK();
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
Slice GetValueBaseSlice(Slice slice) override {
|
|
381
|
+
slice.remove_prefix(1);
|
|
382
|
+
return slice;
|
|
339
383
|
}
|
|
340
384
|
|
|
341
385
|
void VerifyDb(ThreadState* /* thread */) const override {}
|