@nxtedition/rocksdb 8.1.4 → 8.1.6
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 +21 -0
- package/deps/rocksdb/rocksdb/Makefile +15 -3
- package/deps/rocksdb/rocksdb/TARGETS +6 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +32 -35
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +0 -30
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +0 -83
- package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +13 -14
- package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +40 -0
- package/deps/rocksdb/rocksdb/cache/cache_helpers.h +14 -20
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +8 -9
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +5 -4
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +124 -156
- package/deps/rocksdb/rocksdb/cache/charged_cache.cc +10 -26
- package/deps/rocksdb/rocksdb/cache/charged_cache.h +11 -16
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +35 -32
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +19 -21
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +42 -30
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -8
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +91 -143
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +54 -60
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +37 -63
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +120 -106
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +14 -5
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -31
- package/deps/rocksdb/rocksdb/cache/typed_cache.h +339 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.cc +0 -48
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +18 -15
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +5 -26
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +7 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +6 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +2 -7
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +19 -47
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +13 -5
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +15 -22
- package/deps/rocksdb/rocksdb/db/builder.cc +24 -10
- package/deps/rocksdb/rocksdb/db/builder.h +2 -1
- package/deps/rocksdb/rocksdb/db/c.cc +15 -0
- package/deps/rocksdb/rocksdb/db/c_test.c +3 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +11 -6
- package/deps/rocksdb/rocksdb/db/column_family.h +20 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +31 -34
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +3 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +21 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +4 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +4 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +9 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +275 -82
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +7 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -18
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +17 -16
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +19 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +5 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +22 -22
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +5 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +81 -52
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +5 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +5 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +8 -2
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +3 -0
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +266 -138
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +86 -1
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +98 -9
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -28
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +2 -3
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1022 -123
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +65 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +32 -21
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +32 -24
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +199 -77
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +3 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +3 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +8 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +43 -23
- package/deps/rocksdb/rocksdb/db/db_iter.cc +8 -2
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +42 -0
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +155 -0
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +12 -12
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +230 -2
- package/deps/rocksdb/rocksdb/db/db_test.cc +3 -0
- package/deps/rocksdb/rocksdb/db/db_test2.cc +233 -8
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +11 -10
- package/deps/rocksdb/rocksdb/db/db_test_util.h +39 -24
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +129 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +28 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +21 -0
- package/deps/rocksdb/rocksdb/db/dbformat.cc +25 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +2 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +3 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +3 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +92 -13
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +38 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +14 -110
- package/deps/rocksdb/rocksdb/db/flush_job.cc +12 -10
- package/deps/rocksdb/rocksdb/db/flush_job.h +3 -2
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +29 -29
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +56 -53
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +11 -11
- package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -2
- package/deps/rocksdb/rocksdb/db/log_reader.cc +8 -6
- package/deps/rocksdb/rocksdb/db/log_test.cc +35 -2
- package/deps/rocksdb/rocksdb/db/memtable.cc +31 -6
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +47 -29
- package/deps/rocksdb/rocksdb/db/merge_helper.h +14 -6
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +10 -10
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/repair.cc +65 -22
- package/deps/rocksdb/rocksdb/db/repair_test.cc +54 -0
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +26 -26
- package/deps/rocksdb/rocksdb/db/table_cache.cc +41 -91
- package/deps/rocksdb/rocksdb/db/table_cache.h +17 -19
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +7 -9
- package/deps/rocksdb/rocksdb/db/table_properties_collector.h +3 -1
- package/deps/rocksdb/rocksdb/db/version_builder.cc +102 -52
- package/deps/rocksdb/rocksdb/db/version_builder.h +20 -0
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +218 -93
- package/deps/rocksdb/rocksdb/db/version_edit.cc +27 -1
- package/deps/rocksdb/rocksdb/db/version_edit.h +34 -9
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +13 -6
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +17 -6
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +19 -17
- package/deps/rocksdb/rocksdb/db/version_set.cc +160 -28
- package/deps/rocksdb/rocksdb/db/version_set.h +34 -4
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -1
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +65 -31
- package/deps/rocksdb/rocksdb/db/write_batch.cc +4 -1
- package/deps/rocksdb/rocksdb/db/write_thread.cc +5 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +31 -32
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.h +2 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +8 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +11 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +16 -15
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +13 -1
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +1 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +286 -217
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +137 -135
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +6 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +21 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +9 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +8 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +69 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
- package/deps/rocksdb/rocksdb/memory/arena.cc +23 -87
- package/deps/rocksdb/rocksdb/memory/arena.h +25 -31
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +90 -0
- package/deps/rocksdb/rocksdb/memory/memory_allocator.h +9 -0
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +26 -26
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -3
- package/deps/rocksdb/rocksdb/port/mmap.cc +98 -0
- package/deps/rocksdb/rocksdb/port/mmap.h +70 -0
- package/deps/rocksdb/rocksdb/port/port_posix.h +2 -0
- package/{prebuilds → deps/rocksdb/rocksdb/prebuilds}/linux-x64/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/src.mk +3 -0
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/block.h +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +25 -67
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +18 -13
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +159 -225
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +31 -50
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +52 -20
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +96 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +132 -0
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +28 -0
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -5
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +1 -4
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +6 -7
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +6 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +19 -18
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +9 -5
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +2 -2
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +3 -3
- package/deps/rocksdb/rocksdb/table/format.cc +24 -20
- package/deps/rocksdb/rocksdb/table/format.h +6 -3
- package/deps/rocksdb/rocksdb/table/get_context.cc +12 -3
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +0 -2
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +69 -35
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +2 -2
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +1 -1
- package/deps/rocksdb/rocksdb/table/table_test.cc +7 -6
- package/deps/rocksdb/rocksdb/test_util/testutil.h +10 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +66 -1
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +9 -2
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +5 -0
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +2 -2
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +1 -1
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +20 -12
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +1 -1
- package/deps/rocksdb/rocksdb/util/compression.cc +2 -2
- package/deps/rocksdb/rocksdb/util/compression.h +11 -2
- package/deps/rocksdb/rocksdb/util/status.cc +7 -0
- package/deps/rocksdb/rocksdb/util/xxhash.h +1901 -887
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +250 -74
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +199 -4
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +35 -57
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +4 -5
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +39 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +9 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +11 -6
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +6 -5
- package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +10 -11
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +31 -31
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +111 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +12 -3
- package/package.json +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +0 -182
|
@@ -64,15 +64,16 @@ class VersionBuilderTest : public testing::Test {
|
|
|
64
64
|
uint64_t num_entries = 0, uint64_t num_deletions = 0,
|
|
65
65
|
bool sampled = false, SequenceNumber smallest_seqno = 0,
|
|
66
66
|
SequenceNumber largest_seqno = 0,
|
|
67
|
-
uint64_t oldest_blob_file_number = kInvalidBlobFileNumber
|
|
67
|
+
uint64_t oldest_blob_file_number = kInvalidBlobFileNumber,
|
|
68
|
+
uint64_t epoch_number = kUnknownEpochNumber) {
|
|
68
69
|
assert(level < vstorage_.num_levels());
|
|
69
70
|
FileMetaData* f = new FileMetaData(
|
|
70
71
|
file_number, path_id, file_size, GetInternalKey(smallest, smallest_seq),
|
|
71
72
|
GetInternalKey(largest, largest_seq), smallest_seqno, largest_seqno,
|
|
72
73
|
/* marked_for_compact */ false, Temperature::kUnknown,
|
|
73
74
|
oldest_blob_file_number, kUnknownOldestAncesterTime,
|
|
74
|
-
kUnknownFileCreationTime, kUnknownFileChecksum,
|
|
75
|
-
kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
75
|
+
kUnknownFileCreationTime, epoch_number, kUnknownFileChecksum,
|
|
76
|
+
kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
76
77
|
f->compensated_file_size = file_size;
|
|
77
78
|
f->num_entries = num_entries;
|
|
78
79
|
f->num_deletions = num_deletions;
|
|
@@ -98,7 +99,8 @@ class VersionBuilderTest : public testing::Test {
|
|
|
98
99
|
vstorage_.AddBlobFile(std::move(meta));
|
|
99
100
|
}
|
|
100
101
|
|
|
101
|
-
void AddDummyFile(uint64_t table_file_number, uint64_t blob_file_number
|
|
102
|
+
void AddDummyFile(uint64_t table_file_number, uint64_t blob_file_number,
|
|
103
|
+
uint64_t epoch_number) {
|
|
102
104
|
constexpr int level = 0;
|
|
103
105
|
constexpr char smallest[] = "bar";
|
|
104
106
|
constexpr char largest[] = "foo";
|
|
@@ -112,11 +114,11 @@ class VersionBuilderTest : public testing::Test {
|
|
|
112
114
|
|
|
113
115
|
Add(level, table_file_number, smallest, largest, file_size, path_id,
|
|
114
116
|
smallest_seq, largest_seq, num_entries, num_deletions, sampled,
|
|
115
|
-
smallest_seq, largest_seq, blob_file_number);
|
|
117
|
+
smallest_seq, largest_seq, blob_file_number, epoch_number);
|
|
116
118
|
}
|
|
117
119
|
|
|
118
120
|
void AddDummyFileToEdit(VersionEdit* edit, uint64_t table_file_number,
|
|
119
|
-
uint64_t blob_file_number) {
|
|
121
|
+
uint64_t blob_file_number, uint64_t epoch_number) {
|
|
120
122
|
assert(edit);
|
|
121
123
|
|
|
122
124
|
constexpr int level = 0;
|
|
@@ -128,12 +130,13 @@ class VersionBuilderTest : public testing::Test {
|
|
|
128
130
|
constexpr SequenceNumber largest_seqno = 300;
|
|
129
131
|
constexpr bool marked_for_compaction = false;
|
|
130
132
|
|
|
131
|
-
edit->AddFile(
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
133
|
+
edit->AddFile(level, table_file_number, path_id, file_size,
|
|
134
|
+
GetInternalKey(smallest), GetInternalKey(largest),
|
|
135
|
+
smallest_seqno, largest_seqno, marked_for_compaction,
|
|
136
|
+
Temperature::kUnknown, blob_file_number,
|
|
137
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
138
|
+
epoch_number, kUnknownFileChecksum,
|
|
139
|
+
kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
137
140
|
}
|
|
138
141
|
|
|
139
142
|
void UpdateVersionStorageInfo(VersionStorageInfo* vstorage) {
|
|
@@ -157,7 +160,13 @@ void UnrefFilesInVersion(VersionStorageInfo* new_vstorage) {
|
|
|
157
160
|
}
|
|
158
161
|
|
|
159
162
|
TEST_F(VersionBuilderTest, ApplyAndSaveTo) {
|
|
160
|
-
Add(0, 1U, "150", "200", 100U
|
|
163
|
+
Add(0, 1U, "150", "200", 100U, /*path_id*/ 0,
|
|
164
|
+
/*smallest_seq*/ 100, /*largest_seq*/ 100,
|
|
165
|
+
/*num_entries*/ 0, /*num_deletions*/ 0,
|
|
166
|
+
/*sampled*/ false, /*smallest_seqno*/ 0,
|
|
167
|
+
/*largest_seqno*/ 0,
|
|
168
|
+
/*oldest_blob_file_number*/ kInvalidBlobFileNumber,
|
|
169
|
+
/*epoch_number*/ 1);
|
|
161
170
|
|
|
162
171
|
Add(1, 66U, "150", "200", 100U);
|
|
163
172
|
Add(1, 88U, "201", "300", 100U);
|
|
@@ -177,8 +186,8 @@ TEST_F(VersionBuilderTest, ApplyAndSaveTo) {
|
|
|
177
186
|
version_edit.AddFile(
|
|
178
187
|
2, 666, 0, 100U, GetInternalKey("301"), GetInternalKey("350"), 200, 200,
|
|
179
188
|
false, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
180
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
181
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
189
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
190
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
182
191
|
version_edit.DeleteFile(3, 27U);
|
|
183
192
|
|
|
184
193
|
EnvOptions env_options;
|
|
@@ -204,8 +213,12 @@ TEST_F(VersionBuilderTest, ApplyAndSaveTo) {
|
|
|
204
213
|
TEST_F(VersionBuilderTest, ApplyAndSaveToDynamic) {
|
|
205
214
|
ioptions_.level_compaction_dynamic_level_bytes = true;
|
|
206
215
|
|
|
207
|
-
Add(0, 1U, "150", "200", 100U, 0, 200U, 200U, 0, 0, false, 200U, 200U
|
|
208
|
-
|
|
216
|
+
Add(0, 1U, "150", "200", 100U, 0, 200U, 200U, 0, 0, false, 200U, 200U,
|
|
217
|
+
/*oldest_blob_file_number*/ kInvalidBlobFileNumber,
|
|
218
|
+
/*epoch_number*/ 2);
|
|
219
|
+
Add(0, 88U, "201", "300", 100U, 0, 100U, 100U, 0, 0, false, 100U, 100U,
|
|
220
|
+
/*oldest_blob_file_number*/ kInvalidBlobFileNumber,
|
|
221
|
+
/*epoch_number*/ 1);
|
|
209
222
|
|
|
210
223
|
Add(4, 6U, "150", "179", 100U);
|
|
211
224
|
Add(4, 7U, "180", "220", 100U);
|
|
@@ -220,8 +233,9 @@ TEST_F(VersionBuilderTest, ApplyAndSaveToDynamic) {
|
|
|
220
233
|
version_edit.AddFile(
|
|
221
234
|
3, 666, 0, 100U, GetInternalKey("301"), GetInternalKey("350"), 200, 200,
|
|
222
235
|
false, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
223
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
224
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
236
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
237
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
238
|
+
|
|
225
239
|
version_edit.DeleteFile(0, 1U);
|
|
226
240
|
version_edit.DeleteFile(0, 88U);
|
|
227
241
|
|
|
@@ -250,8 +264,12 @@ TEST_F(VersionBuilderTest, ApplyAndSaveToDynamic) {
|
|
|
250
264
|
TEST_F(VersionBuilderTest, ApplyAndSaveToDynamic2) {
|
|
251
265
|
ioptions_.level_compaction_dynamic_level_bytes = true;
|
|
252
266
|
|
|
253
|
-
Add(0, 1U, "150", "200", 100U, 0, 200U, 200U, 0, 0, false, 200U, 200U
|
|
254
|
-
|
|
267
|
+
Add(0, 1U, "150", "200", 100U, 0, 200U, 200U, 0, 0, false, 200U, 200U,
|
|
268
|
+
/*oldest_blob_file_number*/ kInvalidBlobFileNumber,
|
|
269
|
+
/*epoch_number*/ 2);
|
|
270
|
+
Add(0, 88U, "201", "300", 100U, 0, 100U, 100U, 0, 0, false, 100U, 100U,
|
|
271
|
+
/*oldest_blob_file_number*/ kInvalidBlobFileNumber,
|
|
272
|
+
/*epoch_number*/ 1);
|
|
255
273
|
|
|
256
274
|
Add(4, 6U, "150", "179", 100U);
|
|
257
275
|
Add(4, 7U, "180", "220", 100U);
|
|
@@ -266,8 +284,8 @@ TEST_F(VersionBuilderTest, ApplyAndSaveToDynamic2) {
|
|
|
266
284
|
version_edit.AddFile(
|
|
267
285
|
4, 666, 0, 100U, GetInternalKey("301"), GetInternalKey("350"), 200, 200,
|
|
268
286
|
false, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
269
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
270
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
287
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
288
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
271
289
|
version_edit.DeleteFile(0, 1U);
|
|
272
290
|
version_edit.DeleteFile(0, 88U);
|
|
273
291
|
version_edit.DeleteFile(4, 6U);
|
|
@@ -302,28 +320,28 @@ TEST_F(VersionBuilderTest, ApplyMultipleAndSaveTo) {
|
|
|
302
320
|
version_edit.AddFile(
|
|
303
321
|
2, 666, 0, 100U, GetInternalKey("301"), GetInternalKey("350"), 200, 200,
|
|
304
322
|
false, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
305
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
306
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
323
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
324
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
307
325
|
version_edit.AddFile(
|
|
308
326
|
2, 676, 0, 100U, GetInternalKey("401"), GetInternalKey("450"), 200, 200,
|
|
309
327
|
false, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
310
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
311
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
328
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
329
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
312
330
|
version_edit.AddFile(
|
|
313
331
|
2, 636, 0, 100U, GetInternalKey("601"), GetInternalKey("650"), 200, 200,
|
|
314
332
|
false, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
315
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
316
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
333
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
334
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
317
335
|
version_edit.AddFile(
|
|
318
336
|
2, 616, 0, 100U, GetInternalKey("501"), GetInternalKey("550"), 200, 200,
|
|
319
337
|
false, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
320
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
321
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
338
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
339
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
322
340
|
version_edit.AddFile(
|
|
323
341
|
2, 606, 0, 100U, GetInternalKey("701"), GetInternalKey("750"), 200, 200,
|
|
324
342
|
false, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
325
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
326
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
343
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
344
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
327
345
|
|
|
328
346
|
EnvOptions env_options;
|
|
329
347
|
constexpr TableCache* table_cache = nullptr;
|
|
@@ -361,43 +379,43 @@ TEST_F(VersionBuilderTest, ApplyDeleteAndSaveTo) {
|
|
|
361
379
|
version_edit.AddFile(
|
|
362
380
|
2, 666, 0, 100U, GetInternalKey("301"), GetInternalKey("350"), 200, 200,
|
|
363
381
|
false, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
364
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
365
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
382
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
383
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
366
384
|
version_edit.AddFile(
|
|
367
385
|
2, 676, 0, 100U, GetInternalKey("401"), GetInternalKey("450"), 200, 200,
|
|
368
386
|
false, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
369
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
370
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
387
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
388
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
371
389
|
version_edit.AddFile(
|
|
372
390
|
2, 636, 0, 100U, GetInternalKey("601"), GetInternalKey("650"), 200, 200,
|
|
373
391
|
false, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
374
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
375
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
392
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
393
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
376
394
|
version_edit.AddFile(
|
|
377
395
|
2, 616, 0, 100U, GetInternalKey("501"), GetInternalKey("550"), 200, 200,
|
|
378
396
|
false, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
379
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
380
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
397
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
398
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
381
399
|
version_edit.AddFile(
|
|
382
400
|
2, 606, 0, 100U, GetInternalKey("701"), GetInternalKey("750"), 200, 200,
|
|
383
401
|
false, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
384
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
385
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
402
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
403
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
386
404
|
ASSERT_OK(version_builder.Apply(&version_edit));
|
|
387
405
|
|
|
388
406
|
VersionEdit version_edit2;
|
|
389
407
|
version_edit.AddFile(
|
|
390
408
|
2, 808, 0, 100U, GetInternalKey("901"), GetInternalKey("950"), 200, 200,
|
|
391
409
|
false, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
392
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
393
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
410
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
411
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
394
412
|
version_edit2.DeleteFile(2, 616);
|
|
395
413
|
version_edit2.DeleteFile(2, 636);
|
|
396
414
|
version_edit.AddFile(
|
|
397
415
|
2, 806, 0, 100U, GetInternalKey("801"), GetInternalKey("850"), 200, 200,
|
|
398
416
|
false, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
399
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
400
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
417
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
418
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
401
419
|
|
|
402
420
|
ASSERT_OK(version_builder.Apply(&version_edit2));
|
|
403
421
|
ASSERT_OK(version_builder.SaveTo(&new_vstorage));
|
|
@@ -502,13 +520,13 @@ TEST_F(VersionBuilderTest, ApplyFileDeletionAndAddition) {
|
|
|
502
520
|
|
|
503
521
|
constexpr bool marked_for_compaction = false;
|
|
504
522
|
|
|
505
|
-
addition.AddFile(
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
523
|
+
addition.AddFile(
|
|
524
|
+
level, file_number, path_id, file_size,
|
|
525
|
+
GetInternalKey(smallest, smallest_seq),
|
|
526
|
+
GetInternalKey(largest, largest_seq), smallest_seqno, largest_seqno,
|
|
527
|
+
marked_for_compaction, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
528
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
529
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
512
530
|
|
|
513
531
|
ASSERT_OK(builder.Apply(&addition));
|
|
514
532
|
|
|
@@ -556,8 +574,8 @@ TEST_F(VersionBuilderTest, ApplyFileAdditionAlreadyInBase) {
|
|
|
556
574
|
new_level, file_number, path_id, file_size, GetInternalKey(smallest),
|
|
557
575
|
GetInternalKey(largest), smallest_seqno, largest_seqno,
|
|
558
576
|
marked_for_compaction, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
559
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
560
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
577
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
578
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
561
579
|
|
|
562
580
|
const Status s = builder.Apply(&edit);
|
|
563
581
|
ASSERT_TRUE(s.IsCorruption());
|
|
@@ -588,12 +606,12 @@ TEST_F(VersionBuilderTest, ApplyFileAdditionAlreadyApplied) {
|
|
|
588
606
|
constexpr SequenceNumber largest_seqno = 1000;
|
|
589
607
|
constexpr bool marked_for_compaction = false;
|
|
590
608
|
|
|
591
|
-
edit.AddFile(
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
609
|
+
edit.AddFile(
|
|
610
|
+
level, file_number, path_id, file_size, GetInternalKey(smallest),
|
|
611
|
+
GetInternalKey(largest), smallest_seqno, largest_seqno,
|
|
612
|
+
marked_for_compaction, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
613
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
614
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
597
615
|
|
|
598
616
|
ASSERT_OK(builder.Apply(&edit));
|
|
599
617
|
|
|
@@ -605,8 +623,8 @@ TEST_F(VersionBuilderTest, ApplyFileAdditionAlreadyApplied) {
|
|
|
605
623
|
new_level, file_number, path_id, file_size, GetInternalKey(smallest),
|
|
606
624
|
GetInternalKey(largest), smallest_seqno, largest_seqno,
|
|
607
625
|
marked_for_compaction, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
608
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
609
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
626
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
627
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
610
628
|
|
|
611
629
|
const Status s = builder.Apply(&other_edit);
|
|
612
630
|
ASSERT_TRUE(s.IsCorruption());
|
|
@@ -641,8 +659,8 @@ TEST_F(VersionBuilderTest, ApplyFileAdditionAndDeletion) {
|
|
|
641
659
|
level, file_number, path_id, file_size, GetInternalKey(smallest),
|
|
642
660
|
GetInternalKey(largest), smallest_seqno, largest_seqno,
|
|
643
661
|
marked_for_compaction, Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
644
|
-
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
645
|
-
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
662
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
663
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
646
664
|
|
|
647
665
|
ASSERT_OK(builder.Apply(&addition));
|
|
648
666
|
|
|
@@ -691,7 +709,8 @@ TEST_F(VersionBuilderTest, ApplyBlobFileAddition) {
|
|
|
691
709
|
|
|
692
710
|
// Add dummy table file to ensure the blob file is referenced.
|
|
693
711
|
constexpr uint64_t table_file_number = 1;
|
|
694
|
-
AddDummyFileToEdit(&edit, table_file_number, blob_file_number
|
|
712
|
+
AddDummyFileToEdit(&edit, table_file_number, blob_file_number,
|
|
713
|
+
1 /*epoch_number*/);
|
|
695
714
|
|
|
696
715
|
ASSERT_OK(builder.Apply(&edit));
|
|
697
716
|
|
|
@@ -813,7 +832,7 @@ TEST_F(VersionBuilderTest, ApplyBlobFileGarbageFileInBase) {
|
|
|
813
832
|
ASSERT_NE(meta, nullptr);
|
|
814
833
|
|
|
815
834
|
// Add dummy table file to ensure the blob file is referenced.
|
|
816
|
-
AddDummyFile(table_file_number, blob_file_number);
|
|
835
|
+
AddDummyFile(table_file_number, blob_file_number, 1 /*epoch_number*/);
|
|
817
836
|
|
|
818
837
|
UpdateVersionStorageInfo();
|
|
819
838
|
|
|
@@ -892,7 +911,8 @@ TEST_F(VersionBuilderTest, ApplyBlobFileGarbageFileAdditionApplied) {
|
|
|
892
911
|
|
|
893
912
|
// Add dummy table file to ensure the blob file is referenced.
|
|
894
913
|
constexpr uint64_t table_file_number = 1;
|
|
895
|
-
AddDummyFileToEdit(&addition, table_file_number, blob_file_number
|
|
914
|
+
AddDummyFileToEdit(&addition, table_file_number, blob_file_number,
|
|
915
|
+
1 /*epoch_number*/);
|
|
896
916
|
|
|
897
917
|
ASSERT_OK(builder.Apply(&addition));
|
|
898
918
|
|
|
@@ -989,7 +1009,8 @@ TEST_F(VersionBuilderTest, BlobFileGarbageOverflow) {
|
|
|
989
1009
|
|
|
990
1010
|
// Add dummy table file to ensure the blob file is referenced.
|
|
991
1011
|
constexpr uint64_t table_file_number = 1;
|
|
992
|
-
AddDummyFileToEdit(&addition, table_file_number, blob_file_number
|
|
1012
|
+
AddDummyFileToEdit(&addition, table_file_number, blob_file_number,
|
|
1013
|
+
1 /*epoch_number*/);
|
|
993
1014
|
|
|
994
1015
|
ASSERT_OK(builder.Apply(&addition));
|
|
995
1016
|
|
|
@@ -1050,7 +1071,7 @@ TEST_F(VersionBuilderTest, SaveBlobFilesTo) {
|
|
|
1050
1071
|
const uint64_t table_file_number = 2 * i;
|
|
1051
1072
|
const uint64_t blob_file_number = 2 * i + 1;
|
|
1052
1073
|
|
|
1053
|
-
AddDummyFile(table_file_number, blob_file_number);
|
|
1074
|
+
AddDummyFile(table_file_number, blob_file_number, i /*epoch_number*/);
|
|
1054
1075
|
}
|
|
1055
1076
|
|
|
1056
1077
|
UpdateVersionStorageInfo();
|
|
@@ -1171,7 +1192,8 @@ TEST_F(VersionBuilderTest, SaveBlobFilesToConcurrentJobs) {
|
|
|
1171
1192
|
constexpr uint64_t garbage_blob_count = 0;
|
|
1172
1193
|
constexpr uint64_t garbage_blob_bytes = 0;
|
|
1173
1194
|
|
|
1174
|
-
AddDummyFile(base_table_file_number, base_blob_file_number
|
|
1195
|
+
AddDummyFile(base_table_file_number, base_blob_file_number,
|
|
1196
|
+
1 /*epoch_number*/);
|
|
1175
1197
|
AddBlob(base_blob_file_number, base_total_blob_count, base_total_blob_bytes,
|
|
1176
1198
|
checksum_method, checksum_value,
|
|
1177
1199
|
BlobFileMetaData::LinkedSsts{base_table_file_number},
|
|
@@ -1206,12 +1228,12 @@ TEST_F(VersionBuilderTest, SaveBlobFilesToConcurrentJobs) {
|
|
|
1206
1228
|
constexpr uint64_t total_blob_count = 234;
|
|
1207
1229
|
constexpr uint64_t total_blob_bytes = 1 << 22;
|
|
1208
1230
|
|
|
1209
|
-
edit.AddFile(
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1231
|
+
edit.AddFile(
|
|
1232
|
+
level, table_file_number, path_id, file_size, GetInternalKey(smallest),
|
|
1233
|
+
GetInternalKey(largest), smallest_seqno, largest_seqno,
|
|
1234
|
+
marked_for_compaction, Temperature::kUnknown, blob_file_number,
|
|
1235
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime, 2 /*epoch_number*/,
|
|
1236
|
+
checksum_value, checksum_method, kNullUniqueId64x2, 0);
|
|
1215
1237
|
edit.AddBlobFile(blob_file_number, total_blob_count, total_blob_bytes,
|
|
1216
1238
|
checksum_method, checksum_value);
|
|
1217
1239
|
|
|
@@ -1297,8 +1319,9 @@ TEST_F(VersionBuilderTest, CheckConsistencyForBlobFiles) {
|
|
|
1297
1319
|
/* largest_seqno */ 200, /* marked_for_compaction */ false,
|
|
1298
1320
|
Temperature::kUnknown,
|
|
1299
1321
|
/* oldest_blob_file_number */ 16, kUnknownOldestAncesterTime,
|
|
1300
|
-
kUnknownFileCreationTime,
|
|
1301
|
-
kUnknownFileChecksumFuncName,
|
|
1322
|
+
kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
1323
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName,
|
|
1324
|
+
kNullUniqueId64x2, 0);
|
|
1302
1325
|
|
|
1303
1326
|
edit.AddFile(/* level */ 1, /* file_number */ 700, /* path_id */ 0,
|
|
1304
1327
|
/* file_size */ 100, /* smallest */ GetInternalKey("801"),
|
|
@@ -1306,8 +1329,9 @@ TEST_F(VersionBuilderTest, CheckConsistencyForBlobFiles) {
|
|
|
1306
1329
|
/* largest_seqno */ 200, /* marked_for_compaction */ false,
|
|
1307
1330
|
Temperature::kUnknown,
|
|
1308
1331
|
/* oldest_blob_file_number */ 1000, kUnknownOldestAncesterTime,
|
|
1309
|
-
kUnknownFileCreationTime,
|
|
1310
|
-
kUnknownFileChecksumFuncName,
|
|
1332
|
+
kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
1333
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName,
|
|
1334
|
+
kNullUniqueId64x2, 0);
|
|
1311
1335
|
edit.AddBlobFile(/* blob_file_number */ 1000, /* total_blob_count */ 2000,
|
|
1312
1336
|
/* total_blob_bytes */ 200000,
|
|
1313
1337
|
/* checksum_method */ std::string(),
|
|
@@ -1527,8 +1551,8 @@ TEST_F(VersionBuilderTest, MaintainLinkedSstsForBlobFiles) {
|
|
|
1527
1551
|
/* largest_seqno */ 2100, /* marked_for_compaction */ false,
|
|
1528
1552
|
Temperature::kUnknown,
|
|
1529
1553
|
/* oldest_blob_file_number */ 1, kUnknownOldestAncesterTime,
|
|
1530
|
-
kUnknownFileCreationTime, kUnknownFileChecksum,
|
|
1531
|
-
kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
1554
|
+
kUnknownFileCreationTime, kUnknownEpochNumber, kUnknownFileChecksum,
|
|
1555
|
+
kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
1532
1556
|
|
|
1533
1557
|
// Add an SST that does not reference any blob files.
|
|
1534
1558
|
edit.AddFile(
|
|
@@ -1537,8 +1561,8 @@ TEST_F(VersionBuilderTest, MaintainLinkedSstsForBlobFiles) {
|
|
|
1537
1561
|
/* largest */ GetInternalKey("22", 2200), /* smallest_seqno */ 2200,
|
|
1538
1562
|
/* largest_seqno */ 2200, /* marked_for_compaction */ false,
|
|
1539
1563
|
Temperature::kUnknown, kInvalidBlobFileNumber, kUnknownOldestAncesterTime,
|
|
1540
|
-
kUnknownFileCreationTime, kUnknownFileChecksum,
|
|
1541
|
-
kUnknownFileChecksumFuncName, kNullUniqueId64x2);
|
|
1564
|
+
kUnknownFileCreationTime, kUnknownEpochNumber, kUnknownFileChecksum,
|
|
1565
|
+
kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
1542
1566
|
|
|
1543
1567
|
// Delete a file that references a blob file.
|
|
1544
1568
|
edit.DeleteFile(/* level */ 1, /* file_number */ 6);
|
|
@@ -1559,8 +1583,9 @@ TEST_F(VersionBuilderTest, MaintainLinkedSstsForBlobFiles) {
|
|
|
1559
1583
|
/* largest_seqno */ 300, /* marked_for_compaction */ false,
|
|
1560
1584
|
Temperature::kUnknown,
|
|
1561
1585
|
/* oldest_blob_file_number */ 3, kUnknownOldestAncesterTime,
|
|
1562
|
-
kUnknownFileCreationTime,
|
|
1563
|
-
kUnknownFileChecksumFuncName,
|
|
1586
|
+
kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
1587
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName,
|
|
1588
|
+
kNullUniqueId64x2, 0);
|
|
1564
1589
|
|
|
1565
1590
|
// Trivially move a file that does not reference any blob files.
|
|
1566
1591
|
edit.DeleteFile(/* level */ 1, /* file_number */ 13);
|
|
@@ -1571,8 +1596,8 @@ TEST_F(VersionBuilderTest, MaintainLinkedSstsForBlobFiles) {
|
|
|
1571
1596
|
/* largest_seqno */ 1300, /* marked_for_compaction */ false,
|
|
1572
1597
|
Temperature::kUnknown, kInvalidBlobFileNumber,
|
|
1573
1598
|
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
1574
|
-
|
|
1575
|
-
kNullUniqueId64x2);
|
|
1599
|
+
kUnknownEpochNumber, kUnknownFileChecksum,
|
|
1600
|
+
kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
|
|
1576
1601
|
|
|
1577
1602
|
// Add one more SST file that references a blob file, then promptly
|
|
1578
1603
|
// delete it in a second version edit before the new version gets saved.
|
|
@@ -1584,8 +1609,9 @@ TEST_F(VersionBuilderTest, MaintainLinkedSstsForBlobFiles) {
|
|
|
1584
1609
|
/* largest_seqno */ 2300, /* marked_for_compaction */ false,
|
|
1585
1610
|
Temperature::kUnknown,
|
|
1586
1611
|
/* oldest_blob_file_number */ 5, kUnknownOldestAncesterTime,
|
|
1587
|
-
kUnknownFileCreationTime,
|
|
1588
|
-
kUnknownFileChecksumFuncName,
|
|
1612
|
+
kUnknownFileCreationTime, kUnknownEpochNumber,
|
|
1613
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName,
|
|
1614
|
+
kNullUniqueId64x2, 0);
|
|
1589
1615
|
|
|
1590
1616
|
VersionEdit edit2;
|
|
1591
1617
|
|
|
@@ -1634,7 +1660,13 @@ TEST_F(VersionBuilderTest, MaintainLinkedSstsForBlobFiles) {
|
|
|
1634
1660
|
}
|
|
1635
1661
|
|
|
1636
1662
|
TEST_F(VersionBuilderTest, CheckConsistencyForFileDeletedTwice) {
|
|
1637
|
-
Add(0, 1U, "150", "200",
|
|
1663
|
+
Add(0, 1U, "150", "200", 100, /*path_id*/ 0,
|
|
1664
|
+
/*smallest_seq*/ 100, /*largest_seq*/ 100,
|
|
1665
|
+
/*num_entries*/ 0, /*num_deletions*/ 0,
|
|
1666
|
+
/*sampled*/ false, /*smallest_seqno*/ 0,
|
|
1667
|
+
/*largest_seqno*/ 0,
|
|
1668
|
+
/*oldest_blob_file_number*/ kInvalidBlobFileNumber,
|
|
1669
|
+
/*epoch_number*/ 1);
|
|
1638
1670
|
|
|
1639
1671
|
UpdateVersionStorageInfo();
|
|
1640
1672
|
|
|
@@ -1666,6 +1698,99 @@ TEST_F(VersionBuilderTest, CheckConsistencyForFileDeletedTwice) {
|
|
|
1666
1698
|
UnrefFilesInVersion(&new_vstorage2);
|
|
1667
1699
|
}
|
|
1668
1700
|
|
|
1701
|
+
TEST_F(VersionBuilderTest, CheckConsistencyForL0FilesSortedByEpochNumber) {
|
|
1702
|
+
Status s;
|
|
1703
|
+
// To verify files of same epoch number of overlapping ranges are caught as
|
|
1704
|
+
// corrupted
|
|
1705
|
+
VersionEdit version_edit_1;
|
|
1706
|
+
version_edit_1.AddFile(
|
|
1707
|
+
/* level */ 0, /* file_number */ 1U, /* path_id */ 0,
|
|
1708
|
+
/* file_size */ 100, /* smallest */ GetInternalKey("a", 1),
|
|
1709
|
+
/* largest */ GetInternalKey("c", 3), /* smallest_seqno */ 1,
|
|
1710
|
+
/* largest_seqno */ 3, /* marked_for_compaction */ false,
|
|
1711
|
+
Temperature::kUnknown,
|
|
1712
|
+
/* oldest_blob_file_number */ kInvalidBlobFileNumber,
|
|
1713
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
1714
|
+
1 /* epoch_number */, kUnknownFileChecksum, kUnknownFileChecksumFuncName,
|
|
1715
|
+
kNullUniqueId64x2, 0);
|
|
1716
|
+
version_edit_1.AddFile(
|
|
1717
|
+
/* level */ 0, /* file_number */ 2U, /* path_id */ 0,
|
|
1718
|
+
/* file_size */ 100, /* smallest */ GetInternalKey("b", 2),
|
|
1719
|
+
/* largest */ GetInternalKey("d", 4), /* smallest_seqno */ 2,
|
|
1720
|
+
/* largest_seqno */ 4, /* marked_for_compaction */ false,
|
|
1721
|
+
Temperature::kUnknown,
|
|
1722
|
+
/* oldest_blob_file_number */ kInvalidBlobFileNumber,
|
|
1723
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
1724
|
+
1 /* epoch_number */, kUnknownFileChecksum, kUnknownFileChecksumFuncName,
|
|
1725
|
+
kNullUniqueId64x2, 0);
|
|
1726
|
+
|
|
1727
|
+
VersionBuilder version_builder_1(EnvOptions(), &ioptions_,
|
|
1728
|
+
nullptr /* table_cache */, &vstorage_,
|
|
1729
|
+
nullptr /* file_metadata_cache_res_mgr */);
|
|
1730
|
+
VersionStorageInfo new_vstorage_1(
|
|
1731
|
+
&icmp_, ucmp_, options_.num_levels, kCompactionStyleLevel,
|
|
1732
|
+
nullptr /* src_vstorage */, true /* force_consistency_checks */);
|
|
1733
|
+
|
|
1734
|
+
ASSERT_OK(version_builder_1.Apply(&version_edit_1));
|
|
1735
|
+
s = version_builder_1.SaveTo(&new_vstorage_1);
|
|
1736
|
+
EXPECT_TRUE(s.IsCorruption());
|
|
1737
|
+
EXPECT_TRUE(std::strstr(
|
|
1738
|
+
s.getState(), "L0 files of same epoch number but overlapping range"));
|
|
1739
|
+
UnrefFilesInVersion(&new_vstorage_1);
|
|
1740
|
+
|
|
1741
|
+
// To verify L0 files not sorted by epoch_number are caught as corrupted
|
|
1742
|
+
VersionEdit version_edit_2;
|
|
1743
|
+
version_edit_2.AddFile(
|
|
1744
|
+
/* level */ 0, /* file_number */ 1U, /* path_id */ 0,
|
|
1745
|
+
/* file_size */ 100, /* smallest */ GetInternalKey("a", 1),
|
|
1746
|
+
/* largest */ GetInternalKey("a", 1), /* smallest_seqno */ 1,
|
|
1747
|
+
/* largest_seqno */ 1, /* marked_for_compaction */ false,
|
|
1748
|
+
Temperature::kUnknown,
|
|
1749
|
+
/* oldest_blob_file_number */ kInvalidBlobFileNumber,
|
|
1750
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
1751
|
+
1 /* epoch_number */, kUnknownFileChecksum, kUnknownFileChecksumFuncName,
|
|
1752
|
+
kNullUniqueId64x2, 0);
|
|
1753
|
+
version_edit_2.AddFile(
|
|
1754
|
+
/* level */ 0, /* file_number */ 2U, /* path_id */ 0,
|
|
1755
|
+
/* file_size */ 100, /* smallest */ GetInternalKey("b", 2),
|
|
1756
|
+
/* largest */ GetInternalKey("b", 2), /* smallest_seqno */ 2,
|
|
1757
|
+
/* largest_seqno */ 2, /* marked_for_compaction */ false,
|
|
1758
|
+
Temperature::kUnknown,
|
|
1759
|
+
/* oldest_blob_file_number */ kInvalidBlobFileNumber,
|
|
1760
|
+
kUnknownOldestAncesterTime, kUnknownFileCreationTime,
|
|
1761
|
+
2 /* epoch_number */, kUnknownFileChecksum, kUnknownFileChecksumFuncName,
|
|
1762
|
+
kNullUniqueId64x2, 0);
|
|
1763
|
+
|
|
1764
|
+
VersionBuilder version_builder_2(EnvOptions(), &ioptions_,
|
|
1765
|
+
nullptr /* table_cache */, &vstorage_,
|
|
1766
|
+
nullptr /* file_metadata_cache_res_mgr */);
|
|
1767
|
+
VersionStorageInfo new_vstorage_2(
|
|
1768
|
+
&icmp_, ucmp_, options_.num_levels, kCompactionStyleLevel,
|
|
1769
|
+
nullptr /* src_vstorage */, true /* force_consistency_checks */);
|
|
1770
|
+
|
|
1771
|
+
ASSERT_OK(version_builder_2.Apply(&version_edit_2));
|
|
1772
|
+
s = version_builder_2.SaveTo(&new_vstorage_2);
|
|
1773
|
+
ASSERT_TRUE(s.ok());
|
|
1774
|
+
|
|
1775
|
+
const std::vector<FileMetaData*>& l0_files = new_vstorage_2.LevelFiles(0);
|
|
1776
|
+
ASSERT_EQ(l0_files.size(), 2);
|
|
1777
|
+
// Manually corrupt L0 files's epoch_number
|
|
1778
|
+
l0_files[0]->epoch_number = 1;
|
|
1779
|
+
l0_files[1]->epoch_number = 2;
|
|
1780
|
+
|
|
1781
|
+
// To surface corruption error by applying dummy version edit
|
|
1782
|
+
VersionEdit dummy_version_edit;
|
|
1783
|
+
VersionBuilder dummy_version_builder(
|
|
1784
|
+
EnvOptions(), &ioptions_, nullptr /* table_cache */, &vstorage_,
|
|
1785
|
+
nullptr /* file_metadata_cache_res_mgr */);
|
|
1786
|
+
ASSERT_OK(dummy_version_builder.Apply(&dummy_version_edit));
|
|
1787
|
+
s = dummy_version_builder.SaveTo(&new_vstorage_2);
|
|
1788
|
+
EXPECT_TRUE(s.IsCorruption());
|
|
1789
|
+
EXPECT_TRUE(std::strstr(s.getState(), "L0 files are not sorted properly"));
|
|
1790
|
+
|
|
1791
|
+
UnrefFilesInVersion(&new_vstorage_2);
|
|
1792
|
+
}
|
|
1793
|
+
|
|
1669
1794
|
TEST_F(VersionBuilderTest, EstimatedActiveKeys) {
|
|
1670
1795
|
const uint32_t kTotalSamples = 20;
|
|
1671
1796
|
const uint32_t kNumLevels = 5;
|
|
@@ -135,7 +135,8 @@ bool VersionEdit::EncodeTo(std::string* dst) const {
|
|
|
135
135
|
bool min_log_num_written = false;
|
|
136
136
|
for (size_t i = 0; i < new_files_.size(); i++) {
|
|
137
137
|
const FileMetaData& f = new_files_[i].second;
|
|
138
|
-
if (!f.smallest.Valid() || !f.largest.Valid()
|
|
138
|
+
if (!f.smallest.Valid() || !f.largest.Valid() ||
|
|
139
|
+
f.epoch_number == kUnknownEpochNumber) {
|
|
139
140
|
return false;
|
|
140
141
|
}
|
|
141
142
|
PutVarint32(dst, kNewFile4);
|
|
@@ -184,6 +185,11 @@ bool VersionEdit::EncodeTo(std::string* dst) const {
|
|
|
184
185
|
&varint_file_creation_time);
|
|
185
186
|
PutLengthPrefixedSlice(dst, Slice(varint_file_creation_time));
|
|
186
187
|
|
|
188
|
+
PutVarint32(dst, NewFileCustomTag::kEpochNumber);
|
|
189
|
+
std::string varint_epoch_number;
|
|
190
|
+
PutVarint64(&varint_epoch_number, f.epoch_number);
|
|
191
|
+
PutLengthPrefixedSlice(dst, Slice(varint_epoch_number));
|
|
192
|
+
|
|
187
193
|
PutVarint32(dst, NewFileCustomTag::kFileChecksum);
|
|
188
194
|
PutLengthPrefixedSlice(dst, Slice(f.file_checksum));
|
|
189
195
|
|
|
@@ -225,6 +231,13 @@ bool VersionEdit::EncodeTo(std::string* dst) const {
|
|
|
225
231
|
std::string unique_id_str = EncodeUniqueIdBytes(&unique_id);
|
|
226
232
|
PutLengthPrefixedSlice(dst, Slice(unique_id_str));
|
|
227
233
|
}
|
|
234
|
+
if (f.compensated_range_deletion_size) {
|
|
235
|
+
PutVarint32(dst, kCompensatedRangeDeletionSize);
|
|
236
|
+
std::string compensated_range_deletion_size;
|
|
237
|
+
PutVarint64(&compensated_range_deletion_size,
|
|
238
|
+
f.compensated_range_deletion_size);
|
|
239
|
+
PutLengthPrefixedSlice(dst, Slice(compensated_range_deletion_size));
|
|
240
|
+
}
|
|
228
241
|
|
|
229
242
|
TEST_SYNC_POINT_CALLBACK("VersionEdit::EncodeTo:NewFile4:CustomizeFields",
|
|
230
243
|
dst);
|
|
@@ -352,6 +365,11 @@ const char* VersionEdit::DecodeNewFile4From(Slice* input) {
|
|
|
352
365
|
return "invalid file creation time";
|
|
353
366
|
}
|
|
354
367
|
break;
|
|
368
|
+
case kEpochNumber:
|
|
369
|
+
if (!GetVarint64(&field, &f.epoch_number)) {
|
|
370
|
+
return "invalid epoch number";
|
|
371
|
+
}
|
|
372
|
+
break;
|
|
355
373
|
case kFileChecksum:
|
|
356
374
|
f.file_checksum = field.ToString();
|
|
357
375
|
break;
|
|
@@ -393,6 +411,11 @@ const char* VersionEdit::DecodeNewFile4From(Slice* input) {
|
|
|
393
411
|
return "invalid unique id";
|
|
394
412
|
}
|
|
395
413
|
break;
|
|
414
|
+
case kCompensatedRangeDeletionSize:
|
|
415
|
+
if (!GetVarint64(&field, &f.compensated_range_deletion_size)) {
|
|
416
|
+
return "Invalid compensated range deletion size";
|
|
417
|
+
}
|
|
418
|
+
break;
|
|
396
419
|
default:
|
|
397
420
|
if ((custom_tag & kCustomTagNonSafeIgnoreMask) != 0) {
|
|
398
421
|
// Should not proceed if cannot understand it
|
|
@@ -808,6 +831,8 @@ std::string VersionEdit::DebugString(bool hex_key) const {
|
|
|
808
831
|
AppendNumberTo(&r, f.oldest_ancester_time);
|
|
809
832
|
r.append(" file_creation_time:");
|
|
810
833
|
AppendNumberTo(&r, f.file_creation_time);
|
|
834
|
+
r.append(" epoch_number:");
|
|
835
|
+
AppendNumberTo(&r, f.epoch_number);
|
|
811
836
|
r.append(" file_checksum:");
|
|
812
837
|
r.append(Slice(f.file_checksum).ToString(true));
|
|
813
838
|
r.append(" file_checksum_func_name: ");
|
|
@@ -927,6 +952,7 @@ std::string VersionEdit::DebugJSON(int edit_num, bool hex_key) const {
|
|
|
927
952
|
jw << "LargestIKey" << f.largest.DebugString(hex_key);
|
|
928
953
|
jw << "OldestAncesterTime" << f.oldest_ancester_time;
|
|
929
954
|
jw << "FileCreationTime" << f.file_creation_time;
|
|
955
|
+
jw << "EpochNumber" << f.epoch_number;
|
|
930
956
|
jw << "FileChecksum" << Slice(f.file_checksum).ToString(true);
|
|
931
957
|
jw << "FileChecksumFuncName" << f.file_checksum_func_name;
|
|
932
958
|
if (f.temperature != Temperature::kUnknown) {
|