@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
@@ -27,7 +27,7 @@
27
27
  #include "db/memtable.h"
28
28
  #include "db/write_batch_internal.h"
29
29
  #include "memtable/stl_wrappers.h"
30
- #include "monitoring/statistics.h"
30
+ #include "monitoring/statistics_impl.h"
31
31
  #include "options/options_helper.h"
32
32
  #include "port/port.h"
33
33
  #include "port/stack_trace.h"
@@ -55,7 +55,7 @@
55
55
  #include "table/block_based/block_based_table_reader.h"
56
56
  #include "table/block_based/block_builder.h"
57
57
  #include "table/block_based/filter_policy_internal.h"
58
- #include "table/block_based/flush_block_policy.h"
58
+ #include "table/block_based/flush_block_policy_impl.h"
59
59
  #include "table/block_fetcher.h"
60
60
  #include "table/format.h"
61
61
  #include "table/get_context.h"
@@ -425,14 +425,15 @@ class TableConstructor : public Constructor {
425
425
  }
426
426
 
427
427
  uint64_t ApproximateOffsetOf(const Slice& key) const {
428
+ const ReadOptions read_options;
428
429
  if (convert_to_internal_key_) {
429
430
  InternalKey ikey(key, kMaxSequenceNumber, kTypeValue);
430
431
  const Slice skey = ikey.Encode();
431
432
  return table_reader_->ApproximateOffsetOf(
432
- skey, TableReaderCaller::kUncategorized);
433
+ read_options, skey, TableReaderCaller::kUncategorized);
433
434
  }
434
435
  return table_reader_->ApproximateOffsetOf(
435
- key, TableReaderCaller::kUncategorized);
436
+ read_options, key, TableReaderCaller::kUncategorized);
436
437
  }
437
438
 
438
439
  virtual Status Reopen(const ImmutableOptions& ioptions,
@@ -443,7 +444,9 @@ class TableConstructor : public Constructor {
443
444
  file_reader_.reset(new RandomAccessFileReader(std::move(source), "test"));
444
445
  return ioptions.table_factory->NewTableReader(
445
446
  TableReaderOptions(ioptions, moptions.prefix_extractor, soptions,
446
- *last_internal_comparator_, /*skip_filters*/ false,
447
+ *last_internal_comparator_,
448
+ 0 /* block_protection_bytes_per_key */,
449
+ /*skip_filters*/ false,
447
450
  /*immortal*/ false, false, level_,
448
451
  &block_cache_tracer_, moptions.write_buffer_size, "",
449
452
  file_num_, kNullUniqueId64x2, largest_seqno_),
@@ -1147,19 +1150,16 @@ class BlockBasedTableTest
1147
1150
  std::move(trace_writer));
1148
1151
  ASSERT_NE(block_cache_trace_writer, nullptr);
1149
1152
  // Always return Status::OK().
1150
- assert(c->block_cache_tracer_
1151
- .StartTrace(trace_opt, std::move(block_cache_trace_writer))
1152
- .ok());
1153
+ ASSERT_OK(c->block_cache_tracer_.StartTrace(
1154
+ trace_opt, std::move(block_cache_trace_writer)));
1153
1155
 
1154
1156
  {
1155
- std::string user_key = "k01";
1156
- InternalKey internal_key(user_key, 0, kTypeValue);
1157
+ InternalKey internal_key(auto_add_key1, 0, kTypeValue);
1157
1158
  std::string encoded_key = internal_key.Encode().ToString();
1158
1159
  c->Add(encoded_key, kDummyValue);
1159
1160
  }
1160
1161
  {
1161
- std::string user_key = "k02";
1162
- InternalKey internal_key(user_key, 0, kTypeValue);
1162
+ InternalKey internal_key(auto_add_key2, 0, kTypeValue);
1163
1163
  std::string encoded_key = internal_key.Encode().ToString();
1164
1164
  c->Add(encoded_key, kDummyValue);
1165
1165
  }
@@ -1180,6 +1180,7 @@ class BlockBasedTableTest
1180
1180
  EXPECT_OK(reader.ReadHeader(&header));
1181
1181
  uint32_t index = 0;
1182
1182
  while (s.ok()) {
1183
+ SCOPED_TRACE("expected_records[" + std::to_string(index) + "]");
1183
1184
  BlockCacheTraceRecord access;
1184
1185
  s = reader.ReadAccess(&access);
1185
1186
  if (!s.ok()) {
@@ -1192,22 +1193,33 @@ class BlockBasedTableTest
1192
1193
  EXPECT_EQ(access.caller, expected_records[index].caller);
1193
1194
  EXPECT_EQ(access.no_insert, expected_records[index].no_insert);
1194
1195
  EXPECT_EQ(access.is_cache_hit, expected_records[index].is_cache_hit);
1195
- // Get
1196
- if (access.caller == TableReaderCaller::kUserGet) {
1196
+ EXPECT_EQ(access.get_id, expected_records[index].get_id);
1197
+ // The well-populated cases
1198
+ if (access.caller == TableReaderCaller::kUserGet ||
1199
+ (access.caller == TableReaderCaller::kUserMultiGet &&
1200
+ access.block_type == TraceType::kBlockTraceDataBlock)) {
1197
1201
  EXPECT_EQ(access.referenced_key,
1198
1202
  expected_records[index].referenced_key);
1199
- EXPECT_EQ(access.get_id, expected_records[index].get_id);
1200
1203
  EXPECT_EQ(access.get_from_user_specified_snapshot,
1201
1204
  expected_records[index].get_from_user_specified_snapshot);
1202
1205
  if (access.block_type == TraceType::kBlockTraceDataBlock) {
1203
1206
  EXPECT_GT(access.referenced_data_size, 0);
1204
1207
  EXPECT_GT(access.num_keys_in_block, 0);
1208
+ if (access.caller == TableReaderCaller::kUserMultiGet) {
1209
+ // Test num_keys_in_block estimate, assuming default restart
1210
+ // interval of 16 and just one interval.
1211
+ // Rounding depends on get_id.
1212
+ if (access.get_id & 1) {
1213
+ EXPECT_EQ(access.num_keys_in_block, 9);
1214
+ } else {
1215
+ EXPECT_EQ(access.num_keys_in_block, 8);
1216
+ }
1217
+ }
1205
1218
  EXPECT_EQ(access.referenced_key_exist_in_block,
1206
1219
  expected_records[index].referenced_key_exist_in_block);
1207
1220
  }
1208
1221
  } else {
1209
1222
  EXPECT_EQ(access.referenced_key, "");
1210
- EXPECT_EQ(access.get_id, 0);
1211
1223
  EXPECT_FALSE(access.get_from_user_specified_snapshot);
1212
1224
  EXPECT_EQ(access.referenced_data_size, 0);
1213
1225
  EXPECT_EQ(access.num_keys_in_block, 0);
@@ -1223,6 +1235,8 @@ class BlockBasedTableTest
1223
1235
 
1224
1236
  protected:
1225
1237
  uint64_t IndexUncompressedHelper(bool indexCompress);
1238
+ const std::string auto_add_key1 = "aak01";
1239
+ const std::string auto_add_key2 = "aak02";
1226
1240
 
1227
1241
  private:
1228
1242
  uint32_t format_;
@@ -1706,7 +1720,8 @@ TEST_P(BlockBasedTableTest, BasicBlockBasedTableProperties) {
1706
1720
  MutableCFOptions moptions(options);
1707
1721
  c.Finish(options, ioptions, moptions, table_options,
1708
1722
  GetPlainInternalComparator(options.comparator), &keys, &kvmap);
1709
- ASSERT_EQ(options.statistics->getTickerCount(NUMBER_BLOCK_NOT_COMPRESSED), 0);
1723
+ ASSERT_EQ(
1724
+ options.statistics->getTickerCount(NUMBER_BLOCK_COMPRESSION_REJECTED), 0);
1710
1725
 
1711
1726
  auto& props = *c.GetTableReader()->GetTableProperties();
1712
1727
  ASSERT_EQ(kvmap.size(), props.num_entries);
@@ -1968,7 +1983,8 @@ void PrefetchRange(TableConstructor* c, Options* opt,
1968
1983
  end.reset(new Slice(key_end));
1969
1984
  }
1970
1985
  }
1971
- s = table_reader->Prefetch(begin.get(), end.get());
1986
+ const ReadOptions read_options;
1987
+ s = table_reader->Prefetch(read_options, begin.get(), end.get());
1972
1988
 
1973
1989
  ASSERT_TRUE(s.code() == expected_status.code());
1974
1990
 
@@ -3068,15 +3084,14 @@ TEST_P(BlockBasedTableTest, TracingGetTest) {
3068
3084
  MutableCFOptions moptions(options);
3069
3085
  c.Finish(options, ioptions, moptions, table_options,
3070
3086
  GetPlainInternalComparator(options.comparator), &keys, &kvmap);
3071
- std::string user_key = "k01";
3072
- InternalKey internal_key(user_key, 0, kTypeValue);
3087
+ InternalKey internal_key(auto_add_key1, 0, kTypeValue);
3073
3088
  std::string encoded_key = internal_key.Encode().ToString();
3074
3089
  for (uint32_t i = 1; i <= 2; i++) {
3075
3090
  PinnableSlice value;
3076
- GetContext get_context(options.comparator, nullptr, nullptr, nullptr,
3077
- GetContext::kNotFound, user_key, &value, nullptr,
3078
- nullptr, nullptr, true, nullptr, nullptr, nullptr,
3079
- nullptr, nullptr, nullptr, /*tracing_get_id=*/i);
3091
+ GetContext get_context(
3092
+ options.comparator, nullptr, nullptr, nullptr, GetContext::kNotFound,
3093
+ auto_add_key1, &value, nullptr, nullptr, nullptr, true, nullptr,
3094
+ nullptr, nullptr, nullptr, nullptr, nullptr, /*tracing_get_id=*/i);
3080
3095
  get_perf_context()->Reset();
3081
3096
  ASSERT_OK(c.GetTableReader()->Get(ReadOptions(), encoded_key, &get_context,
3082
3097
  moptions.prefix_extractor.get()));
@@ -3126,6 +3141,189 @@ TEST_P(BlockBasedTableTest, TracingGetTest) {
3126
3141
  c.ResetTableReader();
3127
3142
  }
3128
3143
 
3144
+ struct HitMissCountingCache : public CacheWrapper {
3145
+ using CacheWrapper::CacheWrapper;
3146
+ const char* Name() const override { return "HitMissCountingCache"; }
3147
+
3148
+ uint64_t hit_count_ = 0;
3149
+ uint64_t miss_count_ = 0;
3150
+
3151
+ void Reset() {
3152
+ hit_count_ = 0;
3153
+ miss_count_ = 0;
3154
+ }
3155
+
3156
+ Handle* Lookup(const Slice& key, const CacheItemHelper* helper,
3157
+ CreateContext* create_context,
3158
+ Priority priority = Priority::LOW,
3159
+ Statistics* stats = nullptr) override {
3160
+ // ASSUMES no blocking async lookups
3161
+ Handle* h = target_->Lookup(key, helper, create_context, priority, stats);
3162
+ if (h) {
3163
+ hit_count_++;
3164
+ } else {
3165
+ miss_count_++;
3166
+ }
3167
+ return h;
3168
+ }
3169
+
3170
+ void StartAsyncLookup(AsyncLookupHandle& async_handle) override {
3171
+ target_->StartAsyncLookup(async_handle);
3172
+ // If not pending, caller might not call WaitAll, so have to account here.
3173
+ if (!async_handle.IsPending()) {
3174
+ if (async_handle.Result()) {
3175
+ hit_count_++;
3176
+ } else {
3177
+ miss_count_++;
3178
+ }
3179
+ }
3180
+ }
3181
+
3182
+ void WaitAll(AsyncLookupHandle* async_handles, size_t count) override {
3183
+ // If !pending, then we already accounted for it in StartAsyncLookup.
3184
+ // Assume the pending status does not change asynchronously (since
3185
+ // StartAsyncLookup) and remember which still need accounting.
3186
+ std::vector<AsyncLookupHandle*> needs_accounting;
3187
+ for (size_t i = 0; i < count; ++i) {
3188
+ if (async_handles[i].IsPending()) {
3189
+ needs_accounting.push_back(async_handles + i);
3190
+ }
3191
+ }
3192
+ target_->WaitAll(async_handles, count);
3193
+ for (auto ah : needs_accounting) {
3194
+ if (ah->Result()) {
3195
+ hit_count_++;
3196
+ } else {
3197
+ miss_count_++;
3198
+ }
3199
+ }
3200
+ }
3201
+
3202
+ void VerifyExpectedHitMissCounts(
3203
+ const std::vector<BlockCacheTraceRecord>& expected_records) {
3204
+ uint64_t expected_hits = 0;
3205
+ uint64_t expected_misses = 0;
3206
+ for (const auto& r : expected_records) {
3207
+ if (r.is_cache_hit) {
3208
+ expected_hits++;
3209
+ } else {
3210
+ expected_misses++;
3211
+ }
3212
+ }
3213
+ EXPECT_EQ(expected_hits, hit_count_);
3214
+ EXPECT_EQ(expected_misses, miss_count_);
3215
+ Reset();
3216
+ }
3217
+ };
3218
+
3219
+ TEST_P(BlockBasedTableTest, TracingMultiGetTest) {
3220
+ TableConstructor c(BytewiseComparator());
3221
+ Options options;
3222
+ BlockBasedTableOptions table_options = GetBlockBasedTableOptions();
3223
+ options.create_if_missing = true;
3224
+ auto cache =
3225
+ std::make_shared<HitMissCountingCache>(NewLRUCache(1024 * 1024, 0));
3226
+ table_options.block_cache = cache;
3227
+ table_options.cache_index_and_filter_blocks = true;
3228
+ table_options.filter_policy.reset(NewBloomFilterPolicy(10));
3229
+ // Put auto_add_key1 and auto_add_key2 in the same data block
3230
+ table_options.block_size = kDummyValue.size() * 2 + 100;
3231
+ options.table_factory.reset(new BlockBasedTableFactory(table_options));
3232
+ SetupTracingTest(&c);
3233
+ std::vector<std::string> keys;
3234
+ stl_wrappers::KVMap kvmap;
3235
+ ImmutableOptions ioptions(options);
3236
+ MutableCFOptions moptions(options);
3237
+ c.Finish(options, ioptions, moptions, table_options,
3238
+ GetPlainInternalComparator(options.comparator), &keys, &kvmap);
3239
+
3240
+ std::vector<BlockCacheTraceRecord> expected_records;
3241
+
3242
+ for (bool first_pass : {true, false}) {
3243
+ uint64_t get_id_offset = first_pass ? 2 : 5;
3244
+ ReadOptions ro;
3245
+ std::array<Slice, 2> ukeys{{auto_add_key1, auto_add_key2}};
3246
+ std::array<PinnableSlice, 2> values;
3247
+ std::vector<GetContext> get_contexts;
3248
+ get_contexts.emplace_back(
3249
+ options.comparator, nullptr, nullptr, nullptr, GetContext::kNotFound,
3250
+ ukeys[0], &values[0], nullptr, nullptr, nullptr, true, nullptr, nullptr,
3251
+ nullptr, nullptr, nullptr, nullptr, get_id_offset);
3252
+ get_contexts.emplace_back(
3253
+ options.comparator, nullptr, nullptr, nullptr, GetContext::kNotFound,
3254
+ ukeys[1], &values[1], nullptr, nullptr, nullptr, true, nullptr, nullptr,
3255
+ nullptr, nullptr, nullptr, nullptr, get_id_offset + 1);
3256
+ std::array<std::string, 2> encoded_keys;
3257
+ encoded_keys[0] = InternalKey(ukeys[0], 0, kTypeValue).Encode().ToString();
3258
+ encoded_keys[1] = InternalKey(ukeys[1], 0, kTypeValue).Encode().ToString();
3259
+ std::array<Status, 2> statuses;
3260
+ autovector<KeyContext, MultiGetContext::MAX_BATCH_SIZE> key_context;
3261
+ key_context.emplace_back(/*ColumnFamilyHandle omitted*/ nullptr, ukeys[0],
3262
+ &values[0],
3263
+ /*PinnableWideColumns omitted*/ nullptr,
3264
+ /*timestamp omitted*/ nullptr, &statuses[0]);
3265
+ key_context[0].ukey_without_ts = ukeys[0];
3266
+ key_context[0].ikey = encoded_keys[0];
3267
+ key_context[0].get_context = &get_contexts[0];
3268
+ key_context.emplace_back(/*ColumnFamilyHandle omitted*/ nullptr, ukeys[1],
3269
+ &values[1],
3270
+ /*PinnableWideColumns omitted*/ nullptr,
3271
+ /*timestamp omitted*/ nullptr, &statuses[1]);
3272
+ key_context[1].ukey_without_ts = ukeys[1];
3273
+ key_context[1].ikey = encoded_keys[1];
3274
+ key_context[1].get_context = &get_contexts[1];
3275
+ autovector<KeyContext*, MultiGetContext::MAX_BATCH_SIZE> sorted_keys;
3276
+ sorted_keys.push_back(&key_context[0]);
3277
+ sorted_keys.push_back(&key_context[1]);
3278
+ MultiGetContext m_context(
3279
+ &sorted_keys, 0, sorted_keys.size(), /*SequenceNumber*/ 42, ro,
3280
+ options.env->GetFileSystem().get(), options.statistics.get());
3281
+ MultiGetRange range = m_context.GetMultiGetRange();
3282
+
3283
+ get_perf_context()->Reset();
3284
+ c.GetTableReader()->MultiGet(ro, &range, /*prefix_extractor*/ nullptr);
3285
+
3286
+ // Verify read op result
3287
+ for (uint32_t i = 0; i <= 1; i++) {
3288
+ ASSERT_OK(statuses[i]);
3289
+ ASSERT_EQ(get_contexts[i].State(), GetContext::kFound);
3290
+ ASSERT_EQ(values[i].ToString(), kDummyValue);
3291
+ }
3292
+
3293
+ // Verify traces.
3294
+ BlockCacheTraceRecord record;
3295
+ if (first_pass) {
3296
+ // The first two records should be prefetching index and filter blocks.
3297
+ record.get_id = 0;
3298
+ record.block_type = TraceType::kBlockTraceIndexBlock;
3299
+ record.caller = TableReaderCaller::kPrefetch;
3300
+ record.is_cache_hit = false;
3301
+ record.no_insert = false;
3302
+ expected_records.push_back(record);
3303
+ record.block_type = TraceType::kBlockTraceFilterBlock;
3304
+ expected_records.push_back(record);
3305
+ }
3306
+ // Then we should have three records for one index, one filter, and one data
3307
+ // block access. (The two keys share a data block.)
3308
+ record.get_id = get_id_offset;
3309
+ record.block_type = TraceType::kBlockTraceFilterBlock;
3310
+ record.caller = TableReaderCaller::kUserMultiGet;
3311
+ record.get_from_user_specified_snapshot = false;
3312
+ record.referenced_key = encoded_keys[0];
3313
+ record.referenced_key_exist_in_block = true;
3314
+ record.is_cache_hit = true;
3315
+ expected_records.push_back(record);
3316
+ record.block_type = TraceType::kBlockTraceIndexBlock;
3317
+ expected_records.push_back(record);
3318
+ record.is_cache_hit = !first_pass;
3319
+ record.block_type = TraceType::kBlockTraceDataBlock;
3320
+ expected_records.push_back(record);
3321
+ }
3322
+ VerifyBlockAccessTrace(&c, expected_records);
3323
+ cache->VerifyExpectedHitMissCounts(expected_records);
3324
+ c.ResetTableReader();
3325
+ }
3326
+
3129
3327
  TEST_P(BlockBasedTableTest, TracingApproximateOffsetOfTest) {
3130
3328
  TableConstructor c(BytewiseComparator());
3131
3329
  Options options;
@@ -3142,12 +3340,12 @@ TEST_P(BlockBasedTableTest, TracingApproximateOffsetOfTest) {
3142
3340
  MutableCFOptions moptions(options);
3143
3341
  c.Finish(options, ioptions, moptions, table_options,
3144
3342
  GetPlainInternalComparator(options.comparator), &keys, &kvmap);
3343
+ const ReadOptions read_options;
3145
3344
  for (uint32_t i = 1; i <= 2; i++) {
3146
- std::string user_key = "k01";
3147
- InternalKey internal_key(user_key, 0, kTypeValue);
3345
+ InternalKey internal_key(auto_add_key1, 0, kTypeValue);
3148
3346
  std::string encoded_key = internal_key.Encode().ToString();
3149
3347
  c.GetTableReader()->ApproximateOffsetOf(
3150
- encoded_key, TableReaderCaller::kUserApproximateSize);
3348
+ read_options, encoded_key, TableReaderCaller::kUserApproximateSize);
3151
3349
  }
3152
3350
  // Verify traces.
3153
3351
  std::vector<BlockCacheTraceRecord> expected_records;
@@ -3887,8 +4085,10 @@ TEST_F(PlainTableTest, BasicPlainTableProperties) {
3887
4085
  new RandomAccessFileReader(std::move(source), "test"));
3888
4086
 
3889
4087
  std::unique_ptr<TableProperties> props;
4088
+ const ReadOptions read_options;
3890
4089
  auto s = ReadTableProperties(file_reader.get(), ss->contents().size(),
3891
- kPlainTableMagicNumber, ioptions, &props);
4090
+ kPlainTableMagicNumber, ioptions, read_options,
4091
+ &props);
3892
4092
  ASSERT_OK(s);
3893
4093
 
3894
4094
  ASSERT_EQ(0ul, props->index_size);
@@ -4015,6 +4215,7 @@ TEST_F(GeneralTableTest, ApproximateOffsetOfPlain) {
4015
4215
  }
4016
4216
 
4017
4217
  static void DoCompressionTest(CompressionType comp) {
4218
+ SCOPED_TRACE("CompressionType = " + CompressionTypeToString(comp));
4018
4219
  Random rnd(301);
4019
4220
  TableConstructor c(BytewiseComparator(), true /* convert_to_internal_key_ */);
4020
4221
  std::string tmp;
@@ -4036,8 +4237,8 @@ static void DoCompressionTest(CompressionType comp) {
4036
4237
  ASSERT_TRUE(Between(c.ApproximateOffsetOf("abc"), 0, 0));
4037
4238
  ASSERT_TRUE(Between(c.ApproximateOffsetOf("k01"), 0, 0));
4038
4239
  ASSERT_TRUE(Between(c.ApproximateOffsetOf("k02"), 0, 0));
4039
- ASSERT_TRUE(Between(c.ApproximateOffsetOf("k03"), 2000, 3525));
4040
- ASSERT_TRUE(Between(c.ApproximateOffsetOf("k04"), 2000, 3525));
4240
+ ASSERT_TRUE(Between(c.ApproximateOffsetOf("k03"), 2000, 3550));
4241
+ ASSERT_TRUE(Between(c.ApproximateOffsetOf("k04"), 2000, 3550));
4041
4242
  ASSERT_TRUE(Between(c.ApproximateOffsetOf("xyz"), 4000, 7075));
4042
4243
  c.ResetTableReader();
4043
4244
  }
@@ -4563,9 +4764,10 @@ TEST_P(BlockBasedTableTest, DISABLED_TableWithGlobalSeqno) {
4563
4764
  new RandomAccessFileReader(std::move(source), ""));
4564
4765
 
4565
4766
  std::unique_ptr<TableProperties> props;
4767
+ const ReadOptions read_options;
4566
4768
  ASSERT_OK(ReadTableProperties(file_reader.get(), ss_rw.contents().size(),
4567
4769
  kBlockBasedTableMagicNumber, ioptions,
4568
- &props));
4770
+ read_options, &props));
4569
4771
 
4570
4772
  UserCollectedProperties user_props = props->user_collected_properties;
4571
4773
  version = DecodeFixed32(
@@ -4595,7 +4797,7 @@ TEST_P(BlockBasedTableTest, DISABLED_TableWithGlobalSeqno) {
4595
4797
 
4596
4798
  options.table_factory->NewTableReader(
4597
4799
  TableReaderOptions(ioptions, moptions.prefix_extractor, EnvOptions(),
4598
- ikc),
4800
+ ikc, 0 /* block_protection_bytes_per_key */),
4599
4801
  std::move(file_reader), ss_rw.contents().size(), &table_reader);
4600
4802
 
4601
4803
  return table_reader->NewIterator(
@@ -4740,9 +4942,10 @@ TEST_P(BlockBasedTableTest, BlockAlignTest) {
4740
4942
  // Helper function to get version, global_seqno, global_seqno_offset
4741
4943
  std::function<void()> VerifyBlockAlignment = [&]() {
4742
4944
  std::unique_ptr<TableProperties> props;
4945
+ const ReadOptions read_options;
4743
4946
  ASSERT_OK(ReadTableProperties(file_reader.get(), sink->contents().size(),
4744
4947
  kBlockBasedTableMagicNumber, ioptions,
4745
- &props));
4948
+ read_options, &props));
4746
4949
 
4747
4950
  uint64_t data_block_size = props->data_size / props->num_data_blocks;
4748
4951
  ASSERT_EQ(data_block_size, 4096);
@@ -4763,7 +4966,8 @@ TEST_P(BlockBasedTableTest, BlockAlignTest) {
4763
4966
 
4764
4967
  ASSERT_OK(ioptions.table_factory->NewTableReader(
4765
4968
  TableReaderOptions(ioptions2, moptions2.prefix_extractor, EnvOptions(),
4766
- GetPlainInternalComparator(options2.comparator)),
4969
+ GetPlainInternalComparator(options2.comparator),
4970
+ 0 /* block_protection_bytes_per_key */),
4767
4971
  std::move(file_reader), sink->contents().size(), &table_reader));
4768
4972
 
4769
4973
  ReadOptions read_options;
@@ -4879,6 +5083,59 @@ TEST_P(BlockBasedTableTest, PropertiesBlockRestartPointTest) {
4879
5083
  }
4880
5084
  }
4881
5085
 
5086
+ TEST_P(BlockBasedTableTest, CompressionRatioThreshold) {
5087
+ for (CompressionType type : GetSupportedCompressions()) {
5088
+ if (type == kNoCompression) {
5089
+ continue;
5090
+ }
5091
+ if (type == kBZip2Compression) {
5092
+ // Weird behavior in this test
5093
+ continue;
5094
+ }
5095
+ SCOPED_TRACE("Compression type: " + std::to_string(type));
5096
+
5097
+ Options options;
5098
+ options.compression = type;
5099
+
5100
+ BlockBasedTableOptions table_options = GetBlockBasedTableOptions();
5101
+ int len = 10000;
5102
+ Random rnd(301);
5103
+ std::vector<std::string> keys;
5104
+ stl_wrappers::KVMap kvmap;
5105
+
5106
+ // Test the max_compressed_bytes_per_kb option
5107
+ for (int threshold : {0, 1, 100, 400, 600, 900, 1024}) {
5108
+ SCOPED_TRACE("threshold=" + std::to_string(threshold));
5109
+ options.compression_opts.max_compressed_bytes_per_kb = threshold;
5110
+ ImmutableOptions ioptions(options);
5111
+ MutableCFOptions moptions(options);
5112
+
5113
+ for (double compressible_to : {0.25, 0.75}) {
5114
+ SCOPED_TRACE("compressible_to=" + std::to_string(compressible_to));
5115
+ TableConstructor c(BytewiseComparator(),
5116
+ true /* convert_to_internal_key_ */);
5117
+ std::string buf;
5118
+ c.Add("x", test::CompressibleString(&rnd, compressible_to, len, &buf));
5119
+
5120
+ // write an SST file
5121
+ c.Finish(options, ioptions, moptions, table_options,
5122
+ GetPlainInternalComparator(options.comparator), &keys, &kvmap);
5123
+
5124
+ size_t table_file_size = c.TEST_GetSink()->contents().size();
5125
+ size_t approx_sst_overhead = 1000;
5126
+ if (compressible_to < threshold / 1024.0) {
5127
+ // Should be compressed (substantial variance depending on algorithm)
5128
+ EXPECT_NEAR2(len * compressible_to + approx_sst_overhead,
5129
+ table_file_size, len / 8);
5130
+ } else {
5131
+ // Should not be compressed
5132
+ EXPECT_NEAR2(len + approx_sst_overhead, table_file_size, len / 10);
5133
+ }
5134
+ }
5135
+ }
5136
+ }
5137
+ }
5138
+
4882
5139
  TEST_P(BlockBasedTableTest, PropertiesMetaBlockLast) {
4883
5140
  // The properties meta-block should come at the end since we always need to
4884
5141
  // read it when opening a file, unlike index/filter/other meta-blocks, which
@@ -56,13 +56,15 @@ class WithCacheType : public TestCreateContext {
56
56
  if (type == kLRU) {
57
57
  LRUCacheOptions lru_opts;
58
58
  lru_opts.capacity = capacity;
59
+ lru_opts.hash_seed = 0; // deterministic tests
59
60
  if (modify_opts_fn) {
60
61
  modify_opts_fn(lru_opts);
61
62
  }
62
- return NewLRUCache(lru_opts);
63
+ return lru_opts.MakeSharedCache();
63
64
  }
64
65
  if (type == kHyperClock) {
65
66
  HyperClockCacheOptions hc_opts{capacity, estimated_value_size_};
67
+ hc_opts.hash_seed = 0; // deterministic tests
66
68
  if (modify_opts_fn) {
67
69
  modify_opts_fn(hc_opts);
68
70
  }
@@ -51,6 +51,11 @@
51
51
  GTEST_SUCCESS_("BYPASSED: " m); \
52
52
  } while (false) /* user ; */
53
53
 
54
+ // Avoid "loss of precision" warnings when passing in 64-bit integers
55
+ #define EXPECT_NEAR2(val1, val2, abs_error) \
56
+ EXPECT_NEAR(static_cast<double>(val1), static_cast<double>(val2), \
57
+ static_cast<double>(abs_error))
58
+
54
59
  #include <string>
55
60
 
56
61
  #include "port/stack_trace.h"
@@ -76,7 +76,7 @@ extern Slice CompressibleString(Random* rnd, double compressed_fraction,
76
76
  int len, std::string* dst) {
77
77
  int raw = static_cast<int>(len * compressed_fraction);
78
78
  if (raw < 1) raw = 1;
79
- std::string raw_data = rnd->RandomString(raw);
79
+ std::string raw_data = rnd->RandomBinaryString(raw);
80
80
 
81
81
  // Duplicate the random data until we have filled "len" bytes
82
82
  dst->clear();
@@ -629,7 +629,7 @@ class SpecialSkipListFactory : public MemTableRepFactory {
629
629
  });
630
630
  return true;
631
631
  }
632
- // After number of inserts exceeds `num_entries_flush` in a mem table, trigger
632
+ // After number of inserts >= `num_entries_flush` in a mem table, trigger
633
633
  // flush.
634
634
  explicit SpecialSkipListFactory(int num_entries_flush)
635
635
  : num_entries_flush_(num_entries_flush) {}