@nxtedition/rocksdb 8.2.8 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -1
  2. package/deps/rocksdb/rocksdb/Makefile +22 -19
  3. package/deps/rocksdb/rocksdb/TARGETS +8 -0
  4. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +157 -61
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +43 -92
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +632 -455
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +244 -149
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +41 -13
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +11 -1
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +216 -17
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  12. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +279 -199
  13. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +2 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +159 -8
  15. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +28 -2
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +1 -1
  17. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -0
  18. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  19. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +3 -1
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +18 -21
  25. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  26. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  27. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  28. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  29. package/deps/rocksdb/rocksdb/db/builder.cc +32 -7
  30. package/deps/rocksdb/rocksdb/db/c.cc +169 -6
  31. package/deps/rocksdb/rocksdb/db/c_test.c +104 -6
  32. package/deps/rocksdb/rocksdb/db/column_family.cc +98 -47
  33. package/deps/rocksdb/rocksdb/db/column_family.h +25 -2
  34. package/deps/rocksdb/rocksdb/db/column_family_test.cc +213 -2
  35. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +93 -23
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +33 -9
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -6
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +107 -43
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -4
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +25 -17
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +13 -4
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +29 -4
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +24 -31
  50. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +19 -19
  52. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +2 -1
  53. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  54. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  55. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  56. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  57. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +17 -3
  58. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +5 -0
  59. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +15 -15
  60. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +666 -44
  61. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  62. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +274 -1
  63. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -19
  64. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +250 -116
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +51 -23
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +354 -96
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -3
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -0
  71. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -21
  72. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +26 -13
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -5
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +61 -21
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -87
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +7 -1
  77. package/deps/rocksdb/rocksdb/db/db_iter.cc +2 -2
  78. package/deps/rocksdb/rocksdb/db/db_iter.h +1 -0
  79. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  80. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +6 -6
  81. package/deps/rocksdb/rocksdb/db/db_options_test.cc +39 -29
  82. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  83. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +106 -0
  84. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +12 -3
  85. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  86. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  87. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +279 -166
  88. package/deps/rocksdb/rocksdb/db/db_test.cc +48 -21
  89. package/deps/rocksdb/rocksdb/db/db_test2.cc +81 -12
  90. package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
  91. package/deps/rocksdb/rocksdb/db/db_test_util.h +40 -0
  92. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +13 -1
  93. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +233 -0
  94. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +143 -0
  95. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  96. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  97. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  98. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  99. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  100. package/deps/rocksdb/rocksdb/db/error_handler.cc +16 -0
  101. package/deps/rocksdb/rocksdb/db/error_handler.h +6 -3
  102. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  103. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  104. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  105. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  106. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  107. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -4
  108. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  110. package/deps/rocksdb/rocksdb/db/flush_job.cc +101 -11
  111. package/deps/rocksdb/rocksdb/db/flush_job.h +24 -1
  112. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +88 -11
  113. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  114. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  115. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  116. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  117. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  118. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  119. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  120. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  121. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  122. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  123. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  124. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +4 -3
  125. package/deps/rocksdb/rocksdb/db/memtable.cc +52 -13
  126. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  127. package/deps/rocksdb/rocksdb/db/memtable_list.cc +44 -10
  128. package/deps/rocksdb/rocksdb/db/memtable_list.h +32 -1
  129. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +90 -4
  130. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -2
  131. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
  132. package/deps/rocksdb/rocksdb/db/repair.cc +21 -4
  133. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  134. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -4
  135. package/deps/rocksdb/rocksdb/db/table_cache.cc +44 -35
  136. package/deps/rocksdb/rocksdb/db/table_cache.h +6 -6
  137. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  138. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  139. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  140. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  141. package/deps/rocksdb/rocksdb/db/version_edit.h +48 -6
  142. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  143. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  144. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  145. package/deps/rocksdb/rocksdb/db/version_set.cc +136 -41
  146. package/deps/rocksdb/rocksdb/db/version_set.h +28 -7
  147. package/deps/rocksdb/rocksdb/db/version_set_test.cc +25 -15
  148. package/deps/rocksdb/rocksdb/db/write_batch.cc +11 -0
  149. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  150. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  151. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +22 -3
  152. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +2 -0
  153. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  154. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +32 -3
  155. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +7 -0
  156. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -120
  157. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +9 -4
  158. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +13 -6
  159. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  160. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +15 -27
  161. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +264 -69
  162. package/deps/rocksdb/rocksdb/env/env.cc +1 -2
  163. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  164. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  165. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  166. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  167. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  168. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +78 -0
  169. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  170. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  171. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  172. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +52 -43
  173. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +34 -18
  174. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  175. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  176. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +724 -79
  177. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +64 -33
  178. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  179. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  180. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +2 -1
  182. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +153 -88
  183. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +70 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +50 -11
  185. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  186. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +16 -2
  187. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  188. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +55 -8
  189. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +32 -4
  190. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  191. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +90 -13
  192. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
  193. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +85 -17
  194. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +13 -1
  195. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  196. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  197. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +21 -2
  198. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  199. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +6 -0
  200. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +5 -0
  201. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  202. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  203. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +33 -2
  204. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  205. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  206. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -0
  207. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  208. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -1
  209. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  210. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +16 -1
  211. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +10 -0
  212. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  213. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  214. package/deps/rocksdb/rocksdb/options/customizable_test.cc +2 -1
  215. package/deps/rocksdb/rocksdb/options/db_options.cc +7 -0
  216. package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
  217. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  218. package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
  219. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +11 -3
  220. package/deps/rocksdb/rocksdb/options/options_test.cc +8 -0
  221. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  222. package/deps/rocksdb/rocksdb/port/stack_trace.cc +27 -12
  223. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  224. package/deps/rocksdb/rocksdb/src.mk +3 -0
  225. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  226. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  227. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  228. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +115 -42
  229. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +6 -5
  230. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +60 -2
  231. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +2 -0
  232. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +62 -44
  233. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +36 -14
  234. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -15
  235. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  236. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  237. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  238. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -21
  239. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +11 -4
  240. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +195 -55
  241. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  242. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  243. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  244. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  245. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  246. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +27 -12
  247. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  248. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  249. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -2
  250. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +9 -6
  251. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  252. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  253. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +11 -11
  254. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +3 -0
  255. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  256. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  257. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  258. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  259. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  260. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  261. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -2
  262. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  263. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  264. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  265. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  266. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  267. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  268. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  269. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +12 -3
  270. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +26 -1
  271. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  272. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  273. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  274. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  275. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  276. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  277. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  278. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +65 -26
  279. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +8 -5
  280. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
  281. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  282. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +0 -1
  283. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  284. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  285. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  286. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  287. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  288. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  289. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  290. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  291. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  292. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  293. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  294. package/deps/rocksdb/rocksdb/util/cast_util.h +14 -0
  295. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  296. package/deps/rocksdb/rocksdb/util/comparator.cc +29 -7
  297. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  298. package/deps/rocksdb/rocksdb/util/compression.h +110 -32
  299. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  300. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  301. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  302. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  303. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  304. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  305. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  306. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  307. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  308. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  309. package/deps/rocksdb/rocksdb/util/thread_operation.h +8 -1
  310. package/deps/rocksdb/rocksdb/util/udt_util.cc +343 -0
  311. package/deps/rocksdb/rocksdb/util/udt_util.h +173 -1
  312. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +447 -0
  313. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  314. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  315. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  316. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +69 -25
  317. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  318. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  319. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  320. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  321. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  322. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  323. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +1 -1
  324. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  325. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -1
  326. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +3 -3
  327. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  328. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  329. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  330. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  331. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  332. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  333. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  334. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +231 -33
  335. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +0 -1
  336. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  337. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  338. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +40 -23
  339. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +13 -12
  340. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +7 -0
  341. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  342. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +41 -11
  343. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  344. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +71 -24
  345. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  346. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  347. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +39 -11
  348. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  349. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +14 -8
  350. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  351. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  352. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  353. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  354. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +2 -1
  355. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
  356. package/deps/rocksdb/rocksdb.gyp +2 -0
  357. package/package.json +1 -1
  358. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  359. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -39,6 +39,7 @@
39
39
  #include "db/version_builder.h"
40
40
  #include "db/version_edit.h"
41
41
  #include "db/version_edit_handler.h"
42
+ #include "file/file_util.h"
42
43
  #include "table/compaction_merging_iterator.h"
43
44
 
44
45
  #if USE_COROUTINES
@@ -1947,8 +1948,14 @@ double VersionStorageInfo::GetEstimatedCompressionRatioAtLevel(
1947
1948
  uint64_t sum_file_size_bytes = 0;
1948
1949
  uint64_t sum_data_size_bytes = 0;
1949
1950
  for (auto* file_meta : files_[level]) {
1950
- sum_file_size_bytes += file_meta->fd.GetFileSize();
1951
- sum_data_size_bytes += file_meta->raw_key_size + file_meta->raw_value_size;
1951
+ auto raw_size = file_meta->raw_key_size + file_meta->raw_value_size;
1952
+ // Check if the table property is properly initialized. It might not be
1953
+ // because in `UpdateAccumulatedStats` we limit the maximum number of
1954
+ // properties to read once.
1955
+ if (raw_size > 0) {
1956
+ sum_file_size_bytes += file_meta->fd.GetFileSize();
1957
+ sum_data_size_bytes += raw_size;
1958
+ }
1952
1959
  }
1953
1960
  if (sum_file_size_bytes == 0) {
1954
1961
  return -1.0;
@@ -2107,7 +2114,8 @@ VersionStorageInfo::VersionStorageInfo(
2107
2114
  const Comparator* user_comparator, int levels,
2108
2115
  CompactionStyle compaction_style, VersionStorageInfo* ref_vstorage,
2109
2116
  bool _force_consistency_checks,
2110
- EpochNumberRequirement epoch_number_requirement)
2117
+ EpochNumberRequirement epoch_number_requirement, SystemClock* clock,
2118
+ uint32_t bottommost_file_compaction_delay)
2111
2119
  : internal_comparator_(internal_comparator),
2112
2120
  user_comparator_(user_comparator),
2113
2121
  // cfd is nullptr if Version is dummy
@@ -2135,6 +2143,8 @@ VersionStorageInfo::VersionStorageInfo(
2135
2143
  current_num_deletions_(0),
2136
2144
  current_num_samples_(0),
2137
2145
  estimated_compaction_needed_bytes_(0),
2146
+ clock_(clock),
2147
+ bottommost_file_compaction_delay_(bottommost_file_compaction_delay),
2138
2148
  finalized_(false),
2139
2149
  force_consistency_checks_(_force_consistency_checks),
2140
2150
  epoch_number_requirement_(epoch_number_requirement) {
@@ -2179,7 +2189,11 @@ Version::Version(ColumnFamilyData* column_family_data, VersionSet* vset,
2179
2189
  ? nullptr
2180
2190
  : cfd_->current()->storage_info(),
2181
2191
  cfd_ == nullptr ? false : cfd_->ioptions()->force_consistency_checks,
2182
- epoch_number_requirement),
2192
+ epoch_number_requirement,
2193
+ cfd_ == nullptr ? nullptr : cfd_->ioptions()->clock,
2194
+ cfd_ == nullptr
2195
+ ? 0
2196
+ : mutable_cf_options.bottommost_file_compaction_delay),
2183
2197
  vset_(vset),
2184
2198
  next_(this),
2185
2199
  prev_(this),
@@ -2190,7 +2204,12 @@ Version::Version(ColumnFamilyData* column_family_data, VersionSet* vset,
2190
2204
  MaxFileSizeForL0MetaPin(mutable_cf_options_)),
2191
2205
  version_number_(version_number),
2192
2206
  io_tracer_(io_tracer),
2193
- use_async_io_(env_->GetFileSystem()->use_async_io()) {}
2207
+ use_async_io_(false) {
2208
+ if (CheckFSFeatureSupport(env_->GetFileSystem().get(),
2209
+ FSSupportedOps::kAsyncIO)) {
2210
+ use_async_io_ = true;
2211
+ }
2212
+ }
2194
2213
 
2195
2214
  Status Version::GetBlob(const ReadOptions& read_options, const Slice& user_key,
2196
2215
  const Slice& blob_index_slice,
@@ -3390,6 +3409,7 @@ void VersionStorageInfo::ComputeCompactionScore(
3390
3409
  // maintaining it to be over 1.0, we scale the original score by 10x
3391
3410
  // if it is larger than 1.0.
3392
3411
  const double kScoreScale = 10.0;
3412
+ int max_output_level = MaxOutputLevel(immutable_options.allow_ingest_behind);
3393
3413
  for (int level = 0; level <= MaxInputLevel(); level++) {
3394
3414
  double score;
3395
3415
  if (level == 0) {
@@ -3417,7 +3437,7 @@ void VersionStorageInfo::ComputeCompactionScore(
3417
3437
  // For universal compaction, we use level0 score to indicate
3418
3438
  // compaction score for the whole DB. Adding other levels as if
3419
3439
  // they are L0 files.
3420
- for (int i = 1; i < num_levels(); i++) {
3440
+ for (int i = 1; i <= max_output_level; i++) {
3421
3441
  // It's possible that a subset of the files in a level may be in a
3422
3442
  // compaction, due to delete triggered compaction or trivial move.
3423
3443
  // In that case, the below check may not catch a level being
@@ -3459,12 +3479,11 @@ void VersionStorageInfo::ComputeCompactionScore(
3459
3479
  // Level-based involves L0->L0 compactions that can lead to oversized
3460
3480
  // L0 files. Take into account size as well to avoid later giant
3461
3481
  // compactions to the base level.
3462
- // If score in L0 is always too high, L0->L1 will always be
3463
- // prioritized over L1->L2 compaction and L1 will accumulate to
3464
- // too large. But if L0 score isn't high enough, L0 will accumulate
3465
- // and data is not moved to L1 fast enough. With potential L0->L0
3466
- // compaction, number of L0 files aren't always an indication of
3467
- // L0 oversizing, and we also need to consider total size of L0.
3482
+ // If score in L0 is always too high, L0->LBase will always be
3483
+ // prioritized over LBase->LBase+1 compaction and LBase will
3484
+ // accumulate to too large. But if L0 score isn't high enough, L0 will
3485
+ // accumulate and data is not moved to LBase fast enough. The score
3486
+ // calculation below takes into account L0 size vs LBase size.
3468
3487
  if (immutable_options.level_compaction_dynamic_level_bytes) {
3469
3488
  if (total_size >= mutable_cf_options.max_bytes_for_level_base) {
3470
3489
  // When calculating estimated_compaction_needed_bytes, we assume
@@ -3476,10 +3495,13 @@ void VersionStorageInfo::ComputeCompactionScore(
3476
3495
  score = std::max(score, 1.01);
3477
3496
  }
3478
3497
  if (total_size > level_max_bytes_[base_level_]) {
3479
- // In this case, we compare L0 size with actual L1 size and make
3480
- // sure score is more than 1.0 (10.0 after scaled) if L0 is larger
3481
- // than L1. Since in this case L1 score is lower than 10.0, L0->L1
3482
- // is prioritized over L1->L2.
3498
+ // In this case, we compare L0 size with actual LBase size and
3499
+ // make sure score is more than 1.0 (10.0 after scaled) if L0 is
3500
+ // larger than LBase. Since LBase score = LBase size /
3501
+ // (target size + total_downcompact_bytes) where
3502
+ // total_downcompact_bytes = total_size > LBase size,
3503
+ // LBase score is lower than 10.0. So L0->LBase is prioritized
3504
+ // over LBase -> LBase+1.
3483
3505
  uint64_t base_level_size = 0;
3484
3506
  for (auto f : files_[base_level_]) {
3485
3507
  base_level_size += f->compensated_file_size;
@@ -3561,16 +3583,18 @@ void VersionStorageInfo::ComputeCompactionScore(
3561
3583
  }
3562
3584
  }
3563
3585
  }
3564
- ComputeFilesMarkedForCompaction();
3586
+ ComputeFilesMarkedForCompaction(max_output_level);
3565
3587
  if (!immutable_options.allow_ingest_behind) {
3566
3588
  ComputeBottommostFilesMarkedForCompaction();
3567
3589
  }
3568
- if (mutable_cf_options.ttl > 0) {
3590
+ if (mutable_cf_options.ttl > 0 &&
3591
+ compaction_style_ == kCompactionStyleLevel) {
3569
3592
  ComputeExpiredTtlFiles(immutable_options, mutable_cf_options.ttl);
3570
3593
  }
3571
3594
  if (mutable_cf_options.periodic_compaction_seconds > 0) {
3572
3595
  ComputeFilesMarkedForPeriodicCompaction(
3573
- immutable_options, mutable_cf_options.periodic_compaction_seconds);
3596
+ immutable_options, mutable_cf_options.periodic_compaction_seconds,
3597
+ max_output_level);
3574
3598
  }
3575
3599
 
3576
3600
  if (mutable_cf_options.enable_blob_garbage_collection &&
@@ -3584,14 +3608,14 @@ void VersionStorageInfo::ComputeCompactionScore(
3584
3608
  EstimateCompactionBytesNeeded(mutable_cf_options);
3585
3609
  }
3586
3610
 
3587
- void VersionStorageInfo::ComputeFilesMarkedForCompaction() {
3611
+ void VersionStorageInfo::ComputeFilesMarkedForCompaction(int last_level) {
3588
3612
  files_marked_for_compaction_.clear();
3589
3613
  int last_qualify_level = 0;
3590
3614
 
3591
3615
  // Do not include files from the last level with data
3592
3616
  // If table properties collector suggests a file on the last level,
3593
3617
  // we should not move it to a new level.
3594
- for (int level = num_levels() - 1; level >= 1; level--) {
3618
+ for (int level = last_level; level >= 1; level--) {
3595
3619
  if (!files_[level].empty()) {
3596
3620
  last_qualify_level = level - 1;
3597
3621
  break;
@@ -3635,7 +3659,7 @@ void VersionStorageInfo::ComputeExpiredTtlFiles(
3635
3659
 
3636
3660
  void VersionStorageInfo::ComputeFilesMarkedForPeriodicCompaction(
3637
3661
  const ImmutableOptions& ioptions,
3638
- const uint64_t periodic_compaction_seconds) {
3662
+ const uint64_t periodic_compaction_seconds, int last_level) {
3639
3663
  assert(periodic_compaction_seconds > 0);
3640
3664
 
3641
3665
  files_marked_for_periodic_compaction_.clear();
@@ -3656,7 +3680,7 @@ void VersionStorageInfo::ComputeFilesMarkedForPeriodicCompaction(
3656
3680
  const uint64_t allowed_time_limit =
3657
3681
  current_time - periodic_compaction_seconds;
3658
3682
 
3659
- for (int level = 0; level < num_levels(); level++) {
3683
+ for (int level = 0; level <= last_level; level++) {
3660
3684
  for (auto f : files_[level]) {
3661
3685
  if (!f->being_compacted) {
3662
3686
  // Compute a file's modification time in the following order:
@@ -4161,14 +4185,48 @@ void VersionStorageInfo::UpdateOldestSnapshot(SequenceNumber seqnum) {
4161
4185
  void VersionStorageInfo::ComputeBottommostFilesMarkedForCompaction() {
4162
4186
  bottommost_files_marked_for_compaction_.clear();
4163
4187
  bottommost_files_mark_threshold_ = kMaxSequenceNumber;
4188
+ // If a file's creation time is larger than creation_time_ub,
4189
+ // it is too new to be marked for compaction.
4190
+ int64_t creation_time_ub = 0;
4191
+ bool needs_delay = bottommost_file_compaction_delay_ > 0;
4192
+ if (needs_delay) {
4193
+ int64_t current_time = 0;
4194
+ clock_->GetCurrentTime(&current_time).PermitUncheckedError();
4195
+ // Note that if GetCurrentTime() fails, current_time will be 0.
4196
+ // We will treat it as is and treat all files as too new.
4197
+ // The subtraction will not underflow since
4198
+ // bottommost_file_compaction_delay_ is of type uint32_t.
4199
+ creation_time_ub =
4200
+ current_time - static_cast<int64_t>(bottommost_file_compaction_delay_);
4201
+ }
4202
+
4164
4203
  for (auto& level_and_file : bottommost_files_) {
4165
4204
  if (!level_and_file.second->being_compacted &&
4166
4205
  level_and_file.second->fd.largest_seqno != 0) {
4167
4206
  // largest_seqno might be nonzero due to containing the final key in an
4168
- // earlier compaction, whose seqnum we didn't zero out. Multiple deletions
4169
- // ensures the file really contains deleted or overwritten keys.
4207
+ // earlier compaction, whose seqnum we didn't zero out.
4170
4208
  if (level_and_file.second->fd.largest_seqno < oldest_snapshot_seqnum_) {
4171
- bottommost_files_marked_for_compaction_.push_back(level_and_file);
4209
+ if (!needs_delay) {
4210
+ bottommost_files_marked_for_compaction_.push_back(level_and_file);
4211
+ } else if (creation_time_ub > 0) {
4212
+ int64_t creation_time = static_cast<int64_t>(
4213
+ level_and_file.second->TryGetFileCreationTime());
4214
+ if (creation_time == kUnknownFileCreationTime ||
4215
+ creation_time <= creation_time_ub) {
4216
+ bottommost_files_marked_for_compaction_.push_back(level_and_file);
4217
+ } else {
4218
+ // Just ignore this file for both
4219
+ // bottommost_files_marked_for_compaction_ and
4220
+ // bottommost_files_mark_threshold_. The next time
4221
+ // this method is called, it will try this file again. The method
4222
+ // is called after a new Version creation (compaction, flush, etc.),
4223
+ // after a compaction is picked, and after a snapshot newer than
4224
+ // bottommost_files_mark_threshold_ is released.
4225
+ }
4226
+ } else {
4227
+ // creation_time_ub <= 0, all files are too new to be marked for
4228
+ // compaction.
4229
+ }
4172
4230
  } else {
4173
4231
  bottommost_files_mark_threshold_ =
4174
4232
  std::min(bottommost_files_mark_threshold_,
@@ -4700,7 +4758,7 @@ void VersionStorageInfo::CalculateBaseBytes(const ImmutableOptions& ioptions,
4700
4758
  assert(base_level_ == 1);
4701
4759
  base_level_size = base_bytes_max;
4702
4760
  } else {
4703
- base_level_size = cur_level_size;
4761
+ base_level_size = std::max(static_cast<uint64_t>(1), cur_level_size);
4704
4762
  }
4705
4763
  }
4706
4764
 
@@ -5107,6 +5165,12 @@ Status VersionSet::ProcessManifestWrites(
5107
5165
  assert(manifest_writers_.front() == &first_writer);
5108
5166
 
5109
5167
  autovector<VersionEdit*> batch_edits;
5168
+ // This vector keeps track of the corresponding user-defined timestamp size
5169
+ // for `batch_edits` side by side, which is only needed for encoding a
5170
+ // `VersionEdit` that adds new SST files.
5171
+ // Note that anytime `batch_edits` has new element added or get existing
5172
+ // element removed, `batch_edits_ts_sz` should be updated too.
5173
+ autovector<std::optional<size_t>> batch_edits_ts_sz;
5110
5174
  autovector<Version*> versions;
5111
5175
  autovector<const MutableCFOptions*> mutable_cf_options_ptrs;
5112
5176
  std::vector<std::unique_ptr<BaseReferencedVersionBuilder>> builder_guards;
@@ -5122,6 +5186,7 @@ Status VersionSet::ProcessManifestWrites(
5122
5186
  // No group commits for column family add or drop
5123
5187
  LogAndApplyCFHelper(first_writer.edit_list.front(), &max_last_sequence);
5124
5188
  batch_edits.push_back(first_writer.edit_list.front());
5189
+ batch_edits_ts_sz.push_back(std::nullopt);
5125
5190
  } else {
5126
5191
  auto it = manifest_writers_.cbegin();
5127
5192
  size_t group_start = std::numeric_limits<size_t>::max();
@@ -5198,6 +5263,9 @@ Status VersionSet::ProcessManifestWrites(
5198
5263
  TEST_SYNC_POINT_CALLBACK("VersionSet::ProcessManifestWrites:NewVersion",
5199
5264
  version);
5200
5265
  }
5266
+ const Comparator* ucmp = last_writer->cfd->user_comparator();
5267
+ assert(ucmp);
5268
+ std::optional<size_t> edit_ts_sz = ucmp->timestamp_size();
5201
5269
  for (const auto& e : last_writer->edit_list) {
5202
5270
  if (e->is_in_atomic_group_) {
5203
5271
  if (batch_edits.empty() || !batch_edits.back()->is_in_atomic_group_ ||
@@ -5218,6 +5286,7 @@ Status VersionSet::ProcessManifestWrites(
5218
5286
  return s;
5219
5287
  }
5220
5288
  batch_edits.push_back(e);
5289
+ batch_edits_ts_sz.push_back(edit_ts_sz);
5221
5290
  }
5222
5291
  }
5223
5292
  for (int i = 0; i < static_cast<int>(versions.size()); ++i) {
@@ -5383,9 +5452,11 @@ Status VersionSet::ProcessManifestWrites(
5383
5452
  #ifndef NDEBUG
5384
5453
  size_t idx = 0;
5385
5454
  #endif
5386
- for (auto& e : batch_edits) {
5455
+ assert(batch_edits.size() == batch_edits_ts_sz.size());
5456
+ for (size_t bidx = 0; bidx < batch_edits.size(); bidx++) {
5457
+ auto& e = batch_edits[bidx];
5387
5458
  std::string record;
5388
- if (!e->EncodeTo(&record)) {
5459
+ if (!e->EncodeTo(&record, batch_edits_ts_sz[bidx])) {
5389
5460
  s = Status::Corruption("Unable to encode VersionEdit:" +
5390
5461
  e->DebugString(true));
5391
5462
  break;
@@ -6278,8 +6349,9 @@ Status VersionSet::GetLiveFilesChecksumInfo(FileChecksumList* checksum_list) {
6278
6349
  return s;
6279
6350
  }
6280
6351
 
6281
- Status VersionSet::DumpManifest(Options& options, std::string& dscname,
6282
- bool verbose, bool hex, bool json) {
6352
+ Status VersionSet::DumpManifest(
6353
+ Options& options, std::string& dscname, bool verbose, bool hex, bool json,
6354
+ const std::vector<ColumnFamilyDescriptor>& cf_descs) {
6283
6355
  assert(options.env);
6284
6356
  // TODO: plumb Env::IOActivity
6285
6357
  const ReadOptions read_options;
@@ -6305,13 +6377,22 @@ Status VersionSet::DumpManifest(Options& options, std::string& dscname,
6305
6377
  std::move(file), dscname, db_options_->log_readahead_size, io_tracer_);
6306
6378
  }
6307
6379
 
6308
- std::vector<ColumnFamilyDescriptor> cf_descs;
6380
+ std::map<std::string, const ColumnFamilyDescriptor*> cf_name_to_desc;
6381
+ for (const auto& cf_desc : cf_descs) {
6382
+ cf_name_to_desc[cf_desc.name] = &cf_desc;
6383
+ }
6384
+ std::vector<ColumnFamilyDescriptor> final_cf_descs;
6309
6385
  for (const auto& cf : column_families) {
6310
- cf_descs.emplace_back(cf, options);
6386
+ const auto iter = cf_name_to_desc.find(cf);
6387
+ if (iter != cf_name_to_desc.cend()) {
6388
+ final_cf_descs.push_back(*iter->second);
6389
+ } else {
6390
+ final_cf_descs.emplace_back(cf, options);
6391
+ }
6311
6392
  }
6312
6393
 
6313
- DumpManifestHandler handler(cf_descs, this, io_tracer_, read_options, verbose,
6314
- hex, json);
6394
+ DumpManifestHandler handler(final_cf_descs, this, io_tracer_, read_options,
6395
+ verbose, hex, json);
6315
6396
  {
6316
6397
  VersionSet::LogReporter reporter;
6317
6398
  reporter.status = &s;
@@ -6414,6 +6495,8 @@ Status VersionSet::WriteCurrentStateToManifest(
6414
6495
  }
6415
6496
  edit.SetComparatorName(
6416
6497
  cfd->internal_comparator().user_comparator()->Name());
6498
+ edit.SetPersistUserDefinedTimestamps(
6499
+ cfd->ioptions()->persist_user_defined_timestamps);
6417
6500
  std::string record;
6418
6501
  if (!edit.EncodeTo(&record)) {
6419
6502
  return Status::Corruption("Unable to Encode VersionEdit:" +
@@ -6449,7 +6532,8 @@ Status VersionSet::WriteCurrentStateToManifest(
6449
6532
  f->oldest_blob_file_number, f->oldest_ancester_time,
6450
6533
  f->file_creation_time, f->epoch_number, f->file_checksum,
6451
6534
  f->file_checksum_func_name, f->unique_id,
6452
- f->compensated_range_deletion_size, f->tail_size);
6535
+ f->compensated_range_deletion_size, f->tail_size,
6536
+ f->user_defined_timestamps_persisted);
6453
6537
  }
6454
6538
  }
6455
6539
 
@@ -6493,8 +6577,10 @@ Status VersionSet::WriteCurrentStateToManifest(
6493
6577
 
6494
6578
  edit.SetLastSequence(descriptor_last_sequence_);
6495
6579
 
6580
+ const Comparator* ucmp = cfd->user_comparator();
6581
+ assert(ucmp);
6496
6582
  std::string record;
6497
- if (!edit.EncodeTo(&record)) {
6583
+ if (!edit.EncodeTo(&record, ucmp->timestamp_size())) {
6498
6584
  return Status::Corruption("Unable to Encode VersionEdit:" +
6499
6585
  edit.DebugString(true));
6500
6586
  }
@@ -6846,7 +6932,7 @@ InternalIterator* VersionSet::MakeInputIterator(
6846
6932
  const FileMetaData& fmd = *flevel->files[i].file_metadata;
6847
6933
  if (start.has_value() &&
6848
6934
  cfd->user_comparator()->CompareWithoutTimestamp(
6849
- start.value(), fmd.largest.user_key()) > 0) {
6935
+ *start, fmd.largest.user_key()) > 0) {
6850
6936
  continue;
6851
6937
  }
6852
6938
  // We should be able to filter out the case where the end key
@@ -6854,7 +6940,7 @@ InternalIterator* VersionSet::MakeInputIterator(
6854
6940
  // We try to be extra safe here.
6855
6941
  if (end.has_value() &&
6856
6942
  cfd->user_comparator()->CompareWithoutTimestamp(
6857
- end.value(), fmd.smallest.user_key()) < 0) {
6943
+ *end, fmd.smallest.user_key()) < 0) {
6858
6944
  continue;
6859
6945
  }
6860
6946
  TruncatedRangeDelIterator* range_tombstone_iter = nullptr;
@@ -7003,6 +7089,16 @@ void VersionSet::GetObsoleteFiles(std::vector<ObsoleteFileInfo>* files,
7003
7089
  obsolete_manifests_.swap(*manifest_filenames);
7004
7090
  }
7005
7091
 
7092
+ uint64_t VersionSet::GetObsoleteSstFilesSize() const {
7093
+ uint64_t ret = 0;
7094
+ for (auto& f : obsolete_files_) {
7095
+ if (f.metadata != nullptr) {
7096
+ ret += f.metadata->fd.GetFileSize();
7097
+ }
7098
+ }
7099
+ return ret;
7100
+ }
7101
+
7006
7102
  ColumnFamilyData* VersionSet::CreateColumnFamily(
7007
7103
  const ColumnFamilyOptions& cf_options, const ReadOptions& read_options,
7008
7104
  const VersionEdit* edit) {
@@ -7126,8 +7222,7 @@ Status VersionSet::VerifyFileMetadata(const ReadOptions& read_options,
7126
7222
  status = table_cache->FindTable(
7127
7223
  read_options, file_opts, *icmp, meta_copy, &handle,
7128
7224
  cf_opts->block_protection_bytes_per_key, pe,
7129
- /*no_io=*/false, /*record_read_stats=*/true,
7130
- internal_stats->GetFileReadHist(level), false, level,
7225
+ /*no_io=*/false, internal_stats->GetFileReadHist(level), false, level,
7131
7226
  /*prefetch_index_and_filter_in_cache*/ false, max_sz_for_l0_meta_pin,
7132
7227
  meta_copy.temperature);
7133
7228
  if (handle) {
@@ -132,8 +132,9 @@ class VersionStorageInfo {
132
132
  CompactionStyle compaction_style,
133
133
  VersionStorageInfo* src_vstorage,
134
134
  bool _force_consistency_checks,
135
- EpochNumberRequirement epoch_number_requirement =
136
- EpochNumberRequirement::kMustPresent);
135
+ EpochNumberRequirement epoch_number_requirement,
136
+ SystemClock* clock,
137
+ uint32_t bottommost_file_compaction_delay);
137
138
  // No copying allowed
138
139
  VersionStorageInfo(const VersionStorageInfo&) = delete;
139
140
  void operator=(const VersionStorageInfo&) = delete;
@@ -204,7 +205,7 @@ class VersionStorageInfo {
204
205
 
205
206
  // This computes files_marked_for_compaction_ and is called by
206
207
  // ComputeCompactionScore()
207
- void ComputeFilesMarkedForCompaction();
208
+ void ComputeFilesMarkedForCompaction(int last_level);
208
209
 
209
210
  // This computes ttl_expired_files_ and is called by
210
211
  // ComputeCompactionScore()
@@ -215,7 +216,7 @@ class VersionStorageInfo {
215
216
  // ComputeCompactionScore()
216
217
  void ComputeFilesMarkedForPeriodicCompaction(
217
218
  const ImmutableOptions& ioptions,
218
- const uint64_t periodic_compaction_seconds);
219
+ const uint64_t periodic_compaction_seconds, int last_level);
219
220
 
220
221
  // This computes bottommost_files_marked_for_compaction_ and is called by
221
222
  // ComputeCompactionScore() or UpdateOldestSnapshot().
@@ -465,6 +466,7 @@ class VersionStorageInfo {
465
466
 
466
467
  // REQUIRES: ComputeCompactionScore has been called
467
468
  // REQUIRES: DB mutex held during access
469
+ // Used by Leveled Compaction only.
468
470
  const autovector<std::pair<int, FileMetaData*>>& ExpiredTtlFiles() const {
469
471
  assert(finalized_);
470
472
  return expired_ttl_files_;
@@ -472,6 +474,7 @@ class VersionStorageInfo {
472
474
 
473
475
  // REQUIRES: ComputeCompactionScore has been called
474
476
  // REQUIRES: DB mutex held during access
477
+ // Used by Leveled and Universal Compaction.
475
478
  const autovector<std::pair<int, FileMetaData*>>&
476
479
  FilesMarkedForPeriodicCompaction() const {
477
480
  assert(finalized_);
@@ -680,7 +683,7 @@ class VersionStorageInfo {
680
683
 
681
684
  // This vector contains list of files marked for compaction and also not
682
685
  // currently being compacted. It is protected by DB mutex. It is calculated in
683
- // ComputeCompactionScore()
686
+ // ComputeCompactionScore(). Used by Leveled and Universal Compaction.
684
687
  autovector<std::pair<int, FileMetaData*>> files_marked_for_compaction_;
685
688
 
686
689
  autovector<std::pair<int, FileMetaData*>> expired_ttl_files_;
@@ -746,6 +749,10 @@ class VersionStorageInfo {
746
749
  // target sizes.
747
750
  uint64_t estimated_compaction_needed_bytes_;
748
751
 
752
+ // Used for computing bottommost files marked for compaction.
753
+ SystemClock* clock_;
754
+ uint32_t bottommost_file_compaction_delay_;
755
+
749
756
  bool finalized_;
750
757
 
751
758
  // If set to true, we will run consistency checks even if RocksDB
@@ -1271,8 +1278,8 @@ class VersionSet {
1271
1278
 
1272
1279
  // printf contents (for debugging)
1273
1280
  Status DumpManifest(Options& options, std::string& manifestFileName,
1274
- bool verbose, bool hex = false, bool json = false);
1275
-
1281
+ bool verbose, bool hex = false, bool json = false,
1282
+ const std::vector<ColumnFamilyDescriptor>& cf_descs = {});
1276
1283
 
1277
1284
  const std::string& DbSessionId() const { return db_session_id_; }
1278
1285
 
@@ -1466,7 +1473,21 @@ class VersionSet {
1466
1473
  std::vector<std::string>* manifest_filenames,
1467
1474
  uint64_t min_pending_output);
1468
1475
 
1476
+ // REQUIRES: DB mutex held
1477
+ uint64_t GetObsoleteSstFilesSize() const;
1478
+
1469
1479
  ColumnFamilySet* GetColumnFamilySet() { return column_family_set_.get(); }
1480
+
1481
+ const UnorderedMap<uint32_t, size_t>& GetRunningColumnFamiliesTimestampSize()
1482
+ const {
1483
+ return column_family_set_->GetRunningColumnFamiliesTimestampSize();
1484
+ }
1485
+
1486
+ const UnorderedMap<uint32_t, size_t>&
1487
+ GetColumnFamiliesTimestampSizeForRecord() const {
1488
+ return column_family_set_->GetColumnFamiliesTimestampSizeForRecord();
1489
+ }
1490
+
1470
1491
  RefedColumnFamilySet GetRefedColumnFamilySet() {
1471
1492
  return RefedColumnFamilySet(GetColumnFamilySet());
1472
1493
  }
@@ -51,7 +51,8 @@ class GenerateLevelFilesBriefTest : public testing::Test {
51
51
  largest_seq, /* marked_for_compact */ false, Temperature::kUnknown,
52
52
  kInvalidBlobFileNumber, kUnknownOldestAncesterTime,
53
53
  kUnknownFileCreationTime, kUnknownEpochNumber, kUnknownFileChecksum,
54
- kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0, 0);
54
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0, 0,
55
+ /* user_defined_timestamps_persisted */ true);
55
56
  files_.push_back(f);
56
57
  }
57
58
 
@@ -129,7 +130,9 @@ class VersionStorageInfoTestBase : public testing::Test {
129
130
  mutable_cf_options_(options_),
130
131
  vstorage_(&icmp_, ucmp_, 6, kCompactionStyleLevel,
131
132
  /*src_vstorage=*/nullptr,
132
- /*_force_consistency_checks=*/false) {}
133
+ /*_force_consistency_checks=*/false,
134
+ EpochNumberRequirement::kMustPresent, ioptions_.clock,
135
+ mutable_cf_options_.bottommost_file_compaction_delay) {}
133
136
 
134
137
  ~VersionStorageInfoTestBase() override {
135
138
  for (int i = 0; i < vstorage_.num_levels(); ++i) {
@@ -163,7 +166,8 @@ class VersionStorageInfoTestBase : public testing::Test {
163
166
  Temperature::kUnknown, oldest_blob_file_number,
164
167
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
165
168
  kUnknownEpochNumber, kUnknownFileChecksum, kUnknownFileChecksumFuncName,
166
- kNullUniqueId64x2, compensated_range_deletion_size, 0);
169
+ kNullUniqueId64x2, compensated_range_deletion_size, 0,
170
+ /* user_defined_timestamps_persisted */ true);
167
171
  vstorage_.AddFile(level, f);
168
172
  }
169
173
 
@@ -1219,7 +1223,7 @@ class VersionSetTestBase {
1219
1223
  tmp_db_options.env = env_;
1220
1224
  std::unique_ptr<DBImpl> impl(new DBImpl(tmp_db_options, dbname_));
1221
1225
  std::string db_id;
1222
- impl->GetDbIdentityFromIdentityFile(&db_id);
1226
+ ASSERT_OK(impl->GetDbIdentityFromIdentityFile(&db_id));
1223
1227
  new_db.SetDBId(db_id);
1224
1228
  }
1225
1229
  new_db.SetLogNumber(0);
@@ -1275,7 +1279,7 @@ class VersionSetTestBase {
1275
1279
  void NewDB() {
1276
1280
  SequenceNumber last_seqno;
1277
1281
  std::unique_ptr<log::Writer> log_writer;
1278
- SetIdentityFile(env_, dbname_);
1282
+ ASSERT_OK(SetIdentityFile(env_, dbname_));
1279
1283
  PrepareManifest(&column_families_, &last_seqno, &log_writer);
1280
1284
  log_writer.reset();
1281
1285
  // Make "CURRENT" file point to the new manifest file.
@@ -1347,6 +1351,8 @@ class VersionSetTestBase {
1347
1351
  new_cf.SetColumnFamily(new_id);
1348
1352
  new_cf.SetLogNumber(0);
1349
1353
  new_cf.SetComparatorName(cf_options.comparator->Name());
1354
+ new_cf.SetPersistUserDefinedTimestamps(
1355
+ cf_options.persist_user_defined_timestamps);
1350
1356
  Status s;
1351
1357
  mutex_.Lock();
1352
1358
  s = versions_->LogAndApply(/*column_family_data=*/nullptr,
@@ -2858,11 +2864,12 @@ class VersionSetTestEmptyDb
2858
2864
  assert(nullptr != log_writer);
2859
2865
  VersionEdit new_db;
2860
2866
  if (db_options_.write_dbid_to_manifest) {
2867
+ ASSERT_OK(SetIdentityFile(env_, dbname_));
2861
2868
  DBOptions tmp_db_options;
2862
2869
  tmp_db_options.env = env_;
2863
2870
  std::unique_ptr<DBImpl> impl(new DBImpl(tmp_db_options, dbname_));
2864
2871
  std::string db_id;
2865
- impl->GetDbIdentityFromIdentityFile(&db_id);
2872
+ ASSERT_OK(impl->GetDbIdentityFromIdentityFile(&db_id));
2866
2873
  new_db.SetDBId(db_id);
2867
2874
  }
2868
2875
  const std::string manifest_path = DescriptorFileName(dbname_, 1);
@@ -3192,7 +3199,7 @@ class VersionSetTestMissingFiles : public VersionSetTestBase,
3192
3199
  tmp_db_options.env = env_;
3193
3200
  std::unique_ptr<DBImpl> impl(new DBImpl(tmp_db_options, dbname_));
3194
3201
  std::string db_id;
3195
- impl->GetDbIdentityFromIdentityFile(&db_id);
3202
+ ASSERT_OK(impl->GetDbIdentityFromIdentityFile(&db_id));
3196
3203
  new_db.SetDBId(db_id);
3197
3204
  }
3198
3205
  {
@@ -3292,11 +3299,11 @@ class VersionSetTestMissingFiles : public VersionSetTestBase,
3292
3299
  s = fs_->GetFileSize(fname, IOOptions(), &file_size, nullptr);
3293
3300
  ASSERT_OK(s);
3294
3301
  ASSERT_NE(0, file_size);
3295
- file_metas->emplace_back(file_num, /*file_path_id=*/0, file_size, ikey,
3296
- ikey, 0, 0, false, Temperature::kUnknown, 0, 0,
3297
- 0, info.epoch_number, kUnknownFileChecksum,
3298
- kUnknownFileChecksumFuncName, kNullUniqueId64x2,
3299
- 0, 0);
3302
+ file_metas->emplace_back(
3303
+ file_num, /*file_path_id=*/0, file_size, ikey, ikey, 0, 0, false,
3304
+ Temperature::kUnknown, 0, 0, 0, info.epoch_number,
3305
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2,
3306
+ 0, 0, /* user_defined_timestamps_persisted */ true);
3300
3307
  }
3301
3308
  }
3302
3309
 
@@ -3318,7 +3325,7 @@ class VersionSetTestMissingFiles : public VersionSetTestBase,
3318
3325
  ++last_seqno_;
3319
3326
  assert(log_writer_.get() != nullptr);
3320
3327
  std::string record;
3321
- ASSERT_TRUE(edit.EncodeTo(&record));
3328
+ ASSERT_TRUE(edit.EncodeTo(&record, 0 /* ts_sz */));
3322
3329
  Status s = log_writer_->AddRecord(record);
3323
3330
  ASSERT_OK(s);
3324
3331
  }
@@ -3353,7 +3360,8 @@ TEST_F(VersionSetTestMissingFiles, ManifestFarBehindSst) {
3353
3360
  file_num, /*file_path_id=*/0, /*file_size=*/12, smallest_ikey,
3354
3361
  largest_ikey, 0, 0, false, Temperature::kUnknown, 0, 0, 0,
3355
3362
  file_num /* epoch_number */, kUnknownFileChecksum,
3356
- kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0, 0);
3363
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0, 0,
3364
+ /* user_defined_timestamps_persisted */ true);
3357
3365
  added_files.emplace_back(0, meta);
3358
3366
  }
3359
3367
  WriteFileAdditionAndDeletionToManifest(
@@ -3414,7 +3422,8 @@ TEST_F(VersionSetTestMissingFiles, ManifestAheadofSst) {
3414
3422
  file_num, /*file_path_id=*/0, /*file_size=*/12, smallest_ikey,
3415
3423
  largest_ikey, 0, 0, false, Temperature::kUnknown, 0, 0, 0,
3416
3424
  file_num /* epoch_number */, kUnknownFileChecksum,
3417
- kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0, 0);
3425
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0, 0,
3426
+ /* user_defined_timestamps_persisted */ true);
3418
3427
  added_files.emplace_back(0, meta);
3419
3428
  }
3420
3429
  WriteFileAdditionAndDeletionToManifest(
@@ -3547,6 +3556,7 @@ INSTANTIATE_TEST_CASE_P(
3547
3556
 
3548
3557
  TEST_P(ChargeFileMetadataTestWithParam, Basic) {
3549
3558
  Options options;
3559
+ options.level_compaction_dynamic_level_bytes = false;
3550
3560
  BlockBasedTableOptions table_options;
3551
3561
  CacheEntryRoleOptions::Decision charge_file_metadata = GetParam();
3552
3562
  table_options.cache_usage_options.options_overrides.insert(
@@ -293,6 +293,12 @@ size_t WriteBatch::GetProtectionBytesPerKey() const {
293
293
  return 0;
294
294
  }
295
295
 
296
+ std::string WriteBatch::Release() {
297
+ std::string ret = std::move(rep_);
298
+ Clear();
299
+ return ret;
300
+ }
301
+
296
302
  bool WriteBatch::HasPut() const {
297
303
  return (ComputeContentFlags() & ContentFlags::HAS_PUT) != 0;
298
304
  }
@@ -740,6 +746,11 @@ size_t WriteBatchInternal::GetFirstOffset(WriteBatch* /*b*/) {
740
746
  return WriteBatchInternal::kHeader;
741
747
  }
742
748
 
749
+ void WriteBatchInternal::SetDefaultColumnFamilyTimestampSize(
750
+ WriteBatch* wb, size_t default_cf_ts_sz) {
751
+ wb->default_cf_ts_sz_ = default_cf_ts_sz;
752
+ }
753
+
743
754
  std::tuple<Status, uint32_t, size_t>
744
755
  WriteBatchInternal::GetColumnFamilyIdAndTimestampSize(
745
756
  WriteBatch* b, ColumnFamilyHandle* column_family) {
@@ -224,6 +224,9 @@ class WriteBatchInternal {
224
224
  static void SetAsLatestPersistentState(WriteBatch* b);
225
225
  static bool IsLatestPersistentState(const WriteBatch* b);
226
226
 
227
+ static void SetDefaultColumnFamilyTimestampSize(WriteBatch* wb,
228
+ size_t default_cf_ts_sz);
229
+
227
230
  static std::tuple<Status, uint32_t, size_t> GetColumnFamilyIdAndTimestampSize(
228
231
  WriteBatch* b, ColumnFamilyHandle* column_family);
229
232