@nxtedition/rocksdb 15.4.1 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/binding.cc +70 -23
  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/index.js +70 -10
  395. package/iterator.js +25 -3
  396. package/max_rev_operator.h +9 -5
  397. package/package.json +1 -1
  398. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  399. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_custom_library.h +0 -43
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h +0 -55
@@ -28,25 +28,23 @@
28
28
  #include "rocksdb/env.h"
29
29
  #include "rocksdb/iterator.h"
30
30
  #include "rocksdb/utilities/stackable_db.h"
31
- #include "rocksdb/utilities/transaction.h"
32
- #include "table/meta_blocks.h"
33
31
  #include "test_util/sync_point.h"
34
32
  #include "util/cast_util.h"
35
33
  #include "util/crc32c.h"
36
34
  #include "util/mutexlock.h"
37
- #include "util/random.h"
38
35
  #include "util/stop_watch.h"
39
36
  #include "util/timer_queue.h"
40
37
  #include "utilities/blob_db/blob_compaction_filter.h"
41
38
  #include "utilities/blob_db/blob_db_iterator.h"
42
39
  #include "utilities/blob_db/blob_db_listener.h"
43
40
 
44
- namespace {
45
- int kBlockBasedTableVersionFormat = 2;
46
- } // end namespace
47
-
48
41
  namespace ROCKSDB_NAMESPACE::blob_db {
49
42
 
43
+ // The cutoff in terms of blob file age for garbage collection. Blobs in the
44
+ // oldest N non-TTL blob files will be rewritten when encountered during
45
+ // compaction, where N = kGarbageCollectionCutoff * number_of_non_TTL_files.
46
+ constexpr double kGarbageCollectionCutoff = 0.25;
47
+
50
48
  bool BlobFileComparator::operator()(
51
49
  const std::shared_ptr<BlobFile>& lhs,
52
50
  const std::shared_ptr<BlobFile>& rhs) const {
@@ -84,15 +82,10 @@ BlobDBImpl::BlobDBImpl(const std::string& dbname,
84
82
  closed_(true),
85
83
  open_file_count_(0),
86
84
  total_blob_size_(0),
87
- live_sst_size_(0),
88
- fifo_eviction_seq_(0),
89
- evict_expiration_up_to_(0),
90
- debug_level_(0) {
85
+ live_sst_size_(0) {
91
86
  clock_ = env_->GetSystemClock().get();
92
- blob_dir_ = (bdb_options_.path_relative)
93
- ? dbname + "/" + bdb_options_.blob_dir
94
- : bdb_options_.blob_dir;
95
- file_options_.bytes_per_sync = blob_db_options.bytes_per_sync;
87
+ blob_dir_ = dbname + "/" + kBlobDirName;
88
+ file_options_.bytes_per_sync = kBytesPerSync;
96
89
  }
97
90
 
98
91
  BlobDBImpl::~BlobDBImpl() {
@@ -120,9 +113,8 @@ Status BlobDBImpl::CloseImpl() {
120
113
  // Close base DB before BlobDBImpl destructs to stop event listener and
121
114
  // compaction filter call.
122
115
  Status s = db_->Close();
123
- // delete db_ anyway even if close failed.
124
- delete db_;
125
- // Reset pointers to avoid StackableDB delete the pointer again.
116
+ // Reset ownership to free the underlying DB.
117
+ shared_db_ptr_.reset();
126
118
  db_ = nullptr;
127
119
  db_impl_ = nullptr;
128
120
  if (!s.ok()) {
@@ -134,8 +126,6 @@ Status BlobDBImpl::CloseImpl() {
134
126
  return s;
135
127
  }
136
128
 
137
- BlobDBOptions BlobDBImpl::GetBlobDBOptions() const { return bdb_options_; }
138
-
139
129
  Status BlobDBImpl::Open(std::vector<ColumnFamilyHandle*>* handles) {
140
130
  assert(handles != nullptr);
141
131
  assert(db_ == nullptr);
@@ -144,12 +134,6 @@ Status BlobDBImpl::Open(std::vector<ColumnFamilyHandle*>* handles) {
144
134
  return Status::NotSupported("No blob directory in options");
145
135
  }
146
136
 
147
- if (bdb_options_.garbage_collection_cutoff < 0.0 ||
148
- bdb_options_.garbage_collection_cutoff > 1.0) {
149
- return Status::InvalidArgument(
150
- "Garbage collection cutoff must be in the interval [0.0, 1.0]");
151
- }
152
-
153
137
  // Temporarily disable compactions in the base DB during open; save the user
154
138
  // defined value beforehand so we can restore it once BlobDB is initialized.
155
139
  // Note: this is only needed if garbage collection is enabled.
@@ -217,7 +201,12 @@ Status BlobDBImpl::Open(std::vector<ColumnFamilyHandle*>* handles) {
217
201
 
218
202
  // Open base db.
219
203
  ColumnFamilyDescriptor cf_descriptor(kDefaultColumnFamilyName, cf_options_);
220
- s = DB::Open(db_options_, dbname_, {cf_descriptor}, handles, &db_);
204
+ std::unique_ptr<DB> db;
205
+ s = DB::Open(db_options_, dbname_, {cf_descriptor}, handles, &db);
206
+ if (s.ok()) {
207
+ shared_db_ptr_ = std::move(db);
208
+ db_ = shared_db_ptr_.get();
209
+ }
221
210
  if (!s.ok()) {
222
211
  return s;
223
212
  }
@@ -281,7 +270,7 @@ Status BlobDBImpl::Open(std::vector<ColumnFamilyHandle*>* handles) {
281
270
  return s;
282
271
  }
283
272
 
284
- UpdateLiveSSTSize(WriteOptions(Env::IOActivity::kDBOpen));
273
+ UpdateLiveSSTSize();
285
274
 
286
275
  // Start background jobs.
287
276
  if (!bdb_options_.disable_background_tasks) {
@@ -595,7 +584,6 @@ bool BlobDBImpl::MarkBlobFileObsoleteIfNeeded(
595
584
  assert(blob_file->Immutable());
596
585
  assert(bdb_options_.enable_garbage_collection);
597
586
 
598
- // Note: FIFO eviction could have marked this file obsolete already.
599
587
  if (blob_file->Obsolete()) {
600
588
  return true;
601
589
  }
@@ -709,7 +697,7 @@ std::shared_ptr<BlobFile> BlobDBImpl::NewBlobFile(
709
697
  static_cast<ColumnFamilyHandleImpl*>(DefaultColumnFamily())->GetID();
710
698
  auto blob_file = std::make_shared<BlobFile>(
711
699
  this, blob_dir_, file_num, db_options_.info_log.get(), column_family_id,
712
- bdb_options_.compression, has_ttl, expiration_range);
700
+ has_ttl, expiration_range);
713
701
 
714
702
  ROCKS_LOG_DEBUG(db_options_.info_log, "New blob file created: %s reason='%s'",
715
703
  blob_file->PathName().c_str(), reason.c_str());
@@ -752,11 +740,6 @@ Status BlobDBImpl::CreateWriterLocked(const std::shared_ptr<BlobFile>& bfile) {
752
740
  statistics_, Histograms::BLOB_DB_BLOB_FILE_WRITE_MICROS));
753
741
 
754
742
  uint64_t boffset = bfile->GetFileSize();
755
- if (debug_level_ >= 2 && boffset) {
756
- ROCKS_LOG_DEBUG(db_options_.info_log,
757
- "Open blob file: %s with offset: %" PRIu64, fpath.c_str(),
758
- boffset);
759
- }
760
743
 
761
744
  BlobLogWriter::ElemType et = BlobLogWriter::kEtNone;
762
745
  if (bfile->file_size_ == BlobLogHeader::kSize) {
@@ -1036,18 +1019,27 @@ Status BlobDBImpl::Write(const WriteOptions& options, WriteBatch* updates) {
1036
1019
 
1037
1020
  Status BlobDBImpl::Put(const WriteOptions& options, const Slice& key,
1038
1021
  const Slice& value) {
1039
- return PutUntil(options, key, value, kNoExpiration);
1022
+ StopWatch write_sw(clock_, statistics_, BLOB_DB_WRITE_MICROS);
1023
+ RecordTick(statistics_, BLOB_DB_NUM_PUT);
1024
+ Status s;
1025
+ WriteBatch batch;
1026
+ {
1027
+ // Release write_mutex_ before DB write to avoid race condition with
1028
+ // flush begin listener, which also require write_mutex_ to sync
1029
+ // blob files.
1030
+ MutexLock l(&write_mutex_);
1031
+ s = PutBlobValue(options, key, value, kNoExpiration, &batch);
1032
+ }
1033
+ if (s.ok()) {
1034
+ s = db_->Write(options, &batch);
1035
+ }
1036
+ return s;
1040
1037
  }
1041
1038
 
1042
1039
  Status BlobDBImpl::PutWithTTL(const WriteOptions& options, const Slice& key,
1043
1040
  const Slice& value, uint64_t ttl) {
1044
1041
  uint64_t now = EpochNow();
1045
1042
  uint64_t expiration = kNoExpiration - now > ttl ? now + ttl : kNoExpiration;
1046
- return PutUntil(options, key, value, expiration);
1047
- }
1048
-
1049
- Status BlobDBImpl::PutUntil(const WriteOptions& options, const Slice& key,
1050
- const Slice& value, uint64_t expiration) {
1051
1043
  StopWatch write_sw(clock_, statistics_, BLOB_DB_WRITE_MICROS);
1052
1044
  RecordTick(statistics_, BLOB_DB_NUM_PUT);
1053
1045
  Status s;
@@ -1069,77 +1061,54 @@ Status BlobDBImpl::PutBlobValue(const WriteOptions& write_options,
1069
1061
  const Slice& key, const Slice& value,
1070
1062
  uint64_t expiration, WriteBatch* batch) {
1071
1063
  write_mutex_.AssertHeld();
1072
- Status s;
1073
- std::string index_entry;
1074
- uint32_t column_family_id =
1075
- static_cast_with_check<ColumnFamilyHandleImpl>(DefaultColumnFamily())
1076
- ->GetID();
1077
- if (value.size() < bdb_options_.min_blob_size) {
1078
- if (expiration == kNoExpiration) {
1079
- // Put as normal value
1080
- s = batch->Put(key, value);
1081
- RecordTick(statistics_, BLOB_DB_WRITE_INLINED);
1082
- } else {
1083
- // Inlined with TTL
1084
- BlobIndex::EncodeInlinedTTL(&index_entry, expiration, value);
1085
- s = WriteBatchInternal::PutBlobIndex(batch, column_family_id, key,
1086
- index_entry);
1087
- RecordTick(statistics_, BLOB_DB_WRITE_INLINED_TTL);
1088
- }
1089
- } else {
1090
- std::string compression_output;
1091
- Slice value_compressed = GetCompressedSlice(value, &compression_output);
1092
-
1093
- std::string headerbuf;
1094
- BlobLogWriter::ConstructBlobHeader(&headerbuf, key, value_compressed,
1095
- expiration);
1096
-
1097
- // Check DB size limit before selecting blob file to
1098
- // Since CheckSizeAndEvictBlobFiles() can close blob files, it needs to be
1099
- // done before calling SelectBlobFile().
1100
- s = CheckSizeAndEvictBlobFiles(
1101
- write_options, headerbuf.size() + key.size() + value_compressed.size());
1102
- if (!s.ok()) {
1103
- return s;
1104
- }
1064
+ std::string headerbuf;
1065
+ BlobLogWriter::ConstructBlobHeader(&headerbuf, key, value, expiration);
1105
1066
 
1106
- std::shared_ptr<BlobFile> blob_file;
1067
+ // Check DB size limit before selecting blob file.
1068
+ Status s = CheckDbSizeLimit(headerbuf.size() + key.size() + value.size());
1069
+ if (!s.ok()) {
1070
+ return s;
1071
+ }
1072
+
1073
+ std::shared_ptr<BlobFile> blob_file;
1074
+ if (expiration != kNoExpiration) {
1075
+ s = SelectBlobFileTTL(write_options, expiration, &blob_file);
1076
+ } else {
1077
+ s = SelectBlobFile(write_options, &blob_file);
1078
+ }
1079
+ std::string index_entry;
1080
+ if (s.ok()) {
1081
+ assert(blob_file != nullptr);
1082
+ s = AppendBlob(write_options, blob_file, headerbuf, key, value, expiration,
1083
+ &index_entry);
1084
+ }
1085
+ if (s.ok()) {
1107
1086
  if (expiration != kNoExpiration) {
1108
- s = SelectBlobFileTTL(write_options, expiration, &blob_file);
1109
- } else {
1110
- s = SelectBlobFile(write_options, &blob_file);
1111
- }
1112
- if (s.ok()) {
1113
- assert(blob_file != nullptr);
1114
- assert(blob_file->GetCompressionType() == bdb_options_.compression);
1115
- s = AppendBlob(write_options, blob_file, headerbuf, key, value_compressed,
1116
- expiration, &index_entry);
1117
- }
1118
- if (s.ok()) {
1119
- if (expiration != kNoExpiration) {
1120
- WriteLock file_lock(&blob_file->mutex_);
1121
- blob_file->ExtendExpirationRange(expiration);
1122
- }
1123
- s = CloseBlobFileIfNeeded(write_options, blob_file);
1124
- }
1125
- if (s.ok()) {
1126
- s = WriteBatchInternal::PutBlobIndex(batch, column_family_id, key,
1127
- index_entry);
1087
+ WriteLock file_lock(&blob_file->mutex_);
1088
+ blob_file->ExtendExpirationRange(expiration);
1128
1089
  }
1129
- if (s.ok()) {
1130
- if (expiration == kNoExpiration) {
1131
- RecordTick(statistics_, BLOB_DB_WRITE_BLOB);
1132
- } else {
1133
- RecordTick(statistics_, BLOB_DB_WRITE_BLOB_TTL);
1134
- }
1090
+ s = CloseBlobFileIfNeeded(write_options, blob_file);
1091
+ }
1092
+ if (s.ok()) {
1093
+ const uint32_t column_family_id =
1094
+ static_cast_with_check<ColumnFamilyHandleImpl>(DefaultColumnFamily())
1095
+ ->GetID();
1096
+ s = WriteBatchInternal::PutBlobIndex(batch, column_family_id, key,
1097
+ index_entry);
1098
+ }
1099
+ if (s.ok()) {
1100
+ if (expiration == kNoExpiration) {
1101
+ RecordTick(statistics_, BLOB_DB_WRITE_BLOB);
1135
1102
  } else {
1136
- ROCKS_LOG_ERROR(
1137
- db_options_.info_log,
1138
- "Failed to append blob to FILE: %s: KEY: %s VALSZ: %" ROCKSDB_PRIszt
1139
- " status: '%s' blob_file: '%s'",
1140
- blob_file->PathName().c_str(), key.ToString().c_str(), value.size(),
1141
- s.ToString().c_str(), blob_file->DumpState().c_str());
1103
+ RecordTick(statistics_, BLOB_DB_WRITE_BLOB_TTL);
1142
1104
  }
1105
+ } else {
1106
+ ROCKS_LOG_ERROR(
1107
+ db_options_.info_log,
1108
+ "Failed to append blob to FILE: %s: KEY: %s VALSZ: %" ROCKSDB_PRIszt
1109
+ " status: '%s' blob_file: '%s'",
1110
+ blob_file->PathName().c_str(), key.ToString().c_str(), value.size(),
1111
+ s.ToString().c_str(), blob_file->DumpState().c_str());
1143
1112
  }
1144
1113
 
1145
1114
  RecordTick(statistics_, BLOB_DB_NUM_KEYS_WRITTEN);
@@ -1150,54 +1119,6 @@ Status BlobDBImpl::PutBlobValue(const WriteOptions& write_options,
1150
1119
  return s;
1151
1120
  }
1152
1121
 
1153
- Slice BlobDBImpl::GetCompressedSlice(const Slice& raw,
1154
- std::string* compression_output) const {
1155
- if (bdb_options_.compression == kNoCompression) {
1156
- return raw;
1157
- }
1158
- StopWatch compression_sw(clock_, statistics_, BLOB_DB_COMPRESSION_MICROS);
1159
- CompressionType type = bdb_options_.compression;
1160
- CompressionOptions opts;
1161
- CompressionContext context(type, opts);
1162
- CompressionInfo info(opts, context, CompressionDict::GetEmptyDict(), type);
1163
- OLD_CompressData(raw, info,
1164
- GetCompressFormatForVersion(kBlockBasedTableVersionFormat),
1165
- compression_output);
1166
- return *compression_output;
1167
- }
1168
-
1169
- Decompressor& BlobDecompressor() {
1170
- static auto mgr = GetBuiltinCompressionManager(
1171
- GetCompressFormatForVersion(kBlockBasedTableVersionFormat));
1172
- static auto decompressor = mgr->GetDecompressor();
1173
-
1174
- return *decompressor;
1175
- }
1176
-
1177
- Status BlobDBImpl::DecompressSlice(const Slice& compressed_value,
1178
- CompressionType compression_type,
1179
- PinnableSlice* value_output) const {
1180
- assert(compression_type != kNoCompression);
1181
-
1182
- BlockContents contents;
1183
- auto cfh = static_cast<ColumnFamilyHandleImpl*>(DefaultColumnFamily());
1184
-
1185
- {
1186
- StopWatch decompression_sw(clock_, statistics_,
1187
- BLOB_DB_DECOMPRESSION_MICROS);
1188
- Status s = DecompressBlockData(
1189
- compressed_value.data(), compressed_value.size(), compression_type,
1190
- BlobDecompressor(), &contents, cfh->cfd()->ioptions());
1191
- if (!s.ok()) {
1192
- return Status::Corruption("Unable to decompress blob.");
1193
- }
1194
- }
1195
-
1196
- value_output->PinSelf(contents.data);
1197
-
1198
- return Status::OK();
1199
- }
1200
-
1201
1122
  Status BlobDBImpl::CompactFiles(
1202
1123
  const CompactionOptions& compact_options,
1203
1124
  const std::vector<std::string>& input_file_names, const int output_level,
@@ -1235,8 +1156,6 @@ void BlobDBImpl::GetCompactionContextCommon(BlobCompactionContext* context) {
1235
1156
  for (auto& p : blob_files_) {
1236
1157
  context->current_blob_files.insert(p.first);
1237
1158
  }
1238
- context->fifo_eviction_seq = fifo_eviction_seq_;
1239
- context->evict_expiration_up_to = evict_expiration_up_to_;
1240
1159
  }
1241
1160
 
1242
1161
  void BlobDBImpl::GetCompactionContext(BlobCompactionContext* context) {
@@ -1256,15 +1175,15 @@ void BlobDBImpl::GetCompactionContext(BlobCompactionContext* context,
1256
1175
 
1257
1176
  if (!live_imm_non_ttl_blob_files_.empty()) {
1258
1177
  auto it = live_imm_non_ttl_blob_files_.begin();
1259
- std::advance(it, bdb_options_.garbage_collection_cutoff *
1260
- live_imm_non_ttl_blob_files_.size());
1178
+ std::advance(
1179
+ it, kGarbageCollectionCutoff * live_imm_non_ttl_blob_files_.size());
1261
1180
  context_gc->cutoff_file_number = it != live_imm_non_ttl_blob_files_.end()
1262
1181
  ? it->first
1263
1182
  : std::numeric_limits<uint64_t>::max();
1264
1183
  }
1265
1184
  }
1266
1185
 
1267
- void BlobDBImpl::UpdateLiveSSTSize(const WriteOptions& write_options) {
1186
+ void BlobDBImpl::UpdateLiveSSTSize() {
1268
1187
  uint64_t live_sst_size = 0;
1269
1188
  bool ok = GetIntProperty(DB::Properties::kLiveSstFilesSize, &live_sst_size);
1270
1189
  if (ok) {
@@ -1277,90 +1196,21 @@ void BlobDBImpl::UpdateLiveSSTSize(const WriteOptions& write_options) {
1277
1196
  db_options_.info_log,
1278
1197
  "Failed to update total SST file size after flush or compaction.");
1279
1198
  }
1280
- {
1281
- // Trigger FIFO eviction if needed.
1282
- MutexLock l(&write_mutex_);
1283
- Status s = CheckSizeAndEvictBlobFiles(write_options, 0, true /*force*/);
1284
- if (s.IsNoSpace()) {
1285
- ROCKS_LOG_WARN(db_options_.info_log,
1286
- "DB grow out-of-space after SST size updated. Current live"
1287
- " SST size: %" PRIu64
1288
- " , current blob files size: %" PRIu64 ".",
1289
- live_sst_size_.load(), total_blob_size_.load());
1290
- }
1291
- }
1292
1199
  }
1293
1200
 
1294
- Status BlobDBImpl::CheckSizeAndEvictBlobFiles(const WriteOptions& write_options,
1295
- uint64_t blob_size,
1296
- bool force_evict) {
1297
- write_mutex_.AssertHeld();
1298
-
1299
- uint64_t live_sst_size = live_sst_size_.load();
1300
- if (bdb_options_.max_db_size == 0 ||
1301
- live_sst_size + total_blob_size_.load() + blob_size <=
1302
- bdb_options_.max_db_size) {
1201
+ Status BlobDBImpl::CheckDbSizeLimit(uint64_t blob_size) {
1202
+ if (bdb_options_.max_db_size == 0) {
1303
1203
  return Status::OK();
1304
1204
  }
1305
1205
 
1306
- if (bdb_options_.is_fifo == false ||
1307
- (!force_evict && live_sst_size + blob_size > bdb_options_.max_db_size)) {
1308
- // FIFO eviction is disabled, or no space to insert new blob even we evict
1309
- // all blob files.
1310
- return Status::NoSpace(
1311
- "Write failed, as writing it would exceed max_db_size limit.");
1206
+ uint64_t live_sst_size = live_sst_size_.load();
1207
+ uint64_t total_blob_size = total_blob_size_.load();
1208
+ if (live_sst_size + total_blob_size + blob_size <= bdb_options_.max_db_size) {
1209
+ return Status::OK();
1312
1210
  }
1313
1211
 
1314
- std::vector<std::shared_ptr<BlobFile>> candidate_files;
1315
- CopyBlobFiles(&candidate_files);
1316
- std::sort(candidate_files.begin(), candidate_files.end(),
1317
- BlobFileComparator());
1318
- fifo_eviction_seq_ = GetLatestSequenceNumber();
1319
-
1320
- WriteLock l(&mutex_);
1321
-
1322
- while (!candidate_files.empty() &&
1323
- live_sst_size + total_blob_size_.load() + blob_size >
1324
- bdb_options_.max_db_size) {
1325
- std::shared_ptr<BlobFile> blob_file = candidate_files.back();
1326
- candidate_files.pop_back();
1327
- WriteLock file_lock(&blob_file->mutex_);
1328
- if (blob_file->Obsolete()) {
1329
- // File already obsoleted by someone else.
1330
- assert(blob_file->Immutable());
1331
- continue;
1332
- }
1333
- // FIFO eviction can evict open blob files.
1334
- if (!blob_file->Immutable()) {
1335
- Status s = CloseBlobFile(write_options, blob_file);
1336
- if (!s.ok()) {
1337
- return s;
1338
- }
1339
- }
1340
- assert(blob_file->Immutable());
1341
- auto expiration_range = blob_file->GetExpirationRange();
1342
- ROCKS_LOG_INFO(db_options_.info_log,
1343
- "Evict oldest blob file since DB out of space. Current "
1344
- "live SST file size: %" PRIu64 ", total blob size: %" PRIu64
1345
- ", max db size: %" PRIu64 ", evicted blob file #%" PRIu64
1346
- ".",
1347
- live_sst_size, total_blob_size_.load(),
1348
- bdb_options_.max_db_size, blob_file->BlobFileNumber());
1349
- ObsoleteBlobFile(blob_file, fifo_eviction_seq_, true /*update_size*/);
1350
- evict_expiration_up_to_ = expiration_range.first;
1351
- RecordTick(statistics_, BLOB_DB_FIFO_NUM_FILES_EVICTED);
1352
- RecordTick(statistics_, BLOB_DB_FIFO_NUM_KEYS_EVICTED,
1353
- blob_file->BlobCount());
1354
- RecordTick(statistics_, BLOB_DB_FIFO_BYTES_EVICTED,
1355
- blob_file->GetFileSize());
1356
- TEST_SYNC_POINT("BlobDBImpl::EvictOldestBlobFile:Evicted");
1357
- }
1358
- if (live_sst_size + total_blob_size_.load() + blob_size >
1359
- bdb_options_.max_db_size) {
1360
- return Status::NoSpace(
1361
- "Write failed, as writing it would exceed max_db_size limit.");
1362
- }
1363
- return Status::OK();
1212
+ return Status::NoSpace(
1213
+ "Write failed, as writing it would exceed max_db_size limit.");
1364
1214
  }
1365
1215
 
1366
1216
  Status BlobDBImpl::AppendBlob(const WriteOptions& write_options,
@@ -1397,11 +1247,10 @@ Status BlobDBImpl::AppendBlob(const WriteOptions& write_options,
1397
1247
 
1398
1248
  if (expiration == kNoExpiration) {
1399
1249
  BlobIndex::EncodeBlob(index_entry, bfile->BlobFileNumber(), blob_offset,
1400
- value.size(), bdb_options_.compression);
1250
+ value.size(), kNoCompression);
1401
1251
  } else {
1402
1252
  BlobIndex::EncodeBlobTTL(index_entry, expiration, bfile->BlobFileNumber(),
1403
- blob_offset, value.size(),
1404
- bdb_options_.compression);
1253
+ blob_offset, value.size(), kNoCompression);
1405
1254
  }
1406
1255
 
1407
1256
  return s;
@@ -1492,46 +1341,14 @@ Status BlobDBImpl::GetBlobValue(const Slice& key, const Slice& index_entry,
1492
1341
  }
1493
1342
  }
1494
1343
 
1495
- if (blob_index.IsInlined()) {
1496
- // TODO(yiwu): If index_entry is a PinnableSlice, we can also pin the same
1497
- // memory buffer to avoid extra copy.
1498
- value->PinSelf(blob_index.value());
1499
- return Status::OK();
1500
- }
1501
-
1502
- CompressionType compression_type = kNoCompression;
1503
- s = GetRawBlobFromFile(key, blob_index.file_number(), blob_index.offset(),
1504
- blob_index.size(), value, &compression_type);
1505
- if (!s.ok()) {
1506
- return s;
1507
- }
1508
-
1509
- if (compression_type != kNoCompression) {
1510
- s = DecompressSlice(*value, compression_type, value);
1511
- if (!s.ok()) {
1512
- if (debug_level_ >= 2) {
1513
- ROCKS_LOG_ERROR(
1514
- db_options_.info_log,
1515
- "Uncompression error during blob read from file: %" PRIu64
1516
- " blob_offset: %" PRIu64 " blob_size: %" PRIu64
1517
- " key: %s status: '%s'",
1518
- blob_index.file_number(), blob_index.offset(), blob_index.size(),
1519
- key.ToString(/* output_hex */ true).c_str(), s.ToString().c_str());
1520
- }
1521
- return s;
1522
- }
1523
- }
1524
-
1525
- return Status::OK();
1344
+ return GetRawBlobFromFile(key, blob_index.file_number(), blob_index.offset(),
1345
+ blob_index.size(), value);
1526
1346
  }
1527
1347
 
1528
1348
  Status BlobDBImpl::GetRawBlobFromFile(const Slice& key, uint64_t file_number,
1529
1349
  uint64_t offset, uint64_t size,
1530
- PinnableSlice* value,
1531
- CompressionType* compression_type) {
1350
+ PinnableSlice* value) {
1532
1351
  assert(value);
1533
- assert(compression_type);
1534
- assert(*compression_type == kNoCompression);
1535
1352
 
1536
1353
  if (!size) {
1537
1354
  value->PinSelf("");
@@ -1543,15 +1360,6 @@ Status BlobDBImpl::GetRawBlobFromFile(const Slice& key, uint64_t file_number,
1543
1360
  // valid offset.
1544
1361
  if (offset <
1545
1362
  (BlobLogHeader::kSize + BlobLogRecord::kHeaderSize + key.size())) {
1546
- if (debug_level_ >= 2) {
1547
- ROCKS_LOG_ERROR(db_options_.info_log,
1548
- "Invalid blob index file_number: %" PRIu64
1549
- " blob_offset: %" PRIu64 " blob_size: %" PRIu64
1550
- " key: %s",
1551
- file_number, offset, size,
1552
- key.ToString(/* output_hex */ true).c_str());
1553
- }
1554
-
1555
1363
  return Status::NotFound("Invalid blob offset");
1556
1364
  }
1557
1365
 
@@ -1569,8 +1377,6 @@ Status BlobDBImpl::GetRawBlobFromFile(const Slice& key, uint64_t file_number,
1569
1377
  blob_file = it->second;
1570
1378
  }
1571
1379
 
1572
- *compression_type = blob_file->GetCompressionType();
1573
-
1574
1380
  // takes locks when called
1575
1381
  std::shared_ptr<RandomAccessFileReader> reader;
1576
1382
  Status s = GetBlobFileReader(blob_file, &reader);
@@ -1643,15 +1449,6 @@ Status BlobDBImpl::GetRawBlobFromFile(const Slice& key, uint64_t file_number,
1643
1449
  blob_record.size() - sizeof(uint32_t));
1644
1450
  crc = crc32c::Mask(crc); // Adjust for storage
1645
1451
  if (crc != crc_exp) {
1646
- if (debug_level_ >= 2) {
1647
- ROCKS_LOG_ERROR(
1648
- db_options_.info_log,
1649
- "Blob crc mismatch file: %" PRIu64 " blob_offset: %" PRIu64
1650
- " blob_size: %" PRIu64 " key: %s status: '%s'",
1651
- file_number, offset, size,
1652
- key.ToString(/* output_hex */ true).c_str(), s.ToString().c_str());
1653
- }
1654
-
1655
1452
  return Status::Corruption("Corruption. Blob CRC mismatch");
1656
1453
  }
1657
1454
 
@@ -2110,14 +1907,6 @@ std::pair<bool, int64_t> BlobDBImpl::DeleteObsoleteFiles(bool aborted) {
2110
1907
  return std::make_pair(!aborted, -1);
2111
1908
  }
2112
1909
 
2113
- void BlobDBImpl::CopyBlobFiles(
2114
- std::vector<std::shared_ptr<BlobFile>>* bfiles_copy) {
2115
- ReadLock rl(&mutex_);
2116
- for (auto const& p : blob_files_) {
2117
- bfiles_copy->push_back(p.second);
2118
- }
2119
- }
2120
-
2121
1910
  Iterator* BlobDBImpl::NewIterator(const ReadOptions& _read_options) {
2122
1911
  if (_read_options.io_activity != Env::IOActivity::kUnknown &&
2123
1912
  _read_options.io_activity != Env::IOActivity::kDBIterator) {
@@ -2148,14 +1937,12 @@ Iterator* BlobDBImpl::NewIterator(const ReadOptions& _read_options) {
2148
1937
  }
2149
1938
 
2150
1939
  Status DestroyBlobDB(const std::string& dbname, const Options& options,
2151
- const BlobDBOptions& bdb_options) {
1940
+ const BlobDBOptions& /*bdb_options*/) {
2152
1941
  const ImmutableDBOptions soptions(SanitizeOptions(dbname, options));
2153
1942
  Env* env = soptions.env;
2154
1943
 
2155
1944
  Status status;
2156
- std::string blobdir;
2157
- blobdir = (bdb_options.path_relative) ? dbname + "/" + bdb_options.blob_dir
2158
- : bdb_options.blob_dir;
1945
+ std::string blobdir = dbname + "/" + kBlobDirName;
2159
1946
 
2160
1947
  std::vector<std::string> filenames;
2161
1948
  if (env->GetChildren(blobdir, &filenames).ok()) {