@nxtedition/rocksdb 6.0.1 → 6.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/BUILDING.md +2 -2
  2. package/binding.cc +14 -17
  3. package/deps/rocksdb/build_version.cc +4 -10
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +17 -3
  5. package/deps/rocksdb/rocksdb/Makefile +57 -86
  6. package/deps/rocksdb/rocksdb/TARGETS +4 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_test.cc +29 -17
  8. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +511 -0
  9. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +299 -0
  10. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +3 -0
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.h +7 -0
  12. package/deps/rocksdb/rocksdb/common.mk +30 -0
  13. package/deps/rocksdb/rocksdb/crash_test.mk +3 -3
  14. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +1 -1
  15. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -3
  16. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -7
  17. package/deps/rocksdb/rocksdb/db/builder.cc +11 -4
  18. package/deps/rocksdb/rocksdb/db/c.cc +45 -0
  19. package/deps/rocksdb/rocksdb/db/c_test.c +25 -2
  20. package/deps/rocksdb/rocksdb/db/column_family.cc +4 -3
  21. package/deps/rocksdb/rocksdb/db/column_family_test.cc +23 -22
  22. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +11 -11
  23. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +2 -2
  24. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +36 -10
  25. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +4 -1
  26. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +3 -2
  27. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +25 -10
  28. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +6 -0
  29. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +3 -3
  30. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +69 -14
  31. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +7 -7
  32. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +1 -1
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +21 -21
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +135 -32
  36. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  37. package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
  38. package/deps/rocksdb/rocksdb/db/corruption_test.cc +209 -38
  39. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +2 -2
  40. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -25
  42. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +85 -138
  43. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +68 -3
  44. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +38 -13
  45. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -1
  46. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -1
  47. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +9 -8
  48. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +1 -1
  49. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +5 -4
  50. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -4
  51. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +2 -2
  52. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +9 -3
  53. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +6 -3
  54. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +26 -18
  55. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +8 -7
  56. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +8 -8
  57. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +6 -3
  58. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +2 -2
  59. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +6 -6
  60. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +2 -2
  61. package/deps/rocksdb/rocksdb/db/db_options_test.cc +12 -12
  62. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +16 -15
  63. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +6 -4
  64. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +15 -14
  65. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +6 -6
  66. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +68 -7
  67. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -5
  68. package/deps/rocksdb/rocksdb/db/db_test.cc +44 -42
  69. package/deps/rocksdb/rocksdb/db/db_test2.cc +23 -19
  70. package/deps/rocksdb/rocksdb/db/db_test_util.cc +95 -17
  71. package/deps/rocksdb/rocksdb/db/db_test_util.h +48 -0
  72. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -1
  73. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +7 -7
  74. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +4 -4
  75. package/deps/rocksdb/rocksdb/db/db_write_test.cc +6 -6
  76. package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
  77. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +1 -1
  78. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -8
  79. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +34 -12
  80. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +3 -0
  81. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +7 -7
  82. package/deps/rocksdb/rocksdb/db/file_indexer.h +1 -4
  83. package/deps/rocksdb/rocksdb/db/flush_job.cc +18 -4
  84. package/deps/rocksdb/rocksdb/db/flush_job.h +4 -0
  85. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +98 -30
  86. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
  87. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +3 -0
  88. package/deps/rocksdb/rocksdb/db/internal_stats.cc +12 -12
  89. package/deps/rocksdb/rocksdb/db/listener_test.cc +4 -3
  90. package/deps/rocksdb/rocksdb/db/memtable.cc +2 -2
  91. package/deps/rocksdb/rocksdb/db/memtable_list.h +1 -1
  92. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +37 -25
  93. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +1 -1
  94. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +18 -18
  95. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +6 -6
  96. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -1
  97. package/deps/rocksdb/rocksdb/db/repair.cc +1 -1
  98. package/deps/rocksdb/rocksdb/db/repair_test.cc +5 -5
  99. package/deps/rocksdb/rocksdb/db/snapshot_checker.h +1 -2
  100. package/deps/rocksdb/rocksdb/db/table_cache.cc +2 -4
  101. package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
  102. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +3 -5
  103. package/deps/rocksdb/rocksdb/db/version_edit.cc +2 -2
  104. package/deps/rocksdb/rocksdb/db/version_set.cc +2 -2
  105. package/deps/rocksdb/rocksdb/db/version_set.h +3 -3
  106. package/deps/rocksdb/rocksdb/db/wal_edit.h +2 -1
  107. package/deps/rocksdb/rocksdb/db/wal_manager.cc +2 -3
  108. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/write_batch.cc +178 -30
  110. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +6 -6
  111. package/deps/rocksdb/rocksdb/db/write_controller.h +1 -1
  112. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +0 -2
  113. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +7 -6
  114. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +2 -1
  115. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +4 -3
  116. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +31 -6
  117. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +4 -1
  118. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.cc +0 -10
  119. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +45 -42
  120. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +359 -275
  121. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +53 -3
  122. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +0 -12
  123. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +13 -11
  124. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +276 -109
  125. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +63 -0
  126. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +45 -54
  127. package/deps/rocksdb/rocksdb/env/composite_env.cc +87 -14
  128. package/deps/rocksdb/rocksdb/env/env.cc +0 -60
  129. package/deps/rocksdb/rocksdb/env/env_encryption.cc +9 -0
  130. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +1 -1
  131. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -5
  132. package/deps/rocksdb/rocksdb/env/env_test.cc +18 -5
  133. package/deps/rocksdb/rocksdb/env/fs_posix.cc +17 -12
  134. package/deps/rocksdb/rocksdb/env/io_posix.cc +39 -37
  135. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +9 -9
  136. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +1 -1
  137. package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
  138. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +5 -2
  139. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +7 -0
  140. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +69 -45
  141. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +3 -1
  142. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +35 -0
  143. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +5 -5
  144. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +59 -2
  145. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -0
  146. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +2 -1
  147. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +46 -44
  148. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -1
  149. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +2 -4
  150. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +3 -0
  151. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +28 -3
  152. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +91 -40
  153. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -2
  154. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +22 -13
  155. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +9 -0
  156. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +4 -0
  157. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +25 -0
  158. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +189 -103
  159. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +14 -0
  160. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  161. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +18 -4
  162. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  163. package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +1 -5
  164. package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +1 -5
  165. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +6 -8
  166. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +1 -1
  167. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +1 -1
  168. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +5 -3
  169. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +266 -45
  170. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +2 -1
  171. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +1 -4
  172. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +4 -4
  173. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +2 -8
  174. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +2 -2
  175. package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +1 -5
  176. package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +1 -5
  177. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +2 -2
  178. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +2 -1
  179. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +1 -1
  180. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +3 -3
  181. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +2 -2
  182. package/deps/rocksdb/rocksdb/options/cf_options.cc +34 -38
  183. package/deps/rocksdb/rocksdb/options/configurable.cc +9 -27
  184. package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -1
  185. package/deps/rocksdb/rocksdb/options/customizable.cc +3 -1
  186. package/deps/rocksdb/rocksdb/options/customizable_test.cc +379 -318
  187. package/deps/rocksdb/rocksdb/options/db_options.cc +38 -17
  188. package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
  189. package/deps/rocksdb/rocksdb/options/options_helper.cc +82 -39
  190. package/deps/rocksdb/rocksdb/options/options_parser.cc +10 -10
  191. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -3
  192. package/deps/rocksdb/rocksdb/options/options_test.cc +115 -59
  193. package/deps/rocksdb/rocksdb/port/port_posix.h +0 -15
  194. package/deps/rocksdb/rocksdb/port/win/env_win.cc +5 -4
  195. package/deps/rocksdb/rocksdb/port/win/env_win.h +2 -2
  196. package/deps/rocksdb/rocksdb/port/win/port_win.h +0 -31
  197. package/deps/rocksdb/rocksdb/rocksdb.pc.in +11 -0
  198. package/deps/rocksdb/rocksdb/src.mk +2 -0
  199. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  200. package/deps/rocksdb/rocksdb/table/block_based/block.cc +4 -2
  201. package/deps/rocksdb/rocksdb/table/block_based/block.h +21 -25
  202. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +3 -4
  203. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +14 -4
  204. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +52 -15
  205. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +1 -1
  206. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +85 -41
  207. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +42 -72
  208. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +7 -5
  209. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -1
  210. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -1
  211. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +33 -17
  212. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +2 -1
  213. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +2 -2
  214. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  215. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +2 -1
  216. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +2 -1
  217. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +6 -3
  218. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +4 -4
  219. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +5 -5
  220. package/deps/rocksdb/rocksdb/table/cleanable_test.cc +113 -0
  221. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +1 -1
  222. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +1 -1
  223. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -1
  224. package/deps/rocksdb/rocksdb/table/format.cc +22 -20
  225. package/deps/rocksdb/rocksdb/table/iterator.cc +1 -81
  226. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +2 -2
  227. package/deps/rocksdb/rocksdb/table/multiget_context.h +14 -11
  228. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +0 -3
  229. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +12 -1
  230. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +4 -4
  231. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
  232. package/deps/rocksdb/rocksdb/table/table_properties.cc +3 -5
  233. package/deps/rocksdb/rocksdb/table/table_test.cc +202 -78
  234. package/deps/rocksdb/rocksdb/table/unique_id.cc +57 -25
  235. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +34 -4
  236. package/deps/rocksdb/rocksdb/test_util/testutil.cc +1 -1
  237. package/deps/rocksdb/rocksdb/test_util/testutil.h +11 -8
  238. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +8 -4
  239. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +17 -0
  240. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +11 -9
  241. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +3 -3
  242. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +254 -98
  243. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +4 -4
  244. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +186 -42
  245. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +75 -49
  246. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +9 -8
  247. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +4 -1
  248. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  249. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +17 -3
  250. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
  251. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +1 -1
  252. package/deps/rocksdb/rocksdb/util/autovector_test.cc +4 -4
  253. package/deps/rocksdb/rocksdb/util/bloom_test.cc +14 -8
  254. package/deps/rocksdb/rocksdb/util/build_version.cc.in +5 -6
  255. package/deps/rocksdb/rocksdb/util/cleanable.cc +180 -0
  256. package/deps/rocksdb/rocksdb/util/comparator.cc +5 -3
  257. package/deps/rocksdb/rocksdb/util/compression.h +7 -7
  258. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +148 -0
  259. package/deps/rocksdb/rocksdb/util/filelock_test.cc +2 -2
  260. package/deps/rocksdb/rocksdb/util/filter_bench.cc +12 -4
  261. package/deps/rocksdb/rocksdb/util/heap.h +5 -3
  262. package/deps/rocksdb/rocksdb/util/random.cc +1 -5
  263. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +12 -9
  264. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -1
  265. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +1 -1
  266. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +2 -4
  267. package/deps/rocksdb/rocksdb/util/slice.cc +8 -9
  268. package/deps/rocksdb/rocksdb/util/string_util.cc +3 -2
  269. package/deps/rocksdb/rocksdb/util/string_util.h +0 -13
  270. package/deps/rocksdb/rocksdb/util/thread_local.cc +4 -23
  271. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +99 -22
  272. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +7 -0
  273. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +102 -59
  274. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +38 -36
  275. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -2
  276. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +28 -0
  277. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +3 -0
  278. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -1
  279. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +71 -0
  280. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +71 -0
  281. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -1
  282. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +5 -5
  283. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +3 -3
  284. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -13
  285. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +40 -0
  286. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc +10 -8
  287. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.h +4 -2
  288. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +17 -0
  289. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +7 -7
  290. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +8 -1
  291. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +5 -1
  292. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +21 -15
  293. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +2 -2
  294. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +69 -11
  295. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +22 -9
  296. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +26 -5
  297. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +17 -4
  298. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +19 -16
  299. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +7 -3
  300. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +3 -2
  301. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +2 -2
  302. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +2 -2
  303. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
  304. package/deps/rocksdb/rocksdb.gyp +8 -2
  305. package/package.json +1 -1
  306. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  307. package/prebuilds/linux-x64/node.napi.node +0 -0
  308. package/deps/rocksdb/rocksdb/python.mk +0 -9
  309. package/prebuilds/darwin-x64/node.napi.node +0 -0
  310. package/prebuilds/linux-arm64/node.napi.node +0 -0
@@ -152,14 +152,6 @@ struct SavePoints {
152
152
  std::stack<SavePoint, autovector<SavePoint>> stack;
153
153
  };
154
154
 
155
- WriteBatch::WriteBatch(size_t reserved_bytes, size_t max_bytes)
156
- : content_flags_(0), max_bytes_(max_bytes), rep_() {
157
- rep_.reserve((reserved_bytes > WriteBatchInternal::kHeader)
158
- ? reserved_bytes
159
- : WriteBatchInternal::kHeader);
160
- rep_.resize(WriteBatchInternal::kHeader);
161
- }
162
-
163
155
  WriteBatch::WriteBatch(size_t reserved_bytes, size_t max_bytes,
164
156
  size_t protection_bytes_per_key, size_t default_cf_ts_sz)
165
157
  : content_flags_(0),
@@ -580,14 +572,16 @@ Status WriteBatchInternal::Iterate(const WriteBatch* wb,
580
572
  s = handler->MarkBeginPrepare();
581
573
  assert(s.ok());
582
574
  empty_batch = false;
583
- if (!handler->WriteAfterCommit()) {
575
+ if (handler->WriteAfterCommit() ==
576
+ WriteBatch::Handler::OptionState::kDisabled) {
584
577
  s = Status::NotSupported(
585
578
  "WriteCommitted txn tag when write_after_commit_ is disabled (in "
586
579
  "WritePrepared/WriteUnprepared mode). If it is not due to "
587
580
  "corruption, the WAL must be emptied before changing the "
588
581
  "WritePolicy.");
589
582
  }
590
- if (handler->WriteBeforePrepare()) {
583
+ if (handler->WriteBeforePrepare() ==
584
+ WriteBatch::Handler::OptionState::kEnabled) {
591
585
  s = Status::NotSupported(
592
586
  "WriteCommitted txn tag when write_before_prepare_ is enabled "
593
587
  "(in WriteUnprepared mode). If it is not due to corruption, the "
@@ -600,7 +594,8 @@ Status WriteBatchInternal::Iterate(const WriteBatch* wb,
600
594
  s = handler->MarkBeginPrepare();
601
595
  assert(s.ok());
602
596
  empty_batch = false;
603
- if (handler->WriteAfterCommit()) {
597
+ if (handler->WriteAfterCommit() ==
598
+ WriteBatch::Handler::OptionState::kEnabled) {
604
599
  s = Status::NotSupported(
605
600
  "WritePrepared/WriteUnprepared txn tag when write_after_commit_ "
606
601
  "is enabled (in default WriteCommitted mode). If it is not due "
@@ -614,13 +609,15 @@ Status WriteBatchInternal::Iterate(const WriteBatch* wb,
614
609
  s = handler->MarkBeginPrepare(true /* unprepared */);
615
610
  assert(s.ok());
616
611
  empty_batch = false;
617
- if (handler->WriteAfterCommit()) {
612
+ if (handler->WriteAfterCommit() ==
613
+ WriteBatch::Handler::OptionState::kEnabled) {
618
614
  s = Status::NotSupported(
619
615
  "WriteUnprepared txn tag when write_after_commit_ is enabled (in "
620
616
  "default WriteCommitted mode). If it is not due to corruption, "
621
617
  "the WAL must be emptied before changing the WritePolicy.");
622
618
  }
623
- if (!handler->WriteBeforePrepare()) {
619
+ if (handler->WriteBeforePrepare() ==
620
+ WriteBatch::Handler::OptionState::kDisabled) {
624
621
  s = Status::NotSupported(
625
622
  "WriteUnprepared txn tag when write_before_prepare_ is disabled "
626
623
  "(in WriteCommitted/WritePrepared mode). If it is not due to "
@@ -748,10 +745,10 @@ Status CheckColumnFamilyTimestampSize(ColumnFamilyHandle* column_family,
748
745
 
749
746
  Status WriteBatchInternal::Put(WriteBatch* b, uint32_t column_family_id,
750
747
  const Slice& key, const Slice& value) {
751
- if (key.size() > size_t{port::kMaxUint32}) {
748
+ if (key.size() > size_t{std::numeric_limits<uint32_t>::max()}) {
752
749
  return Status::InvalidArgument("key is too large");
753
750
  }
754
- if (value.size() > size_t{port::kMaxUint32}) {
751
+ if (value.size() > size_t{std::numeric_limits<uint32_t>::max()}) {
755
752
  return Status::InvalidArgument("value is too large");
756
753
  }
757
754
 
@@ -828,7 +825,7 @@ Status WriteBatchInternal::CheckSlicePartsLength(const SliceParts& key,
828
825
  for (int i = 0; i < key.num_parts; ++i) {
829
826
  total_key_bytes += key.parts[i].size();
830
827
  }
831
- if (total_key_bytes >= size_t{port::kMaxUint32}) {
828
+ if (total_key_bytes >= size_t{std::numeric_limits<uint32_t>::max()}) {
832
829
  return Status::InvalidArgument("key is too large");
833
830
  }
834
831
 
@@ -836,7 +833,7 @@ Status WriteBatchInternal::CheckSlicePartsLength(const SliceParts& key,
836
833
  for (int i = 0; i < value.num_parts; ++i) {
837
834
  total_value_bytes += value.parts[i].size();
838
835
  }
839
- if (total_value_bytes >= size_t{port::kMaxUint32}) {
836
+ if (total_value_bytes >= size_t{std::numeric_limits<uint32_t>::max()}) {
840
837
  return Status::InvalidArgument("value is too large");
841
838
  }
842
839
  return Status::OK();
@@ -1295,10 +1292,10 @@ Status WriteBatch::DeleteRange(ColumnFamilyHandle* column_family,
1295
1292
 
1296
1293
  Status WriteBatchInternal::Merge(WriteBatch* b, uint32_t column_family_id,
1297
1294
  const Slice& key, const Slice& value) {
1298
- if (key.size() > size_t{port::kMaxUint32}) {
1295
+ if (key.size() > size_t{std::numeric_limits<uint32_t>::max()}) {
1299
1296
  return Status::InvalidArgument("key is too large");
1300
1297
  }
1301
- if (value.size() > size_t{port::kMaxUint32}) {
1298
+ if (value.size() > size_t{std::numeric_limits<uint32_t>::max()}) {
1302
1299
  return Status::InvalidArgument("value is too large");
1303
1300
  }
1304
1301
 
@@ -1494,6 +1491,8 @@ Status WriteBatch::UpdateTimestamps(
1494
1491
  return s;
1495
1492
  }
1496
1493
 
1494
+ namespace {
1495
+
1497
1496
  class MemTableInserter : public WriteBatch::Handler {
1498
1497
 
1499
1498
  SequenceNumber sequence_;
@@ -1581,9 +1580,24 @@ class MemTableInserter : public WriteBatch::Handler {
1581
1580
  return res;
1582
1581
  }
1583
1582
 
1583
+ void DecrementProtectionInfoIdxForTryAgain() {
1584
+ if (prot_info_ != nullptr) --prot_info_idx_;
1585
+ }
1586
+
1587
+ void ResetProtectionInfo() {
1588
+ prot_info_idx_ = 0;
1589
+ prot_info_ = nullptr;
1590
+ }
1591
+
1584
1592
  protected:
1585
- bool WriteBeforePrepare() const override { return write_before_prepare_; }
1586
- bool WriteAfterCommit() const override { return write_after_commit_; }
1593
+ Handler::OptionState WriteBeforePrepare() const override {
1594
+ return write_before_prepare_ ? Handler::OptionState::kEnabled
1595
+ : Handler::OptionState::kDisabled;
1596
+ }
1597
+ Handler::OptionState WriteAfterCommit() const override {
1598
+ return write_after_commit_ ? Handler::OptionState::kEnabled
1599
+ : Handler::OptionState::kDisabled;
1600
+ }
1587
1601
 
1588
1602
  public:
1589
1603
  // cf_mems should not be shared with concurrent inserters
@@ -1871,15 +1885,25 @@ class MemTableInserter : public WriteBatch::Handler {
1871
1885
  Status PutCF(uint32_t column_family_id, const Slice& key,
1872
1886
  const Slice& value) override {
1873
1887
  const auto* kv_prot_info = NextProtectionInfo();
1888
+ Status ret_status;
1874
1889
  if (kv_prot_info != nullptr) {
1875
1890
  // Memtable needs seqno, doesn't need CF ID
1876
1891
  auto mem_kv_prot_info =
1877
1892
  kv_prot_info->StripC(column_family_id).ProtectS(sequence_);
1878
- return PutCFImpl(column_family_id, key, value, kTypeValue,
1879
- &mem_kv_prot_info);
1893
+ ret_status = PutCFImpl(column_family_id, key, value, kTypeValue,
1894
+ &mem_kv_prot_info);
1895
+ } else {
1896
+ ret_status = PutCFImpl(column_family_id, key, value, kTypeValue,
1897
+ nullptr /* kv_prot_info */);
1880
1898
  }
1881
- return PutCFImpl(column_family_id, key, value, kTypeValue,
1882
- nullptr /* kv_prot_info */);
1899
+ // TODO: this assumes that if TryAgain status is returned to the caller,
1900
+ // the operation is actually tried again. The proper way to do this is to
1901
+ // pass a `try_again` parameter to the operation itself and decrement
1902
+ // prot_info_idx_ based on that
1903
+ if (UNLIKELY(ret_status.IsTryAgain())) {
1904
+ DecrementProtectionInfoIdxForTryAgain();
1905
+ }
1906
+ return ret_status;
1883
1907
  }
1884
1908
 
1885
1909
  Status DeleteImpl(uint32_t /*column_family_id*/, const Slice& key,
@@ -1926,6 +1950,9 @@ class MemTableInserter : public WriteBatch::Handler {
1926
1950
  } else if (ret_status.ok()) {
1927
1951
  MaybeAdvanceSeq(false /* batch_boundary */);
1928
1952
  }
1953
+ if (UNLIKELY(ret_status.IsTryAgain())) {
1954
+ DecrementProtectionInfoIdxForTryAgain();
1955
+ }
1929
1956
  return ret_status;
1930
1957
  }
1931
1958
 
@@ -1957,6 +1984,9 @@ class MemTableInserter : public WriteBatch::Handler {
1957
1984
  ret_status =
1958
1985
  WriteBatchInternal::Delete(rebuilding_trx_, column_family_id, key);
1959
1986
  }
1987
+ if (UNLIKELY(ret_status.IsTryAgain())) {
1988
+ DecrementProtectionInfoIdxForTryAgain();
1989
+ }
1960
1990
  return ret_status;
1961
1991
  }
1962
1992
 
@@ -1985,6 +2015,9 @@ class MemTableInserter : public WriteBatch::Handler {
1985
2015
  } else if (ret_status.ok()) {
1986
2016
  MaybeAdvanceSeq(false /* batch_boundary */);
1987
2017
  }
2018
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2019
+ DecrementProtectionInfoIdxForTryAgain();
2020
+ }
1988
2021
  return ret_status;
1989
2022
  }
1990
2023
  assert(ret_status.ok());
@@ -2009,6 +2042,9 @@ class MemTableInserter : public WriteBatch::Handler {
2009
2042
  ret_status = WriteBatchInternal::SingleDelete(rebuilding_trx_,
2010
2043
  column_family_id, key);
2011
2044
  }
2045
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2046
+ DecrementProtectionInfoIdxForTryAgain();
2047
+ }
2012
2048
  return ret_status;
2013
2049
  }
2014
2050
 
@@ -2038,6 +2074,9 @@ class MemTableInserter : public WriteBatch::Handler {
2038
2074
  } else if (ret_status.ok()) {
2039
2075
  MaybeAdvanceSeq(false /* batch_boundary */);
2040
2076
  }
2077
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2078
+ DecrementProtectionInfoIdxForTryAgain();
2079
+ }
2041
2080
  return ret_status;
2042
2081
  }
2043
2082
  assert(ret_status.ok());
@@ -2092,6 +2131,9 @@ class MemTableInserter : public WriteBatch::Handler {
2092
2131
  ret_status = WriteBatchInternal::DeleteRange(
2093
2132
  rebuilding_trx_, column_family_id, begin_key, end_key);
2094
2133
  }
2134
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2135
+ DecrementProtectionInfoIdxForTryAgain();
2136
+ }
2095
2137
  return ret_status;
2096
2138
  }
2097
2139
 
@@ -2121,6 +2163,9 @@ class MemTableInserter : public WriteBatch::Handler {
2121
2163
  } else if (ret_status.ok()) {
2122
2164
  MaybeAdvanceSeq(false /* batch_boundary */);
2123
2165
  }
2166
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2167
+ DecrementProtectionInfoIdxForTryAgain();
2168
+ }
2124
2169
  return ret_status;
2125
2170
  }
2126
2171
  assert(ret_status.ok());
@@ -2242,23 +2287,31 @@ class MemTableInserter : public WriteBatch::Handler {
2242
2287
  ret_status = WriteBatchInternal::Merge(rebuilding_trx_, column_family_id,
2243
2288
  key, value);
2244
2289
  }
2290
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2291
+ DecrementProtectionInfoIdxForTryAgain();
2292
+ }
2245
2293
  return ret_status;
2246
2294
  }
2247
2295
 
2248
2296
  Status PutBlobIndexCF(uint32_t column_family_id, const Slice& key,
2249
2297
  const Slice& value) override {
2250
2298
  const auto* kv_prot_info = NextProtectionInfo();
2299
+ Status ret_status;
2251
2300
  if (kv_prot_info != nullptr) {
2252
2301
  // Memtable needs seqno, doesn't need CF ID
2253
2302
  auto mem_kv_prot_info =
2254
2303
  kv_prot_info->StripC(column_family_id).ProtectS(sequence_);
2255
2304
  // Same as PutCF except for value type.
2256
- return PutCFImpl(column_family_id, key, value, kTypeBlobIndex,
2257
- &mem_kv_prot_info);
2305
+ ret_status = PutCFImpl(column_family_id, key, value, kTypeBlobIndex,
2306
+ &mem_kv_prot_info);
2258
2307
  } else {
2259
- return PutCFImpl(column_family_id, key, value, kTypeBlobIndex,
2260
- nullptr /* kv_prot_info */);
2308
+ ret_status = PutCFImpl(column_family_id, key, value, kTypeBlobIndex,
2309
+ nullptr /* kv_prot_info */);
2261
2310
  }
2311
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2312
+ DecrementProtectionInfoIdxForTryAgain();
2313
+ }
2314
+ return ret_status;
2262
2315
  }
2263
2316
 
2264
2317
  void CheckMemtableFull() {
@@ -2401,6 +2454,7 @@ class MemTableInserter : public WriteBatch::Handler {
2401
2454
  const auto& batch_info = trx->batches_.begin()->second;
2402
2455
  // all inserts must reference this trx log number
2403
2456
  log_number_ref_ = batch_info.log_number_;
2457
+ ResetProtectionInfo();
2404
2458
  s = batch_info.batch_->Iterate(this);
2405
2459
  log_number_ref_ = 0;
2406
2460
  }
@@ -2422,6 +2476,10 @@ class MemTableInserter : public WriteBatch::Handler {
2422
2476
  const bool batch_boundry = true;
2423
2477
  MaybeAdvanceSeq(batch_boundry);
2424
2478
 
2479
+ if (UNLIKELY(s.IsTryAgain())) {
2480
+ DecrementProtectionInfoIdxForTryAgain();
2481
+ }
2482
+
2425
2483
  return s;
2426
2484
  }
2427
2485
 
@@ -2466,6 +2524,7 @@ class MemTableInserter : public WriteBatch::Handler {
2466
2524
  return ucmp->timestamp_size();
2467
2525
  });
2468
2526
  if (s.ok()) {
2527
+ ResetProtectionInfo();
2469
2528
  s = batch_info.batch_->Iterate(this);
2470
2529
  log_number_ref_ = 0;
2471
2530
  }
@@ -2488,6 +2547,10 @@ class MemTableInserter : public WriteBatch::Handler {
2488
2547
  constexpr bool batch_boundary = true;
2489
2548
  MaybeAdvanceSeq(batch_boundary);
2490
2549
 
2550
+ if (UNLIKELY(s.IsTryAgain())) {
2551
+ DecrementProtectionInfoIdxForTryAgain();
2552
+ }
2553
+
2491
2554
  return s;
2492
2555
  }
2493
2556
 
@@ -2523,6 +2586,8 @@ class MemTableInserter : public WriteBatch::Handler {
2523
2586
  }
2524
2587
  };
2525
2588
 
2589
+ } // namespace
2590
+
2526
2591
  // This function can only be called in these conditions:
2527
2592
  // 1) During Recovery()
2528
2593
  // 2) During Write(), in a single-threaded write thread
@@ -2613,11 +2678,94 @@ Status WriteBatchInternal::InsertInto(
2613
2678
  return s;
2614
2679
  }
2615
2680
 
2681
+ namespace {
2682
+
2683
+ // This class updates protection info for a WriteBatch.
2684
+ class ProtectionInfoUpdater : public WriteBatch::Handler {
2685
+ public:
2686
+ explicit ProtectionInfoUpdater(WriteBatch::ProtectionInfo* prot_info)
2687
+ : prot_info_(prot_info) {}
2688
+
2689
+ ~ProtectionInfoUpdater() override {}
2690
+
2691
+ Status PutCF(uint32_t cf, const Slice& key, const Slice& val) override {
2692
+ return UpdateProtInfo(cf, key, val, kTypeValue);
2693
+ }
2694
+
2695
+ Status DeleteCF(uint32_t cf, const Slice& key) override {
2696
+ return UpdateProtInfo(cf, key, "", kTypeDeletion);
2697
+ }
2698
+
2699
+ Status SingleDeleteCF(uint32_t cf, const Slice& key) override {
2700
+ return UpdateProtInfo(cf, key, "", kTypeSingleDeletion);
2701
+ }
2702
+
2703
+ Status DeleteRangeCF(uint32_t cf, const Slice& begin_key,
2704
+ const Slice& end_key) override {
2705
+ return UpdateProtInfo(cf, begin_key, end_key, kTypeRangeDeletion);
2706
+ }
2707
+
2708
+ Status MergeCF(uint32_t cf, const Slice& key, const Slice& val) override {
2709
+ return UpdateProtInfo(cf, key, val, kTypeMerge);
2710
+ }
2711
+
2712
+ Status PutBlobIndexCF(uint32_t cf, const Slice& key,
2713
+ const Slice& val) override {
2714
+ return UpdateProtInfo(cf, key, val, kTypeBlobIndex);
2715
+ }
2716
+
2717
+ Status MarkBeginPrepare(bool /* unprepare */) override {
2718
+ return Status::OK();
2719
+ }
2720
+
2721
+ Status MarkEndPrepare(const Slice& /* xid */) override {
2722
+ return Status::OK();
2723
+ }
2724
+
2725
+ Status MarkCommit(const Slice& /* xid */) override { return Status::OK(); }
2726
+
2727
+ Status MarkCommitWithTimestamp(const Slice& /* xid */,
2728
+ const Slice& /* ts */) override {
2729
+ return Status::OK();
2730
+ }
2731
+
2732
+ Status MarkRollback(const Slice& /* xid */) override { return Status::OK(); }
2733
+
2734
+ Status MarkNoop(bool /* empty_batch */) override { return Status::OK(); }
2735
+
2736
+ private:
2737
+ Status UpdateProtInfo(uint32_t cf, const Slice& key, const Slice& val,
2738
+ const ValueType op_type) {
2739
+ if (prot_info_) {
2740
+ prot_info_->entries_.emplace_back(
2741
+ ProtectionInfo64().ProtectKVO(key, val, op_type).ProtectC(cf));
2742
+ }
2743
+ return Status::OK();
2744
+ }
2745
+
2746
+ // No copy or move.
2747
+ ProtectionInfoUpdater(const ProtectionInfoUpdater&) = delete;
2748
+ ProtectionInfoUpdater(ProtectionInfoUpdater&&) = delete;
2749
+ ProtectionInfoUpdater& operator=(const ProtectionInfoUpdater&) = delete;
2750
+ ProtectionInfoUpdater& operator=(ProtectionInfoUpdater&&) = delete;
2751
+
2752
+ WriteBatch::ProtectionInfo* const prot_info_ = nullptr;
2753
+ };
2754
+
2755
+ } // namespace
2756
+
2616
2757
  Status WriteBatchInternal::SetContents(WriteBatch* b, const Slice& contents) {
2617
2758
  assert(contents.size() >= WriteBatchInternal::kHeader);
2618
- assert(b->prot_info_ == nullptr);
2759
+
2619
2760
  b->rep_.assign(contents.data(), contents.size());
2620
2761
  b->content_flags_.store(ContentFlags::DEFERRED, std::memory_order_relaxed);
2762
+
2763
+ // If we have a prot_info_, update protection info entries for the batch.
2764
+ if (b->prot_info_) {
2765
+ ProtectionInfoUpdater prot_info_updater(b->prot_info_.get());
2766
+ return b->Iterate(&prot_info_updater);
2767
+ }
2768
+
2621
2769
  return Status::OK();
2622
2770
  }
2623
2771
 
@@ -118,7 +118,7 @@ static std::string PrintContents(WriteBatch* b,
118
118
  break;
119
119
  }
120
120
  state.append("@");
121
- state.append(ToString(ikey.sequence));
121
+ state.append(std::to_string(ikey.sequence));
122
122
  }
123
123
  EXPECT_OK(iter->status());
124
124
  }
@@ -253,7 +253,7 @@ namespace {
253
253
  if (column_family_id == 0) {
254
254
  seen += "Put(" + key.ToString() + ", " + value.ToString() + ")";
255
255
  } else {
256
- seen += "PutCF(" + ToString(column_family_id) + ", " +
256
+ seen += "PutCF(" + std::to_string(column_family_id) + ", " +
257
257
  key.ToString() + ", " + value.ToString() + ")";
258
258
  }
259
259
  return Status::OK();
@@ -262,7 +262,7 @@ namespace {
262
262
  if (column_family_id == 0) {
263
263
  seen += "Delete(" + key.ToString() + ")";
264
264
  } else {
265
- seen += "DeleteCF(" + ToString(column_family_id) + ", " +
265
+ seen += "DeleteCF(" + std::to_string(column_family_id) + ", " +
266
266
  key.ToString() + ")";
267
267
  }
268
268
  return Status::OK();
@@ -272,7 +272,7 @@ namespace {
272
272
  if (column_family_id == 0) {
273
273
  seen += "SingleDelete(" + key.ToString() + ")";
274
274
  } else {
275
- seen += "SingleDeleteCF(" + ToString(column_family_id) + ", " +
275
+ seen += "SingleDeleteCF(" + std::to_string(column_family_id) + ", " +
276
276
  key.ToString() + ")";
277
277
  }
278
278
  return Status::OK();
@@ -283,7 +283,7 @@ namespace {
283
283
  seen += "DeleteRange(" + begin_key.ToString() + ", " +
284
284
  end_key.ToString() + ")";
285
285
  } else {
286
- seen += "DeleteRangeCF(" + ToString(column_family_id) + ", " +
286
+ seen += "DeleteRangeCF(" + std::to_string(column_family_id) + ", " +
287
287
  begin_key.ToString() + ", " + end_key.ToString() + ")";
288
288
  }
289
289
  return Status::OK();
@@ -293,7 +293,7 @@ namespace {
293
293
  if (column_family_id == 0) {
294
294
  seen += "Merge(" + key.ToString() + ", " + value.ToString() + ")";
295
295
  } else {
296
- seen += "MergeCF(" + ToString(column_family_id) + ", " +
296
+ seen += "MergeCF(" + std::to_string(column_family_id) + ", " +
297
297
  key.ToString() + ", " + value.ToString() + ")";
298
298
  }
299
299
  return Status::OK();
@@ -52,7 +52,7 @@ class WriteController {
52
52
  bool IsStopped() const;
53
53
  bool NeedsDelay() const { return total_delayed_.load() > 0; }
54
54
  bool NeedSpeedupCompaction() const {
55
- return IsStopped() || NeedsDelay() || total_compaction_pressure_ > 0;
55
+ return IsStopped() || NeedsDelay() || total_compaction_pressure_.load() > 0;
56
56
  }
57
57
  // return how many microseconds the caller needs to sleep after the call
58
58
  // num_bytes: how many number of bytes to put into the DB.
@@ -18,11 +18,9 @@
18
18
 
19
19
  ROCKSDB_NAMESPACE::Env* db_stress_listener_env = nullptr;
20
20
  ROCKSDB_NAMESPACE::Env* db_stress_env = nullptr;
21
- #ifndef NDEBUG
22
21
  // If non-null, injects read error at a rate specified by the
23
22
  // read_fault_one_in or write_fault_one_in flag
24
23
  std::shared_ptr<ROCKSDB_NAMESPACE::FaultInjectionTestFS> fault_fs_guard;
25
- #endif // NDEBUG
26
24
  enum ROCKSDB_NAMESPACE::CompressionType compression_type_e =
27
25
  ROCKSDB_NAMESPACE::kSnappyCompression;
28
26
  enum ROCKSDB_NAMESPACE::CompressionType bottommost_compression_type_e =
@@ -67,6 +67,7 @@
67
67
  #include "util/random.h"
68
68
  #include "util/string_util.h"
69
69
  #include "utilities/blob_db/blob_db.h"
70
+ #include "utilities/fault_injection_fs.h"
70
71
  #include "utilities/merge_operators.h"
71
72
 
72
73
  using GFLAGS_NAMESPACE::ParseCommandLineFlags;
@@ -107,6 +108,7 @@ DECLARE_double(memtable_prefix_bloom_size_ratio);
107
108
  DECLARE_bool(memtable_whole_key_filtering);
108
109
  DECLARE_int32(open_files);
109
110
  DECLARE_int64(compressed_cache_size);
111
+ DECLARE_int32(compressed_cache_numshardbits);
110
112
  DECLARE_int32(compaction_style);
111
113
  DECLARE_int32(num_levels);
112
114
  DECLARE_int32(level0_file_num_compaction_trigger);
@@ -134,7 +136,9 @@ DECLARE_int32(set_in_place_one_in);
134
136
  DECLARE_int64(cache_size);
135
137
  DECLARE_int32(cache_numshardbits);
136
138
  DECLARE_bool(cache_index_and_filter_blocks);
137
- DECLARE_bool(reserve_table_reader_memory);
139
+ DECLARE_bool(charge_compression_dictionary_building_buffer);
140
+ DECLARE_bool(charge_filter_construction);
141
+ DECLARE_bool(charge_table_reader);
138
142
  DECLARE_int32(top_level_index_pinning);
139
143
  DECLARE_int32(partition_pinning);
140
144
  DECLARE_int32(unpartitioned_pinning);
@@ -166,6 +170,8 @@ DECLARE_bool(mock_direct_io);
166
170
  DECLARE_bool(statistics);
167
171
  DECLARE_bool(sync);
168
172
  DECLARE_bool(use_fsync);
173
+ DECLARE_uint64(bytes_per_sync);
174
+ DECLARE_uint64(wal_bytes_per_sync);
169
175
  DECLARE_int32(kill_random_test);
170
176
  DECLARE_string(kill_exclude_prefixes);
171
177
  DECLARE_bool(disable_wal);
@@ -294,12 +300,7 @@ constexpr int kValueMaxLen = 100;
294
300
  // wrapped posix environment
295
301
  extern ROCKSDB_NAMESPACE::Env* db_stress_env;
296
302
  extern ROCKSDB_NAMESPACE::Env* db_stress_listener_env;
297
- #ifndef NDEBUG
298
- namespace ROCKSDB_NAMESPACE {
299
- class FaultInjectionTestFS;
300
- } // namespace ROCKSDB_NAMESPACE
301
303
  extern std::shared_ptr<ROCKSDB_NAMESPACE::FaultInjectionTestFS> fault_fs_guard;
302
- #endif
303
304
 
304
305
  extern enum ROCKSDB_NAMESPACE::CompressionType compression_type_e;
305
306
  extern enum ROCKSDB_NAMESPACE::CompressionType bottommost_compression_type_e;
@@ -46,11 +46,12 @@ class DbStressCompactionFilter : public CompactionFilter {
46
46
  // Reaching here means we acquired the lock.
47
47
 
48
48
  bool key_exists = state_->Exists(cf_id_, key_num);
49
+ const bool allow_overwrite = state_->AllowsOverwrite(key_num);
49
50
 
50
51
  key_mutex->Unlock();
51
52
 
52
53
  if (!key_exists) {
53
- return Decision::kRemove;
54
+ return allow_overwrite ? Decision::kRemove : Decision::kPurge;
54
55
  }
55
56
  return Decision::kKeep;
56
57
  }
@@ -58,15 +58,16 @@ void ThreadBody(void* v) {
58
58
 
59
59
  bool RunStressTest(StressTest* stress) {
60
60
  SystemClock* clock = db_stress_env->GetSystemClock().get();
61
- stress->InitDb();
62
61
  SharedState shared(db_stress_env, stress);
62
+ stress->InitDb(&shared);
63
63
  stress->FinishInitDb(&shared);
64
64
 
65
- #ifndef NDEBUG
66
65
  if (FLAGS_sync_fault_injection) {
67
66
  fault_fs_guard->SetFilesystemDirectWritable(false);
68
67
  }
69
- #endif
68
+ if (FLAGS_write_fault_one_in) {
69
+ fault_fs_guard->EnableWriteErrorInjection();
70
+ }
70
71
 
71
72
  uint32_t n = FLAGS_threads;
72
73
  uint64_t now = clock->NowMicros();
@@ -187,9 +187,15 @@ DEFINE_int32(open_files, ROCKSDB_NAMESPACE::Options().max_open_files,
187
187
  "Maximum number of files to keep open at the same time "
188
188
  "(use default if == 0)");
189
189
 
190
- DEFINE_int64(compressed_cache_size, -1,
190
+ DEFINE_int64(compressed_cache_size, 0,
191
191
  "Number of bytes to use as a cache of compressed data."
192
- " Negative means use default settings.");
192
+ " 0 means use default settings.");
193
+
194
+ DEFINE_int32(
195
+ compressed_cache_numshardbits, -1,
196
+ "Number of shards for the compressed block cache is 2 ** "
197
+ "compressed_cache_numshardbits. Negative value means default settings. "
198
+ "This is applied only if compressed_cache_size is greater than 0.");
193
199
 
194
200
  DEFINE_int32(compaction_style, ROCKSDB_NAMESPACE::Options().compaction_style,
195
201
  "");
@@ -304,10 +310,20 @@ DEFINE_int32(cache_numshardbits, 6,
304
310
  DEFINE_bool(cache_index_and_filter_blocks, false,
305
311
  "True if indexes/filters should be cached in block cache.");
306
312
 
307
- DEFINE_bool(reserve_table_reader_memory, false,
308
- "A dynamically updating charge to block cache, loosely based on "
309
- "the actual memory usage of table reader, will occur to account "
310
- "the memory, if block cache available.");
313
+ DEFINE_bool(charge_compression_dictionary_building_buffer, false,
314
+ "Setting for "
315
+ "CacheEntryRoleOptions::charged of"
316
+ "CacheEntryRole::kCompressionDictionaryBuildingBuffer");
317
+
318
+ DEFINE_bool(charge_filter_construction, false,
319
+ "Setting for "
320
+ "CacheEntryRoleOptions::charged of"
321
+ "CacheEntryRole::kFilterConstruction");
322
+
323
+ DEFINE_bool(charge_table_reader, false,
324
+ "Setting for "
325
+ "CacheEntryRoleOptions::charged of"
326
+ "CacheEntryRole::kBlockBasedTableReader");
311
327
 
312
328
  DEFINE_int32(
313
329
  top_level_index_pinning,
@@ -516,6 +532,15 @@ DEFINE_bool(sync, false, "Sync all writes to disk");
516
532
 
517
533
  DEFINE_bool(use_fsync, false, "If true, issue fsync instead of fdatasync");
518
534
 
535
+ DEFINE_uint64(bytes_per_sync, ROCKSDB_NAMESPACE::Options().bytes_per_sync,
536
+ "If nonzero, sync SST file data incrementally after every "
537
+ "`bytes_per_sync` bytes are written");
538
+
539
+ DEFINE_uint64(wal_bytes_per_sync,
540
+ ROCKSDB_NAMESPACE::Options().wal_bytes_per_sync,
541
+ "If nonzero, sync WAL file data incrementally after every "
542
+ "`bytes_per_sync` bytes are written");
543
+
519
544
  DEFINE_int32(kill_random_test, 0,
520
545
  "If non-zero, kill at various points in source code with "
521
546
  "probability 1/this");
@@ -173,7 +173,10 @@ void DbStressListener::VerifyTableFileUniqueId(
173
173
  const TableProperties& new_file_properties, const std::string& file_path) {
174
174
  // Verify unique ID
175
175
  std::string id;
176
- Status s = GetUniqueIdFromTableProperties(new_file_properties, &id);
176
+ // Unit tests verify that GetUniqueIdFromTableProperties returns just a
177
+ // substring of this, and we're only going to pull out 64 bits, so using
178
+ // GetExtendedUniqueIdFromTableProperties is arguably stronger testing here.
179
+ Status s = GetExtendedUniqueIdFromTableProperties(new_file_properties, &id);
177
180
  if (!s.ok()) {
178
181
  fprintf(stderr, "Error getting SST unique id for %s: %s\n",
179
182
  file_path.c_str(), s.ToString().c_str());
@@ -12,16 +12,6 @@
12
12
  #include "db_stress_tool/db_stress_shared_state.h"
13
13
 
14
14
  namespace ROCKSDB_NAMESPACE {
15
- const uint32_t SharedState::UNKNOWN_SENTINEL = 0xfffffffe;
16
- const uint32_t SharedState::DELETION_SENTINEL = 0xffffffff;
17
- #if defined(ROCKSDB_SUPPORT_THREAD_LOCAL)
18
- #if defined(OS_SOLARIS)
19
- __thread bool SharedState::ignore_read_error;
20
- #else
21
15
  thread_local bool SharedState::ignore_read_error;
22
- #endif // OS_SOLARIS
23
- #else
24
- bool SharedState::ignore_read_error;
25
- #endif // ROCKSDB_SUPPORT_THREAD_LOCAL
26
16
  } // namespace ROCKSDB_NAMESPACE
27
17
  #endif // GFLAGS