@nxtedition/rocksdb 8.2.0 → 8.2.2

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 (321) hide show
  1. package/binding.cc +3 -3
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +16 -52
  3. package/deps/rocksdb/rocksdb/Makefile +10 -5
  4. package/deps/rocksdb/rocksdb/TARGETS +8 -345
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +92 -0
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +32 -32
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +12 -9
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +6 -43
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +3 -13
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +8 -5
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +21 -47
  12. package/deps/rocksdb/rocksdb/cache/lru_cache.h +3 -8
  13. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +1 -2
  15. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +44 -7
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +13 -14
  17. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +1 -1
  18. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -0
  19. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +2 -1
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +17 -8
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +40 -21
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +41 -42
  25. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +1 -1
  26. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +1 -1
  27. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +5 -4
  28. package/deps/rocksdb/rocksdb/db/blob/blob_source.h +2 -2
  29. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +5 -3
  30. package/deps/rocksdb/rocksdb/db/builder.cc +7 -6
  31. package/deps/rocksdb/rocksdb/db/builder.h +2 -2
  32. package/deps/rocksdb/rocksdb/db/c.cc +76 -5
  33. package/deps/rocksdb/rocksdb/db/c_test.c +141 -0
  34. package/deps/rocksdb/rocksdb/db/column_family.cc +32 -0
  35. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +3 -2
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +5 -0
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +8 -5
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +12 -10
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +21 -17
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -7
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +3 -1
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +1 -1
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +77 -50
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +4 -5
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +55 -8
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +142 -56
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +1 -2
  50. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +21 -20
  51. package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
  52. package/deps/rocksdb/rocksdb/db/corruption_test.cc +5 -4
  53. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +6 -3
  54. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +260 -220
  55. package/deps/rocksdb/rocksdb/db/db_clip_test.cc +142 -0
  56. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +1 -1
  57. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +333 -27
  58. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +5 -0
  59. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +7 -0
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +189 -27
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +23 -10
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +134 -90
  63. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -2
  64. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -3
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -1
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +124 -16
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +10 -0
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +7 -0
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +15 -0
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +11 -5
  71. package/deps/rocksdb/rocksdb/db/db_iter.cc +7 -8
  72. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +54 -3
  73. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +42 -0
  74. package/deps/rocksdb/rocksdb/db/db_options_test.cc +116 -1
  75. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -2
  76. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +3 -2
  77. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +9 -8
  78. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +142 -63
  79. package/deps/rocksdb/rocksdb/db/db_test.cc +28 -7
  80. package/deps/rocksdb/rocksdb/db/db_test2.cc +71 -131
  81. package/deps/rocksdb/rocksdb/db/db_test_util.cc +18 -0
  82. package/deps/rocksdb/rocksdb/db/db_test_util.h +6 -0
  83. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +10 -10
  84. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +25 -0
  85. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +88 -0
  86. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +67 -0
  87. package/deps/rocksdb/rocksdb/db/db_write_test.cc +5 -0
  88. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  89. package/deps/rocksdb/rocksdb/db/experimental.cc +4 -2
  90. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +86 -1
  91. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +15 -2
  92. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -2
  93. package/deps/rocksdb/rocksdb/db/flush_job.cc +21 -14
  94. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +14 -7
  95. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +31 -8
  96. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +21 -19
  97. package/deps/rocksdb/rocksdb/db/internal_stats.cc +42 -12
  98. package/deps/rocksdb/rocksdb/db/internal_stats.h +1 -0
  99. package/deps/rocksdb/rocksdb/db/kv_checksum.h +92 -6
  100. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -2
  101. package/deps/rocksdb/rocksdb/db/log_format.h +8 -4
  102. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -51
  103. package/deps/rocksdb/rocksdb/db/log_reader.h +16 -0
  104. package/deps/rocksdb/rocksdb/db/log_test.cc +125 -4
  105. package/deps/rocksdb/rocksdb/db/log_writer.cc +32 -2
  106. package/deps/rocksdb/rocksdb/db/log_writer.h +16 -0
  107. package/deps/rocksdb/rocksdb/db/memtable.cc +17 -46
  108. package/deps/rocksdb/rocksdb/db/memtable.h +1 -1
  109. package/deps/rocksdb/rocksdb/db/memtable_list.cc +8 -4
  110. package/deps/rocksdb/rocksdb/db/merge_helper.cc +1 -1
  111. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -1
  112. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +5 -4
  113. package/deps/rocksdb/rocksdb/db/repair.cc +38 -11
  114. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +3 -3
  115. package/deps/rocksdb/rocksdb/db/table_cache.cc +68 -51
  116. package/deps/rocksdb/rocksdb/db/table_cache.h +20 -10
  117. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -1
  118. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +6 -3
  119. package/deps/rocksdb/rocksdb/db/version_builder.cc +9 -5
  120. package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
  121. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +140 -120
  122. package/deps/rocksdb/rocksdb/db/version_edit.cc +14 -0
  123. package/deps/rocksdb/rocksdb/db/version_edit.h +12 -4
  124. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +21 -13
  125. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +26 -16
  126. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +9 -9
  127. package/deps/rocksdb/rocksdb/db/version_set.cc +292 -96
  128. package/deps/rocksdb/rocksdb/db/version_set.h +53 -28
  129. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -0
  130. package/deps/rocksdb/rocksdb/db/version_set_test.cc +62 -22
  131. package/deps/rocksdb/rocksdb/db/version_util.h +5 -4
  132. package/deps/rocksdb/rocksdb/db/write_batch.cc +3 -1
  133. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  134. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +119 -27
  135. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +123 -0
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +4 -0
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +7 -2
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +34 -0
  139. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +13 -0
  140. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +43 -33
  141. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +29 -17
  142. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +5 -0
  143. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -1
  144. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +85 -50
  145. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +96 -54
  146. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.cc +122 -0
  147. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +206 -0
  148. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +9 -1
  149. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +9 -3
  150. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +322 -92
  151. package/deps/rocksdb/rocksdb/env/env_posix.cc +12 -8
  152. package/deps/rocksdb/rocksdb/env/env_test.cc +31 -0
  153. package/deps/rocksdb/rocksdb/env/mock_env.cc +1 -1
  154. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +14 -0
  155. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +1 -1
  156. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +5 -1
  157. package/deps/rocksdb/rocksdb/file/file_util.cc +3 -3
  158. package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
  159. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +89 -0
  160. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +22 -7
  161. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -2
  162. package/deps/rocksdb/rocksdb/file/readahead_raf.cc +1 -1
  163. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +1 -1
  164. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +1 -1
  165. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +3 -0
  166. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +154 -74
  167. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +27 -7
  168. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +107 -28
  169. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +19 -0
  170. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +8 -0
  171. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
  172. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +7 -1
  173. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +137 -152
  174. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +61 -26
  175. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +30 -26
  176. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +33 -16
  177. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +87 -8
  178. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +1 -1
  179. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +5 -0
  180. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +1 -0
  182. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -0
  183. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -1
  184. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  185. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +9 -2
  186. package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -0
  187. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +78 -42
  188. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +14 -9
  189. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
  190. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
  191. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +4 -9
  192. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +19 -11
  193. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  194. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +211 -555
  195. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +1 -1
  196. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +36 -2
  197. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +17 -7
  198. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +10 -7
  199. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +19 -18
  200. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +10 -2
  201. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
  202. package/deps/rocksdb/rocksdb/options/cf_options.cc +35 -2
  203. package/deps/rocksdb/rocksdb/options/cf_options.h +5 -0
  204. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1 -1
  205. package/deps/rocksdb/rocksdb/options/options.cc +12 -53
  206. package/deps/rocksdb/rocksdb/options/options_helper.cc +4 -0
  207. package/deps/rocksdb/rocksdb/options/options_parser.cc +11 -0
  208. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +32 -4
  209. package/deps/rocksdb/rocksdb/options/options_test.cc +89 -5
  210. package/deps/rocksdb/rocksdb/port/lang.h +27 -0
  211. package/deps/rocksdb/rocksdb/port/stack_trace.cc +67 -24
  212. package/deps/rocksdb/rocksdb/src.mk +2 -0
  213. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -3
  214. package/deps/rocksdb/rocksdb/table/block_based/block.cc +195 -35
  215. package/deps/rocksdb/rocksdb/table/block_based/block.h +197 -24
  216. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +71 -51
  217. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +7 -1
  218. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +4 -6
  219. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +3 -0
  220. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +43 -2
  221. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +36 -6
  222. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +266 -166
  223. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +44 -14
  224. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +1 -1
  225. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +63 -56
  226. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +8 -2
  227. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +4 -2
  228. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +10 -0
  229. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +14 -2
  230. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +918 -2
  231. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -2
  232. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +10 -9
  233. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -8
  234. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +2 -2
  235. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +1 -1
  236. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +18 -23
  237. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +8 -8
  238. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +16 -32
  239. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +7 -8
  240. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +4 -5
  241. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +3 -3
  242. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +46 -53
  243. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +12 -12
  244. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +7 -9
  245. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +26 -23
  246. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +2 -1
  247. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +3 -0
  248. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -2
  249. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +3 -2
  250. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +7 -1
  251. package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
  252. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +2 -1
  253. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +3 -2
  254. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +5 -2
  255. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +4 -2
  256. package/deps/rocksdb/rocksdb/table/format.cc +4 -4
  257. package/deps/rocksdb/rocksdb/table/format.h +1 -1
  258. package/deps/rocksdb/rocksdb/table/get_context.cc +1 -1
  259. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +33 -22
  260. package/deps/rocksdb/rocksdb/table/meta_blocks.h +4 -0
  261. package/deps/rocksdb/rocksdb/table/mock_table.cc +4 -2
  262. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +1 -1
  263. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +1 -1
  264. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +18 -10
  265. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -3
  266. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +10 -7
  267. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +4 -2
  268. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +11 -0
  269. package/deps/rocksdb/rocksdb/table/table_builder.h +14 -5
  270. package/deps/rocksdb/rocksdb/table/table_properties.cc +2 -0
  271. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -3
  272. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +1 -1
  273. package/deps/rocksdb/rocksdb/table/table_test.cc +291 -34
  274. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +3 -1
  275. package/deps/rocksdb/rocksdb/test_util/testharness.h +5 -0
  276. package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -2
  277. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +33 -17
  278. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +3 -1
  279. package/deps/rocksdb/rocksdb/util/bloom_impl.h +2 -2
  280. package/deps/rocksdb/rocksdb/util/compression.h +1 -1
  281. package/deps/rocksdb/rocksdb/util/crc32c.cc +24 -83
  282. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +7 -9
  283. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +4 -1
  284. package/deps/rocksdb/rocksdb/util/filter_bench.cc +1 -1
  285. package/deps/rocksdb/rocksdb/util/gflags_compat.h +9 -10
  286. package/deps/rocksdb/rocksdb/util/math.h +12 -7
  287. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +16 -18
  288. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +46 -2
  289. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +6 -6
  290. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +12 -7
  291. package/deps/rocksdb/rocksdb/util/stop_watch.h +31 -13
  292. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +2 -0
  293. package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
  294. package/deps/rocksdb/rocksdb/util/udt_util.h +77 -0
  295. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +2 -2
  296. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -1
  297. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +1 -1
  298. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +1 -1
  299. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +1 -1
  300. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -1
  301. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +11 -1
  302. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +34 -1
  303. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +15 -0
  304. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +1 -1
  305. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +5 -1
  306. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +29 -1
  307. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +0 -1
  308. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +0 -1
  309. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +6 -1
  310. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +10 -0
  311. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +6 -1
  312. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +5 -0
  313. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +5 -0
  314. package/package.json +1 -1
  315. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  316. package/prebuilds/linux-x64/node.napi.node +0 -0
  317. /package/deps/rocksdb/rocksdb/memory/{memory_allocator.h → memory_allocator_impl.h} +0 -0
  318. /package/deps/rocksdb/rocksdb/monitoring/{statistics.h → statistics_impl.h} +0 -0
  319. /package/deps/rocksdb/rocksdb/table/block_based/{flush_block_policy.h → flush_block_policy_impl.h} +0 -0
  320. /package/deps/rocksdb/rocksdb/util/{rate_limiter.h → rate_limiter_impl.h} +0 -0
  321. /package/deps/rocksdb/rocksdb/utilities/agg_merge/{agg_merge.h → agg_merge_impl.h} +0 -0
@@ -44,16 +44,19 @@ Status ImportColumnFamilyJob::Prepare(uint64_t next_file_number,
44
44
 
45
45
  auto num_files = files_to_import_.size();
46
46
  if (num_files == 0) {
47
- return Status::InvalidArgument("The list of files is empty");
47
+ status = Status::InvalidArgument("The list of files is empty");
48
+ return status;
48
49
  }
49
50
 
50
51
  for (const auto& f : files_to_import_) {
51
52
  if (f.num_entries == 0) {
52
- return Status::InvalidArgument("File contain no entries");
53
+ status = Status::InvalidArgument("File contain no entries");
54
+ return status;
53
55
  }
54
56
 
55
57
  if (!f.smallest_internal_key.Valid() || !f.largest_internal_key.Valid()) {
56
- return Status::Corruption("File has corrupted keys");
58
+ status = Status::Corruption("File has corrupted keys");
59
+ return status;
57
60
  }
58
61
  }
59
62
 
@@ -135,6 +138,16 @@ Status ImportColumnFamilyJob::Run() {
135
138
  const auto& f = files_to_import_[i];
136
139
  const auto& file_metadata = metadata_[i];
137
140
 
141
+ uint64_t tail_size = 0;
142
+ bool contain_no_data_blocks = f.table_properties.num_entries > 0 &&
143
+ (f.table_properties.num_entries ==
144
+ f.table_properties.num_range_deletions);
145
+ if (f.table_properties.tail_start_offset > 0 || contain_no_data_blocks) {
146
+ uint64_t file_size = f.fd.GetFileSize();
147
+ assert(f.table_properties.tail_start_offset <= file_size);
148
+ tail_size = file_size - f.table_properties.tail_start_offset;
149
+ }
150
+
138
151
  VersionEdit dummy_version_edit;
139
152
  dummy_version_edit.AddFile(
140
153
  file_metadata.level, f.fd.GetNumber(), f.fd.GetPathId(),
@@ -142,7 +155,7 @@ Status ImportColumnFamilyJob::Run() {
142
155
  file_metadata.smallest_seqno, file_metadata.largest_seqno, false,
143
156
  file_metadata.temperature, kInvalidBlobFileNumber, oldest_ancester_time,
144
157
  current_time, file_metadata.epoch_number, kUnknownFileChecksum,
145
- kUnknownFileChecksumFuncName, f.unique_id, 0);
158
+ kUnknownFileChecksumFuncName, f.unique_id, 0, tail_size);
146
159
  s = dummy_version_builder.Apply(&dummy_version_edit);
147
160
  }
148
161
  if (s.ok()) {
@@ -247,6 +260,7 @@ Status ImportColumnFamilyJob::GetIngestedFileInfo(
247
260
  TableReaderOptions(
248
261
  *cfd_->ioptions(), sv->mutable_cf_options.prefix_extractor,
249
262
  env_options_, cfd_->internal_comparator(),
263
+ sv->mutable_cf_options.block_protection_bytes_per_key,
250
264
  /*skip_filters*/ false, /*immortal*/ false,
251
265
  /*force_direct_prefetch*/ false, /*level*/ -1,
252
266
  /*block_cache_tracer*/ nullptr,
@@ -272,6 +286,7 @@ Status ImportColumnFamilyJob::GetIngestedFileInfo(
272
286
  // in file_meta.
273
287
  if (file_meta.smallest.empty()) {
274
288
  assert(file_meta.largest.empty());
289
+ // TODO: plumb Env::IOActivity
275
290
  ReadOptions ro;
276
291
  std::unique_ptr<InternalIterator> iter(table_reader->NewIterator(
277
292
  ro, sv->mutable_cf_options.prefix_extractor.get(), /*arena=*/nullptr,
@@ -299,15 +314,24 @@ Status ImportColumnFamilyJob::GetIngestedFileInfo(
299
314
  return Status::Corruption("Corrupted key in external file. ",
300
315
  pik_status.getState());
301
316
  }
302
- RangeTombstone tombstone(key, range_del_iter->value());
303
- InternalKey start_key = tombstone.SerializeKey();
317
+ RangeTombstone first_tombstone(key, range_del_iter->value());
318
+ InternalKey start_key = first_tombstone.SerializeKey();
304
319
  const InternalKeyComparator* icmp = &cfd_->internal_comparator();
305
320
  if (!bound_set ||
306
321
  icmp->Compare(start_key, file_to_import->smallest_internal_key) <
307
322
  0) {
308
323
  file_to_import->smallest_internal_key = start_key;
309
324
  }
310
- InternalKey end_key = tombstone.SerializeEndKey();
325
+
326
+ range_del_iter->SeekToLast();
327
+ pik_status = ParseInternalKey(range_del_iter->key(), &key,
328
+ db_options_.allow_data_in_errors);
329
+ if (!pik_status.ok()) {
330
+ return Status::Corruption("Corrupted key in external file. ",
331
+ pik_status.getState());
332
+ }
333
+ RangeTombstone last_tombstone(key, range_del_iter->value());
334
+ InternalKey end_key = last_tombstone.SerializeEndKey();
311
335
  if (!bound_set ||
312
336
  icmp->Compare(end_key, file_to_import->largest_internal_key) > 0) {
313
337
  file_to_import->largest_internal_key = end_key;
@@ -338,4 +362,3 @@ Status ImportColumnFamilyJob::GetIngestedFileInfo(
338
362
  return status;
339
363
  }
340
364
  } // namespace ROCKSDB_NAMESPACE
341
-
@@ -294,6 +294,8 @@ TEST_F(ImportColumnFamilyTest, ImportSSTFileWriterFilesWithRangeTombstone) {
294
294
  ASSERT_OK(sfw_cf1.Put("K1", "V1"));
295
295
  ASSERT_OK(sfw_cf1.Put("K2", "V2"));
296
296
  ASSERT_OK(sfw_cf1.DeleteRange("K3", "K4"));
297
+ ASSERT_OK(sfw_cf1.DeleteRange("K7", "K9"));
298
+
297
299
  ASSERT_OK(sfw_cf1.Finish());
298
300
 
299
301
  // Import sst file corresponding to cf1 onto a new cf and verify
@@ -319,7 +321,7 @@ TEST_F(ImportColumnFamilyTest, ImportSSTFileWriterFilesWithRangeTombstone) {
319
321
  ASSERT_TRUE(file_meta != nullptr);
320
322
  InternalKey largest;
321
323
  largest.DecodeFrom(file_meta->largest);
322
- ASSERT_EQ(largest.user_key(), "K4");
324
+ ASSERT_EQ(largest.user_key(), "K9");
323
325
 
324
326
  std::string value;
325
327
  ASSERT_OK(db_->Get(ReadOptions(), import_cfh_, "K1", &value));
@@ -628,22 +630,22 @@ TEST_F(ImportColumnFamilyTest, ImportColumnFamilyNegativeTest) {
628
630
  {
629
631
  // Create column family with existing cf name.
630
632
  ExportImportFilesMetaData metadata;
631
-
632
- ASSERT_EQ(db_->CreateColumnFamilyWithImport(ColumnFamilyOptions(), "koko",
633
- ImportColumnFamilyOptions(),
634
- metadata, &import_cfh_),
635
- Status::InvalidArgument("Column family already exists"));
633
+ metadata.db_comparator_name = options.comparator->Name();
634
+ Status s = db_->CreateColumnFamilyWithImport(ColumnFamilyOptions(), "koko",
635
+ ImportColumnFamilyOptions(),
636
+ metadata, &import_cfh_);
637
+ ASSERT_TRUE(std::strstr(s.getState(), "Column family already exists"));
636
638
  ASSERT_EQ(import_cfh_, nullptr);
637
639
  }
638
640
 
639
641
  {
640
642
  // Import with no files specified.
641
643
  ExportImportFilesMetaData metadata;
642
-
643
- ASSERT_EQ(db_->CreateColumnFamilyWithImport(ColumnFamilyOptions(), "yoyo",
644
- ImportColumnFamilyOptions(),
645
- metadata, &import_cfh_),
646
- Status::InvalidArgument("The list of files is empty"));
644
+ metadata.db_comparator_name = options.comparator->Name();
645
+ Status s = db_->CreateColumnFamilyWithImport(ColumnFamilyOptions(), "yoyo",
646
+ ImportColumnFamilyOptions(),
647
+ metadata, &import_cfh_);
648
+ ASSERT_TRUE(std::strstr(s.getState(), "The list of files is empty"));
647
649
  ASSERT_EQ(import_cfh_, nullptr);
648
650
  }
649
651
 
@@ -693,10 +695,10 @@ TEST_F(ImportColumnFamilyTest, ImportColumnFamilyNegativeTest) {
693
695
  LiveFileMetaDataInit(file1_sst_name, sst_files_dir_, 1, 10, 19));
694
696
  metadata.db_comparator_name = mismatch_options.comparator->Name();
695
697
 
696
- ASSERT_EQ(db_->CreateColumnFamilyWithImport(ColumnFamilyOptions(), "coco",
697
- ImportColumnFamilyOptions(),
698
- metadata, &import_cfh_),
699
- Status::InvalidArgument("Comparator name mismatch"));
698
+ Status s = db_->CreateColumnFamilyWithImport(ColumnFamilyOptions(), "coco",
699
+ ImportColumnFamilyOptions(),
700
+ metadata, &import_cfh_);
701
+ ASSERT_TRUE(std::strstr(s.getState(), "Comparator name mismatch"));
700
702
  ASSERT_EQ(import_cfh_, nullptr);
701
703
  }
702
704
 
@@ -718,10 +720,10 @@ TEST_F(ImportColumnFamilyTest, ImportColumnFamilyNegativeTest) {
718
720
  LiveFileMetaDataInit(file3_sst_name, sst_files_dir_, 1, 10, 19));
719
721
  metadata.db_comparator_name = options.comparator->Name();
720
722
 
721
- ASSERT_EQ(db_->CreateColumnFamilyWithImport(ColumnFamilyOptions(), "yoyo",
722
- ImportColumnFamilyOptions(),
723
- metadata, &import_cfh_),
724
- Status::IOError("No such file or directory"));
723
+ Status s = db_->CreateColumnFamilyWithImport(ColumnFamilyOptions(), "yoyo",
724
+ ImportColumnFamilyOptions(),
725
+ metadata, &import_cfh_);
726
+ ASSERT_TRUE(std::strstr(s.getState(), "No such file or directory"));
725
727
  ASSERT_EQ(import_cfh_, nullptr);
726
728
 
727
729
  // Test successful import after a failure with the same CF name. Ensures
@@ -700,6 +700,7 @@ void InternalStats::CacheEntryRoleStats::BeginCollection(
700
700
  cache_usage = cache->GetUsage();
701
701
  table_size = cache->GetTableAddressCount();
702
702
  occupancy = cache->GetOccupancyCount();
703
+ hash_seed = cache->GetHashSeed();
703
704
  }
704
705
 
705
706
  void InternalStats::CacheEntryRoleStats::EndCollection(
@@ -724,7 +725,7 @@ std::string InternalStats::CacheEntryRoleStats::ToString(
724
725
  std::ostringstream str;
725
726
  str << "Block cache " << cache_id
726
727
  << " capacity: " << BytesToHumanString(cache_capacity)
727
- << " usage: " << BytesToHumanString(cache_usage)
728
+ << " seed: " << hash_seed << " usage: " << BytesToHumanString(cache_usage)
728
729
  << " table_size: " << table_size << " occupancy: " << occupancy
729
730
  << " collections: " << collection_count
730
731
  << " last_copies: " << copies_of_last_collection
@@ -1148,7 +1149,9 @@ bool InternalStats::HandleSsTables(std::string* value, Slice /*suffix*/) {
1148
1149
  bool InternalStats::HandleAggregatedTableProperties(std::string* value,
1149
1150
  Slice /*suffix*/) {
1150
1151
  std::shared_ptr<const TableProperties> tp;
1151
- auto s = cfd_->current()->GetAggregatedTableProperties(&tp);
1152
+ // TODO: plumb Env::IOActivity
1153
+ const ReadOptions read_options;
1154
+ auto s = cfd_->current()->GetAggregatedTableProperties(read_options, &tp);
1152
1155
  if (!s.ok()) {
1153
1156
  return false;
1154
1157
  }
@@ -1168,7 +1171,9 @@ static std::map<std::string, std::string> MapUint64ValuesToString(
1168
1171
  bool InternalStats::HandleAggregatedTablePropertiesMap(
1169
1172
  std::map<std::string, std::string>* values, Slice /*suffix*/) {
1170
1173
  std::shared_ptr<const TableProperties> tp;
1171
- auto s = cfd_->current()->GetAggregatedTableProperties(&tp);
1174
+ // TODO: plumb Env::IOActivity
1175
+ const ReadOptions read_options;
1176
+ auto s = cfd_->current()->GetAggregatedTableProperties(read_options, &tp);
1172
1177
  if (!s.ok()) {
1173
1178
  return false;
1174
1179
  }
@@ -1184,8 +1189,10 @@ bool InternalStats::HandleAggregatedTablePropertiesAtLevel(std::string* values,
1184
1189
  return false;
1185
1190
  }
1186
1191
  std::shared_ptr<const TableProperties> tp;
1192
+ // TODO: plumb Env::IOActivity
1193
+ const ReadOptions read_options;
1187
1194
  auto s = cfd_->current()->GetAggregatedTableProperties(
1188
- &tp, static_cast<int>(level));
1195
+ read_options, &tp, static_cast<int>(level));
1189
1196
  if (!s.ok()) {
1190
1197
  return false;
1191
1198
  }
@@ -1201,8 +1208,10 @@ bool InternalStats::HandleAggregatedTablePropertiesAtLevelMap(
1201
1208
  return false;
1202
1209
  }
1203
1210
  std::shared_ptr<const TableProperties> tp;
1211
+ // TODO: plumb Env::IOActivity
1212
+ const ReadOptions read_options;
1204
1213
  auto s = cfd_->current()->GetAggregatedTableProperties(
1205
- &tp, static_cast<int>(level));
1214
+ read_options, &tp, static_cast<int>(level));
1206
1215
  if (!s.ok()) {
1207
1216
  return false;
1208
1217
  }
@@ -1397,7 +1406,11 @@ bool InternalStats::HandleEstimatePendingCompactionBytes(uint64_t* value,
1397
1406
  bool InternalStats::HandleEstimateTableReadersMem(uint64_t* value,
1398
1407
  DBImpl* /*db*/,
1399
1408
  Version* version) {
1400
- *value = (version == nullptr) ? 0 : version->GetMemoryUsageByTableReaders();
1409
+ // TODO: plumb Env::IOActivity
1410
+ const ReadOptions read_options;
1411
+ *value = (version == nullptr)
1412
+ ? 0
1413
+ : version->GetMemoryUsageByTableReaders(read_options);
1401
1414
  return true;
1402
1415
  }
1403
1416
 
@@ -1448,9 +1461,10 @@ bool InternalStats::HandleEstimateOldestKeyTime(uint64_t* value, DBImpl* /*db*/,
1448
1461
  ->compaction_options_fifo.allow_compaction) {
1449
1462
  return false;
1450
1463
  }
1451
-
1464
+ // TODO: plumb Env::IOActivity
1465
+ const ReadOptions read_options;
1452
1466
  TablePropertiesCollection collection;
1453
- auto s = cfd_->current()->GetPropertiesOfAllTables(&collection);
1467
+ auto s = cfd_->current()->GetPropertiesOfAllTables(read_options, &collection);
1454
1468
  if (!s.ok()) {
1455
1469
  return false;
1456
1470
  }
@@ -1674,8 +1688,16 @@ void InternalStats::DumpDBStatsWriteStall(std::string* value) {
1674
1688
  std::ostringstream str;
1675
1689
  str << "Write Stall (count): ";
1676
1690
 
1677
- for (const auto& name_and_stat : write_stall_stats_map) {
1678
- str << name_and_stat.first << ": " << name_and_stat.second << ", ";
1691
+ for (auto write_stall_stats_map_iter = write_stall_stats_map.begin();
1692
+ write_stall_stats_map_iter != write_stall_stats_map.end();
1693
+ write_stall_stats_map_iter++) {
1694
+ const auto& name_and_stat = *write_stall_stats_map_iter;
1695
+ str << name_and_stat.first << ": " << name_and_stat.second;
1696
+ if (std::next(write_stall_stats_map_iter) == write_stall_stats_map.end()) {
1697
+ str << "\n";
1698
+ } else {
1699
+ str << ", ";
1700
+ }
1679
1701
  }
1680
1702
  *value = str.str();
1681
1703
  }
@@ -1857,8 +1879,16 @@ void InternalStats::DumpCFStatsWriteStall(std::string* value,
1857
1879
  std::ostringstream str;
1858
1880
  str << "Write Stall (count): ";
1859
1881
 
1860
- for (const auto& name_and_stat : write_stall_stats_map) {
1861
- str << name_and_stat.first << ": " << name_and_stat.second << ", ";
1882
+ for (auto write_stall_stats_map_iter = write_stall_stats_map.begin();
1883
+ write_stall_stats_map_iter != write_stall_stats_map.end();
1884
+ write_stall_stats_map_iter++) {
1885
+ const auto& name_and_stat = *write_stall_stats_map_iter;
1886
+ str << name_and_stat.first << ": " << name_and_stat.second;
1887
+ if (std::next(write_stall_stats_map_iter) == write_stall_stats_map.end()) {
1888
+ str << "\n";
1889
+ } else {
1890
+ str << ", ";
1891
+ }
1862
1892
  }
1863
1893
 
1864
1894
  if (total_stall_count) {
@@ -478,6 +478,7 @@ class InternalStats {
478
478
  uint32_t copies_of_last_collection = 0;
479
479
  uint64_t last_start_time_micros_ = 0;
480
480
  uint64_t last_end_time_micros_ = 0;
481
+ uint32_t hash_seed = 0;
481
482
 
482
483
  void Clear() {
483
484
  // Wipe everything except collection_count
@@ -46,6 +46,8 @@ template <typename T>
46
46
  class ProtectionInfoKVOC;
47
47
  template <typename T>
48
48
  class ProtectionInfoKVOS;
49
+ template <typename T>
50
+ class ProtectionInfoKV;
49
51
 
50
52
  // Aliases for 64-bit protection infos.
51
53
  using ProtectionInfo64 = ProtectionInfo<uint64_t>;
@@ -64,13 +66,13 @@ class ProtectionInfo {
64
66
  ProtectionInfoKVO<T> ProtectKVO(const SliceParts& key,
65
67
  const SliceParts& value,
66
68
  ValueType op_type) const;
67
-
68
- T GetVal() const { return val_; }
69
+ ProtectionInfoKV<T> ProtectKV(const Slice& key, const Slice& value) const;
69
70
 
70
71
  private:
71
72
  friend class ProtectionInfoKVO<T>;
72
73
  friend class ProtectionInfoKVOS<T>;
73
74
  friend class ProtectionInfoKVOC<T>;
75
+ friend class ProtectionInfoKV<T>;
74
76
 
75
77
  // Each field is hashed with an independent value so we can catch fields being
76
78
  // swapped. Per the `NPHash64()` docs, using consecutive seeds is a pitfall,
@@ -89,8 +91,47 @@ class ProtectionInfo {
89
91
  static_assert(sizeof(ProtectionInfo<T>) == sizeof(T), "");
90
92
  }
91
93
 
94
+ T GetVal() const { return val_; }
92
95
  void SetVal(T val) { val_ = val; }
93
96
 
97
+ void Encode(uint8_t len, char* dst) const {
98
+ assert(sizeof(val_) >= len);
99
+ switch (len) {
100
+ case 1:
101
+ dst[0] = static_cast<uint8_t>(val_);
102
+ break;
103
+ case 2:
104
+ EncodeFixed16(dst, static_cast<uint16_t>(val_));
105
+ break;
106
+ case 4:
107
+ EncodeFixed32(dst, static_cast<uint32_t>(val_));
108
+ break;
109
+ case 8:
110
+ EncodeFixed64(dst, static_cast<uint64_t>(val_));
111
+ break;
112
+ default:
113
+ assert(false);
114
+ }
115
+ }
116
+
117
+ bool Verify(uint8_t len, const char* checksum_ptr) const {
118
+ assert(sizeof(val_) >= len);
119
+ switch (len) {
120
+ case 1:
121
+ return static_cast<uint8_t>(checksum_ptr[0]) ==
122
+ static_cast<uint8_t>(val_);
123
+ case 2:
124
+ return DecodeFixed16(checksum_ptr) == static_cast<uint16_t>(val_);
125
+ case 4:
126
+ return DecodeFixed32(checksum_ptr) == static_cast<uint32_t>(val_);
127
+ case 8:
128
+ return DecodeFixed64(checksum_ptr) == static_cast<uint64_t>(val_);
129
+ default:
130
+ assert(false);
131
+ return false;
132
+ }
133
+ }
134
+
94
135
  T val_ = 0;
95
136
  };
96
137
 
@@ -113,7 +154,14 @@ class ProtectionInfoKVO {
113
154
  void UpdateV(const SliceParts& old_value, const SliceParts& new_value);
114
155
  void UpdateO(ValueType old_op_type, ValueType new_op_type);
115
156
 
116
- T GetVal() const { return info_.GetVal(); }
157
+ // Encode this protection info into `len` bytes and stores them in `dst`.
158
+ void Encode(uint8_t len, char* dst) const { info_.Encode(len, dst); }
159
+ // Verify this protection info against the protection info encoded by Encode()
160
+ // at the first `len` bytes of `checksum_ptr`.
161
+ // Returns true iff the verification is successful.
162
+ bool Verify(uint8_t len, const char* checksum_ptr) const {
163
+ return info_.Verify(len, checksum_ptr);
164
+ }
117
165
 
118
166
  private:
119
167
  friend class ProtectionInfo<T>;
@@ -124,6 +172,7 @@ class ProtectionInfoKVO {
124
172
  static_assert(sizeof(ProtectionInfoKVO<T>) == sizeof(T), "");
125
173
  }
126
174
 
175
+ T GetVal() const { return info_.GetVal(); }
127
176
  void SetVal(T val) { info_.SetVal(val); }
128
177
 
129
178
  ProtectionInfo<T> info_;
@@ -154,7 +203,10 @@ class ProtectionInfoKVOC {
154
203
  void UpdateC(ColumnFamilyId old_column_family_id,
155
204
  ColumnFamilyId new_column_family_id);
156
205
 
157
- T GetVal() const { return kvo_.GetVal(); }
206
+ void Encode(uint8_t len, char* dst) const { kvo_.Encode(len, dst); }
207
+ bool Verify(uint8_t len, const char* checksum_ptr) const {
208
+ return kvo_.Verify(len, checksum_ptr);
209
+ }
158
210
 
159
211
  private:
160
212
  friend class ProtectionInfoKVO<T>;
@@ -163,6 +215,7 @@ class ProtectionInfoKVOC {
163
215
  static_assert(sizeof(ProtectionInfoKVOC<T>) == sizeof(T), "");
164
216
  }
165
217
 
218
+ T GetVal() const { return kvo_.GetVal(); }
166
219
  void SetVal(T val) { kvo_.SetVal(val); }
167
220
 
168
221
  ProtectionInfoKVO<T> kvo_;
@@ -193,7 +246,10 @@ class ProtectionInfoKVOS {
193
246
  void UpdateS(SequenceNumber old_sequence_number,
194
247
  SequenceNumber new_sequence_number);
195
248
 
196
- T GetVal() const { return kvo_.GetVal(); }
249
+ void Encode(uint8_t len, char* dst) const { kvo_.Encode(len, dst); }
250
+ bool Verify(uint8_t len, const char* checksum_ptr) const {
251
+ return kvo_.Verify(len, checksum_ptr);
252
+ }
197
253
 
198
254
  private:
199
255
  friend class ProtectionInfoKVO<T>;
@@ -202,11 +258,32 @@ class ProtectionInfoKVOS {
202
258
  static_assert(sizeof(ProtectionInfoKVOS<T>) == sizeof(T), "");
203
259
  }
204
260
 
261
+ T GetVal() const { return kvo_.GetVal(); }
205
262
  void SetVal(T val) { kvo_.SetVal(val); }
206
263
 
207
264
  ProtectionInfoKVO<T> kvo_;
208
265
  };
209
266
 
267
+ template <typename T>
268
+ class ProtectionInfoKV {
269
+ public:
270
+ ProtectionInfoKV() = default;
271
+
272
+ void Encode(uint8_t len, char* dst) const { info_.Encode(len, dst); }
273
+ bool Verify(uint8_t len, const char* checksum_ptr) const {
274
+ return info_.Verify(len, checksum_ptr);
275
+ }
276
+
277
+ private:
278
+ friend class ProtectionInfo<T>;
279
+
280
+ explicit ProtectionInfoKV(T val) : info_(val) {
281
+ static_assert(sizeof(ProtectionInfoKV<T>) == sizeof(T));
282
+ }
283
+
284
+ ProtectionInfo<T> info_;
285
+ };
286
+
210
287
  template <typename T>
211
288
  Status ProtectionInfo<T>::GetStatus() const {
212
289
  if (val_ != 0) {
@@ -244,6 +321,16 @@ ProtectionInfoKVO<T> ProtectionInfo<T>::ProtectKVO(const SliceParts& key,
244
321
  return ProtectionInfoKVO<T>(val);
245
322
  }
246
323
 
324
+ template <typename T>
325
+ ProtectionInfoKV<T> ProtectionInfo<T>::ProtectKV(const Slice& key,
326
+ const Slice& value) const {
327
+ T val = GetVal();
328
+ val = val ^ static_cast<T>(GetSliceNPHash64(key, ProtectionInfo<T>::kSeedK));
329
+ val =
330
+ val ^ static_cast<T>(GetSliceNPHash64(value, ProtectionInfo<T>::kSeedV));
331
+ return ProtectionInfoKV<T>(val);
332
+ }
333
+
247
334
  template <typename T>
248
335
  void ProtectionInfoKVO<T>::UpdateK(const Slice& old_key, const Slice& new_key) {
249
336
  T val = GetVal();
@@ -394,5 +481,4 @@ void ProtectionInfoKVOS<T>::UpdateS(SequenceNumber old_sequence_number,
394
481
  sizeof(new_sequence_number), ProtectionInfo<T>::kSeedS));
395
482
  SetVal(val);
396
483
  }
397
-
398
484
  } // namespace ROCKSDB_NAMESPACE
@@ -12,7 +12,7 @@
12
12
  #include "db/version_set.h"
13
13
  #include "db/write_batch_internal.h"
14
14
  #include "file/filename.h"
15
- #include "monitoring/statistics.h"
15
+ #include "monitoring/statistics_impl.h"
16
16
  #include "rocksdb/cache.h"
17
17
  #include "rocksdb/compaction_filter.h"
18
18
  #include "rocksdb/db.h"
@@ -29,7 +29,7 @@
29
29
  #include "test_util/testutil.h"
30
30
  #include "util/hash.h"
31
31
  #include "util/mutexlock.h"
32
- #include "util/rate_limiter.h"
32
+ #include "util/rate_limiter_impl.h"
33
33
  #include "util/string_util.h"
34
34
  #include "utilities/merge_operators.h"
35
35
 
@@ -35,17 +35,21 @@ enum RecordType {
35
35
 
36
36
  // Compression Type
37
37
  kSetCompressionType = 9,
38
+
39
+ // User-defined timestamp sizes
40
+ kUserDefinedTimestampSizeType = 10,
41
+ kRecyclableUserDefinedTimestampSizeType = 11,
38
42
  };
39
- static const int kMaxRecordType = kSetCompressionType;
43
+ constexpr int kMaxRecordType = kRecyclableUserDefinedTimestampSizeType;
40
44
 
41
- static const unsigned int kBlockSize = 32768;
45
+ constexpr unsigned int kBlockSize = 32768;
42
46
 
43
47
  // Header is checksum (4 bytes), length (2 bytes), type (1 byte)
44
- static const int kHeaderSize = 4 + 2 + 1;
48
+ constexpr int kHeaderSize = 4 + 2 + 1;
45
49
 
46
50
  // Recyclable header is checksum (4 bytes), length (2 bytes), type (1 byte),
47
51
  // log number (4 bytes).
48
- static const int kRecyclableHeaderSize = 4 + 2 + 1 + 4;
52
+ constexpr int kRecyclableHeaderSize = 4 + 2 + 1 + 4;
49
53
 
50
54
  } // namespace log
51
55
  } // namespace ROCKSDB_NAMESPACE