@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
@@ -1,1145 +0,0 @@
1
- // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2
- // This source code is licensed under both the GPLv2 (found in the
3
- // COPYING file in the root directory) and Apache 2.0 License
4
- // (found in the LICENSE.Apache file in the root directory).
5
-
6
- #include <folly/synchronization/DistributedMutex.h>
7
- #include <folly/container/Array.h>
8
- #include <folly/synchronization/Baton.h>
9
-
10
- #ifdef OS_AIX
11
- #include "gtest/gtest.h"
12
- #else
13
- #include <gtest/gtest.h>
14
- #endif
15
-
16
- #if !defined(ROCKSDB_LITE) && !defined(__ARM_ARCH) && \
17
- !defined(ROCKSDB_VALGRIND_RUN)
18
-
19
- #include <chrono>
20
- #include <cmath>
21
- #include <thread>
22
-
23
- namespace folly {
24
- namespace test {
25
- template <template <typename> class Atomic>
26
- using TestDistributedMutex =
27
- folly::detail::distributed_mutex::DistributedMutex<Atomic, false>;
28
- } // namespace test
29
-
30
- namespace {
31
- constexpr auto kStressFactor = 1000;
32
- constexpr auto kStressTestSeconds = 2;
33
- constexpr auto kForever = std::chrono::hours{100};
34
-
35
- int sum(int n) {
36
- return (n * (n + 1)) / 2;
37
- }
38
-
39
- template <template <typename> class Atom = std::atomic>
40
- void basicNThreads(int numThreads, int iterations = kStressFactor) {
41
- auto&& mutex = folly::detail::distributed_mutex::DistributedMutex<Atom>{};
42
- auto&& barrier = std::atomic<int>{0};
43
- auto&& threads = std::vector<std::thread>{};
44
- auto&& result = std::vector<int>{};
45
-
46
- auto&& function = [&](int id) {
47
- return [&, id] {
48
- for (auto j = 0; j < iterations; ++j) {
49
- auto lck = std::unique_lock<_t<std::decay<decltype(mutex)>>>{mutex};
50
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
51
- std::this_thread::yield();
52
- result.push_back(id);
53
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
54
- }
55
- };
56
- };
57
-
58
- for (auto i = 1; i <= numThreads; ++i) {
59
- threads.push_back(std::thread(function(i)));
60
- }
61
- for (auto& thread : threads) {
62
- thread.join();
63
- }
64
-
65
- auto total = 0;
66
- for (auto value : result) {
67
- total += value;
68
- }
69
- EXPECT_EQ(total, sum(numThreads) * iterations);
70
- }
71
-
72
- template <template <typename> class Atom = std::atomic>
73
- void lockWithTryAndTimedNThreads(
74
- int numThreads,
75
- std::chrono::seconds duration) {
76
- auto&& mutex = folly::detail::distributed_mutex::DistributedMutex<Atom>{};
77
- auto&& barrier = std::atomic<int>{0};
78
- auto&& threads = std::vector<std::thread>{};
79
- auto&& stop = std::atomic<bool>{false};
80
-
81
- auto&& lockUnlockFunction = [&]() {
82
- while (!stop.load()) {
83
- auto lck = std::unique_lock<_t<std::decay<decltype(mutex)>>>{mutex};
84
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
85
- std::this_thread::yield();
86
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
87
- }
88
- };
89
-
90
- auto tryLockFunction = [&]() {
91
- while (!stop.load()) {
92
- using Mutex = _t<std::decay<decltype(mutex)>>;
93
- auto lck = std::unique_lock<Mutex>{mutex, std::defer_lock};
94
- if (lck.try_lock()) {
95
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
96
- std::this_thread::yield();
97
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
98
- }
99
- }
100
- };
101
-
102
- auto timedLockFunction = [&]() {
103
- while (!stop.load()) {
104
- using Mutex = _t<std::decay<decltype(mutex)>>;
105
- auto lck = std::unique_lock<Mutex>{mutex, std::defer_lock};
106
- if (lck.try_lock_for(kForever)) {
107
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
108
- std::this_thread::yield();
109
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
110
- }
111
- }
112
- };
113
-
114
- for (auto i = 0; i < (numThreads / 3); ++i) {
115
- threads.push_back(std::thread(lockUnlockFunction));
116
- }
117
- for (auto i = 0; i < (numThreads / 3); ++i) {
118
- threads.push_back(std::thread(tryLockFunction));
119
- }
120
- for (auto i = 0; i < (numThreads / 3); ++i) {
121
- threads.push_back(std::thread(timedLockFunction));
122
- }
123
-
124
- /* sleep override */
125
- std::this_thread::sleep_for(duration);
126
- stop.store(true);
127
- for (auto& thread : threads) {
128
- thread.join();
129
- }
130
- }
131
-
132
- template <template <typename> class Atom = std::atomic>
133
- void combineNThreads(int numThreads, std::chrono::seconds duration) {
134
- auto&& mutex = folly::detail::distributed_mutex::DistributedMutex<Atom>{};
135
- auto&& barrier = std::atomic<int>{0};
136
- auto&& threads = std::vector<std::thread>{};
137
- auto&& stop = std::atomic<bool>{false};
138
-
139
- auto&& function = [&]() {
140
- return [&] {
141
- auto&& expected = std::uint64_t{0};
142
- auto&& local = std::atomic<std::uint64_t>{0};
143
- auto&& result = std::atomic<std::uint64_t>{0};
144
- while (!stop.load()) {
145
- ++expected;
146
- auto current = mutex.lock_combine([&]() {
147
- result.fetch_add(1);
148
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
149
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 1);
150
- std::this_thread::yield();
151
- SCOPE_EXIT {
152
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
153
- };
154
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 2);
155
- return local.fetch_add(1);
156
- });
157
- EXPECT_EQ(current, expected - 1);
158
- }
159
-
160
- EXPECT_EQ(expected, result.load());
161
- };
162
- };
163
-
164
- for (auto i = 1; i <= numThreads; ++i) {
165
- threads.push_back(std::thread(function()));
166
- }
167
-
168
- /* sleep override */
169
- std::this_thread::sleep_for(duration);
170
- stop.store(true);
171
- for (auto& thread : threads) {
172
- thread.join();
173
- }
174
- }
175
-
176
- template <template <typename> class Atom = std::atomic>
177
- void combineWithLockNThreads(int numThreads, std::chrono::seconds duration) {
178
- auto&& mutex = folly::detail::distributed_mutex::DistributedMutex<Atom>{};
179
- auto&& barrier = std::atomic<int>{0};
180
- auto&& threads = std::vector<std::thread>{};
181
- auto&& stop = std::atomic<bool>{false};
182
-
183
- auto&& lockUnlockFunction = [&]() {
184
- while (!stop.load()) {
185
- auto lck = std::unique_lock<_t<std::decay<decltype(mutex)>>>{mutex};
186
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
187
- std::this_thread::yield();
188
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
189
- }
190
- };
191
-
192
- auto&& combineFunction = [&]() {
193
- auto&& expected = std::uint64_t{0};
194
- auto&& total = std::atomic<std::uint64_t>{0};
195
-
196
- while (!stop.load()) {
197
- ++expected;
198
- auto current = mutex.lock_combine([&]() {
199
- auto iteration = total.fetch_add(1);
200
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
201
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 1);
202
- std::this_thread::yield();
203
- SCOPE_EXIT {
204
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
205
- };
206
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 2);
207
- return iteration;
208
- });
209
-
210
- EXPECT_EQ(expected, current + 1);
211
- }
212
-
213
- EXPECT_EQ(expected, total.load());
214
- };
215
-
216
- for (auto i = 1; i < (numThreads / 2); ++i) {
217
- threads.push_back(std::thread(combineFunction));
218
- }
219
- for (auto i = 0; i < (numThreads / 2); ++i) {
220
- threads.push_back(std::thread(lockUnlockFunction));
221
- }
222
-
223
- /* sleep override */
224
- std::this_thread::sleep_for(duration);
225
- stop.store(true);
226
- for (auto& thread : threads) {
227
- thread.join();
228
- }
229
- }
230
-
231
- template <template <typename> class Atom = std::atomic>
232
- void combineWithTryLockNThreads(int numThreads, std::chrono::seconds duration) {
233
- auto&& mutex = folly::detail::distributed_mutex::DistributedMutex<Atom>{};
234
- auto&& barrier = std::atomic<int>{0};
235
- auto&& threads = std::vector<std::thread>{};
236
- auto&& stop = std::atomic<bool>{false};
237
-
238
- auto&& lockUnlockFunction = [&]() {
239
- while (!stop.load()) {
240
- auto lck = std::unique_lock<_t<std::decay<decltype(mutex)>>>{mutex};
241
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
242
- std::this_thread::yield();
243
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
244
- }
245
- };
246
-
247
- auto&& combineFunction = [&]() {
248
- auto&& expected = std::uint64_t{0};
249
- auto&& total = std::atomic<std::uint64_t>{0};
250
-
251
- while (!stop.load()) {
252
- ++expected;
253
- auto current = mutex.lock_combine([&]() {
254
- auto iteration = total.fetch_add(1);
255
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
256
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 1);
257
- std::this_thread::yield();
258
- SCOPE_EXIT {
259
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
260
- };
261
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 2);
262
- return iteration;
263
- });
264
-
265
- EXPECT_EQ(expected, current + 1);
266
- }
267
-
268
- EXPECT_EQ(expected, total.load());
269
- };
270
-
271
- auto tryLockFunction = [&]() {
272
- while (!stop.load()) {
273
- using Mutex = _t<std::decay<decltype(mutex)>>;
274
- auto lck = std::unique_lock<Mutex>{mutex, std::defer_lock};
275
- if (lck.try_lock()) {
276
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
277
- std::this_thread::yield();
278
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
279
- }
280
- }
281
- };
282
-
283
- for (auto i = 0; i < (numThreads / 3); ++i) {
284
- threads.push_back(std::thread(lockUnlockFunction));
285
- }
286
- for (auto i = 0; i < (numThreads / 3); ++i) {
287
- threads.push_back(std::thread(combineFunction));
288
- }
289
- for (auto i = 0; i < (numThreads / 3); ++i) {
290
- threads.push_back(std::thread(tryLockFunction));
291
- }
292
-
293
- /* sleep override */
294
- std::this_thread::sleep_for(duration);
295
- stop.store(true);
296
- for (auto& thread : threads) {
297
- thread.join();
298
- }
299
- }
300
-
301
- template <template <typename> class Atom = std::atomic>
302
- void combineWithLockTryAndTimedNThreads(
303
- int numThreads,
304
- std::chrono::seconds duration) {
305
- auto&& mutex = folly::detail::distributed_mutex::DistributedMutex<Atom>{};
306
- auto&& barrier = std::atomic<int>{0};
307
- auto&& threads = std::vector<std::thread>{};
308
- auto&& stop = std::atomic<bool>{false};
309
-
310
- auto&& lockUnlockFunction = [&]() {
311
- while (!stop.load()) {
312
- auto lck = std::unique_lock<_t<std::decay<decltype(mutex)>>>{mutex};
313
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
314
- std::this_thread::yield();
315
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
316
- }
317
- };
318
-
319
- auto&& combineFunction = [&]() {
320
- auto&& expected = std::uint64_t{0};
321
- auto&& total = std::atomic<std::uint64_t>{0};
322
-
323
- while (!stop.load()) {
324
- ++expected;
325
- auto current = mutex.lock_combine([&]() {
326
- auto iteration = total.fetch_add(1);
327
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
328
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 1);
329
- std::this_thread::yield();
330
- SCOPE_EXIT {
331
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
332
- };
333
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 2);
334
-
335
- // return a non-trivially-copyable object that occupies all the
336
- // storage we use to coalesce returns to test that codepath
337
- return folly::make_array(
338
- iteration,
339
- iteration + 1,
340
- iteration + 2,
341
- iteration + 3,
342
- iteration + 4,
343
- iteration + 5);
344
- });
345
-
346
- EXPECT_EQ(expected, current[0] + 1);
347
- EXPECT_EQ(expected, current[1]);
348
- EXPECT_EQ(expected, current[2] - 1);
349
- EXPECT_EQ(expected, current[3] - 2);
350
- EXPECT_EQ(expected, current[4] - 3);
351
- EXPECT_EQ(expected, current[5] - 4);
352
- }
353
-
354
- EXPECT_EQ(expected, total.load());
355
- };
356
-
357
- auto tryLockFunction = [&]() {
358
- while (!stop.load()) {
359
- using Mutex = _t<std::decay<decltype(mutex)>>;
360
- auto lck = std::unique_lock<Mutex>{mutex, std::defer_lock};
361
- if (lck.try_lock()) {
362
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
363
- std::this_thread::yield();
364
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
365
- }
366
- }
367
- };
368
-
369
- auto timedLockFunction = [&]() {
370
- while (!stop.load()) {
371
- using Mutex = _t<std::decay<decltype(mutex)>>;
372
- auto lck = std::unique_lock<Mutex>{mutex, std::defer_lock};
373
- if (lck.try_lock_for(kForever)) {
374
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
375
- std::this_thread::yield();
376
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
377
- }
378
- }
379
- };
380
-
381
- for (auto i = 0; i < (numThreads / 4); ++i) {
382
- threads.push_back(std::thread(lockUnlockFunction));
383
- }
384
- for (auto i = 0; i < (numThreads / 4); ++i) {
385
- threads.push_back(std::thread(combineFunction));
386
- }
387
- for (auto i = 0; i < (numThreads / 4); ++i) {
388
- threads.push_back(std::thread(tryLockFunction));
389
- }
390
- for (auto i = 0; i < (numThreads / 4); ++i) {
391
- threads.push_back(std::thread(timedLockFunction));
392
- }
393
-
394
- /* sleep override */
395
- std::this_thread::sleep_for(duration);
396
- stop.store(true);
397
- for (auto& thread : threads) {
398
- thread.join();
399
- }
400
- }
401
- } // namespace
402
-
403
- TEST(DistributedMutex, InternalDetailTestOne) {
404
- auto value = 0;
405
- auto ptr = reinterpret_cast<std::uintptr_t>(&value);
406
- EXPECT_EQ(folly::detail::distributed_mutex::extractPtr<int>(ptr), &value);
407
- ptr = ptr | 0b1;
408
- EXPECT_EQ(folly::detail::distributed_mutex::extractPtr<int>(ptr), &value);
409
- }
410
-
411
- TEST(DistributedMutex, Basic) {
412
- auto&& mutex = folly::DistributedMutex{};
413
- auto state = mutex.lock();
414
- mutex.unlock(std::move(state));
415
- }
416
-
417
- TEST(DistributedMutex, BasicTryLock) {
418
- auto&& mutex = folly::DistributedMutex{};
419
-
420
- while (true) {
421
- auto state = mutex.try_lock();
422
- if (state) {
423
- mutex.unlock(std::move(state));
424
- break;
425
- }
426
- }
427
- }
428
-
429
- TEST(DistributedMutex, StressTwoThreads) {
430
- basicNThreads(2);
431
- }
432
- TEST(DistributedMutex, StressThreeThreads) {
433
- basicNThreads(3);
434
- }
435
- TEST(DistributedMutex, StressFourThreads) {
436
- basicNThreads(4);
437
- }
438
- TEST(DistributedMutex, StressFiveThreads) {
439
- basicNThreads(5);
440
- }
441
- TEST(DistributedMutex, StressSixThreads) {
442
- basicNThreads(6);
443
- }
444
- TEST(DistributedMutex, StressSevenThreads) {
445
- basicNThreads(7);
446
- }
447
- TEST(DistributedMutex, StressEightThreads) {
448
- basicNThreads(8);
449
- }
450
- TEST(DistributedMutex, StressSixteenThreads) {
451
- basicNThreads(16);
452
- }
453
- TEST(DistributedMutex, StressThirtyTwoThreads) {
454
- basicNThreads(32);
455
- }
456
- TEST(DistributedMutex, StressSixtyFourThreads) {
457
- basicNThreads(64);
458
- }
459
- TEST(DistributedMutex, StressHundredThreads) {
460
- basicNThreads(100);
461
- }
462
- TEST(DistributedMutex, StressHardwareConcurrencyThreads) {
463
- basicNThreads(std::thread::hardware_concurrency());
464
- }
465
-
466
- TEST(DistributedMutex, StressThreeThreadsLockTryAndTimed) {
467
- lockWithTryAndTimedNThreads(3, std::chrono::seconds{kStressTestSeconds});
468
- }
469
- TEST(DistributedMutex, StressSixThreadsLockTryAndTimed) {
470
- lockWithTryAndTimedNThreads(6, std::chrono::seconds{kStressTestSeconds});
471
- }
472
- TEST(DistributedMutex, StressTwelveThreadsLockTryAndTimed) {
473
- lockWithTryAndTimedNThreads(12, std::chrono::seconds{kStressTestSeconds});
474
- }
475
- TEST(DistributedMutex, StressTwentyFourThreadsLockTryAndTimed) {
476
- lockWithTryAndTimedNThreads(24, std::chrono::seconds{kStressTestSeconds});
477
- }
478
- TEST(DistributedMutex, StressFourtyEightThreadsLockTryAndTimed) {
479
- lockWithTryAndTimedNThreads(48, std::chrono::seconds{kStressTestSeconds});
480
- }
481
- TEST(DistributedMutex, StressSixtyFourThreadsLockTryAndTimed) {
482
- lockWithTryAndTimedNThreads(64, std::chrono::seconds{kStressTestSeconds});
483
- }
484
- TEST(DistributedMutex, StressHwConcThreadsLockTryAndTimed) {
485
- lockWithTryAndTimedNThreads(
486
- std::thread::hardware_concurrency(),
487
- std::chrono::seconds{kStressTestSeconds});
488
- }
489
-
490
- TEST(DistributedMutex, StressTwoThreadsCombine) {
491
- combineNThreads(2, std::chrono::seconds{kStressTestSeconds});
492
- }
493
- TEST(DistributedMutex, StressThreeThreadsCombine) {
494
- combineNThreads(3, std::chrono::seconds{kStressTestSeconds});
495
- }
496
- TEST(DistributedMutex, StressFourThreadsCombine) {
497
- combineNThreads(4, std::chrono::seconds{kStressTestSeconds});
498
- }
499
- TEST(DistributedMutex, StressFiveThreadsCombine) {
500
- combineNThreads(5, std::chrono::seconds{kStressTestSeconds});
501
- }
502
- TEST(DistributedMutex, StressSixThreadsCombine) {
503
- combineNThreads(6, std::chrono::seconds{kStressTestSeconds});
504
- }
505
- TEST(DistributedMutex, StressSevenThreadsCombine) {
506
- combineNThreads(7, std::chrono::seconds{kStressTestSeconds});
507
- }
508
- TEST(DistributedMutex, StressEightThreadsCombine) {
509
- combineNThreads(8, std::chrono::seconds{kStressTestSeconds});
510
- }
511
- TEST(DistributedMutex, StressSixteenThreadsCombine) {
512
- combineNThreads(16, std::chrono::seconds{kStressTestSeconds});
513
- }
514
- TEST(DistributedMutex, StressThirtyTwoThreadsCombine) {
515
- combineNThreads(32, std::chrono::seconds{kStressTestSeconds});
516
- }
517
- TEST(DistributedMutex, StressSixtyFourThreadsCombine) {
518
- combineNThreads(64, std::chrono::seconds{kStressTestSeconds});
519
- }
520
- TEST(DistributedMutex, StressHundredThreadsCombine) {
521
- combineNThreads(100, std::chrono::seconds{kStressTestSeconds});
522
- }
523
- TEST(DistributedMutex, StressHardwareConcurrencyThreadsCombine) {
524
- combineNThreads(
525
- std::thread::hardware_concurrency(),
526
- std::chrono::seconds{kStressTestSeconds});
527
- }
528
-
529
- TEST(DistributedMutex, StressTwoThreadsCombineAndLock) {
530
- combineWithLockNThreads(2, std::chrono::seconds{kStressTestSeconds});
531
- }
532
- TEST(DistributedMutex, StressFourThreadsCombineAndLock) {
533
- combineWithLockNThreads(4, std::chrono::seconds{kStressTestSeconds});
534
- }
535
- TEST(DistributedMutex, StressEightThreadsCombineAndLock) {
536
- combineWithLockNThreads(8, std::chrono::seconds{kStressTestSeconds});
537
- }
538
- TEST(DistributedMutex, StressSixteenThreadsCombineAndLock) {
539
- combineWithLockNThreads(16, std::chrono::seconds{kStressTestSeconds});
540
- }
541
- TEST(DistributedMutex, StressThirtyTwoThreadsCombineAndLock) {
542
- combineWithLockNThreads(32, std::chrono::seconds{kStressTestSeconds});
543
- }
544
- TEST(DistributedMutex, StressSixtyFourThreadsCombineAndLock) {
545
- combineWithLockNThreads(64, std::chrono::seconds{kStressTestSeconds});
546
- }
547
- TEST(DistributedMutex, StressHardwareConcurrencyThreadsCombineAndLock) {
548
- combineWithLockNThreads(
549
- std::thread::hardware_concurrency(),
550
- std::chrono::seconds{kStressTestSeconds});
551
- }
552
-
553
- TEST(DistributedMutex, StressThreeThreadsCombineTryLockAndLock) {
554
- combineWithTryLockNThreads(3, std::chrono::seconds{kStressTestSeconds});
555
- }
556
- TEST(DistributedMutex, StressSixThreadsCombineTryLockAndLock) {
557
- combineWithTryLockNThreads(6, std::chrono::seconds{kStressTestSeconds});
558
- }
559
- TEST(DistributedMutex, StressTwelveThreadsCombineTryLockAndLock) {
560
- combineWithTryLockNThreads(12, std::chrono::seconds{kStressTestSeconds});
561
- }
562
- TEST(DistributedMutex, StressTwentyFourThreadsCombineTryLockAndLock) {
563
- combineWithTryLockNThreads(24, std::chrono::seconds{kStressTestSeconds});
564
- }
565
- TEST(DistributedMutex, StressFourtyEightThreadsCombineTryLockAndLock) {
566
- combineWithTryLockNThreads(48, std::chrono::seconds{kStressTestSeconds});
567
- }
568
- TEST(DistributedMutex, StressSixtyFourThreadsCombineTryLockAndLock) {
569
- combineWithTryLockNThreads(64, std::chrono::seconds{kStressTestSeconds});
570
- }
571
- TEST(DistributedMutex, StressHardwareConcurrencyThreadsCombineTryLockAndLock) {
572
- combineWithTryLockNThreads(
573
- std::thread::hardware_concurrency(),
574
- std::chrono::seconds{kStressTestSeconds});
575
- }
576
-
577
- TEST(DistributedMutex, StressThreeThreadsCombineTryLockLockAndTimed) {
578
- combineWithLockTryAndTimedNThreads(
579
- 3, std::chrono::seconds{kStressTestSeconds});
580
- }
581
- TEST(DistributedMutex, StressSixThreadsCombineTryLockLockAndTimed) {
582
- combineWithLockTryAndTimedNThreads(
583
- 6, std::chrono::seconds{kStressTestSeconds});
584
- }
585
- TEST(DistributedMutex, StressTwelveThreadsCombineTryLockLockAndTimed) {
586
- combineWithLockTryAndTimedNThreads(
587
- 12, std::chrono::seconds{kStressTestSeconds});
588
- }
589
- TEST(DistributedMutex, StressTwentyFourThreadsCombineTryLockLockAndTimed) {
590
- combineWithLockTryAndTimedNThreads(
591
- 24, std::chrono::seconds{kStressTestSeconds});
592
- }
593
- TEST(DistributedMutex, StressFourtyEightThreadsCombineTryLockLockAndTimed) {
594
- combineWithLockTryAndTimedNThreads(
595
- 48, std::chrono::seconds{kStressTestSeconds});
596
- }
597
- TEST(DistributedMutex, StressSixtyFourThreadsCombineTryLockLockAndTimed) {
598
- combineWithLockTryAndTimedNThreads(
599
- 64, std::chrono::seconds{kStressTestSeconds});
600
- }
601
- TEST(DistributedMutex, StressHwConcurrencyThreadsCombineTryLockLockAndTimed) {
602
- combineWithLockTryAndTimedNThreads(
603
- std::thread::hardware_concurrency(),
604
- std::chrono::seconds{kStressTestSeconds});
605
- }
606
-
607
- TEST(DistributedMutex, StressTryLock) {
608
- auto&& mutex = folly::DistributedMutex{};
609
-
610
- for (auto i = 0; i < kStressFactor; ++i) {
611
- while (true) {
612
- auto state = mutex.try_lock();
613
- if (state) {
614
- mutex.unlock(std::move(state));
615
- break;
616
- }
617
- }
618
- }
619
- }
620
-
621
- TEST(DistributedMutex, TimedLockTimeout) {
622
- auto&& mutex = folly::DistributedMutex{};
623
- auto&& start = folly::Baton<>{};
624
- auto&& done = folly::Baton<>{};
625
-
626
- auto thread = std::thread{[&]() {
627
- auto state = mutex.lock();
628
- start.post();
629
- done.wait();
630
- mutex.unlock(std::move(state));
631
- }};
632
-
633
- start.wait();
634
- auto result = mutex.try_lock_for(std::chrono::milliseconds{10});
635
- EXPECT_FALSE(result);
636
- done.post();
637
- thread.join();
638
- }
639
-
640
- TEST(DistributedMutex, TimedLockAcquireAfterUnlock) {
641
- auto&& mutex = folly::DistributedMutex{};
642
- auto&& start = folly::Baton<>{};
643
-
644
- auto thread = std::thread{[&]() {
645
- auto state = mutex.lock();
646
- start.post();
647
- /* sleep override */
648
- std::this_thread::sleep_for(std::chrono::milliseconds{10});
649
- mutex.unlock(std::move(state));
650
- }};
651
-
652
- start.wait();
653
- auto result = mutex.try_lock_for(kForever);
654
- EXPECT_TRUE(result);
655
- thread.join();
656
- }
657
-
658
- namespace {
659
- template <template <typename> class Atom = std::atomic>
660
- void stressTryLockWithConcurrentLocks(
661
- int numThreads,
662
- int iterations = kStressFactor) {
663
- auto&& threads = std::vector<std::thread>{};
664
- auto&& mutex = folly::detail::distributed_mutex::DistributedMutex<Atom>{};
665
- auto&& atomic = std::atomic<std::uint64_t>{0};
666
-
667
- for (auto i = 0; i < numThreads; ++i) {
668
- threads.push_back(std::thread([&] {
669
- for (auto j = 0; j < iterations; ++j) {
670
- auto state = mutex.lock();
671
- EXPECT_EQ(atomic.fetch_add(1, std::memory_order_relaxed), 0);
672
- EXPECT_EQ(atomic.fetch_sub(1, std::memory_order_relaxed), 1);
673
- mutex.unlock(std::move(state));
674
- }
675
- }));
676
- }
677
-
678
- for (auto i = 0; i < iterations; ++i) {
679
- if (auto state = mutex.try_lock()) {
680
- EXPECT_EQ(atomic.fetch_add(1, std::memory_order_relaxed), 0);
681
- EXPECT_EQ(atomic.fetch_sub(1, std::memory_order_relaxed), 1);
682
- mutex.unlock(std::move(state));
683
- }
684
- }
685
-
686
- for (auto& thread : threads) {
687
- thread.join();
688
- }
689
- }
690
- } // namespace
691
-
692
- TEST(DistributedMutex, StressTryLockWithConcurrentLocksTwoThreads) {
693
- stressTryLockWithConcurrentLocks(2);
694
- }
695
- TEST(DistributedMutex, StressTryLockWithConcurrentLocksFourThreads) {
696
- stressTryLockWithConcurrentLocks(4);
697
- }
698
- TEST(DistributedMutex, StressTryLockWithConcurrentLocksEightThreads) {
699
- stressTryLockWithConcurrentLocks(8);
700
- }
701
- TEST(DistributedMutex, StressTryLockWithConcurrentLocksSixteenThreads) {
702
- stressTryLockWithConcurrentLocks(16);
703
- }
704
- TEST(DistributedMutex, StressTryLockWithConcurrentLocksThirtyTwoThreads) {
705
- stressTryLockWithConcurrentLocks(32);
706
- }
707
- TEST(DistributedMutex, StressTryLockWithConcurrentLocksSixtyFourThreads) {
708
- stressTryLockWithConcurrentLocks(64);
709
- }
710
-
711
- namespace {
712
- template <template <typename> class Atom = std::atomic>
713
- void concurrentTryLocks(int numThreads, int iterations = kStressFactor) {
714
- auto&& threads = std::vector<std::thread>{};
715
- auto&& mutex = folly::detail::distributed_mutex::DistributedMutex<Atom>{};
716
- auto&& atomic = std::atomic<std::uint64_t>{0};
717
-
718
- for (auto i = 0; i < numThreads; ++i) {
719
- threads.push_back(std::thread([&] {
720
- for (auto j = 0; j < iterations; ++j) {
721
- if (auto state = mutex.try_lock()) {
722
- EXPECT_EQ(atomic.fetch_add(1, std::memory_order_relaxed), 0);
723
- EXPECT_EQ(atomic.fetch_sub(1, std::memory_order_relaxed), 1);
724
- mutex.unlock(std::move(state));
725
- }
726
- }
727
- }));
728
- }
729
-
730
- for (auto& thread : threads) {
731
- thread.join();
732
- }
733
- }
734
- } // namespace
735
-
736
- TEST(DistributedMutex, StressTryLockWithTwoThreads) {
737
- concurrentTryLocks(2);
738
- }
739
- TEST(DistributedMutex, StressTryLockFourThreads) {
740
- concurrentTryLocks(4);
741
- }
742
- TEST(DistributedMutex, StressTryLockEightThreads) {
743
- concurrentTryLocks(8);
744
- }
745
- TEST(DistributedMutex, StressTryLockSixteenThreads) {
746
- concurrentTryLocks(16);
747
- }
748
- TEST(DistributedMutex, StressTryLockThirtyTwoThreads) {
749
- concurrentTryLocks(32);
750
- }
751
- TEST(DistributedMutex, StressTryLockSixtyFourThreads) {
752
- concurrentTryLocks(64);
753
- }
754
-
755
- namespace {
756
- class TestConstruction {
757
- public:
758
- TestConstruction() = delete;
759
- explicit TestConstruction(int) {
760
- defaultConstructs().fetch_add(1, std::memory_order_relaxed);
761
- }
762
- TestConstruction(TestConstruction&&) noexcept {
763
- moveConstructs().fetch_add(1, std::memory_order_relaxed);
764
- }
765
- TestConstruction(const TestConstruction&) {
766
- copyConstructs().fetch_add(1, std::memory_order_relaxed);
767
- }
768
- TestConstruction& operator=(const TestConstruction&) {
769
- copyAssigns().fetch_add(1, std::memory_order_relaxed);
770
- return *this;
771
- }
772
- TestConstruction& operator=(TestConstruction&&) {
773
- moveAssigns().fetch_add(1, std::memory_order_relaxed);
774
- return *this;
775
- }
776
- ~TestConstruction() {
777
- destructs().fetch_add(1, std::memory_order_relaxed);
778
- }
779
-
780
- static std::atomic<std::uint64_t>& defaultConstructs() {
781
- static auto&& atomic = std::atomic<std::uint64_t>{0};
782
- return atomic;
783
- }
784
- static std::atomic<std::uint64_t>& moveConstructs() {
785
- static auto&& atomic = std::atomic<std::uint64_t>{0};
786
- return atomic;
787
- }
788
- static std::atomic<std::uint64_t>& copyConstructs() {
789
- static auto&& atomic = std::atomic<std::uint64_t>{0};
790
- return atomic;
791
- }
792
- static std::atomic<std::uint64_t>& moveAssigns() {
793
- static auto&& atomic = std::atomic<std::uint64_t>{0};
794
- return atomic;
795
- }
796
- static std::atomic<std::uint64_t>& copyAssigns() {
797
- static auto&& atomic = std::atomic<std::uint64_t>{0};
798
- return atomic;
799
- }
800
- static std::atomic<std::uint64_t>& destructs() {
801
- static auto&& atomic = std::atomic<std::uint64_t>{0};
802
- return atomic;
803
- }
804
-
805
- static void reset() {
806
- defaultConstructs().store(0);
807
- moveConstructs().store(0);
808
- copyConstructs().store(0);
809
- copyAssigns().store(0);
810
- destructs().store(0);
811
- }
812
- };
813
- } // namespace
814
-
815
- TEST(DistributedMutex, TestAppropriateDestructionAndConstructionWithCombine) {
816
- auto&& mutex = folly::DistributedMutex{};
817
- auto&& stop = std::atomic<bool>{false};
818
-
819
- // test the simple return path to make sure that in the absence of
820
- // contention, we get the right number of constructs and destructs
821
- mutex.lock_combine([]() { return TestConstruction{1}; });
822
- auto moves = TestConstruction::moveConstructs().load();
823
- auto defaults = TestConstruction::defaultConstructs().load();
824
- EXPECT_EQ(TestConstruction::defaultConstructs().load(), 1);
825
- EXPECT_TRUE(moves == 0 || moves == 1);
826
- EXPECT_EQ(TestConstruction::destructs().load(), moves + defaults);
827
-
828
- // loop and make sure we were able to test the path where the critical
829
- // section of the thread gets combined, and assert that we see the expected
830
- // number of constructions and destructions
831
- //
832
- // this implements a timed backoff to test the combined path, so we use the
833
- // smallest possible delay in tests
834
- auto thread = std::thread{[&]() {
835
- auto&& duration = std::chrono::milliseconds{10};
836
- while (!stop.load()) {
837
- TestConstruction::reset();
838
- auto&& ready = folly::Baton<>{};
839
- auto&& release = folly::Baton<>{};
840
-
841
- // make one thread start it's critical section, signal and wait for
842
- // another thread to enqueue, to test the
843
- auto innerThread = std::thread{[&]() {
844
- mutex.lock_combine([&]() {
845
- ready.post();
846
- release.wait();
847
- /* sleep override */
848
- std::this_thread::sleep_for(duration);
849
- });
850
- }};
851
-
852
- // wait for the thread to get in its critical section, then tell it to go
853
- ready.wait();
854
- release.post();
855
- mutex.lock_combine([&]() { return TestConstruction{1}; });
856
-
857
- innerThread.join();
858
-
859
- // at this point we should have only one default construct, either 3
860
- // or 4 move constructs the same number of destructions as
861
- // constructions
862
- auto innerDefaults = TestConstruction::defaultConstructs().load();
863
- auto innerMoves = TestConstruction::moveConstructs().load();
864
- auto destructs = TestConstruction::destructs().load();
865
- EXPECT_EQ(innerDefaults, 1);
866
- EXPECT_TRUE(innerMoves == 3 || innerMoves == 4 || innerMoves == 1);
867
- EXPECT_EQ(destructs, innerMoves + innerDefaults);
868
- EXPECT_EQ(TestConstruction::moveAssigns().load(), 0);
869
- EXPECT_EQ(TestConstruction::copyAssigns().load(), 0);
870
-
871
- // increase duration by 100ms each iteration
872
- duration = duration + std::chrono::milliseconds{100};
873
- }
874
- }};
875
-
876
- /* sleep override */
877
- std::this_thread::sleep_for(std::chrono::seconds{kStressTestSeconds});
878
- stop.store(true);
879
- thread.join();
880
- }
881
-
882
- namespace {
883
- template <template <typename> class Atom = std::atomic>
884
- void concurrentLocksManyMutexes(int numThreads, std::chrono::seconds duration) {
885
- using DMutex = folly::detail::distributed_mutex::DistributedMutex<Atom>;
886
- const auto&& kNumMutexes = 10;
887
- auto&& threads = std::vector<std::thread>{};
888
- auto&& mutexes = std::vector<DMutex>(kNumMutexes);
889
- auto&& barriers = std::vector<std::atomic<std::uint64_t>>(kNumMutexes);
890
- auto&& stop = std::atomic<bool>{false};
891
-
892
- for (auto i = 0; i < numThreads; ++i) {
893
- threads.push_back(std::thread([&] {
894
- auto&& total = std::atomic<std::uint64_t>{0};
895
- auto&& expected = std::uint64_t{0};
896
-
897
- for (auto j = 0; !stop.load(std::memory_order_relaxed); ++j) {
898
- auto& mutex = mutexes[j % kNumMutexes];
899
- auto& barrier = barriers[j % kNumMutexes];
900
-
901
- ++expected;
902
- auto result = mutex.lock_combine([&]() {
903
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
904
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 1);
905
- std::this_thread::yield();
906
- SCOPE_EXIT {
907
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
908
- };
909
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 2);
910
- return total.fetch_add(1, std::memory_order_relaxed);
911
- });
912
- EXPECT_EQ(result, expected - 1);
913
- }
914
-
915
- EXPECT_EQ(total.load(), expected);
916
- }));
917
- }
918
-
919
- /* sleep override */
920
- std::this_thread::sleep_for(duration);
921
- stop.store(true);
922
- for (auto& thread : threads) {
923
- thread.join();
924
- }
925
- }
926
- } // namespace
927
-
928
- TEST(DistributedMutex, StressWithManyMutexesAlternatingTwoThreads) {
929
- concurrentLocksManyMutexes(2, std::chrono::seconds{kStressTestSeconds});
930
- }
931
- TEST(DistributedMutex, StressWithManyMutexesAlternatingFourThreads) {
932
- concurrentLocksManyMutexes(4, std::chrono::seconds{kStressTestSeconds});
933
- }
934
- TEST(DistributedMutex, StressWithManyMutexesAlternatingEightThreads) {
935
- concurrentLocksManyMutexes(8, std::chrono::seconds{kStressTestSeconds});
936
- }
937
- TEST(DistributedMutex, StressWithManyMutexesAlternatingSixteenThreads) {
938
- concurrentLocksManyMutexes(16, std::chrono::seconds{kStressTestSeconds});
939
- }
940
- TEST(DistributedMutex, StressWithManyMutexesAlternatingThirtyTwoThreads) {
941
- concurrentLocksManyMutexes(32, std::chrono::seconds{kStressTestSeconds});
942
- }
943
- TEST(DistributedMutex, StressWithManyMutexesAlternatingSixtyFourThreads) {
944
- concurrentLocksManyMutexes(64, std::chrono::seconds{kStressTestSeconds});
945
- }
946
-
947
- namespace {
948
- class ExceptionWithConstructionTrack : public std::exception {
949
- public:
950
- explicit ExceptionWithConstructionTrack(int id)
951
- : id_{std::to_string(id)}, constructionTrack_{id} {}
952
-
953
- const char* what() const noexcept override {
954
- return id_.c_str();
955
- }
956
-
957
- private:
958
- std::string id_;
959
- TestConstruction constructionTrack_;
960
- };
961
- } // namespace
962
-
963
- TEST(DistributedMutex, TestExceptionPropagationUncontended) {
964
- TestConstruction::reset();
965
- auto&& mutex = folly::DistributedMutex{};
966
- auto&& thread = std::thread{[&]() {
967
- try {
968
- mutex.lock_combine([&]() { throw ExceptionWithConstructionTrack{46}; });
969
- } catch (std::exception& exc) {
970
- auto integer = std::stoi(exc.what());
971
- EXPECT_EQ(integer, 46);
972
- EXPECT_GT(TestConstruction::defaultConstructs(), 0);
973
- }
974
- EXPECT_EQ(
975
- TestConstruction::defaultConstructs(), TestConstruction::destructs());
976
- }};
977
- thread.join();
978
- }
979
-
980
- namespace {
981
- template <template <typename> class Atom = std::atomic>
982
- void concurrentExceptionPropagationStress(
983
- int numThreads,
984
- std::chrono::milliseconds t) {
985
- // this test fails under with a false negative under older versions of TSAN
986
- // for some reason so disable it when TSAN is enabled
987
- if (folly::kIsSanitizeThread) {
988
- return;
989
- }
990
-
991
- TestConstruction::reset();
992
- auto&& mutex = folly::detail::distributed_mutex::DistributedMutex<Atom>{};
993
- auto&& threads = std::vector<std::thread>{};
994
- auto&& stop = std::atomic<bool>{false};
995
- auto&& barrier = std::atomic<std::uint64_t>{0};
996
-
997
- for (auto i = 0; i < numThreads; ++i) {
998
- threads.push_back(std::thread([&]() {
999
- for (auto j = 0; !stop.load(); ++j) {
1000
- auto value = int{0};
1001
- try {
1002
- value = mutex.lock_combine([&]() {
1003
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
1004
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 1);
1005
- std::this_thread::yield();
1006
- SCOPE_EXIT {
1007
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
1008
- };
1009
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 2);
1010
-
1011
- // we only throw an exception once every 3 times
1012
- if (!(j % 3)) {
1013
- throw ExceptionWithConstructionTrack{j};
1014
- }
1015
-
1016
- return j;
1017
- });
1018
- } catch (std::exception& exc) {
1019
- value = std::stoi(exc.what());
1020
- }
1021
-
1022
- EXPECT_EQ(value, j);
1023
- }
1024
- }));
1025
- }
1026
-
1027
- /* sleep override */
1028
- std::this_thread::sleep_for(t);
1029
- stop.store(true);
1030
- for (auto& thread : threads) {
1031
- thread.join();
1032
- }
1033
- }
1034
- } // namespace
1035
-
1036
- TEST(DistributedMutex, TestExceptionPropagationStressTwoThreads) {
1037
- concurrentExceptionPropagationStress(
1038
- 2, std::chrono::seconds{kStressTestSeconds});
1039
- }
1040
- TEST(DistributedMutex, TestExceptionPropagationStressFourThreads) {
1041
- concurrentExceptionPropagationStress(
1042
- 4, std::chrono::seconds{kStressTestSeconds});
1043
- }
1044
- TEST(DistributedMutex, TestExceptionPropagationStressEightThreads) {
1045
- concurrentExceptionPropagationStress(
1046
- 8, std::chrono::seconds{kStressTestSeconds});
1047
- }
1048
- TEST(DistributedMutex, TestExceptionPropagationStressSixteenThreads) {
1049
- concurrentExceptionPropagationStress(
1050
- 16, std::chrono::seconds{kStressTestSeconds});
1051
- }
1052
- TEST(DistributedMutex, TestExceptionPropagationStressThirtyTwoThreads) {
1053
- concurrentExceptionPropagationStress(
1054
- 32, std::chrono::seconds{kStressTestSeconds});
1055
- }
1056
- TEST(DistributedMutex, TestExceptionPropagationStressSixtyFourThreads) {
1057
- concurrentExceptionPropagationStress(
1058
- 64, std::chrono::seconds{kStressTestSeconds});
1059
- }
1060
-
1061
- namespace {
1062
- std::array<std::uint64_t, 8> makeMonotonicArray(int start) {
1063
- auto array = std::array<std::uint64_t, 8>{};
1064
- for (auto& element : array) { element = start++; }
1065
- return array;
1066
- }
1067
-
1068
- template <template <typename> class Atom = std::atomic>
1069
- void concurrentBigValueReturnStress(
1070
- int numThreads,
1071
- std::chrono::milliseconds t) {
1072
- auto&& mutex = folly::detail::distributed_mutex::DistributedMutex<Atom>{};
1073
- auto&& threads = std::vector<std::thread>{};
1074
- auto&& stop = std::atomic<bool>{false};
1075
- auto&& barrier = std::atomic<std::uint64_t>{0};
1076
-
1077
- for (auto i = 0; i < numThreads; ++i) {
1078
- threads.push_back(std::thread([&]() {
1079
- auto&& value = std::atomic<std::uint64_t>{0};
1080
-
1081
- for (auto j = 0; !stop.load(); ++j) {
1082
- auto returned = mutex.lock_combine([&]() {
1083
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 0);
1084
- EXPECT_EQ(barrier.fetch_add(1, std::memory_order_relaxed), 1);
1085
- std::this_thread::yield();
1086
- // return an entire cacheline worth of data
1087
- auto current = value.fetch_add(1, std::memory_order_relaxed);
1088
- SCOPE_EXIT {
1089
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 1);
1090
- };
1091
- EXPECT_EQ(barrier.fetch_sub(1, std::memory_order_relaxed), 2);
1092
- return makeMonotonicArray(static_cast<int>(current));
1093
- });
1094
-
1095
- auto expected = value.load() - 1;
1096
- for (auto& element : returned) {
1097
- EXPECT_EQ(element, expected++);
1098
- }
1099
- }
1100
- }));
1101
- }
1102
-
1103
- /* sleep override */
1104
- std::this_thread::sleep_for(t);
1105
- stop.store(true);
1106
- for (auto& thread : threads) {
1107
- thread.join();
1108
- }
1109
- }
1110
- } // namespace
1111
-
1112
- TEST(DistributedMutex, StressBigValueReturnTwoThreads) {
1113
- concurrentBigValueReturnStress(2, std::chrono::seconds{kStressTestSeconds});
1114
- }
1115
- TEST(DistributedMutex, StressBigValueReturnFourThreads) {
1116
- concurrentBigValueReturnStress(4, std::chrono::seconds{kStressTestSeconds});
1117
- }
1118
- TEST(DistributedMutex, StressBigValueReturnEightThreads) {
1119
- concurrentBigValueReturnStress(8, std::chrono::seconds{kStressTestSeconds});
1120
- }
1121
- TEST(DistributedMutex, StressBigValueReturnSixteenThreads) {
1122
- concurrentBigValueReturnStress(16, std::chrono::seconds{kStressTestSeconds});
1123
- }
1124
- TEST(DistributedMutex, StressBigValueReturnThirtyTwoThreads) {
1125
- concurrentBigValueReturnStress(32, std::chrono::seconds{kStressTestSeconds});
1126
- }
1127
- TEST(DistributedMutex, StressBigValueReturnSixtyFourThreads) {
1128
- concurrentBigValueReturnStress(64, std::chrono::seconds{kStressTestSeconds});
1129
- }
1130
-
1131
- } // namespace folly
1132
-
1133
- int main(int argc, char** argv) {
1134
- ::testing::InitGoogleTest(&argc, argv);
1135
- return RUN_ALL_TESTS();
1136
- }
1137
-
1138
- #else
1139
- int main(int /*argc*/, char** /*argv*/) {
1140
- printf(
1141
- "DistributedMutex is not supported in ROCKSDB_LITE, on ARM, or in "
1142
- "valgrind_test runs\n");
1143
- return 0;
1144
- }
1145
- #endif // !ROCKSDB_LITE && !__ARM_ARCH && !ROCKSDB_VALGRIND_RUN