@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
@@ -88,6 +88,8 @@ enum NewFileCustomTag : uint32_t {
88
88
  kMinTimestamp = 10,
89
89
  kMaxTimestamp = 11,
90
90
  kUniqueId = 12,
91
+ kEpochNumber = 13,
92
+ kCompensatedRangeDeletionSize = 14,
91
93
 
92
94
  // If this bit for the custom tag is set, opening DB should fail if
93
95
  // we don't know this field.
@@ -102,6 +104,10 @@ class VersionSet;
102
104
  constexpr uint64_t kFileNumberMask = 0x3FFFFFFFFFFFFFFF;
103
105
  constexpr uint64_t kUnknownOldestAncesterTime = 0;
104
106
  constexpr uint64_t kUnknownFileCreationTime = 0;
107
+ constexpr uint64_t kUnknownEpochNumber = 0;
108
+ // If `Options::allow_ingest_behind` is true, this epoch number
109
+ // will be dedicated to files ingested behind.
110
+ constexpr uint64_t kReservedEpochNumberForFileIngestedBehind = 1;
105
111
 
106
112
  extern uint64_t PackFileNumberAndPathId(uint64_t number, uint64_t path_id);
107
113
 
@@ -177,15 +183,22 @@ struct FileMetaData {
177
183
  // Stats for compensating deletion entries during compaction
178
184
 
179
185
  // File size compensated by deletion entry.
180
- // This is updated in Version::UpdateAccumulatedStats() first time when the
181
- // file is created or loaded. After it is updated (!= 0), it is immutable.
186
+ // This is used to compute a file's compaction priority, and is updated in
187
+ // Version::ComputeCompensatedSizes() first time when the file is created or
188
+ // loaded. After it is updated (!= 0), it is immutable.
182
189
  uint64_t compensated_file_size = 0;
183
190
  // These values can mutate, but they can only be read or written from
184
191
  // single-threaded LogAndApply thread
185
192
  uint64_t num_entries = 0; // the number of entries.
186
- uint64_t num_deletions = 0; // the number of deletion entries.
193
+ // The number of deletion entries, including range deletions.
194
+ uint64_t num_deletions = 0;
187
195
  uint64_t raw_key_size = 0; // total uncompressed key size.
188
196
  uint64_t raw_value_size = 0; // total uncompressed value size.
197
+ uint64_t num_range_deletions = 0;
198
+ // This is computed during Flush/Compaction, and is added to
199
+ // `compensated_file_size`. Currently, this estimates the size of keys in the
200
+ // next level covered by range tombstones in this file.
201
+ uint64_t compensated_range_deletion_size = 0;
189
202
 
190
203
  int refs = 0; // Reference count
191
204
 
@@ -210,6 +223,12 @@ struct FileMetaData {
210
223
  // Unix time when the SST file is created.
211
224
  uint64_t file_creation_time = kUnknownFileCreationTime;
212
225
 
226
+ // The order of a file being flushed or ingested/imported.
227
+ // Compaction output file will be assigned with the minimum `epoch_number`
228
+ // among input files'.
229
+ // For L0, larger `epoch_number` indicates newer L0 file.
230
+ uint64_t epoch_number = kUnknownEpochNumber;
231
+
213
232
  // File checksum
214
233
  std::string file_checksum = kUnknownFileChecksum;
215
234
 
@@ -227,17 +246,20 @@ struct FileMetaData {
227
246
  const SequenceNumber& largest_seq, bool marked_for_compact,
228
247
  Temperature _temperature, uint64_t oldest_blob_file,
229
248
  uint64_t _oldest_ancester_time, uint64_t _file_creation_time,
230
- const std::string& _file_checksum,
249
+ uint64_t _epoch_number, const std::string& _file_checksum,
231
250
  const std::string& _file_checksum_func_name,
232
- UniqueId64x2 _unique_id)
251
+ UniqueId64x2 _unique_id,
252
+ const uint64_t _compensated_range_deletion_size)
233
253
  : fd(file, file_path_id, file_size, smallest_seq, largest_seq),
234
254
  smallest(smallest_key),
235
255
  largest(largest_key),
256
+ compensated_range_deletion_size(_compensated_range_deletion_size),
236
257
  marked_for_compaction(marked_for_compact),
237
258
  temperature(_temperature),
238
259
  oldest_blob_file_number(oldest_blob_file),
239
260
  oldest_ancester_time(_oldest_ancester_time),
240
261
  file_creation_time(_file_creation_time),
262
+ epoch_number(_epoch_number),
241
263
  file_checksum(_file_checksum),
242
264
  file_checksum_func_name(_file_checksum_func_name),
243
265
  unique_id(std::move(_unique_id)) {
@@ -260,6 +282,7 @@ struct FileMetaData {
260
282
  if (largest.size() == 0 || icmp.Compare(largest, end) < 0) {
261
283
  largest = end;
262
284
  }
285
+ assert(icmp.Compare(smallest, largest) <= 0);
263
286
  fd.smallest_seqno = std::min(fd.smallest_seqno, seqno);
264
287
  fd.largest_seqno = std::max(fd.largest_seqno, seqno);
265
288
  }
@@ -420,17 +443,19 @@ class VersionEdit {
420
443
  const SequenceNumber& largest_seqno, bool marked_for_compaction,
421
444
  Temperature temperature, uint64_t oldest_blob_file_number,
422
445
  uint64_t oldest_ancester_time, uint64_t file_creation_time,
423
- const std::string& file_checksum,
446
+ uint64_t epoch_number, const std::string& file_checksum,
424
447
  const std::string& file_checksum_func_name,
425
- const UniqueId64x2& unique_id) {
448
+ const UniqueId64x2& unique_id,
449
+ const uint64_t compensated_range_deletion_size) {
426
450
  assert(smallest_seqno <= largest_seqno);
427
451
  new_files_.emplace_back(
428
452
  level,
429
453
  FileMetaData(file, file_path_id, file_size, smallest, largest,
430
454
  smallest_seqno, largest_seqno, marked_for_compaction,
431
455
  temperature, oldest_blob_file_number, oldest_ancester_time,
432
- file_creation_time, file_checksum, file_checksum_func_name,
433
- unique_id));
456
+ file_creation_time, epoch_number, file_checksum,
457
+ file_checksum_func_name, unique_id,
458
+ compensated_range_deletion_size));
434
459
  if (!HasLastSequence() || largest_seqno > GetLastSequence()) {
435
460
  SetLastSequence(largest_seqno);
436
461
  }
@@ -14,6 +14,7 @@
14
14
 
15
15
  #include "db/blob/blob_file_reader.h"
16
16
  #include "db/blob/blob_source.h"
17
+ #include "db/version_edit.h"
17
18
  #include "logging/logging.h"
18
19
  #include "monitoring/persistent_stats_history.h"
19
20
 
@@ -154,7 +155,7 @@ VersionEditHandler::VersionEditHandler(
154
155
  bool read_only, std::vector<ColumnFamilyDescriptor> column_families,
155
156
  VersionSet* version_set, bool track_missing_files,
156
157
  bool no_error_if_files_missing, const std::shared_ptr<IOTracer>& io_tracer,
157
- bool skip_load_table_files)
158
+ bool skip_load_table_files, EpochNumberRequirement epoch_number_requirement)
158
159
  : VersionEditHandlerBase(),
159
160
  read_only_(read_only),
160
161
  column_families_(std::move(column_families)),
@@ -163,7 +164,8 @@ VersionEditHandler::VersionEditHandler(
163
164
  no_error_if_files_missing_(no_error_if_files_missing),
164
165
  io_tracer_(io_tracer),
165
166
  skip_load_table_files_(skip_load_table_files),
166
- initialized_(false) {
167
+ initialized_(false),
168
+ epoch_number_requirement_(epoch_number_requirement) {
167
169
  assert(version_set_ != nullptr);
168
170
  }
169
171
 
@@ -431,6 +433,7 @@ void VersionEditHandler::CheckIterationResult(const log::Reader& reader,
431
433
  }
432
434
  }
433
435
  }
436
+
434
437
  if (s->ok()) {
435
438
  for (auto* cfd : *(version_set_->column_family_set_)) {
436
439
  if (cfd->IsDropped()) {
@@ -528,7 +531,8 @@ Status VersionEditHandler::MaybeCreateVersion(const VersionEdit& /*edit*/,
528
531
  auto* builder = builder_iter->second->version_builder();
529
532
  auto* v = new Version(cfd, version_set_, version_set_->file_options_,
530
533
  *cfd->GetLatestMutableCFOptions(), io_tracer_,
531
- version_set_->current_version_number_++);
534
+ version_set_->current_version_number_++,
535
+ epoch_number_requirement_);
532
536
  s = builder->SaveTo(v->storage_info());
533
537
  if (s.ok()) {
534
538
  // Install new version
@@ -642,10 +646,12 @@ Status VersionEditHandler::ExtractInfoFromVersionEdit(ColumnFamilyData* cfd,
642
646
 
643
647
  VersionEditHandlerPointInTime::VersionEditHandlerPointInTime(
644
648
  bool read_only, std::vector<ColumnFamilyDescriptor> column_families,
645
- VersionSet* version_set, const std::shared_ptr<IOTracer>& io_tracer)
649
+ VersionSet* version_set, const std::shared_ptr<IOTracer>& io_tracer,
650
+ EpochNumberRequirement epoch_number_requirement)
646
651
  : VersionEditHandler(read_only, column_families, version_set,
647
652
  /*track_missing_files=*/true,
648
- /*no_error_if_files_missing=*/true, io_tracer) {}
653
+ /*no_error_if_files_missing=*/true, io_tracer,
654
+ epoch_number_requirement) {}
649
655
 
650
656
  VersionEditHandlerPointInTime::~VersionEditHandlerPointInTime() {
651
657
  for (const auto& elem : versions_) {
@@ -804,7 +810,8 @@ Status VersionEditHandlerPointInTime::MaybeCreateVersion(
804
810
 
805
811
  auto* version = new Version(cfd, version_set_, version_set_->file_options_,
806
812
  *cfd->GetLatestMutableCFOptions(), io_tracer_,
807
- version_set_->current_version_number_++);
813
+ version_set_->current_version_number_++,
814
+ epoch_number_requirement_);
808
815
  s = builder->LoadTableHandlers(
809
816
  cfd->internal_stats(),
810
817
  version_set_->db_options_->max_file_opening_threads, false, true,
@@ -110,10 +110,13 @@ class VersionEditHandler : public VersionEditHandlerBase {
110
110
  const std::vector<ColumnFamilyDescriptor>& column_families,
111
111
  VersionSet* version_set, bool track_missing_files,
112
112
  bool no_error_if_files_missing,
113
- const std::shared_ptr<IOTracer>& io_tracer)
113
+ const std::shared_ptr<IOTracer>& io_tracer,
114
+ EpochNumberRequirement epoch_number_requirement =
115
+ EpochNumberRequirement::kMustPresent)
114
116
  : VersionEditHandler(read_only, column_families, version_set,
115
117
  track_missing_files, no_error_if_files_missing,
116
- io_tracer, /*skip_load_table_files=*/false) {}
118
+ io_tracer, /*skip_load_table_files=*/false,
119
+ epoch_number_requirement) {}
117
120
 
118
121
  ~VersionEditHandler() override {}
119
122
 
@@ -134,7 +137,9 @@ class VersionEditHandler : public VersionEditHandlerBase {
134
137
  bool read_only, std::vector<ColumnFamilyDescriptor> column_families,
135
138
  VersionSet* version_set, bool track_missing_files,
136
139
  bool no_error_if_files_missing,
137
- const std::shared_ptr<IOTracer>& io_tracer, bool skip_load_table_files);
140
+ const std::shared_ptr<IOTracer>& io_tracer, bool skip_load_table_files,
141
+ EpochNumberRequirement epoch_number_requirement =
142
+ EpochNumberRequirement::kMustPresent);
138
143
 
139
144
  Status ApplyVersionEdit(VersionEdit& edit, ColumnFamilyData** cfd) override;
140
145
 
@@ -189,6 +194,7 @@ class VersionEditHandler : public VersionEditHandlerBase {
189
194
  bool skip_load_table_files_;
190
195
  bool initialized_;
191
196
  std::unique_ptr<std::unordered_map<uint32_t, std::string>> cf_to_cmp_names_;
197
+ EpochNumberRequirement epoch_number_requirement_;
192
198
 
193
199
  private:
194
200
  Status ExtractInfoFromVersionEdit(ColumnFamilyData* cfd,
@@ -205,7 +211,9 @@ class VersionEditHandlerPointInTime : public VersionEditHandler {
205
211
  public:
206
212
  VersionEditHandlerPointInTime(
207
213
  bool read_only, std::vector<ColumnFamilyDescriptor> column_families,
208
- VersionSet* version_set, const std::shared_ptr<IOTracer>& io_tracer);
214
+ VersionSet* version_set, const std::shared_ptr<IOTracer>& io_tracer,
215
+ EpochNumberRequirement epoch_number_requirement =
216
+ EpochNumberRequirement::kMustPresent);
209
217
  ~VersionEditHandlerPointInTime() override;
210
218
 
211
219
  protected:
@@ -229,9 +237,12 @@ class ManifestTailer : public VersionEditHandlerPointInTime {
229
237
  public:
230
238
  explicit ManifestTailer(std::vector<ColumnFamilyDescriptor> column_families,
231
239
  VersionSet* version_set,
232
- const std::shared_ptr<IOTracer>& io_tracer)
240
+ const std::shared_ptr<IOTracer>& io_tracer,
241
+ EpochNumberRequirement epoch_number_requirement =
242
+ EpochNumberRequirement::kMustPresent)
233
243
  : VersionEditHandlerPointInTime(/*read_only=*/false, column_families,
234
- version_set, io_tracer),
244
+ version_set, io_tracer,
245
+ epoch_number_requirement),
235
246
  mode_(Mode::kRecovery) {}
236
247
 
237
248
  void PrepareToReadNewManifest() {
@@ -43,8 +43,9 @@ TEST_F(VersionEditTest, EncodeDecode) {
43
43
  InternalKey("foo", kBig + 500 + i, kTypeValue),
44
44
  InternalKey("zoo", kBig + 600 + i, kTypeDeletion),
45
45
  kBig + 500 + i, kBig + 600 + i, false, Temperature::kUnknown,
46
- kInvalidBlobFileNumber, 888, 678, "234", "crc32c",
47
- kNullUniqueId64x2);
46
+ kInvalidBlobFileNumber, 888, 678,
47
+ kBig + 300 + i /* epoch_number */, "234", "crc32c",
48
+ kNullUniqueId64x2, 0);
48
49
  edit.DeleteFile(4, kBig + 700 + i);
49
50
  }
50
51
 
@@ -63,25 +64,25 @@ TEST_F(VersionEditTest, EncodeDecodeNewFile4) {
63
64
  InternalKey("zoo", kBig + 600, kTypeDeletion), kBig + 500,
64
65
  kBig + 600, true, Temperature::kUnknown, kInvalidBlobFileNumber,
65
66
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
66
- kUnknownFileChecksum, kUnknownFileChecksumFuncName,
67
- kNullUniqueId64x2);
67
+ 300 /* epoch_number */, kUnknownFileChecksum,
68
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
68
69
  edit.AddFile(4, 301, 3, 100, InternalKey("foo", kBig + 501, kTypeValue),
69
70
  InternalKey("zoo", kBig + 601, kTypeDeletion), kBig + 501,
70
71
  kBig + 601, false, Temperature::kUnknown, kInvalidBlobFileNumber,
71
72
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
72
- kUnknownFileChecksum, kUnknownFileChecksumFuncName,
73
- kNullUniqueId64x2);
73
+ 301 /* epoch_number */, kUnknownFileChecksum,
74
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
74
75
  edit.AddFile(5, 302, 0, 100, InternalKey("foo", kBig + 502, kTypeValue),
75
76
  InternalKey("zoo", kBig + 602, kTypeDeletion), kBig + 502,
76
77
  kBig + 602, true, Temperature::kUnknown, kInvalidBlobFileNumber,
77
- 666, 888, kUnknownFileChecksum, kUnknownFileChecksumFuncName,
78
- kNullUniqueId64x2);
78
+ 666, 888, 302 /* epoch_number */, kUnknownFileChecksum,
79
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
79
80
  edit.AddFile(5, 303, 0, 100, InternalKey("foo", kBig + 503, kTypeBlobIndex),
80
81
  InternalKey("zoo", kBig + 603, kTypeBlobIndex), kBig + 503,
81
82
  kBig + 603, true, Temperature::kUnknown, 1001,
82
83
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
83
- kUnknownFileChecksum, kUnknownFileChecksumFuncName,
84
- kNullUniqueId64x2);
84
+ 303 /* epoch_number */, kUnknownFileChecksum,
85
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
85
86
 
86
87
  edit.DeleteFile(4, 700);
87
88
 
@@ -121,12 +122,13 @@ TEST_F(VersionEditTest, ForwardCompatibleNewFile4) {
121
122
  InternalKey("zoo", kBig + 600, kTypeDeletion), kBig + 500,
122
123
  kBig + 600, true, Temperature::kUnknown, kInvalidBlobFileNumber,
123
124
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
124
- kUnknownFileChecksum, kUnknownFileChecksumFuncName,
125
- kNullUniqueId64x2);
125
+ 300 /* epoch_number */, kUnknownFileChecksum,
126
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
126
127
  edit.AddFile(4, 301, 3, 100, InternalKey("foo", kBig + 501, kTypeValue),
127
128
  InternalKey("zoo", kBig + 601, kTypeDeletion), kBig + 501,
128
129
  kBig + 601, false, Temperature::kUnknown, kInvalidBlobFileNumber,
129
- 686, 868, "234", "crc32c", kNullUniqueId64x2);
130
+ 686, 868, 301 /* epoch_number */, "234", "crc32c",
131
+ kNullUniqueId64x2, 0);
130
132
  edit.DeleteFile(4, 700);
131
133
 
132
134
  edit.SetComparatorName("foo");
@@ -174,8 +176,8 @@ TEST_F(VersionEditTest, NewFile4NotSupportedField) {
174
176
  InternalKey("zoo", kBig + 600, kTypeDeletion), kBig + 500,
175
177
  kBig + 600, true, Temperature::kUnknown, kInvalidBlobFileNumber,
176
178
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
177
- kUnknownFileChecksum, kUnknownFileChecksumFuncName,
178
- kNullUniqueId64x2);
179
+ 300 /* epoch_number */, kUnknownFileChecksum,
180
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
179
181
 
180
182
  edit.SetComparatorName("foo");
181
183
  edit.SetLogNumber(kBig + 100);
@@ -205,8 +207,8 @@ TEST_F(VersionEditTest, EncodeEmptyFile) {
205
207
  edit.AddFile(0, 0, 0, 0, InternalKey(), InternalKey(), 0, 0, false,
206
208
  Temperature::kUnknown, kInvalidBlobFileNumber,
207
209
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
208
- kUnknownFileChecksum, kUnknownFileChecksumFuncName,
209
- kNullUniqueId64x2);
210
+ 1 /*epoch_number*/, kUnknownFileChecksum,
211
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
210
212
  std::string buffer;
211
213
  ASSERT_TRUE(!edit.EncodeTo(&buffer));
212
214
  }