@nxtedition/rocksdb 7.1.20 → 7.1.21

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 (262) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +13 -6
  2. package/deps/rocksdb/rocksdb/Makefile +1 -1
  3. package/deps/rocksdb/rocksdb/TARGETS +2 -0
  4. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +1 -0
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +4 -4
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +139 -161
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +92 -82
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +16 -3
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -3
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +73 -30
  11. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +25 -67
  12. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +41 -40
  13. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +109 -155
  14. package/deps/rocksdb/rocksdb/cache/lru_cache.h +127 -149
  15. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +75 -80
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +22 -172
  17. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +272 -85
  18. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +12 -4
  19. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +1 -0
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +1 -0
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -0
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +1 -0
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage_test.cc +1 -0
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -0
  25. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +1 -0
  26. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +13 -4
  27. package/deps/rocksdb/rocksdb/db/builder.cc +1 -1
  28. package/deps/rocksdb/rocksdb/db/column_family.cc +15 -1
  29. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +1 -0
  30. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +1 -0
  31. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +25 -7
  32. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +10 -0
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +22 -8
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +14 -5
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +1 -0
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +38 -12
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +9 -6
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +408 -6
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +244 -54
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +27 -6
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +25 -30
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +87 -26
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -4
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
  45. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +294 -21
  46. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
  47. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  48. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -10
  49. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +4 -4
  50. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +272 -0
  51. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +38 -0
  52. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +69 -25
  53. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +7 -3
  54. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +29 -12
  55. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +0 -12
  56. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +10 -4
  57. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +35 -22
  58. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +5 -1
  59. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +40 -5
  60. package/deps/rocksdb/rocksdb/db/db_iter.cc +1 -0
  61. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -0
  62. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +1 -0
  63. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +22 -0
  64. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +1 -0
  65. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +1 -0
  66. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +72 -5
  67. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +60 -21
  68. package/deps/rocksdb/rocksdb/db/db_test.cc +170 -1
  69. package/deps/rocksdb/rocksdb/db/db_test2.cc +9 -3
  70. package/deps/rocksdb/rocksdb/db/db_test_util.cc +19 -0
  71. package/deps/rocksdb/rocksdb/db/db_test_util.h +32 -0
  72. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +444 -3
  73. package/deps/rocksdb/rocksdb/db/db_write_test.cc +8 -8
  74. package/deps/rocksdb/rocksdb/db/dbformat.cc +13 -0
  75. package/deps/rocksdb/rocksdb/db/dbformat.h +59 -4
  76. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +1 -0
  77. package/deps/rocksdb/rocksdb/db/experimental.cc +3 -1
  78. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +24 -3
  79. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -0
  80. package/deps/rocksdb/rocksdb/db/filename_test.cc +1 -0
  81. package/deps/rocksdb/rocksdb/db/flush_job.cc +4 -3
  82. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +1 -0
  83. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +85 -43
  84. package/deps/rocksdb/rocksdb/db/forward_iterator.h +3 -1
  85. package/deps/rocksdb/rocksdb/db/internal_stats.cc +33 -6
  86. package/deps/rocksdb/rocksdb/db/internal_stats.h +6 -0
  87. package/deps/rocksdb/rocksdb/db/listener_test.cc +1 -0
  88. package/deps/rocksdb/rocksdb/db/log_test.cc +1 -0
  89. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  90. package/deps/rocksdb/rocksdb/db/log_writer.h +1 -1
  91. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +1 -0
  92. package/deps/rocksdb/rocksdb/db/memtable.cc +158 -56
  93. package/deps/rocksdb/rocksdb/db/memtable.h +2 -0
  94. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -0
  95. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +1 -0
  96. package/deps/rocksdb/rocksdb/db/options_file_test.cc +1 -0
  97. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +1 -0
  98. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +1 -0
  99. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
  100. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  101. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +52 -9
  102. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +31 -2
  103. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +1 -0
  104. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +81 -42
  105. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +78 -12
  106. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +1 -0
  107. package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -0
  108. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +154 -27
  109. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +21 -4
  110. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +4 -1
  111. package/deps/rocksdb/rocksdb/db/table_cache.cc +18 -6
  112. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -0
  113. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +1 -0
  114. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +1 -0
  115. package/deps/rocksdb/rocksdb/db/version_set.cc +15 -7
  116. package/deps/rocksdb/rocksdb/db/version_set.h +2 -1
  117. package/deps/rocksdb/rocksdb/db/version_set_test.cc +1 -0
  118. package/deps/rocksdb/rocksdb/db/version_util.h +3 -1
  119. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -0
  120. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +28 -9
  121. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +21 -0
  122. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +30 -0
  123. package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +4 -0
  124. package/deps/rocksdb/rocksdb/db/write_batch.cc +30 -7
  125. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +24 -13
  126. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +5 -4
  127. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +1 -0
  128. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +1 -0
  129. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +104 -60
  130. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +199 -108
  131. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +39 -0
  132. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +8 -0
  133. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +3 -1
  134. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +19 -0
  135. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +26 -0
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -118
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +24 -4
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +18 -0
  139. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +129 -1
  140. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +22 -0
  141. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -0
  142. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +312 -117
  143. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +1 -0
  144. package/deps/rocksdb/rocksdb/env/fs_posix.cc +10 -2
  145. package/deps/rocksdb/rocksdb/env/io_posix_test.cc +1 -0
  146. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +1 -0
  147. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +5 -1
  148. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +1 -0
  149. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1 -0
  150. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +1 -1
  151. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +49 -1
  152. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +44 -18
  153. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +8 -7
  154. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +6 -1
  155. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
  156. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -4
  157. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +4 -0
  158. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +7 -0
  159. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +1 -1
  160. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +9 -0
  161. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -6
  162. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -0
  163. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -0
  164. package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -0
  165. package/deps/rocksdb/rocksdb/memory/arena.cc +23 -88
  166. package/deps/rocksdb/rocksdb/memory/arena.h +25 -31
  167. package/deps/rocksdb/rocksdb/memory/arena_test.cc +61 -0
  168. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +1 -0
  169. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
  170. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
  171. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +1 -0
  172. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +1 -0
  173. package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +1 -0
  174. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  175. package/deps/rocksdb/rocksdb/options/cf_options.h +8 -0
  176. package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -0
  177. package/deps/rocksdb/rocksdb/options/options.cc +7 -0
  178. package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
  179. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -0
  180. package/deps/rocksdb/rocksdb/options/options_test.cc +63 -40
  181. package/deps/rocksdb/rocksdb/port/mmap.cc +98 -0
  182. package/deps/rocksdb/rocksdb/port/mmap.h +70 -0
  183. package/deps/rocksdb/rocksdb/port/stack_trace.cc +7 -0
  184. package/deps/rocksdb/rocksdb/port/stack_trace.h +4 -1
  185. package/deps/rocksdb/rocksdb/port/win/port_win.h +2 -7
  186. package/deps/rocksdb/rocksdb/src.mk +1 -0
  187. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +7 -7
  188. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -3
  189. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +1 -0
  190. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +1 -0
  191. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +1 -0
  192. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -0
  193. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -0
  194. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -0
  195. package/deps/rocksdb/rocksdb/table/get_context.cc +19 -1
  196. package/deps/rocksdb/rocksdb/table/get_context.h +9 -0
  197. package/deps/rocksdb/rocksdb/table/merger_test.cc +1 -0
  198. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -11
  199. package/deps/rocksdb/rocksdb/table/mock_table.cc +37 -19
  200. package/deps/rocksdb/rocksdb/table/mock_table.h +5 -1
  201. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +6 -0
  202. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +33 -0
  203. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +45 -6
  204. package/deps/rocksdb/rocksdb/test_util/testharness.h +2 -0
  205. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +1 -0
  206. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +5 -0
  207. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +1 -0
  208. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +1 -0
  209. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +36 -0
  210. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  211. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +1 -0
  212. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +1 -0
  213. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +1 -0
  214. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -0
  215. package/deps/rocksdb/rocksdb/util/bloom_test.cc +1 -0
  216. package/deps/rocksdb/rocksdb/util/coding_test.cc +1 -0
  217. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +1 -0
  218. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +1 -0
  219. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -0
  220. package/deps/rocksdb/rocksdb/util/filelock_test.cc +1 -0
  221. package/deps/rocksdb/rocksdb/util/gflags_compat.h +12 -7
  222. package/deps/rocksdb/rocksdb/util/hash_test.cc +1 -0
  223. package/deps/rocksdb/rocksdb/util/heap_test.cc +4 -2
  224. package/deps/rocksdb/rocksdb/util/random_test.cc +1 -0
  225. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -0
  226. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +1 -0
  227. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +1 -0
  228. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +1 -0
  229. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +1 -0
  230. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +1 -0
  231. package/deps/rocksdb/rocksdb/util/timer_test.cc +1 -0
  232. package/deps/rocksdb/rocksdb/util/work_queue_test.cc +4 -0
  233. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -0
  234. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +13 -0
  235. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +9 -3
  236. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +1 -0
  237. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +1 -0
  238. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +1 -0
  239. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +1 -0
  240. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +1 -0
  241. package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +1 -0
  242. package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +1 -0
  243. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +8 -0
  244. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -0
  245. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +1 -0
  246. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -0
  247. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +1 -0
  248. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -0
  249. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +1 -0
  250. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -0
  251. package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +1 -0
  252. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1 -0
  253. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +1 -0
  254. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +1 -0
  255. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -0
  256. package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +1 -0
  257. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +7 -0
  258. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +20 -0
  259. package/index.js +12 -4
  260. package/package.json +1 -1
  261. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  262. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -613,7 +613,7 @@ TEST_F(OptionsTest, GetColumnFamilyOptionsFromStringTest) {
613
613
  &new_cf_opt));
614
614
  ASSERT_NE(new_cf_opt.blob_cache, nullptr);
615
615
  ASSERT_EQ(new_cf_opt.blob_cache->GetCapacity(), 1024UL * 1024UL);
616
- ASSERT_EQ(static_cast<ShardedCache*>(new_cf_opt.blob_cache.get())
616
+ ASSERT_EQ(static_cast<ShardedCacheBase*>(new_cf_opt.blob_cache.get())
617
617
  ->GetNumShardBits(),
618
618
  4);
619
619
  ASSERT_EQ(new_cf_opt.blob_cache->HasStrictCapacityLimit(), true);
@@ -1064,15 +1064,18 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
1064
1064
  &new_opt));
1065
1065
  ASSERT_TRUE(new_opt.block_cache != nullptr);
1066
1066
  ASSERT_EQ(new_opt.block_cache->GetCapacity(), 1024UL*1024UL);
1067
- ASSERT_EQ(std::dynamic_pointer_cast<ShardedCache>(
1068
- new_opt.block_cache)->GetNumShardBits(), 4);
1067
+ ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(new_opt.block_cache)
1068
+ ->GetNumShardBits(),
1069
+ 4);
1069
1070
  ASSERT_EQ(new_opt.block_cache->HasStrictCapacityLimit(), true);
1070
1071
  ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(
1071
1072
  new_opt.block_cache)->GetHighPriPoolRatio(), 0.5);
1072
1073
  ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
1073
1074
  ASSERT_EQ(new_opt.block_cache_compressed->GetCapacity(), 1024UL*1024UL);
1074
- ASSERT_EQ(std::dynamic_pointer_cast<ShardedCache>(
1075
- new_opt.block_cache_compressed)->GetNumShardBits(), 4);
1075
+ ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(
1076
+ new_opt.block_cache_compressed)
1077
+ ->GetNumShardBits(),
1078
+ 4);
1076
1079
  ASSERT_EQ(new_opt.block_cache_compressed->HasStrictCapacityLimit(), true);
1077
1080
  ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(
1078
1081
  new_opt.block_cache_compressed)->GetHighPriPoolRatio(),
@@ -1088,9 +1091,9 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
1088
1091
  ASSERT_TRUE(new_opt.block_cache != nullptr);
1089
1092
  ASSERT_EQ(new_opt.block_cache->GetCapacity(), 2*1024UL*1024UL);
1090
1093
  // Default values
1091
- ASSERT_EQ(std::dynamic_pointer_cast<ShardedCache>(
1092
- new_opt.block_cache)->GetNumShardBits(),
1093
- GetDefaultCacheShardBits(new_opt.block_cache->GetCapacity()));
1094
+ ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(new_opt.block_cache)
1095
+ ->GetNumShardBits(),
1096
+ GetDefaultCacheShardBits(new_opt.block_cache->GetCapacity()));
1094
1097
  ASSERT_EQ(new_opt.block_cache->HasStrictCapacityLimit(), false);
1095
1098
  ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache)
1096
1099
  ->GetHighPriPoolRatio(),
@@ -1098,10 +1101,11 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
1098
1101
  ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
1099
1102
  ASSERT_EQ(new_opt.block_cache_compressed->GetCapacity(), 2*1024UL*1024UL);
1100
1103
  // Default values
1101
- ASSERT_EQ(std::dynamic_pointer_cast<ShardedCache>(
1102
- new_opt.block_cache_compressed)->GetNumShardBits(),
1103
- GetDefaultCacheShardBits(
1104
- new_opt.block_cache_compressed->GetCapacity()));
1104
+ ASSERT_EQ(
1105
+ std::dynamic_pointer_cast<ShardedCacheBase>(
1106
+ new_opt.block_cache_compressed)
1107
+ ->GetNumShardBits(),
1108
+ GetDefaultCacheShardBits(new_opt.block_cache_compressed->GetCapacity()));
1105
1109
  ASSERT_EQ(new_opt.block_cache_compressed->HasStrictCapacityLimit(), false);
1106
1110
  ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache_compressed)
1107
1111
  ->GetHighPriPoolRatio(),
@@ -1115,15 +1119,18 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
1115
1119
  "high_pri_pool_ratio=0.0;}",
1116
1120
  &new_opt));
1117
1121
  ASSERT_EQ(new_opt.block_cache->GetCapacity(), 0);
1118
- ASSERT_EQ(std::dynamic_pointer_cast<ShardedCache>(
1119
- new_opt.block_cache)->GetNumShardBits(), 5);
1122
+ ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(new_opt.block_cache)
1123
+ ->GetNumShardBits(),
1124
+ 5);
1120
1125
  ASSERT_EQ(new_opt.block_cache->HasStrictCapacityLimit(), false);
1121
1126
  ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(
1122
1127
  new_opt.block_cache)->GetHighPriPoolRatio(), 0.5);
1123
1128
  ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
1124
1129
  ASSERT_EQ(new_opt.block_cache_compressed->GetCapacity(), 0);
1125
- ASSERT_EQ(std::dynamic_pointer_cast<ShardedCache>(
1126
- new_opt.block_cache_compressed)->GetNumShardBits(), 5);
1130
+ ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(
1131
+ new_opt.block_cache_compressed)
1132
+ ->GetNumShardBits(),
1133
+ 5);
1127
1134
  ASSERT_EQ(new_opt.block_cache_compressed->HasStrictCapacityLimit(), false);
1128
1135
  ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache_compressed)
1129
1136
  ->GetHighPriPoolRatio(),
@@ -1139,16 +1146,19 @@ TEST_F(OptionsTest, GetBlockBasedTableOptionsFromString) {
1139
1146
  &new_opt));
1140
1147
  ASSERT_TRUE(new_opt.block_cache != nullptr);
1141
1148
  ASSERT_EQ(new_opt.block_cache->GetCapacity(), 1024UL*1024UL);
1142
- ASSERT_EQ(std::dynamic_pointer_cast<ShardedCache>(
1143
- new_opt.block_cache)->GetNumShardBits(), 4);
1149
+ ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(new_opt.block_cache)
1150
+ ->GetNumShardBits(),
1151
+ 4);
1144
1152
  ASSERT_EQ(new_opt.block_cache->HasStrictCapacityLimit(), true);
1145
1153
  ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache)
1146
1154
  ->GetHighPriPoolRatio(),
1147
1155
  0.5);
1148
1156
  ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
1149
1157
  ASSERT_EQ(new_opt.block_cache_compressed->GetCapacity(), 1024UL*1024UL);
1150
- ASSERT_EQ(std::dynamic_pointer_cast<ShardedCache>(
1151
- new_opt.block_cache_compressed)->GetNumShardBits(), 4);
1158
+ ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(
1159
+ new_opt.block_cache_compressed)
1160
+ ->GetNumShardBits(),
1161
+ 4);
1152
1162
  ASSERT_EQ(new_opt.block_cache_compressed->HasStrictCapacityLimit(), true);
1153
1163
  ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache_compressed)
1154
1164
  ->GetHighPriPoolRatio(),
@@ -2322,6 +2332,7 @@ TEST_F(OptionsOldApiTest, GetOptionsFromMapTest) {
2322
2332
  {"target_file_size_multiplier", "13"},
2323
2333
  {"max_bytes_for_level_base", "14"},
2324
2334
  {"level_compaction_dynamic_level_bytes", "true"},
2335
+ {"level_compaction_dynamic_file_size", "true"},
2325
2336
  {"max_bytes_for_level_multiplier", "15.0"},
2326
2337
  {"max_bytes_for_level_multiplier_additional", "16:17:18"},
2327
2338
  {"max_compaction_bytes", "21"},
@@ -2458,6 +2469,7 @@ TEST_F(OptionsOldApiTest, GetOptionsFromMapTest) {
2458
2469
  ASSERT_EQ(new_cf_opt.target_file_size_multiplier, 13);
2459
2470
  ASSERT_EQ(new_cf_opt.max_bytes_for_level_base, 14U);
2460
2471
  ASSERT_EQ(new_cf_opt.level_compaction_dynamic_level_bytes, true);
2472
+ ASSERT_EQ(new_cf_opt.level_compaction_dynamic_file_size, true);
2461
2473
  ASSERT_EQ(new_cf_opt.max_bytes_for_level_multiplier, 15.0);
2462
2474
  ASSERT_EQ(new_cf_opt.max_bytes_for_level_multiplier_additional.size(), 3U);
2463
2475
  ASSERT_EQ(new_cf_opt.max_bytes_for_level_multiplier_additional[0], 16);
@@ -2788,7 +2800,7 @@ TEST_F(OptionsOldApiTest, GetColumnFamilyOptionsFromStringTest) {
2788
2800
  &new_cf_opt));
2789
2801
  ASSERT_NE(new_cf_opt.blob_cache, nullptr);
2790
2802
  ASSERT_EQ(new_cf_opt.blob_cache->GetCapacity(), 1024UL * 1024UL);
2791
- ASSERT_EQ(static_cast<ShardedCache*>(new_cf_opt.blob_cache.get())
2803
+ ASSERT_EQ(static_cast<ShardedCacheBase*>(new_cf_opt.blob_cache.get())
2792
2804
  ->GetNumShardBits(),
2793
2805
  4);
2794
2806
  ASSERT_EQ(new_cf_opt.blob_cache->HasStrictCapacityLimit(), true);
@@ -2968,15 +2980,18 @@ TEST_F(OptionsOldApiTest, GetBlockBasedTableOptionsFromString) {
2968
2980
  &new_opt));
2969
2981
  ASSERT_TRUE(new_opt.block_cache != nullptr);
2970
2982
  ASSERT_EQ(new_opt.block_cache->GetCapacity(), 1024UL*1024UL);
2971
- ASSERT_EQ(std::dynamic_pointer_cast<ShardedCache>(
2972
- new_opt.block_cache)->GetNumShardBits(), 4);
2983
+ ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(new_opt.block_cache)
2984
+ ->GetNumShardBits(),
2985
+ 4);
2973
2986
  ASSERT_EQ(new_opt.block_cache->HasStrictCapacityLimit(), true);
2974
2987
  ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(
2975
2988
  new_opt.block_cache)->GetHighPriPoolRatio(), 0.5);
2976
2989
  ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
2977
2990
  ASSERT_EQ(new_opt.block_cache_compressed->GetCapacity(), 1024UL*1024UL);
2978
- ASSERT_EQ(std::dynamic_pointer_cast<ShardedCache>(
2979
- new_opt.block_cache_compressed)->GetNumShardBits(), 4);
2991
+ ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(
2992
+ new_opt.block_cache_compressed)
2993
+ ->GetNumShardBits(),
2994
+ 4);
2980
2995
  ASSERT_EQ(new_opt.block_cache_compressed->HasStrictCapacityLimit(), true);
2981
2996
  ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(
2982
2997
  new_opt.block_cache_compressed)->GetHighPriPoolRatio(),
@@ -2991,9 +3006,9 @@ TEST_F(OptionsOldApiTest, GetBlockBasedTableOptionsFromString) {
2991
3006
  ASSERT_TRUE(new_opt.block_cache != nullptr);
2992
3007
  ASSERT_EQ(new_opt.block_cache->GetCapacity(), 2*1024UL*1024UL);
2993
3008
  // Default values
2994
- ASSERT_EQ(std::dynamic_pointer_cast<ShardedCache>(
2995
- new_opt.block_cache)->GetNumShardBits(),
2996
- GetDefaultCacheShardBits(new_opt.block_cache->GetCapacity()));
3009
+ ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(new_opt.block_cache)
3010
+ ->GetNumShardBits(),
3011
+ GetDefaultCacheShardBits(new_opt.block_cache->GetCapacity()));
2997
3012
  ASSERT_EQ(new_opt.block_cache->HasStrictCapacityLimit(), false);
2998
3013
  ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache)
2999
3014
  ->GetHighPriPoolRatio(),
@@ -3001,10 +3016,11 @@ TEST_F(OptionsOldApiTest, GetBlockBasedTableOptionsFromString) {
3001
3016
  ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
3002
3017
  ASSERT_EQ(new_opt.block_cache_compressed->GetCapacity(), 2*1024UL*1024UL);
3003
3018
  // Default values
3004
- ASSERT_EQ(std::dynamic_pointer_cast<ShardedCache>(
3005
- new_opt.block_cache_compressed)->GetNumShardBits(),
3006
- GetDefaultCacheShardBits(
3007
- new_opt.block_cache_compressed->GetCapacity()));
3019
+ ASSERT_EQ(
3020
+ std::dynamic_pointer_cast<ShardedCacheBase>(
3021
+ new_opt.block_cache_compressed)
3022
+ ->GetNumShardBits(),
3023
+ GetDefaultCacheShardBits(new_opt.block_cache_compressed->GetCapacity()));
3008
3024
  ASSERT_EQ(new_opt.block_cache_compressed->HasStrictCapacityLimit(), false);
3009
3025
  ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache_compressed)
3010
3026
  ->GetHighPriPoolRatio(),
@@ -3018,15 +3034,18 @@ TEST_F(OptionsOldApiTest, GetBlockBasedTableOptionsFromString) {
3018
3034
  "high_pri_pool_ratio=0.0;}",
3019
3035
  &new_opt));
3020
3036
  ASSERT_EQ(new_opt.block_cache->GetCapacity(), 0);
3021
- ASSERT_EQ(std::dynamic_pointer_cast<ShardedCache>(
3022
- new_opt.block_cache)->GetNumShardBits(), 5);
3037
+ ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(new_opt.block_cache)
3038
+ ->GetNumShardBits(),
3039
+ 5);
3023
3040
  ASSERT_EQ(new_opt.block_cache->HasStrictCapacityLimit(), false);
3024
3041
  ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(
3025
3042
  new_opt.block_cache)->GetHighPriPoolRatio(), 0.5);
3026
3043
  ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
3027
3044
  ASSERT_EQ(new_opt.block_cache_compressed->GetCapacity(), 0);
3028
- ASSERT_EQ(std::dynamic_pointer_cast<ShardedCache>(
3029
- new_opt.block_cache_compressed)->GetNumShardBits(), 5);
3045
+ ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(
3046
+ new_opt.block_cache_compressed)
3047
+ ->GetNumShardBits(),
3048
+ 5);
3030
3049
  ASSERT_EQ(new_opt.block_cache_compressed->HasStrictCapacityLimit(), false);
3031
3050
  ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache_compressed)
3032
3051
  ->GetHighPriPoolRatio(),
@@ -3041,16 +3060,19 @@ TEST_F(OptionsOldApiTest, GetBlockBasedTableOptionsFromString) {
3041
3060
  &new_opt));
3042
3061
  ASSERT_TRUE(new_opt.block_cache != nullptr);
3043
3062
  ASSERT_EQ(new_opt.block_cache->GetCapacity(), 1024UL*1024UL);
3044
- ASSERT_EQ(std::dynamic_pointer_cast<ShardedCache>(
3045
- new_opt.block_cache)->GetNumShardBits(), 4);
3063
+ ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(new_opt.block_cache)
3064
+ ->GetNumShardBits(),
3065
+ 4);
3046
3066
  ASSERT_EQ(new_opt.block_cache->HasStrictCapacityLimit(), true);
3047
3067
  ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache)
3048
3068
  ->GetHighPriPoolRatio(),
3049
3069
  0.5);
3050
3070
  ASSERT_TRUE(new_opt.block_cache_compressed != nullptr);
3051
3071
  ASSERT_EQ(new_opt.block_cache_compressed->GetCapacity(), 1024UL*1024UL);
3052
- ASSERT_EQ(std::dynamic_pointer_cast<ShardedCache>(
3053
- new_opt.block_cache_compressed)->GetNumShardBits(), 4);
3072
+ ASSERT_EQ(std::dynamic_pointer_cast<ShardedCacheBase>(
3073
+ new_opt.block_cache_compressed)
3074
+ ->GetNumShardBits(),
3075
+ 4);
3054
3076
  ASSERT_EQ(new_opt.block_cache_compressed->HasStrictCapacityLimit(), true);
3055
3077
  ASSERT_EQ(std::dynamic_pointer_cast<LRUCache>(new_opt.block_cache_compressed)
3056
3078
  ->GetHighPriPoolRatio(),
@@ -4983,6 +5005,7 @@ INSTANTIATE_TEST_CASE_P(OptionsSanityCheckTest, OptionsSanityCheckTest,
4983
5005
  } // namespace ROCKSDB_NAMESPACE
4984
5006
 
4985
5007
  int main(int argc, char** argv) {
5008
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
4986
5009
  ::testing::InitGoogleTest(&argc, argv);
4987
5010
  #ifdef GFLAGS
4988
5011
  ParseCommandLineFlags(&argc, &argv, true);
@@ -0,0 +1,98 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ // This source code is licensed under both the GPLv2 (found in the
3
+ // COPYING file in the root directory) and Apache 2.0 License
4
+ // (found in the LICENSE.Apache file in the root directory).
5
+
6
+ #include "port/mmap.h"
7
+
8
+ #include <cassert>
9
+ #include <cstdio>
10
+ #include <cstring>
11
+ #include <new>
12
+ #include <utility>
13
+
14
+ #include "util/hash.h"
15
+
16
+ namespace ROCKSDB_NAMESPACE {
17
+
18
+ MemMapping::~MemMapping() {
19
+ #ifdef OS_WIN
20
+ if (addr_ != nullptr) {
21
+ (void)::UnmapViewOfFile(addr_);
22
+ }
23
+ if (page_file_handle_ != NULL) {
24
+ (void)::CloseHandle(page_file_handle_);
25
+ }
26
+ #else // OS_WIN -> !OS_WIN
27
+ if (addr_ != nullptr) {
28
+ auto status = munmap(addr_, length_);
29
+ assert(status == 0);
30
+ if (status != 0) {
31
+ // TODO: handle error?
32
+ }
33
+ }
34
+ #endif // OS_WIN
35
+ }
36
+
37
+ MemMapping::MemMapping(MemMapping&& other) noexcept {
38
+ *this = std::move(other);
39
+ }
40
+
41
+ MemMapping& MemMapping::operator=(MemMapping&& other) noexcept {
42
+ if (&other == this) {
43
+ return *this;
44
+ }
45
+ this->~MemMapping();
46
+ std::memcpy(this, &other, sizeof(*this));
47
+ new (&other) MemMapping();
48
+ return *this;
49
+ }
50
+
51
+ MemMapping MemMapping::AllocateAnonymous(size_t length, bool huge) {
52
+ MemMapping mm;
53
+ mm.length_ = length;
54
+ assert(mm.addr_ == nullptr);
55
+ if (length == 0) {
56
+ // OK to leave addr as nullptr
57
+ return mm;
58
+ }
59
+ int huge_flag = 0;
60
+ #ifdef OS_WIN
61
+ if (huge) {
62
+ #ifdef FILE_MAP_LARGE_PAGES
63
+ huge_flag = FILE_MAP_LARGE_PAGES;
64
+ #endif // FILE_MAP_LARGE_PAGES
65
+ }
66
+ mm.page_file_handle_ = ::CreateFileMapping(
67
+ INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE | SEC_COMMIT,
68
+ Upper32of64(length), Lower32of64(length), nullptr);
69
+ if (mm.page_file_handle_ == NULL) {
70
+ // Failure
71
+ return mm;
72
+ }
73
+ mm.addr_ = ::MapViewOfFile(mm.page_file_handle_, FILE_MAP_WRITE | huge_flag,
74
+ 0, 0, length);
75
+ #else // OS_WIN -> !OS_WIN
76
+ if (huge) {
77
+ #ifdef MAP_HUGETLB
78
+ huge_flag = MAP_HUGETLB;
79
+ #endif // MAP_HUGE_TLB
80
+ }
81
+ mm.addr_ = mmap(nullptr, length, PROT_READ | PROT_WRITE,
82
+ MAP_PRIVATE | MAP_ANONYMOUS | huge_flag, -1, 0);
83
+ if (mm.addr_ == MAP_FAILED) {
84
+ mm.addr_ = nullptr;
85
+ }
86
+ #endif // OS_WIN
87
+ return mm;
88
+ }
89
+
90
+ MemMapping MemMapping::AllocateHuge(size_t length) {
91
+ return AllocateAnonymous(length, /*huge*/ true);
92
+ }
93
+
94
+ MemMapping MemMapping::AllocateLazyZeroed(size_t length) {
95
+ return AllocateAnonymous(length, /*huge*/ false);
96
+ }
97
+
98
+ } // namespace ROCKSDB_NAMESPACE
@@ -0,0 +1,70 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ // This source code is licensed under both the GPLv2 (found in the
3
+ // COPYING file in the root directory) and Apache 2.0 License
4
+ // (found in the LICENSE.Apache file in the root directory).
5
+
6
+ #pragma once
7
+
8
+ #ifdef OS_WIN
9
+ #include <windows.h>
10
+ // ^^^ Must come first
11
+ #include <memoryapi.h>
12
+ #else
13
+ #include <sys/mman.h>
14
+ #endif // OS_WIN
15
+
16
+ #include <cstdint>
17
+
18
+ #include "rocksdb/rocksdb_namespace.h"
19
+
20
+ namespace ROCKSDB_NAMESPACE {
21
+
22
+ // An RAII wrapper for mmaped memory
23
+ class MemMapping {
24
+ public:
25
+ static constexpr bool kHugePageSupported =
26
+ #if defined(MAP_HUGETLB) || defined(FILE_MAP_LARGE_PAGES)
27
+ true;
28
+ #else
29
+ false;
30
+ #endif
31
+
32
+ // Allocate memory requesting to be backed by huge pages
33
+ static MemMapping AllocateHuge(size_t length);
34
+
35
+ // Allocate memory that is only lazily mapped to resident memory and
36
+ // guaranteed to be zero-initialized. Note that some platforms like
37
+ // Linux allow memory over-commit, where only the used portion of memory
38
+ // matters, while other platforms require enough swap space (page file) to
39
+ // back the full mapping.
40
+ static MemMapping AllocateLazyZeroed(size_t length);
41
+
42
+ // No copies
43
+ MemMapping(const MemMapping&) = delete;
44
+ MemMapping& operator=(const MemMapping&) = delete;
45
+ // Move
46
+ MemMapping(MemMapping&&) noexcept;
47
+ MemMapping& operator=(MemMapping&&) noexcept;
48
+
49
+ // Releases the mapping
50
+ ~MemMapping();
51
+
52
+ inline void* Get() const { return addr_; }
53
+ inline size_t Length() const { return length_; }
54
+
55
+ private:
56
+ MemMapping() {}
57
+
58
+ // The mapped memory, or nullptr on failure / not supported
59
+ void* addr_ = nullptr;
60
+ // The known usable number of bytes starting at that address
61
+ size_t length_ = 0;
62
+
63
+ #ifdef OS_WIN
64
+ HANDLE page_file_handle_ = NULL;
65
+ #endif // OS_WIN
66
+
67
+ static MemMapping AllocateAnonymous(size_t length, bool huge);
68
+ };
69
+
70
+ } // namespace ROCKSDB_NAMESPACE
@@ -35,6 +35,9 @@ void* SaveStack(int* /*num_frames*/, int /*first_frames_to_skip*/) {
35
35
  #if defined(OS_FREEBSD)
36
36
  #include <sys/sysctl.h>
37
37
  #endif
38
+ #ifdef OS_LINUX
39
+ #include <sys/prctl.h>
40
+ #endif
38
41
 
39
42
  #include "port/lang.h"
40
43
 
@@ -187,6 +190,10 @@ void InstallStackTraceHandler() {
187
190
  signal(SIGSEGV, StackTraceHandler);
188
191
  signal(SIGBUS, StackTraceHandler);
189
192
  signal(SIGABRT, StackTraceHandler);
193
+ // Allow ouside debugger to attach, even with Yama security restrictions
194
+ #ifdef PR_SET_PTRACER_ANY
195
+ (void)prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0);
196
+ #endif
190
197
  }
191
198
 
192
199
  } // namespace port
@@ -12,7 +12,10 @@ namespace port {
12
12
 
13
13
  // Install a signal handler to print callstack on the following signals:
14
14
  // SIGILL SIGSEGV SIGBUS SIGABRT
15
- // Currently supports linux only. No-op otherwise.
15
+ // And also (Linux ony for now) overrides security settings to allow outside
16
+ // processes to attach to this one as a debugger. ONLY USE FOR NON-SECURITY
17
+ // CRITICAL PROCESSES such as unit tests or benchmarking tools.
18
+ // Currently supports only some POSIX implementations. No-op otherwise.
16
19
  void InstallStackTraceHandler();
17
20
 
18
21
  // Prints stack, skips skip_first_frames frames
@@ -246,13 +246,8 @@ inline void cacheline_aligned_free(void *memblock) {
246
246
 
247
247
  extern const size_t kPageSize;
248
248
 
249
- // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991 for MINGW32
250
- // could not be worked around with by -mno-ms-bitfields
251
- #ifndef __MINGW32__
252
- #define ALIGN_AS(n) __declspec(align(n))
253
- #else
254
- #define ALIGN_AS(n)
255
- #endif
249
+ // Part of C++11
250
+ #define ALIGN_AS(n) alignas(n)
256
251
 
257
252
  static inline void AsmVolatilePause() {
258
253
  #if defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM64) || defined(_M_ARM)
@@ -154,6 +154,7 @@ LIB_SOURCES = \
154
154
  options/options.cc \
155
155
  options/options_helper.cc \
156
156
  options/options_parser.cc \
157
+ port/mmap.cc \
157
158
  port/port_posix.cc \
158
159
  port/win/env_default.cc \
159
160
  port/win/env_win.cc \
@@ -524,32 +524,32 @@ Status CheckCacheOptionCompatibility(const BlockBasedTableOptions& bbto) {
524
524
 
525
525
  // More complex test of shared key space, in case the instances are wrappers
526
526
  // for some shared underlying cache.
527
- std::string sentinel_key(size_t{1}, '\0');
527
+ CacheKey sentinel_key = CacheKey::CreateUniqueForProcessLifetime();
528
528
  static char kRegularBlockCacheMarker = 'b';
529
529
  static char kCompressedBlockCacheMarker = 'c';
530
530
  static char kPersistentCacheMarker = 'p';
531
531
  if (bbto.block_cache) {
532
532
  bbto.block_cache
533
- ->Insert(Slice(sentinel_key), &kRegularBlockCacheMarker, 1,
533
+ ->Insert(sentinel_key.AsSlice(), &kRegularBlockCacheMarker, 1,
534
534
  GetNoopDeleterForRole<CacheEntryRole::kMisc>())
535
535
  .PermitUncheckedError();
536
536
  }
537
537
  if (bbto.block_cache_compressed) {
538
538
  bbto.block_cache_compressed
539
- ->Insert(Slice(sentinel_key), &kCompressedBlockCacheMarker, 1,
539
+ ->Insert(sentinel_key.AsSlice(), &kCompressedBlockCacheMarker, 1,
540
540
  GetNoopDeleterForRole<CacheEntryRole::kMisc>())
541
541
  .PermitUncheckedError();
542
542
  }
543
543
  if (bbto.persistent_cache) {
544
544
  // Note: persistent cache copies the data, not keeping the pointer
545
545
  bbto.persistent_cache
546
- ->Insert(Slice(sentinel_key), &kPersistentCacheMarker, 1)
546
+ ->Insert(sentinel_key.AsSlice(), &kPersistentCacheMarker, 1)
547
547
  .PermitUncheckedError();
548
548
  }
549
549
  // If we get something different from what we inserted, that indicates
550
550
  // dangerously overlapping key spaces.
551
551
  if (bbto.block_cache) {
552
- auto handle = bbto.block_cache->Lookup(Slice(sentinel_key));
552
+ auto handle = bbto.block_cache->Lookup(sentinel_key.AsSlice());
553
553
  if (handle) {
554
554
  auto v = static_cast<char*>(bbto.block_cache->Value(handle));
555
555
  char c = *v;
@@ -568,7 +568,7 @@ Status CheckCacheOptionCompatibility(const BlockBasedTableOptions& bbto) {
568
568
  }
569
569
  }
570
570
  if (bbto.block_cache_compressed) {
571
- auto handle = bbto.block_cache_compressed->Lookup(Slice(sentinel_key));
571
+ auto handle = bbto.block_cache_compressed->Lookup(sentinel_key.AsSlice());
572
572
  if (handle) {
573
573
  auto v = static_cast<char*>(bbto.block_cache_compressed->Value(handle));
574
574
  char c = *v;
@@ -591,7 +591,7 @@ Status CheckCacheOptionCompatibility(const BlockBasedTableOptions& bbto) {
591
591
  if (bbto.persistent_cache) {
592
592
  std::unique_ptr<char[]> data;
593
593
  size_t size = 0;
594
- bbto.persistent_cache->Lookup(Slice(sentinel_key), &data, &size)
594
+ bbto.persistent_cache->Lookup(sentinel_key.AsSlice(), &data, &size)
595
595
  .PermitUncheckedError();
596
596
  if (data && size > 0) {
597
597
  if (data[0] == kRegularBlockCacheMarker) {
@@ -21,7 +21,6 @@
21
21
 
22
22
  #include "cache/cache_entry_roles.h"
23
23
  #include "cache/cache_key.h"
24
- #include "cache/sharded_cache.h"
25
24
  #include "db/compaction/compaction_picker.h"
26
25
  #include "db/dbformat.h"
27
26
  #include "db/pinned_iterators_manager.h"
@@ -2026,8 +2025,9 @@ FragmentedRangeTombstoneIterator* BlockBasedTable::NewRangeTombstoneIterator(
2026
2025
  if (read_options.snapshot != nullptr) {
2027
2026
  snapshot = read_options.snapshot->GetSequenceNumber();
2028
2027
  }
2029
- return new FragmentedRangeTombstoneIterator(
2030
- rep_->fragmented_range_dels, rep_->internal_comparator, snapshot);
2028
+ return new FragmentedRangeTombstoneIterator(rep_->fragmented_range_dels,
2029
+ rep_->internal_comparator,
2030
+ snapshot, read_options.timestamp);
2031
2031
  }
2032
2032
 
2033
2033
  bool BlockBasedTable::FullFilterKeyMayMatch(
@@ -621,6 +621,7 @@ INSTANTIATE_TEST_CASE_P(P, IndexBlockTest,
621
621
  } // namespace ROCKSDB_NAMESPACE
622
622
 
623
623
  int main(int argc, char **argv) {
624
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
624
625
  ::testing::InitGoogleTest(&argc, argv);
625
626
  return RUN_ALL_TESTS();
626
627
  }
@@ -711,6 +711,7 @@ TEST(DataBlockHashIndex, BlockBoundary) {
711
711
  } // namespace ROCKSDB_NAMESPACE
712
712
 
713
713
  int main(int argc, char** argv) {
714
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
714
715
  ::testing::InitGoogleTest(&argc, argv);
715
716
  return RUN_ALL_TESTS();
716
717
  }
@@ -334,6 +334,7 @@ TEST_F(FullFilterBlockTest, SingleChunk) {
334
334
  } // namespace ROCKSDB_NAMESPACE
335
335
 
336
336
  int main(int argc, char** argv) {
337
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
337
338
  ::testing::InitGoogleTest(&argc, argv);
338
339
  return RUN_ALL_TESTS();
339
340
  }
@@ -429,6 +429,7 @@ TEST_P(PartitionedFilterBlockTest, PartitionCount) {
429
429
  } // namespace ROCKSDB_NAMESPACE
430
430
 
431
431
  int main(int argc, char** argv) {
432
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
432
433
  ::testing::InitGoogleTest(&argc, argv);
433
434
  return RUN_ALL_TESTS();
434
435
  }
@@ -630,6 +630,7 @@ TEST_F(CuckooBuilderTest, FailWhenSameKeyInserted) {
630
630
  } // namespace ROCKSDB_NAMESPACE
631
631
 
632
632
  int main(int argc, char** argv) {
633
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
633
634
  ::testing::InitGoogleTest(&argc, argv);
634
635
  return RUN_ALL_TESTS();
635
636
  }
@@ -556,6 +556,7 @@ TEST_F(CuckooReaderTest, TestReadPerformance) {
556
556
 
557
557
  int main(int argc, char** argv) {
558
558
  if (ROCKSDB_NAMESPACE::port::kLittleEndian) {
559
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
559
560
  ::testing::InitGoogleTest(&argc, argv);
560
561
  ParseCommandLineFlags(&argc, &argv, true);
561
562
  return RUN_ALL_TESTS();
@@ -250,6 +250,20 @@ bool GetContext::SaveValue(const ParsedInternalKey& parsed_key,
250
250
  if (ts_sz > 0 && timestamp_ != nullptr) {
251
251
  if (!timestamp_->empty()) {
252
252
  assert(ts_sz == timestamp_->size());
253
+ // `timestamp` can be set before `SaveValue` is ever called
254
+ // when max_covering_tombstone_seq_ was set.
255
+ // If this key has a higher sequence number than range tombstone,
256
+ // then timestamp should be updated. `ts_from_rangetombstone_` is
257
+ // set to false afterwards so that only the key with highest seqno
258
+ // updates the timestamp.
259
+ if (ts_from_rangetombstone_) {
260
+ assert(max_covering_tombstone_seq_);
261
+ if (parsed_key.sequence > *max_covering_tombstone_seq_) {
262
+ Slice ts = ExtractTimestampFromUserKey(parsed_key.user_key, ts_sz);
263
+ timestamp_->assign(ts.data(), ts.size());
264
+ ts_from_rangetombstone_ = false;
265
+ }
266
+ }
253
267
  }
254
268
  // TODO optimize for small size ts
255
269
  const std::string kMaxTs(ts_sz, '\xff');
@@ -263,9 +277,13 @@ bool GetContext::SaveValue(const ParsedInternalKey& parsed_key,
263
277
  auto type = parsed_key.type;
264
278
  // Key matches. Process it
265
279
  if ((type == kTypeValue || type == kTypeMerge || type == kTypeBlobIndex ||
266
- type == kTypeWideColumnEntity) &&
280
+ type == kTypeWideColumnEntity || type == kTypeDeletion ||
281
+ type == kTypeDeletionWithTimestamp || type == kTypeSingleDeletion) &&
267
282
  max_covering_tombstone_seq_ != nullptr &&
268
283
  *max_covering_tombstone_seq_ > parsed_key.sequence) {
284
+ // Note that deletion types are also considered, this is for the case
285
+ // when we need to return timestamp to user. If a range tombstone has a
286
+ // higher seqno than point tombstone, its timestamp should be returned.
269
287
  type = kTypeRangeDeletion;
270
288
  }
271
289
  switch (type) {
@@ -148,6 +148,14 @@ class GetContext {
148
148
  return max_covering_tombstone_seq_;
149
149
  }
150
150
 
151
+ bool NeedTimestamp() { return timestamp_ != nullptr; }
152
+
153
+ void SetTimestampFromRangeTombstone(const Slice& timestamp) {
154
+ assert(timestamp_);
155
+ timestamp_->assign(timestamp.data(), timestamp.size());
156
+ ts_from_rangetombstone_ = true;
157
+ }
158
+
151
159
  PinnedIteratorsManager* pinned_iters_mgr() { return pinned_iters_mgr_; }
152
160
 
153
161
  // If a non-null string is passed, all the SaveValue calls will be
@@ -190,6 +198,7 @@ class GetContext {
190
198
  PinnableSlice* pinnable_val_;
191
199
  PinnableWideColumns* columns_;
192
200
  std::string* timestamp_;
201
+ bool ts_from_rangetombstone_{false};
193
202
  bool* value_found_; // Is value set correctly? Used by KeyMayExist
194
203
  MergeContext* merge_context_;
195
204
  SequenceNumber* max_covering_tombstone_seq_;