@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.
Files changed (223) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +21 -0
  2. package/deps/rocksdb/rocksdb/Makefile +15 -3
  3. package/deps/rocksdb/rocksdb/TARGETS +6 -0
  4. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +32 -35
  5. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +0 -30
  6. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +0 -83
  7. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +13 -14
  8. package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +40 -0
  9. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +14 -20
  10. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +8 -9
  11. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +5 -4
  12. package/deps/rocksdb/rocksdb/cache/cache_test.cc +124 -156
  13. package/deps/rocksdb/rocksdb/cache/charged_cache.cc +10 -26
  14. package/deps/rocksdb/rocksdb/cache/charged_cache.h +11 -16
  15. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +35 -32
  16. package/deps/rocksdb/rocksdb/cache/clock_cache.h +19 -21
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +42 -30
  18. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -8
  19. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +91 -143
  20. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +54 -60
  21. package/deps/rocksdb/rocksdb/cache/lru_cache.h +37 -63
  22. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +120 -106
  23. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +14 -5
  24. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -31
  25. package/deps/rocksdb/rocksdb/cache/typed_cache.h +339 -0
  26. package/deps/rocksdb/rocksdb/db/blob/blob_contents.cc +0 -48
  27. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +18 -15
  28. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +5 -26
  29. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +7 -8
  30. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +6 -3
  31. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +2 -7
  32. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +19 -47
  33. package/deps/rocksdb/rocksdb/db/blob/blob_source.h +13 -5
  34. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +15 -22
  35. package/deps/rocksdb/rocksdb/db/builder.cc +24 -10
  36. package/deps/rocksdb/rocksdb/db/builder.h +2 -1
  37. package/deps/rocksdb/rocksdb/db/c.cc +15 -0
  38. package/deps/rocksdb/rocksdb/db/c_test.c +3 -0
  39. package/deps/rocksdb/rocksdb/db/column_family.cc +11 -6
  40. package/deps/rocksdb/rocksdb/db/column_family.h +20 -6
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +31 -34
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +3 -0
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +21 -3
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +1 -0
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +4 -0
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +4 -2
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +9 -6
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +275 -82
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +7 -0
  50. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -18
  51. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +17 -16
  52. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +19 -6
  53. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +5 -5
  54. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +22 -22
  55. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +5 -5
  56. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +81 -52
  57. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +5 -1
  58. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +5 -5
  59. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +8 -2
  60. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +3 -0
  61. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +266 -138
  62. package/deps/rocksdb/rocksdb/db/corruption_test.cc +86 -1
  63. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +98 -9
  64. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -28
  65. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +2 -3
  66. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1022 -123
  67. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +65 -4
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +32 -21
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +32 -24
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +199 -77
  71. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +1 -1
  72. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +3 -2
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +3 -0
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +8 -4
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +43 -23
  76. package/deps/rocksdb/rocksdb/db/db_iter.cc +8 -2
  77. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +42 -0
  78. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +155 -0
  79. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +12 -12
  80. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +230 -2
  81. package/deps/rocksdb/rocksdb/db/db_test.cc +3 -0
  82. package/deps/rocksdb/rocksdb/db/db_test2.cc +233 -8
  83. package/deps/rocksdb/rocksdb/db/db_test_util.cc +11 -10
  84. package/deps/rocksdb/rocksdb/db/db_test_util.h +39 -24
  85. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +129 -0
  86. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +28 -0
  87. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +21 -0
  88. package/deps/rocksdb/rocksdb/db/dbformat.cc +25 -0
  89. package/deps/rocksdb/rocksdb/db/dbformat.h +2 -0
  90. package/deps/rocksdb/rocksdb/db/experimental.cc +3 -2
  91. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +3 -0
  92. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +92 -13
  93. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +38 -1
  94. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +14 -110
  95. package/deps/rocksdb/rocksdb/db/flush_job.cc +12 -10
  96. package/deps/rocksdb/rocksdb/db/flush_job.h +3 -2
  97. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +29 -29
  98. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +56 -53
  99. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +3 -4
  100. package/deps/rocksdb/rocksdb/db/internal_stats.cc +11 -11
  101. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -2
  102. package/deps/rocksdb/rocksdb/db/log_reader.cc +8 -6
  103. package/deps/rocksdb/rocksdb/db/log_test.cc +35 -2
  104. package/deps/rocksdb/rocksdb/db/memtable.cc +31 -6
  105. package/deps/rocksdb/rocksdb/db/merge_helper.cc +47 -29
  106. package/deps/rocksdb/rocksdb/db/merge_helper.h +14 -6
  107. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +10 -10
  108. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/repair.cc +65 -22
  110. package/deps/rocksdb/rocksdb/db/repair_test.cc +54 -0
  111. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +26 -26
  112. package/deps/rocksdb/rocksdb/db/table_cache.cc +41 -91
  113. package/deps/rocksdb/rocksdb/db/table_cache.h +17 -19
  114. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +7 -9
  115. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +3 -1
  116. package/deps/rocksdb/rocksdb/db/version_builder.cc +102 -52
  117. package/deps/rocksdb/rocksdb/db/version_builder.h +20 -0
  118. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +218 -93
  119. package/deps/rocksdb/rocksdb/db/version_edit.cc +27 -1
  120. package/deps/rocksdb/rocksdb/db/version_edit.h +34 -9
  121. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +13 -6
  122. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +17 -6
  123. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +19 -17
  124. package/deps/rocksdb/rocksdb/db/version_set.cc +160 -28
  125. package/deps/rocksdb/rocksdb/db/version_set.h +34 -4
  126. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -1
  127. package/deps/rocksdb/rocksdb/db/version_set_test.cc +65 -31
  128. package/deps/rocksdb/rocksdb/db/write_batch.cc +4 -1
  129. package/deps/rocksdb/rocksdb/db/write_thread.cc +5 -2
  130. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +1 -0
  131. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +31 -32
  132. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.h +2 -1
  133. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +8 -6
  134. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +4 -0
  135. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +11 -4
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +16 -15
  137. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +13 -1
  138. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +1 -0
  139. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +286 -217
  140. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +8 -0
  141. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +137 -135
  142. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +6 -0
  143. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -1
  144. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +21 -0
  145. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +9 -3
  146. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +2 -1
  147. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +8 -6
  148. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +3 -0
  149. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +69 -9
  150. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
  151. package/deps/rocksdb/rocksdb/memory/arena.cc +23 -87
  152. package/deps/rocksdb/rocksdb/memory/arena.h +25 -31
  153. package/deps/rocksdb/rocksdb/memory/arena_test.cc +90 -0
  154. package/deps/rocksdb/rocksdb/memory/memory_allocator.h +9 -0
  155. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +26 -26
  156. package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -3
  157. package/deps/rocksdb/rocksdb/port/mmap.cc +98 -0
  158. package/deps/rocksdb/rocksdb/port/mmap.h +70 -0
  159. package/deps/rocksdb/rocksdb/port/port_posix.h +2 -0
  160. package/{prebuilds → deps/rocksdb/rocksdb/prebuilds}/linux-x64/node.napi.node +0 -0
  161. package/deps/rocksdb/rocksdb/src.mk +3 -0
  162. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -2
  163. package/deps/rocksdb/rocksdb/table/block_based/block.h +3 -0
  164. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +25 -67
  165. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +3 -3
  166. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +18 -13
  167. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +159 -225
  168. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +31 -50
  169. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +52 -20
  170. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +3 -3
  171. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +1 -1
  172. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +96 -0
  173. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +132 -0
  174. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +28 -0
  175. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -5
  176. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +1 -4
  177. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +6 -7
  178. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -1
  179. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +6 -1
  180. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +19 -18
  181. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +9 -5
  182. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +3 -1
  183. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +2 -1
  184. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +2 -2
  185. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +3 -3
  186. package/deps/rocksdb/rocksdb/table/format.cc +24 -20
  187. package/deps/rocksdb/rocksdb/table/format.h +6 -3
  188. package/deps/rocksdb/rocksdb/table/get_context.cc +12 -3
  189. package/deps/rocksdb/rocksdb/table/internal_iterator.h +0 -2
  190. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +69 -35
  191. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +2 -2
  192. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +1 -1
  193. package/deps/rocksdb/rocksdb/table/table_test.cc +7 -6
  194. package/deps/rocksdb/rocksdb/test_util/testutil.h +10 -0
  195. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +66 -1
  196. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +9 -2
  197. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +5 -0
  198. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +2 -2
  199. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +1 -1
  200. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +20 -12
  201. package/deps/rocksdb/rocksdb/util/bloom_test.cc +1 -1
  202. package/deps/rocksdb/rocksdb/util/compression.cc +2 -2
  203. package/deps/rocksdb/rocksdb/util/compression.h +11 -2
  204. package/deps/rocksdb/rocksdb/util/status.cc +7 -0
  205. package/deps/rocksdb/rocksdb/util/xxhash.h +1901 -887
  206. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +250 -74
  207. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +199 -4
  208. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +35 -57
  209. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +4 -5
  210. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -0
  211. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +39 -0
  212. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +9 -0
  213. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +11 -6
  214. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +6 -5
  215. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +0 -1
  216. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +10 -11
  217. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +31 -31
  218. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
  219. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +111 -0
  220. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +1 -0
  221. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +12 -3
  222. package/package.json +1 -1
  223. 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
- level, table_file_number, path_id, file_size, GetInternalKey(smallest),
133
- GetInternalKey(largest), smallest_seqno, largest_seqno,
134
- marked_for_compaction, Temperature::kUnknown, blob_file_number,
135
- kUnknownOldestAncesterTime, kUnknownFileCreationTime,
136
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
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
- Add(0, 88U, "201", "300", 100U, 0, 100U, 100U, 0, 0, false, 100U, 100U);
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
- Add(0, 88U, "201", "300", 100U, 0, 100U, 100U, 0, 0, false, 100U, 100U);
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(level, file_number, path_id, file_size,
506
- GetInternalKey(smallest, smallest_seq),
507
- GetInternalKey(largest, largest_seq), smallest_seqno,
508
- largest_seqno, marked_for_compaction, Temperature::kUnknown,
509
- kInvalidBlobFileNumber, kUnknownOldestAncesterTime,
510
- kUnknownFileCreationTime, kUnknownFileChecksum,
511
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
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(level, file_number, path_id, file_size, GetInternalKey(smallest),
592
- GetInternalKey(largest), smallest_seqno, largest_seqno,
593
- marked_for_compaction, Temperature::kUnknown,
594
- kInvalidBlobFileNumber, kUnknownOldestAncesterTime,
595
- kUnknownFileCreationTime, kUnknownFileChecksum,
596
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
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(level, table_file_number, path_id, file_size,
1210
- GetInternalKey(smallest), GetInternalKey(largest),
1211
- smallest_seqno, largest_seqno, marked_for_compaction,
1212
- Temperature::kUnknown, blob_file_number,
1213
- kUnknownOldestAncesterTime, kUnknownFileCreationTime,
1214
- checksum_value, checksum_method, kNullUniqueId64x2);
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, kUnknownFileChecksum,
1301
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
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, kUnknownFileChecksum,
1310
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
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, kUnknownFileChecksum,
1563
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
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
- kUnknownFileChecksum, kUnknownFileChecksumFuncName,
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, kUnknownFileChecksum,
1588
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
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", 100U);
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) {