@nxtedition/rocksdb 5.2.21 → 5.2.26

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 (909) hide show
  1. package/binding.cc +216 -252
  2. package/binding.gyp +78 -72
  3. package/deps/rocksdb/build_version.cc +70 -4
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
  5. package/deps/rocksdb/rocksdb/Makefile +459 -469
  6. package/deps/rocksdb/rocksdb/README.md +4 -4
  7. package/deps/rocksdb/rocksdb/TARGETS +5244 -1500
  8. package/deps/rocksdb/rocksdb/cache/cache.cc +12 -3
  9. package/deps/rocksdb/rocksdb/cache/cache_bench.cc +7 -368
  10. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +924 -0
  11. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +128 -0
  12. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +103 -0
  13. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +183 -0
  14. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +11 -0
  15. package/deps/rocksdb/rocksdb/cache/cache_key.cc +344 -0
  16. package/deps/rocksdb/rocksdb/cache/cache_key.h +132 -0
  17. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +183 -0
  18. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +288 -0
  19. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +468 -0
  20. package/deps/rocksdb/rocksdb/cache/cache_test.cc +85 -8
  21. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +121 -51
  22. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +171 -0
  23. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +86 -0
  24. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +607 -0
  25. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +381 -154
  26. package/deps/rocksdb/rocksdb/cache/lru_cache.h +176 -33
  27. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1659 -3
  28. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +94 -23
  29. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +49 -28
  30. package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
  32. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
  33. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
  34. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
  35. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
  36. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
  40. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
  41. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
  42. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
  43. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
  44. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
  45. package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
  51. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
  52. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
  53. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
  54. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
  55. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
  56. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
  57. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
  58. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
  59. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
  60. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
  61. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
  62. package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
  63. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
  64. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
  65. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
  66. package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
  67. package/deps/rocksdb/rocksdb/db/builder.h +16 -37
  68. package/deps/rocksdb/rocksdb/db/c.cc +413 -208
  69. package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
  70. package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
  71. package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
  72. package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
  73. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
  74. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
  75. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
  76. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
  77. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
  78. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
  79. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
  80. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
  81. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
  82. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
  83. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
  84. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  85. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
  96. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
  97. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
  98. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  99. package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
  100. package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
  101. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
  102. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
  103. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
  104. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
  105. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
  106. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
  107. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
  108. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
  110. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
  111. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
  112. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
  113. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
  114. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
  115. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
  116. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
  117. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
  118. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
  119. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
  120. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
  121. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
  122. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
  124. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
  125. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
  126. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
  127. package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
  128. package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
  129. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
  130. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
  131. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
  132. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
  133. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
  134. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
  135. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
  136. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
  137. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
  138. package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
  139. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
  140. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
  141. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
  142. package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
  143. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
  144. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
  145. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
  146. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
  147. package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
  148. package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
  149. package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
  150. package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
  151. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
  152. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
  153. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
  154. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
  155. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
  156. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
  157. package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
  158. package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
  159. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
  160. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
  161. package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
  162. package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
  163. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
  164. package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
  165. package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
  166. package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
  167. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
  168. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
  169. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
  170. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
  171. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
  172. package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
  173. package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
  174. package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
  175. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
  176. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
  177. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
  178. package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
  179. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
  180. package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
  181. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
  182. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
  183. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
  184. package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
  185. package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
  186. package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
  187. package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
  188. package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
  189. package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
  190. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
  191. package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
  192. package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
  193. package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
  194. package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
  195. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
  196. package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
  197. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
  198. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
  199. package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
  200. package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
  201. package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
  202. package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
  203. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
  204. package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
  205. package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
  206. package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
  207. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
  208. package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
  209. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
  210. package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
  211. package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
  212. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
  213. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
  214. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
  215. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
  216. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
  217. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
  218. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
  219. package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
  220. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
  221. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
  222. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
  223. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
  224. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
  225. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
  226. package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
  227. package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
  228. package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
  229. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
  230. package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
  231. package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
  232. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
  233. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
  234. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
  235. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
  236. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
  237. package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
  238. package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
  239. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
  240. package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
  241. package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
  242. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
  243. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
  244. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
  245. package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
  246. package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
  247. package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
  248. package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
  249. package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
  250. package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
  251. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
  252. package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
  253. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
  254. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
  255. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
  256. package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
  257. package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
  258. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
  259. package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
  260. package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
  261. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
  262. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
  263. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
  264. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
  265. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
  266. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
  267. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
  268. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
  269. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
  270. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
  271. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
  272. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
  273. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
  274. package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
  280. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
  281. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
  283. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
  284. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
  285. package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
  286. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
  287. package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
  288. package/deps/rocksdb/rocksdb/env/env.cc +632 -42
  289. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
  290. package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
  291. package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
  292. package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
  293. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
  294. package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
  295. package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
  296. package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
  297. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
  298. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
  299. package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
  300. package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
  301. package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
  302. package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
  303. package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
  304. package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
  305. package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
  306. package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
  307. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
  308. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
  309. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
  310. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
  311. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
  312. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
  313. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
  314. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
  315. package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
  316. package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
  317. package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
  318. package/deps/rocksdb/rocksdb/file/filename.h +13 -8
  319. package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
  320. package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
  321. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
  322. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
  323. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
  324. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
  325. package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
  326. package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
  327. package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
  328. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
  329. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
  330. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
  331. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
  332. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
  333. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
  334. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
  335. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
  336. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
  337. package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
  338. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
  339. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
  340. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
  341. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
  342. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
  343. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
  344. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
  345. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
  346. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
  347. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
  348. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
  349. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
  350. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
  351. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
  352. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
  353. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
  354. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
  355. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
  356. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
  357. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
  358. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
  359. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
  360. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
  361. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
  362. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
  363. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
  364. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
  365. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
  366. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
  367. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
  368. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
  369. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
  370. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
  371. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
  372. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
  373. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
  374. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
  375. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
  376. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
  377. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
  378. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
  380. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
  381. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
  382. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
  383. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
  385. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
  386. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
  387. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
  388. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
  389. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
  390. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
  391. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
  392. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
  393. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
  396. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
  397. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
  398. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
  407. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
  408. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
  409. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
  410. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
  411. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
  412. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
  413. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
  414. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
  415. package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
  416. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
  417. package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
  418. package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
  419. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  420. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
  421. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
  422. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
  423. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
  424. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
  425. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
  426. package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
  427. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
  428. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
  429. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
  430. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
  431. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
  432. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  433. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
  434. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
  435. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
  436. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
  437. package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
  438. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  439. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
  440. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
  441. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
  442. package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
  443. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
  444. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
  445. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
  446. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
  447. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
  448. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
  449. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
  450. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
  451. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
  452. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
  453. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
  454. package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
  455. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
  456. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
  457. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
  458. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
  459. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
  460. package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
  461. package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
  462. package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
  463. package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
  464. package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
  465. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
  466. package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
  467. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
  468. package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
  469. package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
  470. package/deps/rocksdb/rocksdb/options/options.cc +49 -17
  471. package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
  472. package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
  473. package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
  474. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
  475. package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
  476. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  477. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
  478. package/deps/rocksdb/rocksdb/port/lang.h +52 -0
  479. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  480. package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
  481. package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
  482. package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
  483. package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
  484. package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
  485. package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
  486. package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
  487. package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
  488. package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
  489. package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
  490. package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
  491. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
  492. package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
  493. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
  494. package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
  495. package/deps/rocksdb/rocksdb/python.mk +9 -0
  496. package/deps/rocksdb/rocksdb/src.mk +82 -34
  497. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
  498. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
  499. package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
  500. package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
  501. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
  502. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
  503. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
  504. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
  505. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
  506. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
  507. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
  508. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
  509. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
  510. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
  511. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
  512. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
  513. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
  514. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
  515. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
  516. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
  517. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
  518. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
  519. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
  520. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
  521. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
  522. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
  523. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
  524. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
  525. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
  526. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
  527. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
  528. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
  529. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
  530. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
  531. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
  532. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  533. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  534. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  535. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
  536. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
  537. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
  538. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
  539. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
  540. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
  541. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
  542. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
  543. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
  544. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
  545. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
  546. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
  547. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
  548. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
  549. package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
  550. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
  551. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
  552. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
  553. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
  554. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
  555. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
  556. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
  557. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
  558. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
  559. package/deps/rocksdb/rocksdb/table/format.cc +258 -104
  560. package/deps/rocksdb/rocksdb/table/format.h +120 -109
  561. package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
  562. package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
  563. package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
  564. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  565. package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
  566. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
  567. package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
  568. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
  569. package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
  570. package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
  571. package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
  572. package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
  573. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
  574. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
  575. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
  576. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
  577. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
  578. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
  579. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
  580. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
  581. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
  582. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
  583. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
  584. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
  585. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
  586. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
  587. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
  588. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
  589. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
  590. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
  591. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
  592. package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
  593. package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
  594. package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
  595. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
  596. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
  597. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
  598. package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
  599. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
  600. package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
  601. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
  602. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
  603. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
  604. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
  605. package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
  606. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
  607. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
  608. package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
  609. package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
  610. package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
  611. package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
  612. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
  613. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
  614. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
  615. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  616. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
  617. package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
  618. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
  619. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
  620. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
  621. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
  622. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
  623. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
  624. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
  625. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
  626. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
  627. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  628. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
  629. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
  630. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
  631. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
  632. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
  633. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
  634. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
  635. package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
  636. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
  637. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
  638. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
  639. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
  640. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
  641. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
  642. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
  643. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
  644. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
  645. package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
  646. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
  647. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
  648. package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
  649. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
  650. package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
  651. package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
  652. package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
  653. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  654. package/deps/rocksdb/rocksdb/util/channel.h +2 -0
  655. package/deps/rocksdb/rocksdb/util/coding.h +1 -33
  656. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
  657. package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
  658. package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
  659. package/deps/rocksdb/rocksdb/util/compression.h +212 -7
  660. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
  661. package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
  662. package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
  663. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
  664. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
  665. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
  666. package/deps/rocksdb/rocksdb/util/defer.h +30 -1
  667. package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
  668. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
  669. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
  670. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
  671. package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
  672. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
  673. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
  674. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
  675. package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
  676. package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
  677. package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
  678. package/deps/rocksdb/rocksdb/util/hash.h +31 -1
  679. package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
  680. package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
  681. package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
  682. package/deps/rocksdb/rocksdb/util/heap.h +6 -1
  683. package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
  684. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
  685. package/deps/rocksdb/rocksdb/util/math.h +74 -7
  686. package/deps/rocksdb/rocksdb/util/math128.h +13 -1
  687. package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
  688. package/deps/rocksdb/rocksdb/util/random.cc +9 -0
  689. package/deps/rocksdb/rocksdb/util/random.h +6 -0
  690. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
  691. package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
  692. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
  693. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
  694. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
  695. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
  696. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
  697. package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
  698. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
  699. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
  700. package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
  701. package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
  702. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
  703. package/deps/rocksdb/rocksdb/util/status.cc +32 -29
  704. package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
  705. package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
  706. package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
  707. package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
  708. package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
  709. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
  710. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
  711. package/deps/rocksdb/rocksdb/util/timer.h +55 -46
  712. package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
  713. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
  714. package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
  715. package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
  716. package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
  717. package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
  718. package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
  719. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
  720. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
  721. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
  722. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
  723. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
  724. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
  725. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
  726. package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
  727. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
  728. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
  729. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
  730. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
  731. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
  732. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
  733. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
  734. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
  735. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
  736. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
  737. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
  738. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
  739. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
  740. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
  741. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
  742. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
  743. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
  744. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
  745. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
  746. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
  747. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
  748. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
  749. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
  750. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
  751. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
  752. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
  753. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
  754. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
  755. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
  756. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
  757. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
  758. package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
  759. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
  760. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
  761. package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
  762. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
  763. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
  764. package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
  765. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
  766. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
  767. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
  768. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
  769. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
  770. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
  771. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
  772. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
  773. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
  774. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
  775. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
  776. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
  777. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
  778. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
  779. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
  780. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
  781. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
  782. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
  783. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
  784. package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
  785. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
  786. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
  787. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
  788. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
  789. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
  790. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
  791. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
  792. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
  793. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
  794. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
  795. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
  796. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
  797. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
  798. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
  799. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  800. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
  801. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
  802. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
  803. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
  804. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
  805. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
  806. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
  807. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
  808. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
  809. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
  810. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
  811. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
  812. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
  813. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  814. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
  815. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
  816. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
  817. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
  818. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
  819. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
  820. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
  821. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
  822. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
  823. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
  824. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
  825. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
  826. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
  827. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
  828. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
  829. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
  830. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
  831. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
  832. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
  833. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
  834. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
  835. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
  836. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
  837. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
  838. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
  839. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
  840. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
  841. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
  842. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
  843. package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
  844. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
  845. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
  846. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
  847. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
  848. package/deps/rocksdb/rocksdb.gyp +425 -446
  849. package/package.json +8 -8
  850. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  851. package/prebuilds/darwin-x86/node.napi.node +0 -0
  852. package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
  853. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
  854. package/deps/rocksdb/rocksdb/hdfs/README +0 -23
  855. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
  856. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
  857. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
  858. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
  859. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
  860. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
  861. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
  862. package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
  863. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
  864. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
  865. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
  866. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
  867. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
  868. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
  869. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
  870. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
  871. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
  872. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
  873. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
  874. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
  875. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
  876. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
  877. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
  878. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
  879. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
  880. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
  881. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
  882. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
  883. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
  884. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
  885. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
  886. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
  887. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
  888. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
  889. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
  890. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
  891. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
  892. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
  893. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
  894. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
  895. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
  896. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
  897. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
  898. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
  899. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
  900. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
  901. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
  902. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
  903. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
  904. package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
  905. package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
  906. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
  907. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
  908. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
  909. package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
@@ -11,6 +11,7 @@
11
11
  #include "db/db_impl/db_impl.h"
12
12
  #include "db/error_handler.h"
13
13
  #include "db/event_helpers.h"
14
+ #include "logging/logging.h"
14
15
  #include "monitoring/perf_context_imp.h"
15
16
  #include "options/options_helper.h"
16
17
  #include "test_util/sync_point.h"
@@ -20,11 +21,28 @@ namespace ROCKSDB_NAMESPACE {
20
21
  // Convenience methods
21
22
  Status DBImpl::Put(const WriteOptions& o, ColumnFamilyHandle* column_family,
22
23
  const Slice& key, const Slice& val) {
24
+ const Status s = FailIfCfHasTs(column_family);
25
+ if (!s.ok()) {
26
+ return s;
27
+ }
23
28
  return DB::Put(o, column_family, key, val);
24
29
  }
25
30
 
31
+ Status DBImpl::Put(const WriteOptions& o, ColumnFamilyHandle* column_family,
32
+ const Slice& key, const Slice& ts, const Slice& val) {
33
+ const Status s = FailIfTsSizesMismatch(column_family, ts);
34
+ if (!s.ok()) {
35
+ return s;
36
+ }
37
+ return DB::Put(o, column_family, key, ts, val);
38
+ }
39
+
26
40
  Status DBImpl::Merge(const WriteOptions& o, ColumnFamilyHandle* column_family,
27
41
  const Slice& key, const Slice& val) {
42
+ const Status s = FailIfCfHasTs(column_family);
43
+ if (!s.ok()) {
44
+ return s;
45
+ }
28
46
  auto cfh = static_cast_with_check<ColumnFamilyHandleImpl>(column_family);
29
47
  if (!cfh->cfd()->ioptions()->merge_operator) {
30
48
  return Status::NotSupported("Provide a merge_operator when opening DB");
@@ -35,22 +53,61 @@ Status DBImpl::Merge(const WriteOptions& o, ColumnFamilyHandle* column_family,
35
53
 
36
54
  Status DBImpl::Delete(const WriteOptions& write_options,
37
55
  ColumnFamilyHandle* column_family, const Slice& key) {
56
+ const Status s = FailIfCfHasTs(column_family);
57
+ if (!s.ok()) {
58
+ return s;
59
+ }
38
60
  return DB::Delete(write_options, column_family, key);
39
61
  }
40
62
 
63
+ Status DBImpl::Delete(const WriteOptions& write_options,
64
+ ColumnFamilyHandle* column_family, const Slice& key,
65
+ const Slice& ts) {
66
+ const Status s = FailIfTsSizesMismatch(column_family, ts);
67
+ if (!s.ok()) {
68
+ return s;
69
+ }
70
+ return DB::Delete(write_options, column_family, key, ts);
71
+ }
72
+
41
73
  Status DBImpl::SingleDelete(const WriteOptions& write_options,
42
74
  ColumnFamilyHandle* column_family,
43
75
  const Slice& key) {
76
+ const Status s = FailIfCfHasTs(column_family);
77
+ if (!s.ok()) {
78
+ return s;
79
+ }
44
80
  return DB::SingleDelete(write_options, column_family, key);
45
81
  }
46
82
 
83
+ Status DBImpl::SingleDelete(const WriteOptions& write_options,
84
+ ColumnFamilyHandle* column_family, const Slice& key,
85
+ const Slice& ts) {
86
+ const Status s = FailIfTsSizesMismatch(column_family, ts);
87
+ if (!s.ok()) {
88
+ return s;
89
+ }
90
+ return DB::SingleDelete(write_options, column_family, key, ts);
91
+ }
92
+
93
+ Status DBImpl::DeleteRange(const WriteOptions& write_options,
94
+ ColumnFamilyHandle* column_family,
95
+ const Slice& begin_key, const Slice& end_key) {
96
+ const Status s = FailIfCfHasTs(column_family);
97
+ if (!s.ok()) {
98
+ return s;
99
+ }
100
+ return DB::DeleteRange(write_options, column_family, begin_key, end_key);
101
+ }
102
+
47
103
  void DBImpl::SetRecoverableStatePreReleaseCallback(
48
104
  PreReleaseCallback* callback) {
49
105
  recoverable_state_pre_release_callback_.reset(callback);
50
106
  }
51
107
 
52
108
  Status DBImpl::Write(const WriteOptions& write_options, WriteBatch* my_batch) {
53
- return WriteImpl(write_options, my_batch, nullptr, nullptr);
109
+ return WriteImpl(write_options, my_batch, /*callback=*/nullptr,
110
+ /*log_used=*/nullptr);
54
111
  }
55
112
 
56
113
  #ifndef ROCKSDB_LITE
@@ -72,11 +129,41 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options,
72
129
  PreReleaseCallback* pre_release_callback) {
73
130
  assert(!seq_per_batch_ || batch_cnt != 0);
74
131
  if (my_batch == nullptr) {
75
- return Status::Corruption("Batch is nullptr!");
76
- }
132
+ return Status::InvalidArgument("Batch is nullptr!");
133
+ } else if (!disable_memtable &&
134
+ WriteBatchInternal::TimestampsUpdateNeeded(*my_batch)) {
135
+ // If writing to memtable, then we require the caller to set/update the
136
+ // timestamps for the keys in the write batch.
137
+ // Otherwise, it means we are just writing to the WAL, and we allow
138
+ // timestamps unset for the keys in the write batch. This can happen if we
139
+ // use TransactionDB with write-committed policy, and we currently do not
140
+ // support user-defined timestamp with other policies.
141
+ // In the prepare phase, a transaction can write the batch to the WAL
142
+ // without inserting to memtable. The keys in the batch do not have to be
143
+ // assigned timestamps because they will be used only during recovery if
144
+ // there is a commit marker which includes their commit timestamp.
145
+ return Status::InvalidArgument("write batch must have timestamp(s) set");
146
+ } else if (write_options.rate_limiter_priority != Env::IO_TOTAL &&
147
+ write_options.rate_limiter_priority != Env::IO_USER) {
148
+ return Status::InvalidArgument(
149
+ "WriteOptions::rate_limiter_priority only allows "
150
+ "Env::IO_TOTAL and Env::IO_USER due to implementation constraints");
151
+ } else if (write_options.rate_limiter_priority != Env::IO_TOTAL &&
152
+ (write_options.disableWAL || manual_wal_flush_)) {
153
+ return Status::InvalidArgument(
154
+ "WriteOptions::rate_limiter_priority currently only supports "
155
+ "rate-limiting automatic WAL flush, which requires "
156
+ "`WriteOptions::disableWAL` and "
157
+ "`DBOptions::manual_wal_flush` both set to false");
158
+ }
159
+ // TODO: this use of operator bool on `tracer_` can avoid unnecessary lock
160
+ // grabs but does not seem thread-safe.
77
161
  if (tracer_) {
78
162
  InstrumentedMutexLock lock(&trace_mutex_);
79
- if (tracer_) {
163
+ if (tracer_ && !tracer_->IsWriteOrderPreserved()) {
164
+ // We don't have to preserve write order so can trace anywhere. It's more
165
+ // efficient to trace here than to add latency to a phase of the log/apply
166
+ // pipeline.
80
167
  // TODO: maybe handle the tracing status?
81
168
  tracer_->Write(my_batch).PermitUncheckedError();
82
169
  }
@@ -155,12 +242,7 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options,
155
242
  PERF_TIMER_GUARD(write_pre_and_post_process_time);
156
243
  WriteThread::Writer w(write_options, my_batch, callback, log_ref,
157
244
  disable_memtable, batch_cnt, pre_release_callback);
158
-
159
- if (!write_options.disableWAL) {
160
- RecordTick(stats_, WRITE_WITH_WAL);
161
- }
162
-
163
- StopWatch write_sw(env_, immutable_db_options_.statistics.get(), DB_WRITE);
245
+ StopWatch write_sw(immutable_db_options_.clock, stats_, DB_WRITE);
164
246
 
165
247
  write_thread_.JoinBatchGroup(&w);
166
248
  if (w.state == WriteThread::STATE_PARALLEL_MEMTABLE_WRITER) {
@@ -219,7 +301,8 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options,
219
301
 
220
302
  bool need_log_sync = write_options.sync;
221
303
  bool need_log_dir_sync = need_log_sync && !log_dir_synced_;
222
- if (!two_write_queues_ || !disable_memtable) {
304
+ assert(!two_write_queues_ || !disable_memtable);
305
+ {
223
306
  // With concurrent writes we do preprocess only in the write thread that
224
307
  // also does write to memtable to avoid sync issue on shared data structure
225
308
  // with the other thread
@@ -250,7 +333,19 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options,
250
333
  write_thread_.EnterAsBatchGroupLeader(&w, &write_group);
251
334
 
252
335
  IOStatus io_s;
336
+ Status pre_release_cb_status;
253
337
  if (status.ok()) {
338
+ // TODO: this use of operator bool on `tracer_` can avoid unnecessary lock
339
+ // grabs but does not seem thread-safe.
340
+ if (tracer_) {
341
+ InstrumentedMutexLock lock(&trace_mutex_);
342
+ if (tracer_ && tracer_->IsWriteOrderPreserved()) {
343
+ for (auto* writer : write_group) {
344
+ // TODO: maybe handle the tracing status?
345
+ tracer_->Write(writer->batch).PermitUncheckedError();
346
+ }
347
+ }
348
+ }
254
349
  // Rules for when we can update the memtable concurrently
255
350
  // 1. supported by memtable
256
351
  // 2. Puts are not okay if inplace_update_support
@@ -269,6 +364,7 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options,
269
364
  size_t total_byte_size = 0;
270
365
  size_t pre_release_callback_cnt = 0;
271
366
  for (auto* writer : write_group) {
367
+ assert(writer);
272
368
  if (writer->CheckCallback(this)) {
273
369
  valid_batches += writer->batch_cnt;
274
370
  if (writer->ShouldWriteToMemtable()) {
@@ -360,7 +456,7 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options,
360
456
  writer->sequence, disable_memtable, writer->log_used, index++,
361
457
  pre_release_callback_cnt);
362
458
  if (!ws.ok()) {
363
- status = ws;
459
+ status = pre_release_cb_status = ws;
364
460
  break;
365
461
  }
366
462
  }
@@ -413,10 +509,13 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options,
413
509
 
414
510
  if (!w.CallbackFailed()) {
415
511
  if (!io_s.ok()) {
512
+ assert(pre_release_cb_status.ok());
416
513
  IOStatusCheck(io_s);
417
514
  } else {
418
- WriteStatusCheck(status);
515
+ WriteStatusCheck(pre_release_cb_status);
419
516
  }
517
+ } else {
518
+ assert(io_s.ok() && pre_release_cb_status.ok());
420
519
  }
421
520
 
422
521
  if (need_log_sync) {
@@ -465,12 +564,13 @@ Status DBImpl::PipelinedWriteImpl(const WriteOptions& write_options,
465
564
  uint64_t* log_used, uint64_t log_ref,
466
565
  bool disable_memtable, uint64_t* seq_used) {
467
566
  PERF_TIMER_GUARD(write_pre_and_post_process_time);
468
- StopWatch write_sw(env_, immutable_db_options_.statistics.get(), DB_WRITE);
567
+ StopWatch write_sw(immutable_db_options_.clock, stats_, DB_WRITE);
469
568
 
470
569
  WriteContext write_context;
471
570
 
472
571
  WriteThread::Writer w(write_options, my_batch, callback, log_ref,
473
- disable_memtable);
572
+ disable_memtable, /*_batch_cnt=*/0,
573
+ /*_pre_release_callback=*/nullptr);
474
574
  write_thread_.JoinBatchGroup(&w);
475
575
  TEST_SYNC_POINT("DBImplWrite::PipelinedWriteImpl:AfterJoinBatchGroup");
476
576
  if (w.state == WriteThread::STATE_GROUP_LEADER) {
@@ -497,8 +597,20 @@ Status DBImpl::PipelinedWriteImpl(const WriteOptions& write_options,
497
597
  size_t total_byte_size = 0;
498
598
 
499
599
  if (w.status.ok()) {
600
+ // TODO: this use of operator bool on `tracer_` can avoid unnecessary lock
601
+ // grabs but does not seem thread-safe.
602
+ if (tracer_) {
603
+ InstrumentedMutexLock lock(&trace_mutex_);
604
+ if (tracer_ != nullptr && tracer_->IsWriteOrderPreserved()) {
605
+ for (auto* writer : wal_write_group) {
606
+ // TODO: maybe handle the tracing status?
607
+ tracer_->Write(writer->batch).PermitUncheckedError();
608
+ }
609
+ }
610
+ }
500
611
  SequenceNumber next_sequence = current_sequence;
501
- for (auto writer : wal_write_group) {
612
+ for (auto* writer : wal_write_group) {
613
+ assert(writer);
502
614
  if (writer->CheckCallback(this)) {
503
615
  if (writer->ShouldWriteToMemtable()) {
504
616
  writer->sequence = next_sequence;
@@ -621,7 +733,7 @@ Status DBImpl::UnorderedWriteMemtable(const WriteOptions& write_options,
621
733
  SequenceNumber seq,
622
734
  const size_t sub_batch_cnt) {
623
735
  PERF_TIMER_GUARD(write_pre_and_post_process_time);
624
- StopWatch write_sw(env_, immutable_db_options_.statistics.get(), DB_WRITE);
736
+ StopWatch write_sw(immutable_db_options_.clock, stats_, DB_WRITE);
625
737
 
626
738
  WriteThread::Writer w(write_options, my_batch, callback, log_ref,
627
739
  false /*disable_memtable*/);
@@ -675,8 +787,7 @@ Status DBImpl::WriteImplWALOnly(
675
787
  PERF_TIMER_GUARD(write_pre_and_post_process_time);
676
788
  WriteThread::Writer w(write_options, my_batch, callback, log_ref,
677
789
  disable_memtable, sub_batch_cnt, pre_release_callback);
678
- RecordTick(stats_, WRITE_WITH_WAL);
679
- StopWatch write_sw(env_, immutable_db_options_.statistics.get(), DB_WRITE);
790
+ StopWatch write_sw(immutable_db_options_.clock, stats_, DB_WRITE);
680
791
 
681
792
  write_thread->JoinBatchGroup(&w);
682
793
  assert(w.state != WriteThread::STATE_PARALLEL_MEMTABLE_WRITER);
@@ -722,10 +833,22 @@ Status DBImpl::WriteImplWALOnly(
722
833
  write_thread->EnterAsBatchGroupLeader(&w, &write_group);
723
834
  // Note: no need to update last_batch_group_size_ here since the batch writes
724
835
  // to WAL only
836
+ // TODO: this use of operator bool on `tracer_` can avoid unnecessary lock
837
+ // grabs but does not seem thread-safe.
838
+ if (tracer_) {
839
+ InstrumentedMutexLock lock(&trace_mutex_);
840
+ if (tracer_ != nullptr && tracer_->IsWriteOrderPreserved()) {
841
+ for (auto* writer : write_group) {
842
+ // TODO: maybe handle the tracing status?
843
+ tracer_->Write(writer->batch).PermitUncheckedError();
844
+ }
845
+ }
846
+ }
725
847
 
726
848
  size_t pre_release_callback_cnt = 0;
727
849
  size_t total_byte_size = 0;
728
850
  for (auto* writer : write_group) {
851
+ assert(writer);
729
852
  if (writer->CheckCallback(this)) {
730
853
  total_byte_size = WriteBatchInternal::AppendedByteSize(
731
854
  total_byte_size, WriteBatchInternal::ByteSize(writer->batch));
@@ -933,7 +1056,7 @@ Status DBImpl::PreprocessWrite(const WriteOptions& write_options,
933
1056
  // be flushed. We may end up with flushing much more DBs than needed. It's
934
1057
  // suboptimal but still correct.
935
1058
  WaitForPendingWrites();
936
- status = HandleWriteBufferFull(write_context);
1059
+ status = HandleWriteBufferManagerFlush(write_context);
937
1060
  }
938
1061
 
939
1062
  if (UNLIKELY(status.ok() && !trim_history_scheduler_.Empty())) {
@@ -960,6 +1083,20 @@ Status DBImpl::PreprocessWrite(const WriteOptions& write_options,
960
1083
  PERF_TIMER_START(write_pre_and_post_process_time);
961
1084
  }
962
1085
 
1086
+ // If memory usage exceeded beyond a certain threshold,
1087
+ // write_buffer_manager_->ShouldStall() returns true to all threads writing to
1088
+ // all DBs and writers will be stalled.
1089
+ // It does soft checking because WriteBufferManager::buffer_limit_ has already
1090
+ // exceeded at this point so no new write (including current one) will go
1091
+ // through until memory usage is decreased.
1092
+ if (UNLIKELY(status.ok() && write_buffer_manager_->ShouldStall())) {
1093
+ if (write_options.no_slowdown) {
1094
+ status = Status::Incomplete("Write stall");
1095
+ } else {
1096
+ WriteBufferManagerStallWrites();
1097
+ }
1098
+ }
1099
+
963
1100
  if (status.ok() && *need_log_sync) {
964
1101
  // Wait until the parallel syncs are finished. Any sync process has to sync
965
1102
  // the front log too so it is enough to check the status of front()
@@ -1033,8 +1170,19 @@ WriteBatch* DBImpl::MergeBatch(const WriteThread::WriteGroup& write_group,
1033
1170
  // write thread. Otherwise this must be called holding log_write_mutex_.
1034
1171
  IOStatus DBImpl::WriteToWAL(const WriteBatch& merged_batch,
1035
1172
  log::Writer* log_writer, uint64_t* log_used,
1036
- uint64_t* log_size) {
1173
+ uint64_t* log_size,
1174
+ Env::IOPriority rate_limiter_priority,
1175
+ bool with_db_mutex, bool with_log_mutex) {
1037
1176
  assert(log_size != nullptr);
1177
+
1178
+ // Assert mutex explicitly.
1179
+ if (with_db_mutex) {
1180
+ mutex_.AssertHeld();
1181
+ } else if (two_write_queues_) {
1182
+ log_write_mutex_.AssertHeld();
1183
+ assert(with_log_mutex);
1184
+ }
1185
+
1038
1186
  Slice log_entry = WriteBatchInternal::Contents(&merged_batch);
1039
1187
  *log_size = log_entry.size();
1040
1188
  // When two_write_queues_ WriteToWAL has to be protected from concurretn calls
@@ -1048,7 +1196,7 @@ IOStatus DBImpl::WriteToWAL(const WriteBatch& merged_batch,
1048
1196
  if (UNLIKELY(needs_locking)) {
1049
1197
  log_write_mutex_.Lock();
1050
1198
  }
1051
- IOStatus io_s = log_writer->AddRecord(log_entry);
1199
+ IOStatus io_s = log_writer->AddRecord(log_entry, rate_limiter_priority);
1052
1200
 
1053
1201
  if (UNLIKELY(needs_locking)) {
1054
1202
  log_write_mutex_.Unlock();
@@ -1057,9 +1205,12 @@ IOStatus DBImpl::WriteToWAL(const WriteBatch& merged_batch,
1057
1205
  *log_used = logfile_number_;
1058
1206
  }
1059
1207
  total_log_size_ += log_entry.size();
1060
- // TODO(myabandeh): it might be unsafe to access alive_log_files_.back() here
1061
- // since alive_log_files_ might be modified concurrently
1062
- alive_log_files_.back().AddSize(log_entry.size());
1208
+ if (with_db_mutex || with_log_mutex) {
1209
+ assert(alive_log_files_tail_ == alive_log_files_.rbegin());
1210
+ assert(alive_log_files_tail_ != alive_log_files_.rend());
1211
+ }
1212
+ LogFileNumberSize& last_alive_log = *alive_log_files_tail_;
1213
+ last_alive_log.AddSize(*log_size);
1063
1214
  log_empty_ = false;
1064
1215
  return io_s;
1065
1216
  }
@@ -1069,6 +1220,7 @@ IOStatus DBImpl::WriteToWAL(const WriteThread::WriteGroup& write_group,
1069
1220
  bool need_log_sync, bool need_log_dir_sync,
1070
1221
  SequenceNumber sequence) {
1071
1222
  IOStatus io_s;
1223
+ assert(!two_write_queues_);
1072
1224
  assert(!write_group.leader->disable_wal);
1073
1225
  // Same holds for all in the batch group
1074
1226
  size_t write_with_wal = 0;
@@ -1086,14 +1238,15 @@ IOStatus DBImpl::WriteToWAL(const WriteThread::WriteGroup& write_group,
1086
1238
  WriteBatchInternal::SetSequence(merged_batch, sequence);
1087
1239
 
1088
1240
  uint64_t log_size;
1089
- io_s = WriteToWAL(*merged_batch, log_writer, log_used, &log_size);
1241
+ io_s = WriteToWAL(*merged_batch, log_writer, log_used, &log_size,
1242
+ write_group.leader->rate_limiter_priority);
1090
1243
  if (to_be_cached_state) {
1091
1244
  cached_recoverable_state_ = *to_be_cached_state;
1092
1245
  cached_recoverable_state_empty_ = false;
1093
1246
  }
1094
1247
 
1095
1248
  if (io_s.ok() && need_log_sync) {
1096
- StopWatch sw(env_, stats_, WAL_FILE_SYNC_MICROS);
1249
+ StopWatch sw(immutable_db_options_.clock, stats_, WAL_FILE_SYNC_MICROS);
1097
1250
  // It's safe to access logs_ with unlocked mutex_ here because:
1098
1251
  // - we've set getting_synced=true for all logs,
1099
1252
  // so other threads won't pop from logs_ while we're here,
@@ -1101,6 +1254,18 @@ IOStatus DBImpl::WriteToWAL(const WriteThread::WriteGroup& write_group,
1101
1254
  // writer thread, so no one will push to logs_,
1102
1255
  // - as long as other threads don't modify it, it's safe to read
1103
1256
  // from std::deque from multiple threads concurrently.
1257
+ //
1258
+ // Sync operation should work with locked log_write_mutex_, because:
1259
+ // when DBOptions.manual_wal_flush_ is set,
1260
+ // FlushWAL function will be invoked by another thread.
1261
+ // if without locked log_write_mutex_, the log file may get data
1262
+ // corruption
1263
+
1264
+ const bool needs_locking = manual_wal_flush_ && !two_write_queues_;
1265
+ if (UNLIKELY(needs_locking)) {
1266
+ log_write_mutex_.Lock();
1267
+ }
1268
+
1104
1269
  for (auto& log : logs_) {
1105
1270
  io_s = log.writer->file()->Sync(immutable_db_options_.use_fsync);
1106
1271
  if (!io_s.ok()) {
@@ -1108,11 +1273,17 @@ IOStatus DBImpl::WriteToWAL(const WriteThread::WriteGroup& write_group,
1108
1273
  }
1109
1274
  }
1110
1275
 
1276
+ if (UNLIKELY(needs_locking)) {
1277
+ log_write_mutex_.Unlock();
1278
+ }
1279
+
1111
1280
  if (io_s.ok() && need_log_dir_sync) {
1112
1281
  // We only sync WAL directory the first time WAL syncing is
1113
1282
  // requested, so that in case users never turn on WAL sync,
1114
1283
  // we can avoid the disk I/O in the write code path.
1115
- io_s = directories_.GetWalDir()->Fsync(IOOptions(), nullptr);
1284
+ io_s = directories_.GetWalDir()->FsyncWithDirOptions(
1285
+ IOOptions(), nullptr,
1286
+ DirFsyncOptions(DirFsyncOptions::FsyncReason::kNewFileSynced));
1116
1287
  }
1117
1288
  }
1118
1289
 
@@ -1138,6 +1309,7 @@ IOStatus DBImpl::ConcurrentWriteToWAL(
1138
1309
  SequenceNumber* last_sequence, size_t seq_inc) {
1139
1310
  IOStatus io_s;
1140
1311
 
1312
+ assert(two_write_queues_ || immutable_db_options_.unordered_write);
1141
1313
  assert(!write_group.leader->disable_wal);
1142
1314
  // Same holds for all in the batch group
1143
1315
  WriteBatch tmp_batch;
@@ -1162,7 +1334,9 @@ IOStatus DBImpl::ConcurrentWriteToWAL(
1162
1334
 
1163
1335
  log::Writer* log_writer = logs_.back().writer;
1164
1336
  uint64_t log_size;
1165
- io_s = WriteToWAL(*merged_batch, log_writer, log_used, &log_size);
1337
+ io_s = WriteToWAL(*merged_batch, log_writer, log_used, &log_size,
1338
+ write_group.leader->rate_limiter_priority,
1339
+ /*with_db_mutex=*/false, /*with_log_mutex=*/true);
1166
1340
  if (to_be_cached_state) {
1167
1341
  cached_recoverable_state_ = *to_be_cached_state;
1168
1342
  cached_recoverable_state_empty_ = false;
@@ -1344,20 +1518,20 @@ Status DBImpl::SwitchWAL(WriteContext* write_context) {
1344
1518
  if (!immutable_db_options_.atomic_flush) {
1345
1519
  FlushRequest flush_req;
1346
1520
  GenerateFlushRequest({cfd}, &flush_req);
1347
- SchedulePendingFlush(flush_req, FlushReason::kWriteBufferManager);
1521
+ SchedulePendingFlush(flush_req, FlushReason::kWalFull);
1348
1522
  }
1349
1523
  }
1350
1524
  if (immutable_db_options_.atomic_flush) {
1351
1525
  FlushRequest flush_req;
1352
1526
  GenerateFlushRequest(cfds, &flush_req);
1353
- SchedulePendingFlush(flush_req, FlushReason::kWriteBufferManager);
1527
+ SchedulePendingFlush(flush_req, FlushReason::kWalFull);
1354
1528
  }
1355
1529
  MaybeScheduleFlushOrCompaction();
1356
1530
  }
1357
1531
  return status;
1358
1532
  }
1359
1533
 
1360
- Status DBImpl::HandleWriteBufferFull(WriteContext* write_context) {
1534
+ Status DBImpl::HandleWriteBufferManagerFlush(WriteContext* write_context) {
1361
1535
  mutex_.AssertHeld();
1362
1536
  assert(write_context != nullptr);
1363
1537
  Status status;
@@ -1369,7 +1543,7 @@ Status DBImpl::HandleWriteBufferFull(WriteContext* write_context) {
1369
1543
  // suboptimal but still correct.
1370
1544
  ROCKS_LOG_INFO(
1371
1545
  immutable_db_options_.info_log,
1372
- "Flushing column family with oldest memtable entry. Write buffer is "
1546
+ "Flushing column family with oldest memtable entry. Write buffers are "
1373
1547
  "using %" ROCKSDB_PRIszt " bytes out of a total of %" ROCKSDB_PRIszt ".",
1374
1548
  write_buffer_manager_->memory_usage(),
1375
1549
  write_buffer_manager_->buffer_size());
@@ -1430,13 +1604,13 @@ Status DBImpl::HandleWriteBufferFull(WriteContext* write_context) {
1430
1604
  if (!immutable_db_options_.atomic_flush) {
1431
1605
  FlushRequest flush_req;
1432
1606
  GenerateFlushRequest({cfd}, &flush_req);
1433
- SchedulePendingFlush(flush_req, FlushReason::kWriteBufferFull);
1607
+ SchedulePendingFlush(flush_req, FlushReason::kWriteBufferManager);
1434
1608
  }
1435
1609
  }
1436
1610
  if (immutable_db_options_.atomic_flush) {
1437
1611
  FlushRequest flush_req;
1438
1612
  GenerateFlushRequest(cfds, &flush_req);
1439
- SchedulePendingFlush(flush_req, FlushReason::kWriteBufferFull);
1613
+ SchedulePendingFlush(flush_req, FlushReason::kWriteBufferManager);
1440
1614
  }
1441
1615
  MaybeScheduleFlushOrCompaction();
1442
1616
  }
@@ -1457,8 +1631,10 @@ Status DBImpl::DelayWrite(uint64_t num_bytes,
1457
1631
  uint64_t time_delayed = 0;
1458
1632
  bool delayed = false;
1459
1633
  {
1460
- StopWatch sw(env_, stats_, WRITE_STALL, &time_delayed);
1461
- uint64_t delay = write_controller_.GetDelay(env_, num_bytes);
1634
+ StopWatch sw(immutable_db_options_.clock, stats_, WRITE_STALL,
1635
+ &time_delayed);
1636
+ uint64_t delay =
1637
+ write_controller_.GetDelay(immutable_db_options_.clock, num_bytes);
1462
1638
  if (delay > 0) {
1463
1639
  if (write_options.no_slowdown) {
1464
1640
  return Status::Incomplete("Write stall");
@@ -1470,19 +1646,21 @@ Status DBImpl::DelayWrite(uint64_t num_bytes,
1470
1646
  write_thread_.BeginWriteStall();
1471
1647
  TEST_SYNC_POINT("DBImpl::DelayWrite:BeginWriteStallDone");
1472
1648
  mutex_.Unlock();
1473
- // We will delay the write until we have slept for delay ms or
1474
- // we don't need a delay anymore
1475
- const uint64_t kDelayInterval = 1000;
1649
+ // We will delay the write until we have slept for `delay` microseconds
1650
+ // or we don't need a delay anymore. We check for cancellation every 1ms
1651
+ // (slightly longer because WriteController minimum delay is 1ms, in
1652
+ // case of sleep imprecision, rounding, etc.)
1653
+ const uint64_t kDelayInterval = 1001;
1476
1654
  uint64_t stall_end = sw.start_time() + delay;
1477
1655
  while (write_controller_.NeedsDelay()) {
1478
- if (env_->NowMicros() >= stall_end) {
1656
+ if (immutable_db_options_.clock->NowMicros() >= stall_end) {
1479
1657
  // We already delayed this write `delay` microseconds
1480
1658
  break;
1481
1659
  }
1482
1660
 
1483
1661
  delayed = true;
1484
1662
  // Sleep for 0.001 seconds
1485
- env_->SleepForMicroseconds(kDelayInterval);
1663
+ immutable_db_options_.clock->SleepForMicroseconds(kDelayInterval);
1486
1664
  }
1487
1665
  mutex_.Lock();
1488
1666
  write_thread_.EndWriteStall();
@@ -1528,6 +1706,29 @@ Status DBImpl::DelayWrite(uint64_t num_bytes,
1528
1706
  return s;
1529
1707
  }
1530
1708
 
1709
+ // REQUIRES: mutex_ is held
1710
+ // REQUIRES: this thread is currently at the front of the writer queue
1711
+ void DBImpl::WriteBufferManagerStallWrites() {
1712
+ mutex_.AssertHeld();
1713
+ // First block future writer threads who want to add themselves to the queue
1714
+ // of WriteThread.
1715
+ write_thread_.BeginWriteStall();
1716
+ mutex_.Unlock();
1717
+
1718
+ // Change the state to State::Blocked.
1719
+ static_cast<WBMStallInterface*>(wbm_stall_.get())
1720
+ ->SetState(WBMStallInterface::State::BLOCKED);
1721
+ // Then WriteBufferManager will add DB instance to its queue
1722
+ // and block this thread by calling WBMStallInterface::Block().
1723
+ write_buffer_manager_->BeginWriteStall(wbm_stall_.get());
1724
+ wbm_stall_->Block();
1725
+
1726
+ mutex_.Lock();
1727
+ // Stall has ended. Signal writer threads so that they can add
1728
+ // themselves to the WriteThread queue for writes.
1729
+ write_thread_.EndWriteStall();
1730
+ }
1731
+
1531
1732
  Status DBImpl::ThrottleLowPriWritesIfNeeded(const WriteOptions& write_options,
1532
1733
  WriteBatch* my_batch) {
1533
1734
  assert(write_options.low_pri);
@@ -1601,13 +1802,8 @@ Status DBImpl::TrimMemtableHistory(WriteContext* context) {
1601
1802
  }
1602
1803
  for (auto& cfd : cfds) {
1603
1804
  autovector<MemTable*> to_delete;
1604
- bool trimmed = cfd->imm()->TrimHistory(
1605
- &to_delete, cfd->mem()->ApproximateMemoryUsage());
1606
- if (!to_delete.empty()) {
1607
- for (auto m : to_delete) {
1608
- delete m;
1609
- }
1610
- }
1805
+ bool trimmed = cfd->imm()->TrimHistory(&context->memtables_to_free_,
1806
+ cfd->mem()->MemoryAllocatedBytes());
1611
1807
  if (trimmed) {
1612
1808
  context->superversion_context.NewSuperVersion();
1613
1809
  assert(context->superversion_context.new_superversion.get() != nullptr);
@@ -1686,9 +1882,11 @@ void DBImpl::NotifyOnMemTableSealed(ColumnFamilyData* /*cfd*/,
1686
1882
  return;
1687
1883
  }
1688
1884
 
1885
+ mutex_.Unlock();
1689
1886
  for (auto listener : immutable_db_options_.listeners) {
1690
1887
  listener->OnMemTableSealed(mem_table_info);
1691
1888
  }
1889
+ mutex_.Lock();
1692
1890
  }
1693
1891
  #endif // ROCKSDB_LITE
1694
1892
 
@@ -1698,8 +1896,6 @@ void DBImpl::NotifyOnMemTableSealed(ColumnFamilyData* /*cfd*/,
1698
1896
  // two_write_queues_ is true (This is to simplify the reasoning.)
1699
1897
  Status DBImpl::SwitchMemtable(ColumnFamilyData* cfd, WriteContext* context) {
1700
1898
  mutex_.AssertHeld();
1701
- WriteThread::Writer nonmem_w;
1702
- std::unique_ptr<WritableFile> lfile;
1703
1899
  log::Writer* new_log = nullptr;
1704
1900
  MemTable* new_mem = nullptr;
1705
1901
  IOStatus io_s;
@@ -1796,6 +1992,7 @@ Status DBImpl::SwitchMemtable(ColumnFamilyData* cfd, WriteContext* context) {
1796
1992
  log_dir_synced_ = false;
1797
1993
  logs_.emplace_back(logfile_number_, new_log);
1798
1994
  alive_log_files_.push_back(LogFileNumberSize(logfile_number_));
1995
+ alive_log_files_tail_ = alive_log_files_.rbegin();
1799
1996
  }
1800
1997
  log_write_mutex_.Unlock();
1801
1998
  }
@@ -1803,17 +2000,9 @@ Status DBImpl::SwitchMemtable(ColumnFamilyData* cfd, WriteContext* context) {
1803
2000
  if (!s.ok()) {
1804
2001
  // how do we fail if we're not creating new log?
1805
2002
  assert(creating_new_log);
1806
- if (new_mem) {
1807
- delete new_mem;
1808
- }
1809
- if (new_log) {
1810
- delete new_log;
1811
- }
1812
- SuperVersion* new_superversion =
1813
- context->superversion_context.new_superversion.release();
1814
- if (new_superversion != nullptr) {
1815
- delete new_superversion;
1816
- }
2003
+ delete new_mem;
2004
+ delete new_log;
2005
+ context->superversion_context.new_superversion.reset();
1817
2006
  // We may have lost data from the WritableFileBuffer in-memory buffer for
1818
2007
  // the current log, so treat it as a fatal error and set bg_error
1819
2008
  if (!io_s.ok()) {
@@ -1866,6 +2055,8 @@ Status DBImpl::SwitchMemtable(ColumnFamilyData* cfd, WriteContext* context) {
1866
2055
  for (auto cf : empty_cfs) {
1867
2056
  if (cf->IsEmpty()) {
1868
2057
  cf->SetLogNumber(logfile_number_);
2058
+ // MEMPURGE: No need to change this, because new adds
2059
+ // should still receive new sequence numbers.
1869
2060
  cf->mem()->SetCreationSeq(versions_->LastSequence());
1870
2061
  } // cf may become non-empty.
1871
2062
  }
@@ -1888,17 +2079,17 @@ Status DBImpl::SwitchMemtable(ColumnFamilyData* cfd, WriteContext* context) {
1888
2079
  }
1889
2080
 
1890
2081
  cfd->mem()->SetNextLogNumber(logfile_number_);
2082
+ assert(new_mem != nullptr);
1891
2083
  cfd->imm()->Add(cfd->mem(), &context->memtables_to_free_);
1892
2084
  new_mem->Ref();
1893
2085
  cfd->SetMemtable(new_mem);
1894
2086
  InstallSuperVersionAndScheduleWork(cfd, &context->superversion_context,
1895
2087
  mutable_cf_options);
2088
+
1896
2089
  #ifndef ROCKSDB_LITE
1897
- mutex_.Unlock();
1898
2090
  // Notify client that memtable is sealed, now that we have successfully
1899
2091
  // installed a new memtable
1900
2092
  NotifyOnMemTableSealed(cfd, memtable_info);
1901
- mutex_.Lock();
1902
2093
  #endif // ROCKSDB_LITE
1903
2094
  // It is possible that we got here without checking the value of i_os, but
1904
2095
  // that is okay. If we did, it most likely means that s was already an error.
@@ -1933,29 +2124,25 @@ size_t DBImpl::GetWalPreallocateBlockSize(uint64_t write_buffer_size) const {
1933
2124
  // can call if they wish
1934
2125
  Status DB::Put(const WriteOptions& opt, ColumnFamilyHandle* column_family,
1935
2126
  const Slice& key, const Slice& value) {
1936
- if (nullptr == opt.timestamp) {
1937
- // Pre-allocate size of write batch conservatively.
1938
- // 8 bytes are taken by header, 4 bytes for count, 1 byte for type,
1939
- // and we allocate 11 extra bytes for key length, as well as value length.
1940
- WriteBatch batch(key.size() + value.size() + 24);
1941
- Status s = batch.Put(column_family, key, value);
1942
- if (!s.ok()) {
1943
- return s;
1944
- }
1945
- return Write(opt, &batch);
1946
- }
1947
- const Slice* ts = opt.timestamp;
1948
- assert(nullptr != ts);
1949
- size_t ts_sz = ts->size();
1950
- assert(column_family->GetComparator());
1951
- assert(ts_sz == column_family->GetComparator()->timestamp_size());
1952
- WriteBatch batch(key.size() + ts_sz + value.size() + 24, /*max_bytes=*/0,
1953
- ts_sz);
2127
+ // Pre-allocate size of write batch conservatively.
2128
+ // 8 bytes are taken by header, 4 bytes for count, 1 byte for type,
2129
+ // and we allocate 11 extra bytes for key length, as well as value length.
2130
+ WriteBatch batch(key.size() + value.size() + 24);
1954
2131
  Status s = batch.Put(column_family, key, value);
1955
2132
  if (!s.ok()) {
1956
2133
  return s;
1957
2134
  }
1958
- s = batch.AssignTimestamp(*ts);
2135
+ return Write(opt, &batch);
2136
+ }
2137
+
2138
+ Status DB::Put(const WriteOptions& opt, ColumnFamilyHandle* column_family,
2139
+ const Slice& key, const Slice& ts, const Slice& value) {
2140
+ ColumnFamilyHandle* default_cf = DefaultColumnFamily();
2141
+ assert(default_cf);
2142
+ const Comparator* const default_cf_ucmp = default_cf->GetComparator();
2143
+ assert(default_cf_ucmp);
2144
+ WriteBatch batch(0, 0, 0, default_cf_ucmp->timestamp_size());
2145
+ Status s = batch.Put(column_family, key, ts, value);
1959
2146
  if (!s.ok()) {
1960
2147
  return s;
1961
2148
  }
@@ -1964,27 +2151,22 @@ Status DB::Put(const WriteOptions& opt, ColumnFamilyHandle* column_family,
1964
2151
 
1965
2152
  Status DB::Delete(const WriteOptions& opt, ColumnFamilyHandle* column_family,
1966
2153
  const Slice& key) {
1967
- if (nullptr == opt.timestamp) {
1968
- WriteBatch batch;
1969
- Status s = batch.Delete(column_family, key);
1970
- if (!s.ok()) {
1971
- return s;
1972
- }
1973
- return Write(opt, &batch);
1974
- }
1975
- const Slice* ts = opt.timestamp;
1976
- assert(ts != nullptr);
1977
- const size_t ts_sz = ts->size();
1978
- constexpr size_t kKeyAndValueLenSize = 11;
1979
- constexpr size_t kWriteBatchOverhead =
1980
- WriteBatchInternal::kHeader + sizeof(ValueType) + kKeyAndValueLenSize;
1981
- WriteBatch batch(key.size() + ts_sz + kWriteBatchOverhead, /*max_bytes=*/0,
1982
- ts_sz);
2154
+ WriteBatch batch;
1983
2155
  Status s = batch.Delete(column_family, key);
1984
2156
  if (!s.ok()) {
1985
2157
  return s;
1986
2158
  }
1987
- s = batch.AssignTimestamp(*ts);
2159
+ return Write(opt, &batch);
2160
+ }
2161
+
2162
+ Status DB::Delete(const WriteOptions& opt, ColumnFamilyHandle* column_family,
2163
+ const Slice& key, const Slice& ts) {
2164
+ ColumnFamilyHandle* default_cf = DefaultColumnFamily();
2165
+ assert(default_cf);
2166
+ const Comparator* const default_cf_ucmp = default_cf->GetComparator();
2167
+ assert(default_cf_ucmp);
2168
+ WriteBatch batch(0, 0, 0, default_cf_ucmp->timestamp_size());
2169
+ Status s = batch.Delete(column_family, key, ts);
1988
2170
  if (!s.ok()) {
1989
2171
  return s;
1990
2172
  }
@@ -2001,6 +2183,21 @@ Status DB::SingleDelete(const WriteOptions& opt,
2001
2183
  return Write(opt, &batch);
2002
2184
  }
2003
2185
 
2186
+ Status DB::SingleDelete(const WriteOptions& opt,
2187
+ ColumnFamilyHandle* column_family, const Slice& key,
2188
+ const Slice& ts) {
2189
+ ColumnFamilyHandle* default_cf = DefaultColumnFamily();
2190
+ assert(default_cf);
2191
+ const Comparator* const default_cf_ucmp = default_cf->GetComparator();
2192
+ assert(default_cf_ucmp);
2193
+ WriteBatch batch(0, 0, 0, default_cf_ucmp->timestamp_size());
2194
+ Status s = batch.SingleDelete(column_family, key, ts);
2195
+ if (!s.ok()) {
2196
+ return s;
2197
+ }
2198
+ return Write(opt, &batch);
2199
+ }
2200
+
2004
2201
  Status DB::DeleteRange(const WriteOptions& opt,
2005
2202
  ColumnFamilyHandle* column_family,
2006
2203
  const Slice& begin_key, const Slice& end_key) {