@nxtedition/rocksdb 15.4.1 → 15.5.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 (399) hide show
  1. package/binding.cc +24 -15
  2. package/deps/rocksdb/rocksdb/.clang-tidy +86 -0
  3. package/deps/rocksdb/rocksdb/BUCK +42 -0
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +11 -0
  5. package/deps/rocksdb/rocksdb/Makefile +59 -32
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +0 -5
  7. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +9 -9
  8. package/deps/rocksdb/rocksdb/cache/cache_key.cc +3 -3
  9. package/deps/rocksdb/rocksdb/cache/cache_key.h +5 -5
  10. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +16 -16
  11. package/deps/rocksdb/rocksdb/cache/cache_test.cc +1 -1
  12. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +258 -294
  13. package/deps/rocksdb/rocksdb/cache/clock_cache.h +98 -49
  14. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +1 -5
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +2 -3
  16. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +18 -18
  17. package/deps/rocksdb/rocksdb/crash_test.mk +5 -1
  18. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +23 -22
  19. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +6 -1
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +14 -16
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +38 -26
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +101 -18
  24. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +12 -0
  25. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +6 -9
  26. package/deps/rocksdb/rocksdb/db/builder.cc +23 -0
  27. package/deps/rocksdb/rocksdb/db/builder.h +7 -0
  28. package/deps/rocksdb/rocksdb/db/c.cc +373 -57
  29. package/deps/rocksdb/rocksdb/db/c_test.c +101 -1
  30. package/deps/rocksdb/rocksdb/db/column_family.cc +31 -3
  31. package/deps/rocksdb/rocksdb/db/column_family_test.cc +10 -13
  32. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +35 -48
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +13 -5
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +201 -39
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -10
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +7 -7
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +2 -455
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +4 -2
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +19 -0
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +72 -9
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -10
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +405 -83
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +25 -1
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -10
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -0
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +1410 -106
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +12 -5
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +2 -1
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +19 -10
  50. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +505 -45
  51. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +2 -2
  52. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +9 -1
  53. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +4 -4
  54. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +7 -9
  55. package/deps/rocksdb/rocksdb/db/convenience.cc +4 -4
  56. package/deps/rocksdb/rocksdb/db/convenience_impl.h +2 -1
  57. package/deps/rocksdb/rocksdb/db/corruption_test.cc +60 -88
  58. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +10 -12
  59. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +471 -40
  60. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +116 -2
  61. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +5 -15
  62. package/deps/rocksdb/rocksdb/db/db_compaction_abort_test.cc +993 -0
  63. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +329 -29
  64. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +155 -13
  65. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +54 -31
  66. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -0
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +232 -70
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +57 -9
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +224 -31
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -0
  71. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +4 -2
  72. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +1 -1
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -0
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +164 -8
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +6 -0
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +5 -0
  77. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +47 -35
  78. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +22 -9
  79. package/deps/rocksdb/rocksdb/db/db_iter.cc +9 -0
  80. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +371 -6
  81. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +7 -5
  82. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +22 -23
  83. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +0 -2
  84. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +4 -4
  85. package/deps/rocksdb/rocksdb/db/db_options_test.cc +40 -0
  86. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +32 -13
  87. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +1 -1
  88. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +4 -4
  89. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +68 -15
  90. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +1 -1
  91. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +2 -3
  92. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -21
  93. package/deps/rocksdb/rocksdb/db/db_test.cc +644 -128
  94. package/deps/rocksdb/rocksdb/db/db_test2.cc +198 -81
  95. package/deps/rocksdb/rocksdb/db/db_test_util.cc +35 -10
  96. package/deps/rocksdb/rocksdb/db/db_test_util.h +8 -2
  97. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +36 -32
  98. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +11 -7
  99. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +499 -0
  100. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +284 -20
  101. package/deps/rocksdb/rocksdb/db/db_write_test.cc +3 -3
  102. package/deps/rocksdb/rocksdb/db/dbformat.h +0 -5
  103. package/deps/rocksdb/rocksdb/db/error_handler.cc +24 -0
  104. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +12 -14
  105. package/deps/rocksdb/rocksdb/db/experimental.cc +13 -10
  106. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +1 -1
  107. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +22 -3
  108. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +21 -15
  109. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +4 -6
  110. package/deps/rocksdb/rocksdb/db/flush_job.cc +11 -3
  111. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +5 -6
  112. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +4 -2
  113. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +17 -17
  114. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -0
  115. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  116. package/deps/rocksdb/rocksdb/db/listener_test.cc +154 -27
  117. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -6
  118. package/deps/rocksdb/rocksdb/db/memtable.cc +197 -51
  119. package/deps/rocksdb/rocksdb/db/memtable.h +6 -0
  120. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +3 -4
  121. package/deps/rocksdb/rocksdb/db/merge_test.cc +37 -35
  122. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +2 -1
  123. package/deps/rocksdb/rocksdb/db/options_file_test.cc +4 -4
  124. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +9 -11
  125. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +10 -1
  126. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +292 -15
  127. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +10 -17
  128. package/deps/rocksdb/rocksdb/db/prefix_test.cc +6 -8
  129. package/deps/rocksdb/rocksdb/db/repair.cc +10 -10
  130. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -5
  131. package/deps/rocksdb/rocksdb/db/table_cache.cc +142 -135
  132. package/deps/rocksdb/rocksdb/db/table_cache.h +30 -6
  133. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +7 -7
  134. package/deps/rocksdb/rocksdb/db/version_builder.cc +11 -50
  135. package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
  136. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +2 -1
  137. package/deps/rocksdb/rocksdb/db/version_edit.cc +51 -2
  138. package/deps/rocksdb/rocksdb/db/version_edit.h +91 -29
  139. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -7
  140. package/deps/rocksdb/rocksdb/db/version_set.cc +211 -50
  141. package/deps/rocksdb/rocksdb/db/version_set.h +40 -3
  142. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +5 -0
  143. package/deps/rocksdb/rocksdb/db/version_set_test.cc +294 -21
  144. package/deps/rocksdb/rocksdb/db/version_util.cc +96 -0
  145. package/deps/rocksdb/rocksdb/db/version_util.h +24 -0
  146. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +5 -5
  147. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +647 -31
  148. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +219 -1
  149. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +549 -12
  150. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -3
  151. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +1 -1
  152. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -0
  153. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +21 -4
  154. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +32 -0
  155. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +74 -22
  156. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +9 -0
  157. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -61
  158. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +15 -2
  159. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +76 -2
  160. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +92 -72
  161. package/deps/rocksdb/rocksdb/env/env.cc +1 -0
  162. package/deps/rocksdb/rocksdb/env/env_test.cc +365 -2
  163. package/deps/rocksdb/rocksdb/env/fs_posix.cc +31 -30
  164. package/deps/rocksdb/rocksdb/env/io_posix.cc +8 -11
  165. package/deps/rocksdb/rocksdb/env/io_posix.h +30 -1
  166. package/deps/rocksdb/rocksdb/env/io_posix_test.cc +43 -0
  167. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -1
  168. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +108 -0
  169. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +32 -4
  170. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +4 -4
  171. package/deps/rocksdb/rocksdb/file/file_util.cc +8 -2
  172. package/deps/rocksdb/rocksdb/file/file_util.h +2 -1
  173. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +331 -12
  174. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +52 -35
  175. package/deps/rocksdb/rocksdb/folly.mk +22 -5
  176. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +1 -1
  177. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +100 -54
  178. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +67 -2
  179. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +149 -13
  180. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -12
  181. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +78 -97
  182. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +3 -3
  183. package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +2 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +5 -0
  185. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +17 -2
  186. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +1 -1
  187. package/deps/rocksdb/rocksdb/include/rocksdb/io_dispatcher.h +358 -0
  188. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +13 -0
  189. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +43 -0
  190. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +20 -0
  191. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +63 -21
  192. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +10 -1
  193. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +1 -1
  194. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +2 -7
  195. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +13 -0
  196. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -14
  197. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +49 -9
  198. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +8 -0
  199. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +77 -6
  200. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +15 -0
  201. package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +16 -10
  202. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +5 -5
  203. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +2 -4
  204. package/deps/rocksdb/rocksdb/include/rocksdb/user_defined_index.h +106 -46
  205. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/db_ttl.h +1 -1
  206. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +14 -1
  207. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +5 -1
  208. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +2 -1
  209. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -9
  210. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  211. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -2
  212. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +2 -2
  213. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +226 -8
  214. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +490 -0
  215. package/deps/rocksdb/rocksdb/memtable/skiplist.h +3 -3
  216. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +11 -0
  217. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +4 -12
  218. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +5 -5
  219. package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +21 -4
  220. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +9 -3
  221. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +21 -2
  222. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +2 -2
  223. package/deps/rocksdb/rocksdb/options/cf_options.cc +21 -1
  224. package/deps/rocksdb/rocksdb/options/cf_options.h +2 -0
  225. package/deps/rocksdb/rocksdb/options/customizable_test.cc +0 -2
  226. package/deps/rocksdb/rocksdb/options/db_options.cc +26 -5
  227. package/deps/rocksdb/rocksdb/options/db_options.h +3 -1
  228. package/deps/rocksdb/rocksdb/options/options.cc +5 -1
  229. package/deps/rocksdb/rocksdb/options/options_helper.cc +7 -2
  230. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +109 -103
  231. package/deps/rocksdb/rocksdb/options/options_test.cc +14 -0
  232. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +15 -17
  233. package/deps/rocksdb/rocksdb/port/lang.h +4 -0
  234. package/deps/rocksdb/rocksdb/port/port_example.h +0 -23
  235. package/deps/rocksdb/rocksdb/port/stack_trace.cc +36 -0
  236. package/deps/rocksdb/rocksdb/port/stack_trace.h +9 -0
  237. package/deps/rocksdb/rocksdb/src.mk +12 -0
  238. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +1 -2
  239. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  240. package/deps/rocksdb/rocksdb/table/block_based/block.cc +571 -292
  241. package/deps/rocksdb/rocksdb/table/block_based/block.h +143 -53
  242. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +154 -90
  243. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +5 -1
  244. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +51 -14
  245. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +0 -2
  246. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +147 -734
  247. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +30 -233
  248. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +178 -108
  249. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +13 -0
  250. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +17 -4
  251. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +5 -2
  252. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +70 -0
  253. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +168 -24
  254. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -9
  255. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +7 -4
  256. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +9 -2
  257. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +548 -169
  258. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +30 -0
  259. package/deps/rocksdb/rocksdb/table/block_based/block_util.h +156 -0
  260. package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.cc +73 -30
  261. package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.h +74 -7
  262. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.h +1 -1
  263. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +20 -14
  264. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +22 -12
  265. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +1 -1
  266. package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.cc +332 -0
  267. package/deps/rocksdb/rocksdb/table/block_based/multi_scan_index_iterator.h +133 -0
  268. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -2
  269. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -1
  270. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +3 -2
  271. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +4 -1
  272. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +0 -1
  273. package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +126 -46
  274. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +31 -3
  275. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +1 -2
  276. package/deps/rocksdb/rocksdb/table/cleanable_test.cc +3 -1
  277. package/deps/rocksdb/rocksdb/table/external_table.cc +25 -4
  278. package/deps/rocksdb/rocksdb/table/format.cc +27 -15
  279. package/deps/rocksdb/rocksdb/table/format.h +41 -15
  280. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +1 -0
  281. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +22 -12
  282. package/deps/rocksdb/rocksdb/table/meta_blocks.h +0 -1
  283. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +7 -21
  284. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
  285. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +88 -13
  286. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +53 -42
  287. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +3 -12
  288. package/deps/rocksdb/rocksdb/table/table_builder.h +0 -4
  289. package/deps/rocksdb/rocksdb/table/table_properties.cc +18 -0
  290. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +2 -3
  291. package/deps/rocksdb/rocksdb/table/table_test.cc +848 -172
  292. package/deps/rocksdb/rocksdb/table/unique_id.cc +24 -20
  293. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +8 -8
  294. package/deps/rocksdb/rocksdb/test_util/sync_point.h +5 -4
  295. package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -1
  296. package/deps/rocksdb/rocksdb/test_util/testutil.h +2 -2
  297. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +2 -1
  298. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +238 -120
  299. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +2 -2
  300. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +2 -4
  301. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +4 -8
  302. package/deps/rocksdb/rocksdb/tools/dump/rocksdb_undump.cc +1 -1
  303. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +2 -3
  304. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +82 -20
  305. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +41 -47
  306. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +9 -0
  307. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +5 -6
  308. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +1 -1
  309. package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +6 -5
  310. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +4 -4
  311. package/deps/rocksdb/rocksdb/tools/write_stress.cc +1 -3
  312. package/deps/rocksdb/rocksdb/util/atomic.h +30 -23
  313. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.cc +6 -7
  314. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.h +3 -3
  315. package/deps/rocksdb/rocksdb/util/bit_fields.h +68 -46
  316. package/deps/rocksdb/rocksdb/util/bloom_impl.h +16 -16
  317. package/deps/rocksdb/rocksdb/util/coding.h +14 -27
  318. package/deps/rocksdb/rocksdb/util/compression.cc +365 -207
  319. package/deps/rocksdb/rocksdb/util/compression.h +16 -1298
  320. package/deps/rocksdb/rocksdb/util/compression_test.cc +347 -61
  321. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +8 -9
  322. package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +1 -1
  323. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +1 -1
  324. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +3 -3
  325. package/deps/rocksdb/rocksdb/util/filter_bench.cc +18 -18
  326. package/deps/rocksdb/rocksdb/util/gflags_compat.h +3 -3
  327. package/deps/rocksdb/rocksdb/util/hash_test.cc +19 -7
  328. package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.cc +1099 -0
  329. package/deps/rocksdb/rocksdb/util/io_dispatcher_imp.h +36 -0
  330. package/deps/rocksdb/rocksdb/util/io_dispatcher_test.cc +1919 -0
  331. package/deps/rocksdb/rocksdb/util/math.h +3 -1
  332. package/deps/rocksdb/rocksdb/util/mutexlock.h +19 -19
  333. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +25 -25
  334. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +5 -7
  335. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +4 -5
  336. package/deps/rocksdb/rocksdb/util/slice.cc +0 -10
  337. package/deps/rocksdb/rocksdb/util/slice_test.cc +35 -1
  338. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +5 -7
  339. package/deps/rocksdb/rocksdb/util/status.cc +3 -1
  340. package/deps/rocksdb/rocksdb/util/stop_watch.h +2 -0
  341. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +4 -1
  342. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +123 -78
  343. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +12 -93
  344. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -4
  345. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +0 -21
  346. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +6 -48
  347. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +94 -307
  348. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +12 -58
  349. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +2 -8
  350. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +2 -3
  351. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +205 -811
  352. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +18 -9
  353. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +2 -7
  354. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +1 -9
  355. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +17 -11
  356. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +1 -1
  357. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +1 -1
  358. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
  359. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +68 -61
  360. package/deps/rocksdb/rocksdb/utilities/debug.cc +2 -1
  361. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +105 -59
  362. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +274 -7
  363. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs_test.cc +94 -0
  364. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +13 -17
  365. package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +16 -3
  366. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +25 -25
  367. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +40 -40
  368. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +2 -5
  369. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +17 -19
  370. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +2 -2
  371. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +2 -2
  372. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +1 -1
  373. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +2 -2
  374. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +4 -13
  375. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +3 -3
  376. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
  377. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_seqno_test.cc +431 -0
  378. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -2
  379. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +91 -0
  380. package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.cc +562 -0
  381. package/deps/rocksdb/rocksdb/utilities/trie_index/bitvector.h +615 -0
  382. package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.cc +2575 -0
  383. package/deps/rocksdb/rocksdb/utilities/trie_index/louds_trie.h +685 -0
  384. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_db_test.cc +2843 -0
  385. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.cc +567 -0
  386. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_factory.h +275 -0
  387. package/deps/rocksdb/rocksdb/utilities/trie_index/trie_index_test.cc +5183 -0
  388. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +4 -3
  389. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  390. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +2 -2
  391. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +3 -3
  392. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +93 -88
  393. package/deps/rocksdb/rocksdb.gyp +7 -0
  394. package/iterator.js +2 -2
  395. package/package.json +1 -1
  396. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  397. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  398. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_custom_library.h +0 -43
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h +0 -55
@@ -29,8 +29,6 @@ namespace ROCKSDB_NAMESPACE {
29
29
  const std::string kPropertiesBlockName = "rocksdb.properties";
30
30
  // NB: only used with format_version >= 6
31
31
  const std::string kIndexBlockName = "rocksdb.index";
32
- // Old property block name for backward compatibility
33
- const std::string kPropertiesBlockOldName = "rocksdb.stats";
34
32
  const std::string kCompressionDictBlockName = "rocksdb.compression_dict";
35
33
  const std::string kRangeDelBlockName = "rocksdb.range_del";
36
34
 
@@ -170,6 +168,18 @@ void PropertyBlockBuilder::AddTableProperty(const TableProperties& props) {
170
168
  if (props.key_smallest_seqno != UINT64_MAX) {
171
169
  Add(TablePropertiesNames::kKeySmallestSeqno, props.key_smallest_seqno);
172
170
  }
171
+ if (props.data_block_restart_interval > 0) {
172
+ Add(TablePropertiesNames::kDataBlockRestartInterval,
173
+ props.data_block_restart_interval);
174
+ }
175
+ if (props.index_block_restart_interval > 0) {
176
+ Add(TablePropertiesNames::kIndexBlockRestartInterval,
177
+ props.index_block_restart_interval);
178
+ }
179
+ if (props.separate_key_value_in_data_block > 0) {
180
+ Add(TablePropertiesNames::kSeparateKeyValueInDataBlock,
181
+ props.separate_key_value_in_data_block);
182
+ }
173
183
  }
174
184
 
175
185
  Slice PropertyBlockBuilder::Finish() {
@@ -316,6 +326,12 @@ Status ParsePropertiesBlock(
316
326
  &new_table_properties->key_largest_seqno},
317
327
  {TablePropertiesNames::kKeySmallestSeqno,
318
328
  &new_table_properties->key_smallest_seqno},
329
+ {TablePropertiesNames::kDataBlockRestartInterval,
330
+ &new_table_properties->data_block_restart_interval},
331
+ {TablePropertiesNames::kIndexBlockRestartInterval,
332
+ &new_table_properties->index_block_restart_interval},
333
+ {TablePropertiesNames::kSeparateKeyValueInDataBlock,
334
+ &new_table_properties->separate_key_value_in_data_block},
319
335
  };
320
336
 
321
337
  Status s;
@@ -476,7 +492,8 @@ Status ReadTablePropertiesHelper(
476
492
  // (See write_global_seqno comment above)
477
493
  if (s.ok() && footer.GetBlockTrailerSize() > 0) {
478
494
  s = VerifyBlockChecksum(footer, properties_block.data(), block_size,
479
- file->file_name(), handle.offset());
495
+ file->file_name(), handle.offset(),
496
+ BlockType::kProperties);
480
497
  if (s.IsCorruption()) {
481
498
  if (new_table_properties->external_sst_file_global_seqno_offset != 0) {
482
499
  std::string tmp_buf(properties_block.data(), len);
@@ -485,7 +502,8 @@ Status ReadTablePropertiesHelper(
485
502
  handle.offset();
486
503
  EncodeFixed64(&tmp_buf[static_cast<size_t>(global_seqno_offset)], 0);
487
504
  s = VerifyBlockChecksum(footer, tmp_buf.data(), block_size,
488
- file->file_name(), handle.offset());
505
+ file->file_name(), handle.offset(),
506
+ BlockType::kProperties);
489
507
  }
490
508
  }
491
509
  }
@@ -543,14 +561,6 @@ Status FindOptionalMetaBlock(InternalIterator* meta_index_iter,
543
561
  if (meta_index_iter->Valid() && meta_index_iter->key() == meta_block_name) {
544
562
  Slice v = meta_index_iter->value();
545
563
  return block_handle->DecodeFrom(&v);
546
- } else if (meta_block_name == kPropertiesBlockName) {
547
- // Have to try old name for compatibility
548
- meta_index_iter->Seek(kPropertiesBlockOldName);
549
- if (meta_index_iter->status().ok() && meta_index_iter->Valid() &&
550
- meta_index_iter->key() == kPropertiesBlockOldName) {
551
- Slice v = meta_index_iter->value();
552
- return block_handle->DecodeFrom(&v);
553
- }
554
564
  }
555
565
  }
556
566
  // else
@@ -34,7 +34,6 @@ struct TableProperties;
34
34
  // Meta block names for metaindex
35
35
  extern const std::string kPropertiesBlockName;
36
36
  extern const std::string kIndexBlockName;
37
- extern const std::string kPropertiesBlockOldName;
38
37
  extern const std::string kCompressionDictBlockName;
39
38
  extern const std::string kRangeDelBlockName;
40
39
 
@@ -23,6 +23,7 @@
23
23
  #include "port/port.h"
24
24
  #include "rocksdb/db.h"
25
25
  #include "rocksdb/env.h"
26
+ #include "rocksdb/file_checksum.h"
26
27
  #include "rocksdb/iterator.h"
27
28
  #include "rocksdb/slice_transform.h"
28
29
  #include "rocksdb/status.h"
@@ -85,6 +86,7 @@ Status SstFileDumper::GetTableReader(const std::string& file_path) {
85
86
  uint64_t file_size = 0;
86
87
  FileOptions fopts = soptions_;
87
88
  fopts.temperature = file_temp_;
89
+ fopts.file_checksum_func_name = kNoFileChecksumFuncName;
88
90
  Status s = fs->NewRandomAccessFile(file_path, fopts, &file, nullptr);
89
91
  if (s.ok()) {
90
92
  // check empty file
@@ -129,18 +131,18 @@ Status SstFileDumper::GetTableReader(const std::string& file_path) {
129
131
  if (magic_number == kCuckooTableMagicNumber) {
130
132
  fopts = soptions_;
131
133
  fopts.temperature = file_temp_;
134
+ fopts.file_checksum_func_name = kNoFileChecksumFuncName;
132
135
  }
133
136
 
134
137
  fs->NewRandomAccessFile(file_path, fopts, &file, nullptr);
135
138
  file_.reset(new RandomAccessFileReader(std::move(file), file_path));
136
139
  }
137
140
 
138
- // For old sst format, ReadTableProperties might fail but file can be read
139
- if (ReadTableProperties(magic_number, file_.get(), file_size,
141
+ s = ReadTableProperties(magic_number, file_.get(), file_size,
140
142
  (magic_number == kBlockBasedTableMagicNumber)
141
143
  ? &prefetch_buffer
142
- : nullptr)
143
- .ok()) {
144
+ : nullptr);
145
+ if (s.ok()) {
144
146
  s = SetTableOptionsByMagicNumber(magic_number);
145
147
  if (s.ok()) {
146
148
  if (table_properties_ && !table_properties_->comparator_name.empty()) {
@@ -155,8 +157,6 @@ Status SstFileDumper::GetTableReader(const std::string& file_path) {
155
157
  }
156
158
  }
157
159
  }
158
- } else {
159
- s = SetOldTableOptions();
160
160
  }
161
161
  options_.comparator = internal_comparator_.user_comparator();
162
162
 
@@ -458,8 +458,7 @@ Status SstFileDumper::ReadTableProperties(uint64_t table_magic_number,
458
458
  Status SstFileDumper::SetTableOptionsByMagicNumber(
459
459
  uint64_t table_magic_number) {
460
460
  assert(table_properties_);
461
- if (table_magic_number == kBlockBasedTableMagicNumber ||
462
- table_magic_number == kLegacyBlockBasedTableMagicNumber) {
461
+ if (table_magic_number == kBlockBasedTableMagicNumber) {
463
462
  // Preserve BlockBasedTableOptions on options_ when possible
464
463
  if (!options_.table_factory->IsInstanceOf(
465
464
  TableFactory::kBlockBasedTableName())) {
@@ -524,19 +523,6 @@ Status SstFileDumper::SetTableOptionsByMagicNumber(
524
523
  return Status::OK();
525
524
  }
526
525
 
527
- Status SstFileDumper::SetOldTableOptions() {
528
- assert(table_properties_ == nullptr);
529
- if (!options_.table_factory->IsInstanceOf(
530
- TableFactory::kBlockBasedTableName())) {
531
- options_.table_factory = std::make_shared<BlockBasedTableFactory>();
532
- }
533
- if (!silent_) {
534
- fprintf(stdout, "Sst file format: block-based(old version)\n");
535
- }
536
-
537
- return Status::OK();
538
- }
539
-
540
526
  Status SstFileDumper::ReadSequential(bool print_kv, uint64_t read_num_limit,
541
527
  bool has_from, const std::string& from_key,
542
528
  bool has_to, const std::string& to_key,
@@ -65,7 +65,6 @@ class SstFileDumper {
65
65
  std::chrono::microseconds* read_time);
66
66
 
67
67
  Status SetTableOptionsByMagicNumber(uint64_t table_magic_number);
68
- Status SetOldTableOptions();
69
68
 
70
69
  // Helper function to call the factory with settings specific to the
71
70
  // factory implementation
@@ -11,6 +11,7 @@
11
11
  #include "file/random_access_file_reader.h"
12
12
  #include "options/cf_options.h"
13
13
  #include "rocksdb/env.h"
14
+ #include "rocksdb/file_checksum.h"
14
15
  #include "rocksdb/file_system.h"
15
16
  #include "table/get_context.h"
16
17
  #include "table/table_builder.h"
@@ -51,6 +52,7 @@ Status SstFileReader::Open(const std::string& file_path) {
51
52
  std::unique_ptr<FSRandomAccessFile> file;
52
53
  std::unique_ptr<RandomAccessFileReader> file_reader;
53
54
  FileOptions fopts(r->soptions);
55
+ fopts.file_checksum_func_name = kNoFileChecksumFuncName;
54
56
  const auto& fs = r->options.env->GetFileSystem();
55
57
 
56
58
  s = fs->GetFileSize(file_path, fopts.io_options, &file_size, nullptr);
@@ -81,16 +83,20 @@ Status SstFileReader::Open(const std::string& file_path) {
81
83
  return s;
82
84
  }
83
85
 
84
- std::vector<Status> SstFileReader::MultiGet(const ReadOptions& roptions,
85
- const std::vector<Slice>& keys,
86
- std::vector<std::string>* values) {
86
+ std::vector<Status> SstFileReader::MultiGet(
87
+ const ReadOptions& roptions, const std::vector<Slice>& keys,
88
+ std::vector<PinnableSlice>* values) {
87
89
  const auto num_keys = keys.size();
88
90
  std::vector<Status> statuses(num_keys, Status::OK());
89
- std::vector<PinnableSlice> pin_values(num_keys);
91
+ values->resize(num_keys);
92
+ for (size_t i = 0; i < num_keys; ++i) {
93
+ (*values)[i].Reset();
94
+ }
90
95
 
91
96
  auto r = rep_.get();
92
97
  const Comparator* user_comparator =
93
98
  r->ioptions.internal_comparator.user_comparator();
99
+ Statistics* statistics = r->ioptions.stats;
94
100
 
95
101
  autovector<KeyContext, MultiGetContext::MAX_BATCH_SIZE> key_context;
96
102
  autovector<KeyContext*, MultiGetContext::MAX_BATCH_SIZE> sorted_keys;
@@ -98,16 +104,16 @@ std::vector<Status> SstFileReader::MultiGet(const ReadOptions& roptions,
98
104
  autovector<MergeContext, MultiGetContext::MAX_BATCH_SIZE> merge_ctx;
99
105
  sorted_keys.resize(num_keys);
100
106
  for (size_t i = 0; i < num_keys; ++i) {
101
- PinnableSlice* val = &pin_values[i];
102
- val->Reset();
107
+ PinnableSlice* val = &(*values)[i];
103
108
  merge_ctx.emplace_back();
104
109
  key_context.emplace_back(nullptr, keys[i], val, nullptr,
105
110
  nullptr /* timestamp */, &statuses[i]);
106
- get_ctx.emplace_back(user_comparator, r->ioptions.merge_operator.get(),
107
- nullptr, nullptr, GetContext::kNotFound,
108
- *key_context[i].key, val, nullptr, nullptr, nullptr,
109
- &merge_ctx[i], true,
110
- &key_context[i].max_covering_tombstone_seq, nullptr);
111
+ get_ctx.emplace_back(
112
+ user_comparator, r->ioptions.merge_operator.get(), nullptr /* logger */,
113
+ statistics, GetContext::kNotFound, *key_context[i].key, val,
114
+ nullptr /* columns */, nullptr /* timestamp */,
115
+ nullptr /* value_found */, &merge_ctx[i], true,
116
+ &key_context[i].max_covering_tombstone_seq, r->ioptions.clock);
111
117
  key_context[i].get_context = &get_ctx[i];
112
118
  }
113
119
  for (size_t i = 0; i < num_keys; ++i) {
@@ -135,12 +141,12 @@ std::vector<Status> SstFileReader::MultiGet(const ReadOptions& roptions,
135
141
  r->moptions.prefix_extractor.get(),
136
142
  false /* skip filters */);
137
143
 
138
- values->resize(num_keys);
139
144
  for (size_t i = 0; i < num_keys; ++i) {
145
+ get_ctx[i].ReportCounters();
146
+
140
147
  if (statuses[i].ok()) {
141
148
  switch (get_ctx[i].State()) {
142
149
  case GetContext::kFound:
143
- (*values)[i].assign(pin_values[i].data(), pin_values[i].size());
144
150
  break;
145
151
  case GetContext::kNotFound:
146
152
  case GetContext::kDeleted:
@@ -160,6 +166,75 @@ std::vector<Status> SstFileReader::MultiGet(const ReadOptions& roptions,
160
166
  return statuses;
161
167
  }
162
168
 
169
+ std::vector<Status> SstFileReader::MultiGet(const ReadOptions& roptions,
170
+ const std::vector<Slice>& keys,
171
+ std::vector<std::string>* values) {
172
+ std::vector<PinnableSlice> pin_values;
173
+ std::vector<Status> statuses = MultiGet(roptions, keys, &pin_values);
174
+ values->resize(keys.size());
175
+ for (size_t i = 0; i < keys.size(); ++i) {
176
+ if (statuses[i].ok()) {
177
+ (*values)[i].assign(pin_values[i].data(), pin_values[i].size());
178
+ }
179
+ }
180
+ return statuses;
181
+ }
182
+
183
+ Status SstFileReader::Get(const ReadOptions& roptions, const Slice& key,
184
+ PinnableSlice* value) {
185
+ auto r = rep_.get();
186
+ value->Reset();
187
+
188
+ const Comparator* user_comparator =
189
+ r->ioptions.internal_comparator.user_comparator();
190
+ Statistics* statistics = r->ioptions.stats;
191
+
192
+ Status status;
193
+ MergeContext merge_context;
194
+ SequenceNumber max_covering_tombstone_seq = 0;
195
+ GetContext get_ctx(user_comparator, r->ioptions.merge_operator.get(),
196
+ nullptr /* logger */, statistics, GetContext::kNotFound,
197
+ key, value, nullptr /* columns */, nullptr /* timestamp */,
198
+ nullptr /* value_found */, &merge_context, true,
199
+ &max_covering_tombstone_seq, r->ioptions.clock);
200
+
201
+ status = r->table_reader->Get(
202
+ roptions, InternalKey(key, kMaxSequenceNumber, kTypeValue).Encode(),
203
+ &get_ctx, r->moptions.prefix_extractor.get(), false /* skip_filters */);
204
+
205
+ get_ctx.ReportCounters();
206
+
207
+ if (status.ok()) {
208
+ switch (get_ctx.State()) {
209
+ case GetContext::kFound:
210
+ break;
211
+ case GetContext::kNotFound:
212
+ case GetContext::kDeleted:
213
+ status = Status::NotFound();
214
+ break;
215
+ case GetContext::kMerge:
216
+ status = Status::MergeInProgress();
217
+ break;
218
+ case GetContext::kCorrupt:
219
+ case GetContext::kUnexpectedBlobIndex:
220
+ case GetContext::kMergeOperatorFailed:
221
+ status = Status::Corruption();
222
+ break;
223
+ }
224
+ }
225
+ return status;
226
+ }
227
+
228
+ Status SstFileReader::Get(const ReadOptions& roptions, const Slice& key,
229
+ std::string* value) {
230
+ PinnableSlice pin_value;
231
+ Status s = Get(roptions, key, &pin_value);
232
+ if (s.ok()) {
233
+ value->assign(pin_value.data(), pin_value.size());
234
+ }
235
+ return s;
236
+ }
237
+
163
238
  Iterator* SstFileReader::NewIterator(const ReadOptions& roptions) {
164
239
  assert(roptions.io_activity == Env::IOActivity::kUnknown);
165
240
  auto r = rep_.get();
@@ -164,7 +164,7 @@ TEST_F(SstFileReaderTest, ReadFileWithGlobalSeqno) {
164
164
  Options options;
165
165
  options.create_if_missing = true;
166
166
  std::string db_name = test::PerThreadDBPath("test_db");
167
- DB* db;
167
+ std::unique_ptr<DB> db;
168
168
  ASSERT_OK(DB::Open(options, db_name, &db));
169
169
  // Bump sequence number.
170
170
  ASSERT_OK(db->Put(WriteOptions(), keys[0], "foo"));
@@ -186,7 +186,7 @@ TEST_F(SstFileReaderTest, ReadFileWithGlobalSeqno) {
186
186
  }
187
187
  }
188
188
  ASSERT_FALSE(ingested_file.empty());
189
- delete db;
189
+ db.reset();
190
190
 
191
191
  // Verify the file can be open and read by SstFileReader.
192
192
  CheckFile(db_name + ingested_file, keys, true /* check_global_seqno */);
@@ -768,39 +768,36 @@ TEST_F(SstFileReaderTableIteratorTest, UserDefinedTimestampsEnabled) {
768
768
  Close();
769
769
  }
770
770
 
771
- class SstFileReaderTableMultiGetTest : public DBTestBase {
771
+ class SstFileReaderTableGetTest : public DBTestBase,
772
+ public testing::WithParamInterface<bool> {
772
773
  public:
773
- SstFileReaderTableMultiGetTest()
774
- : DBTestBase("sst_file_reader_table_multi_get_test",
774
+ SstFileReaderTableGetTest()
775
+ : DBTestBase("sst_file_reader_table_get_test",
775
776
  /*env_do_fsync=*/false) {}
776
777
 
777
- void VerifyTableEntry(Iterator* iter, const std::string& user_key,
778
- ValueType value_type,
779
- std::optional<std::string> expected_value,
780
- bool backward_iteration = false) {
781
- ASSERT_TRUE(iter->Valid());
782
- ASSERT_TRUE(iter->status().ok());
783
- ParsedInternalKey pikey;
784
- ASSERT_OK(ParseInternalKey(iter->key(), &pikey, /*log_err_key=*/false));
785
- ASSERT_EQ(pikey.user_key, user_key);
786
- ASSERT_EQ(pikey.type, value_type);
787
- if (expected_value.has_value()) {
788
- ASSERT_EQ(iter->value(), expected_value.value());
789
- }
790
- if (!backward_iteration) {
791
- iter->Next();
778
+ bool UseMultiGet() const { return GetParam(); }
779
+
780
+ std::vector<Status> DoGet(SstFileReader& reader,
781
+ const std::vector<Slice>& keys,
782
+ std::vector<std::string>* values) {
783
+ if (UseMultiGet()) {
784
+ return reader.MultiGet(ReadOptions(), keys, values);
792
785
  } else {
793
- iter->Prev();
786
+ values->resize(keys.size());
787
+ std::vector<Status> statuses(keys.size());
788
+ for (size_t i = 0; i < keys.size(); ++i) {
789
+ statuses[i] = reader.Get(ReadOptions(), keys[i], &(*values)[i]);
790
+ }
791
+ return statuses;
794
792
  }
795
793
  }
796
794
  };
797
795
 
798
- TEST_F(SstFileReaderTableMultiGetTest, Basic) {
796
+ TEST_P(SstFileReaderTableGetTest, Basic) {
799
797
  Options options = CurrentOptions();
800
- const Comparator* ucmp = BytewiseComparator();
801
- options.comparator = ucmp;
802
798
  options.disable_auto_compactions = true;
803
799
  options.merge_operator = MergeOperators::CreateStringAppendOperator();
800
+ options.statistics = CreateDBStatistics();
804
801
  BlockBasedTableOptions bbto;
805
802
  bbto.filter_policy.reset(NewBloomFilterPolicy(10, false));
806
803
  options.table_factory.reset(NewBlockBasedTableFactory(bbto));
@@ -822,7 +819,7 @@ TEST_F(SstFileReaderTableMultiGetTest, Basic) {
822
819
 
823
820
  std::vector<LiveFileMetaData> files;
824
821
  dbfull()->GetLiveFilesMetaData(&files);
825
- ASSERT_TRUE(files.size() == 1);
822
+ ASSERT_EQ(files.size(), 1);
826
823
  ASSERT_TRUE(files[0].level == 0);
827
824
  std::string file_name = files[0].directory + "/" + files[0].relative_filename;
828
825
 
@@ -830,25 +827,36 @@ TEST_F(SstFileReaderTableMultiGetTest, Basic) {
830
827
  ASSERT_OK(reader.Open(file_name));
831
828
  ASSERT_OK(reader.VerifyChecksum());
832
829
 
833
- std::vector<Slice> keys;
830
+ ASSERT_OK(options.statistics->Reset());
831
+
832
+ std::vector<Slice> keys = {"fo1", "foo", "baz",
833
+ "bar", "aaa", "zzz_not_in_sst"};
834
834
  std::vector<std::string> values;
835
+ auto statuses = DoGet(reader, keys, &values);
835
836
 
836
- keys.emplace_back("fo1");
837
- keys.emplace_back("foo");
838
- keys.emplace_back("baz");
839
- keys.emplace_back("bar");
840
- keys.emplace_back("aaa");
841
- auto statuses = reader.MultiGet(ReadOptions(), keys, &values);
842
- ASSERT_TRUE(statuses[0].IsNotFound())
843
- << "Failed: status=" << statuses[0].ToString() << " val=" << values[0];
844
- ASSERT_TRUE(statuses[1].IsNotFound())
845
- << "Failed: status=" << statuses[0].ToString() << " val=" << values[1];
846
- ASSERT_TRUE(statuses[2].ok());
847
- ASSERT_TRUE(statuses[3].ok());
848
- ASSERT_EQ("val3", values[2]);
849
- ASSERT_EQ("val2", values[3]);
850
- ASSERT_TRUE(statuses[4].ok());
851
- ASSERT_EQ("val4,val5", values[4]);
837
+ // Non-existent key returns NotFound
838
+ ASSERT_TRUE(statuses[0].IsNotFound());
839
+
840
+ // Deleted key returns NotFound
841
+ ASSERT_TRUE(statuses[1].IsNotFound());
842
+
843
+ // Found keys
844
+ ASSERT_OK(statuses[2]);
845
+ ASSERT_EQ(values[2], "val3");
846
+
847
+ ASSERT_OK(statuses[3]);
848
+ ASSERT_EQ(values[3], "val2");
849
+
850
+ // Merged key
851
+ ASSERT_OK(statuses[4]);
852
+ ASSERT_EQ(values[4], "val4,val5");
853
+
854
+ // Bloom filter filtered key
855
+ ASSERT_TRUE(statuses[5].IsNotFound());
856
+
857
+ uint64_t cache_hits = options.statistics->getTickerCount(BLOCK_CACHE_HIT);
858
+ uint64_t cache_misses = options.statistics->getTickerCount(BLOCK_CACHE_MISS);
859
+ ASSERT_GT(cache_hits + cache_misses, 0);
852
860
 
853
861
  dbfull()->ReleaseSnapshot(snapshot1);
854
862
  dbfull()->ReleaseSnapshot(snapshot2);
@@ -856,6 +864,9 @@ TEST_F(SstFileReaderTableMultiGetTest, Basic) {
856
864
  Close();
857
865
  }
858
866
 
867
+ INSTANTIATE_TEST_CASE_P(SingleAndMulti, SstFileReaderTableGetTest,
868
+ testing::Bool());
869
+
859
870
  } // namespace ROCKSDB_NAMESPACE
860
871
 
861
872
  int main(int argc, char** argv) {
@@ -30,7 +30,7 @@ const size_t kFadviseTrigger = 1024 * 1024; // 1MB
30
30
  struct SstFileWriter::Rep {
31
31
  Rep(const EnvOptions& _env_options, const Options& options,
32
32
  Env::IOPriority _io_priority, const Comparator* _user_comparator,
33
- ColumnFamilyHandle* _cfh, bool _invalidate_page_cache, bool _skip_filters,
33
+ ColumnFamilyHandle* _cfh, bool _invalidate_page_cache,
34
34
  std::string _db_session_id)
35
35
  : env_options(_env_options),
36
36
  ioptions(options),
@@ -39,7 +39,6 @@ struct SstFileWriter::Rep {
39
39
  internal_comparator(_user_comparator),
40
40
  cfh(_cfh),
41
41
  invalidate_page_cache(_invalidate_page_cache),
42
- skip_filters(_skip_filters),
43
42
  db_session_id(_db_session_id),
44
43
  ts_sz(_user_comparator->timestamp_size()),
45
44
  strip_timestamp(ts_sz > 0 &&
@@ -67,7 +66,6 @@ struct SstFileWriter::Rep {
67
66
  // The size of the file during the last time we called Fadvise to remove
68
67
  // cached pages from page cache.
69
68
  uint64_t last_fadvise_size = 0;
70
- bool skip_filters;
71
69
  std::string db_session_id;
72
70
  uint64_t next_file_number = 1;
73
71
  size_t ts_sz;
@@ -305,9 +303,9 @@ SstFileWriter::SstFileWriter(const EnvOptions& env_options,
305
303
  const Comparator* user_comparator,
306
304
  ColumnFamilyHandle* column_family,
307
305
  bool invalidate_page_cache,
308
- Env::IOPriority io_priority, bool skip_filters)
306
+ Env::IOPriority io_priority)
309
307
  : rep_(new Rep(env_options, options, io_priority, user_comparator,
310
- column_family, invalidate_page_cache, skip_filters,
308
+ column_family, invalidate_page_cache,
311
309
  DBImpl::GenerateDbSessionId(options.env))) {
312
310
  // SstFileWriter is used to create sst files that can be added to database
313
311
  // later. Therefore, no real db_id and db_session_id are associated with it.
@@ -403,9 +401,6 @@ Status SstFileWriter::Open(const std::string& file_path, Temperature temp) {
403
401
  // assign fake file numbers to each file (into table properties) and keep
404
402
  // the same session id for the life of the SstFileWriter.
405
403
  r->next_file_number++;
406
- // XXX: when we can remove skip_filters from the SstFileWriter public API
407
- // we can remove it from TableBuilderOptions.
408
- table_builder_options.skip_filters = r->skip_filters;
409
404
  FileTypeSet tmp_set = r->ioptions.checksum_handoff_file_types;
410
405
  r->file_writer.reset(new WritableFileWriter(
411
406
  std::move(sst_file), file_path, r->env_options, r->ioptions.clock,
@@ -424,10 +419,6 @@ Status SstFileWriter::Open(const std::string& file_path, Temperature temp) {
424
419
  return s;
425
420
  }
426
421
 
427
- Status SstFileWriter::Add(const Slice& user_key, const Slice& value) {
428
- return rep_->Add(user_key, value, ValueType::kTypeValue);
429
- }
430
-
431
422
  Status SstFileWriter::Put(const Slice& user_key, const Slice& value) {
432
423
  return rep_->Add(user_key, value, ValueType::kTypeValue);
433
424
  }
@@ -164,10 +164,6 @@ struct TableBuilderOptions : public TablePropertiesCollectorFactory::Context {
164
164
  const TableFileCreationReason reason;
165
165
  // END for FilterBuildingContext
166
166
 
167
- // XXX: only used by BlockBasedTableBuilder for SstFileWriter. If you
168
- // want to skip filters, that should be (for example) null filter_policy
169
- // in the table options of the ioptions.table_factory
170
- bool skip_filters = false;
171
167
  const uint64_t cur_file_num;
172
168
  };
173
169
 
@@ -328,6 +328,12 @@ const std::string TablePropertiesNames::kKeyLargestSeqno =
328
328
  "rocksdb.key.largest.seqno";
329
329
  const std::string TablePropertiesNames::kKeySmallestSeqno =
330
330
  "rocksdb.key.smallest.seqno";
331
+ const std::string TablePropertiesNames::kDataBlockRestartInterval =
332
+ "rocksdb.data.block.restart.interval";
333
+ const std::string TablePropertiesNames::kIndexBlockRestartInterval =
334
+ "rocksdb.index.block.restart.interval";
335
+ const std::string TablePropertiesNames::kSeparateKeyValueInDataBlock =
336
+ "rocksdb.separate.key.value.in.data.block";
331
337
 
332
338
  static std::unordered_map<std::string, OptionTypeInfo>
333
339
  table_properties_type_info = {
@@ -450,6 +456,18 @@ static std::unordered_map<std::string, OptionTypeInfo>
450
456
  {offsetof(struct TableProperties, key_smallest_seqno),
451
457
  OptionType::kUInt64T, OptionVerificationType::kNormal,
452
458
  OptionTypeFlags::kNone}},
459
+ {"data_block_restart_interval",
460
+ {offsetof(struct TableProperties, data_block_restart_interval),
461
+ OptionType::kUInt64T, OptionVerificationType::kNormal,
462
+ OptionTypeFlags::kNone}},
463
+ {"index_block_restart_interval",
464
+ {offsetof(struct TableProperties, index_block_restart_interval),
465
+ OptionType::kUInt64T, OptionVerificationType::kNormal,
466
+ OptionTypeFlags::kNone}},
467
+ {"separate_key_value_in_data_block",
468
+ {offsetof(struct TableProperties, separate_key_value_in_data_block),
469
+ OptionType::kUInt64T, OptionVerificationType::kNormal,
470
+ OptionTypeFlags::kNone}},
453
471
  {"db_id",
454
472
  {offsetof(struct TableProperties, db_id), OptionType::kEncodedString}},
455
473
  {"db_session_id",
@@ -84,7 +84,7 @@ void TableReaderBenchmark(Options& opts, EnvOptions& env_options,
84
84
  Env* env = Env::Default();
85
85
  auto* clock = env->GetSystemClock().get();
86
86
  TableBuilder* tb = nullptr;
87
- DB* db = nullptr;
87
+ std::unique_ptr<DB> db;
88
88
  Status s;
89
89
  const ImmutableOptions ioptions(opts);
90
90
  const ColumnFamilyOptions cfo(opts);
@@ -257,8 +257,7 @@ void TableReaderBenchmark(Options& opts, EnvOptions& env_options,
257
257
  if (!through_db) {
258
258
  env->DeleteFile(file_name);
259
259
  } else {
260
- delete db;
261
- db = nullptr;
260
+ db.reset();
262
261
  DestroyDB(dbname, opts);
263
262
  }
264
263
  }