@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
@@ -22,10 +22,17 @@
22
22
  #include "env/composite_env_wrapper.h"
23
23
  #include "port/lang.h"
24
24
  #include "port/stack_trace.h"
25
+ #include "test_util/sync_point.h"
26
+ #include "util/coding.h"
27
+ #include "util/crc32c.h"
25
28
  #include "util/random.h"
29
+ #include "util/string_util.h"
30
+ #include "util/xxhash.h"
26
31
 
27
32
  namespace ROCKSDB_NAMESPACE {
28
33
 
34
+ const std::string kNewFileNoOverwrite = "";
35
+
29
36
  // Assume a filename, and not a directory name like "/foo/bar/"
30
37
  std::string TestFSGetDirName(const std::string filename) {
31
38
  size_t found = filename.find_last_of("/\\");
@@ -53,6 +60,21 @@ std::pair<std::string, std::string> TestFSGetDirAndName(
53
60
  return std::make_pair(dirname, fname);
54
61
  }
55
62
 
63
+ // Calculate the checksum of the data with corresponding checksum
64
+ // type. If name does not match, no checksum is returned.
65
+ void CalculateTypedChecksum(const ChecksumType& checksum_type, const char* data,
66
+ size_t size, std::string* checksum) {
67
+ if (checksum_type == ChecksumType::kCRC32c) {
68
+ uint32_t v_crc32c = crc32c::Extend(0, data, size);
69
+ PutFixed32(checksum, v_crc32c);
70
+ return;
71
+ } else if (checksum_type == ChecksumType::kxxHash) {
72
+ uint32_t v = XXH32(data, size, 0);
73
+ PutFixed32(checksum, v);
74
+ }
75
+ return;
76
+ }
77
+
56
78
  IOStatus FSFileState::DropUnsyncedData() {
57
79
  buffer_.resize(0);
58
80
  return IOStatus::OK();
@@ -69,14 +91,52 @@ IOStatus TestFSDirectory::Fsync(const IOOptions& options, IODebugContext* dbg) {
69
91
  if (!fs_->IsFilesystemActive()) {
70
92
  return fs_->GetError();
71
93
  }
94
+ {
95
+ IOStatus in_s = fs_->InjectMetadataWriteError();
96
+ if (!in_s.ok()) {
97
+ return in_s;
98
+ }
99
+ }
72
100
  fs_->SyncDir(dirname_);
73
- return dir_->Fsync(options, dbg);
101
+ IOStatus s = dir_->Fsync(options, dbg);
102
+ {
103
+ IOStatus in_s = fs_->InjectMetadataWriteError();
104
+ if (!in_s.ok()) {
105
+ return in_s;
106
+ }
107
+ }
108
+ return s;
109
+ }
110
+
111
+ IOStatus TestFSDirectory::FsyncWithDirOptions(
112
+ const IOOptions& options, IODebugContext* dbg,
113
+ const DirFsyncOptions& dir_fsync_options) {
114
+ if (!fs_->IsFilesystemActive()) {
115
+ return fs_->GetError();
116
+ }
117
+ {
118
+ IOStatus in_s = fs_->InjectMetadataWriteError();
119
+ if (!in_s.ok()) {
120
+ return in_s;
121
+ }
122
+ }
123
+ fs_->SyncDir(dirname_);
124
+ IOStatus s = dir_->FsyncWithDirOptions(options, dbg, dir_fsync_options);
125
+ {
126
+ IOStatus in_s = fs_->InjectMetadataWriteError();
127
+ if (!in_s.ok()) {
128
+ return in_s;
129
+ }
130
+ }
131
+ return s;
74
132
  }
75
133
 
76
134
  TestFSWritableFile::TestFSWritableFile(const std::string& fname,
135
+ const FileOptions& file_opts,
77
136
  std::unique_ptr<FSWritableFile>&& f,
78
137
  FaultInjectionTestFS* fs)
79
138
  : state_(fname),
139
+ file_opts_(file_opts),
80
140
  target_(std::move(f)),
81
141
  writable_file_opened_(true),
82
142
  fs_(fs) {
@@ -90,15 +150,81 @@ TestFSWritableFile::~TestFSWritableFile() {
90
150
  }
91
151
  }
92
152
 
93
- IOStatus TestFSWritableFile::Append(const Slice& data, const IOOptions&,
94
- IODebugContext*) {
153
+ IOStatus TestFSWritableFile::Append(const Slice& data, const IOOptions& options,
154
+ IODebugContext* dbg) {
95
155
  MutexLock l(&mutex_);
96
156
  if (!fs_->IsFilesystemActive()) {
97
157
  return fs_->GetError();
98
158
  }
99
- state_.buffer_.append(data.data(), data.size());
100
- state_.pos_ += data.size();
101
- fs_->WritableFileAppended(state_);
159
+ if (target_->use_direct_io()) {
160
+ target_->Append(data, options, dbg).PermitUncheckedError();
161
+ } else {
162
+ state_.buffer_.append(data.data(), data.size());
163
+ state_.pos_ += data.size();
164
+ fs_->WritableFileAppended(state_);
165
+ }
166
+ IOStatus io_s = fs_->InjectWriteError(state_.filename_);
167
+ return io_s;
168
+ }
169
+
170
+ // By setting the IngestDataCorruptionBeforeWrite(), the data corruption is
171
+ // simulated.
172
+ IOStatus TestFSWritableFile::Append(
173
+ const Slice& data, const IOOptions& options,
174
+ const DataVerificationInfo& verification_info, IODebugContext* dbg) {
175
+ MutexLock l(&mutex_);
176
+ if (!fs_->IsFilesystemActive()) {
177
+ return fs_->GetError();
178
+ }
179
+ if (fs_->ShouldDataCorruptionBeforeWrite()) {
180
+ return IOStatus::Corruption("Data is corrupted!");
181
+ }
182
+
183
+ // Calculate the checksum
184
+ std::string checksum;
185
+ CalculateTypedChecksum(fs_->GetChecksumHandoffFuncType(), data.data(),
186
+ data.size(), &checksum);
187
+ if (fs_->GetChecksumHandoffFuncType() != ChecksumType::kNoChecksum &&
188
+ checksum != verification_info.checksum.ToString()) {
189
+ std::string msg = "Data is corrupted! Origin data checksum: " +
190
+ verification_info.checksum.ToString() +
191
+ "current data checksum: " + checksum;
192
+ return IOStatus::Corruption(msg);
193
+ }
194
+ if (target_->use_direct_io()) {
195
+ target_->Append(data, options, dbg).PermitUncheckedError();
196
+ } else {
197
+ state_.buffer_.append(data.data(), data.size());
198
+ state_.pos_ += data.size();
199
+ fs_->WritableFileAppended(state_);
200
+ }
201
+ IOStatus io_s = fs_->InjectWriteError(state_.filename_);
202
+ return io_s;
203
+ }
204
+
205
+ IOStatus TestFSWritableFile::PositionedAppend(
206
+ const Slice& data, uint64_t offset, const IOOptions& options,
207
+ const DataVerificationInfo& verification_info, IODebugContext* dbg) {
208
+ MutexLock l(&mutex_);
209
+ if (!fs_->IsFilesystemActive()) {
210
+ return fs_->GetError();
211
+ }
212
+ if (fs_->ShouldDataCorruptionBeforeWrite()) {
213
+ return IOStatus::Corruption("Data is corrupted!");
214
+ }
215
+
216
+ // Calculate the checksum
217
+ std::string checksum;
218
+ CalculateTypedChecksum(fs_->GetChecksumHandoffFuncType(), data.data(),
219
+ data.size(), &checksum);
220
+ if (fs_->GetChecksumHandoffFuncType() != ChecksumType::kNoChecksum &&
221
+ checksum != verification_info.checksum.ToString()) {
222
+ std::string msg = "Data is corrupted! Origin data checksum: " +
223
+ verification_info.checksum.ToString() +
224
+ "current data checksum: " + checksum;
225
+ return IOStatus::Corruption(msg);
226
+ }
227
+ target_->PositionedAppend(data, offset, options, dbg);
102
228
  IOStatus io_s = fs_->InjectWriteError(state_.filename_);
103
229
  return io_s;
104
230
  }
@@ -108,9 +234,17 @@ IOStatus TestFSWritableFile::Close(const IOOptions& options,
108
234
  if (!fs_->IsFilesystemActive()) {
109
235
  return fs_->GetError();
110
236
  }
237
+ {
238
+ IOStatus in_s = fs_->InjectMetadataWriteError();
239
+ if (!in_s.ok()) {
240
+ return in_s;
241
+ }
242
+ }
111
243
  writable_file_opened_ = false;
112
244
  IOStatus io_s;
113
- io_s = target_->Append(state_.buffer_, options, dbg);
245
+ if (!target_->use_direct_io()) {
246
+ io_s = target_->Append(state_.buffer_, options, dbg);
247
+ }
114
248
  if (io_s.ok()) {
115
249
  state_.buffer_.resize(0);
116
250
  // Ignore sync errors
@@ -119,6 +253,10 @@ IOStatus TestFSWritableFile::Close(const IOOptions& options,
119
253
  }
120
254
  if (io_s.ok()) {
121
255
  fs_->WritableFileClosed(state_);
256
+ IOStatus in_s = fs_->InjectMetadataWriteError();
257
+ if (!in_s.ok()) {
258
+ return in_s;
259
+ }
122
260
  }
123
261
  return io_s;
124
262
  }
@@ -138,6 +276,11 @@ IOStatus TestFSWritableFile::Sync(const IOOptions& options,
138
276
  if (!fs_->IsFilesystemActive()) {
139
277
  return fs_->GetError();
140
278
  }
279
+ if (target_->use_direct_io()) {
280
+ // For Direct IO mode, we don't buffer anything in TestFSWritableFile.
281
+ // So just return
282
+ return IOStatus::OK();
283
+ }
141
284
  IOStatus io_s = target_->Append(state_.buffer_, options, dbg);
142
285
  state_.buffer_.resize(0);
143
286
  // Ignore sync errors
@@ -211,15 +354,82 @@ TestFSRandomAccessFile::TestFSRandomAccessFile(const std::string& /*fname*/,
211
354
  }
212
355
 
213
356
  IOStatus TestFSRandomAccessFile::Read(uint64_t offset, size_t n,
214
- const IOOptions& options, Slice* result,
215
- char* scratch, IODebugContext* dbg) const {
357
+ const IOOptions& options, Slice* result,
358
+ char* scratch,
359
+ IODebugContext* dbg) const {
216
360
  if (!fs_->IsFilesystemActive()) {
217
361
  return fs_->GetError();
218
362
  }
219
363
  IOStatus s = target_->Read(offset, n, options, result, scratch, dbg);
220
364
  if (s.ok()) {
221
- s = fs_->InjectError(FaultInjectionTestFS::ErrorOperation::kRead, result,
222
- use_direct_io(), scratch);
365
+ s = fs_->InjectThreadSpecificReadError(
366
+ FaultInjectionTestFS::ErrorOperation::kRead, result, use_direct_io(),
367
+ scratch, /*need_count_increase=*/true, /*fault_injected=*/nullptr);
368
+ }
369
+ if (s.ok() && fs_->ShouldInjectRandomReadError()) {
370
+ return IOStatus::IOError("Injected read error");
371
+ }
372
+ return s;
373
+ }
374
+
375
+ IOStatus TestFSRandomAccessFile::MultiRead(FSReadRequest* reqs, size_t num_reqs,
376
+ const IOOptions& options,
377
+ IODebugContext* dbg) {
378
+ if (!fs_->IsFilesystemActive()) {
379
+ return fs_->GetError();
380
+ }
381
+ IOStatus s = target_->MultiRead(reqs, num_reqs, options, dbg);
382
+ bool injected_error = false;
383
+ for (size_t i = 0; i < num_reqs; i++) {
384
+ if (!reqs[i].status.ok()) {
385
+ // Already seeing an error.
386
+ break;
387
+ }
388
+ bool this_injected_error;
389
+ reqs[i].status = fs_->InjectThreadSpecificReadError(
390
+ FaultInjectionTestFS::ErrorOperation::kMultiReadSingleReq,
391
+ &(reqs[i].result), use_direct_io(), reqs[i].scratch,
392
+ /*need_count_increase=*/true,
393
+ /*fault_injected=*/&this_injected_error);
394
+ injected_error |= this_injected_error;
395
+ }
396
+ if (s.ok()) {
397
+ s = fs_->InjectThreadSpecificReadError(
398
+ FaultInjectionTestFS::ErrorOperation::kMultiRead, nullptr,
399
+ use_direct_io(), nullptr, /*need_count_increase=*/!injected_error,
400
+ /*fault_injected=*/nullptr);
401
+ }
402
+ if (s.ok() && fs_->ShouldInjectRandomReadError()) {
403
+ return IOStatus::IOError("Injected read error");
404
+ }
405
+ return s;
406
+ }
407
+
408
+ size_t TestFSRandomAccessFile::GetUniqueId(char* id, size_t max_size) const {
409
+ if (fs_->ShouldFailGetUniqueId()) {
410
+ return 0;
411
+ } else {
412
+ return target_->GetUniqueId(id, max_size);
413
+ }
414
+ }
415
+ IOStatus TestFSSequentialFile::Read(size_t n, const IOOptions& options,
416
+ Slice* result, char* scratch,
417
+ IODebugContext* dbg) {
418
+ IOStatus s = target()->Read(n, options, result, scratch, dbg);
419
+ if (s.ok() && fs_->ShouldInjectRandomReadError()) {
420
+ return IOStatus::IOError("Injected seq read error");
421
+ }
422
+ return s;
423
+ }
424
+
425
+ IOStatus TestFSSequentialFile::PositionedRead(uint64_t offset, size_t n,
426
+ const IOOptions& options,
427
+ Slice* result, char* scratch,
428
+ IODebugContext* dbg) {
429
+ IOStatus s =
430
+ target()->PositionedRead(offset, n, options, result, scratch, dbg);
431
+ if (s.ok() && fs_->ShouldInjectRandomReadError()) {
432
+ return IOStatus::IOError("Injected seq positioned read error");
223
433
  }
224
434
  return s;
225
435
  }
@@ -243,21 +453,40 @@ IOStatus FaultInjectionTestFS::NewWritableFile(
243
453
  if (!IsFilesystemActive()) {
244
454
  return GetError();
245
455
  }
246
- if (IsFilesystemDirectWritable()) {
456
+ {
457
+ IOStatus in_s = InjectMetadataWriteError();
458
+ if (!in_s.ok()) {
459
+ return in_s;
460
+ }
461
+ }
462
+
463
+ if (ShouldUseDiretWritable(fname)) {
247
464
  return target()->NewWritableFile(fname, file_opts, result, dbg);
248
465
  }
249
466
 
250
467
  IOStatus io_s = target()->NewWritableFile(fname, file_opts, result, dbg);
251
468
  if (io_s.ok()) {
252
- result->reset(new TestFSWritableFile(fname, std::move(*result), this));
469
+ result->reset(
470
+ new TestFSWritableFile(fname, file_opts, std::move(*result), this));
253
471
  // WritableFileWriter* file is opened
254
472
  // again then it will be truncated - so forget our saved state.
255
473
  UntrackFile(fname);
256
- MutexLock l(&mutex_);
257
- open_files_.insert(fname);
258
- auto dir_and_name = TestFSGetDirAndName(fname);
259
- auto& list = dir_to_new_files_since_last_sync_[dir_and_name.first];
260
- list.insert(dir_and_name.second);
474
+ {
475
+ MutexLock l(&mutex_);
476
+ open_managed_files_.insert(fname);
477
+ auto dir_and_name = TestFSGetDirAndName(fname);
478
+ auto& list = dir_to_new_files_since_last_sync_[dir_and_name.first];
479
+ // The new file could overwrite an old one. Here we simplify
480
+ // the implementation by assuming no file of this name after
481
+ // dropping unsynced files.
482
+ list[dir_and_name.second] = kNewFileNoOverwrite;
483
+ }
484
+ {
485
+ IOStatus in_s = InjectMetadataWriteError();
486
+ if (!in_s.ok()) {
487
+ return in_s;
488
+ }
489
+ }
261
490
  }
262
491
  return io_s;
263
492
  }
@@ -268,20 +497,66 @@ IOStatus FaultInjectionTestFS::ReopenWritableFile(
268
497
  if (!IsFilesystemActive()) {
269
498
  return GetError();
270
499
  }
271
- if (IsFilesystemDirectWritable()) {
500
+ if (ShouldUseDiretWritable(fname)) {
272
501
  return target()->ReopenWritableFile(fname, file_opts, result, dbg);
273
502
  }
274
- IOStatus io_s = target()->ReopenWritableFile(fname, file_opts, result, dbg);
503
+ {
504
+ IOStatus in_s = InjectMetadataWriteError();
505
+ if (!in_s.ok()) {
506
+ return in_s;
507
+ }
508
+ }
509
+
510
+ bool exists;
511
+ IOStatus io_s,
512
+ exists_s = target()->FileExists(fname, IOOptions(), nullptr /* dbg */);
513
+ if (exists_s.IsNotFound()) {
514
+ exists = false;
515
+ } else if (exists_s.ok()) {
516
+ exists = true;
517
+ } else {
518
+ io_s = exists_s;
519
+ exists = false;
520
+ }
521
+
275
522
  if (io_s.ok()) {
276
- result->reset(new TestFSWritableFile(fname, std::move(*result), this));
277
- // WritableFileWriter* file is opened
278
- // again then it will be truncated - so forget our saved state.
279
- UntrackFile(fname);
280
- MutexLock l(&mutex_);
281
- open_files_.insert(fname);
282
- auto dir_and_name = TestFSGetDirAndName(fname);
283
- auto& list = dir_to_new_files_since_last_sync_[dir_and_name.first];
284
- list.insert(dir_and_name.second);
523
+ io_s = target()->ReopenWritableFile(fname, file_opts, result, dbg);
524
+ }
525
+
526
+ // Only track files we created. Files created outside of this
527
+ // `FaultInjectionTestFS` are not eligible for tracking/data dropping
528
+ // (for example, they may contain data a previous db_stress run expects to
529
+ // be recovered). This could be extended to track/drop data appended once
530
+ // the file is under `FaultInjectionTestFS`'s control.
531
+ if (io_s.ok()) {
532
+ bool should_track;
533
+ {
534
+ MutexLock l(&mutex_);
535
+ if (db_file_state_.find(fname) != db_file_state_.end()) {
536
+ // It was written by this `FileSystem` earlier.
537
+ assert(exists);
538
+ should_track = true;
539
+ } else if (!exists) {
540
+ // It was created by this `FileSystem` just now.
541
+ should_track = true;
542
+ open_managed_files_.insert(fname);
543
+ auto dir_and_name = TestFSGetDirAndName(fname);
544
+ auto& list = dir_to_new_files_since_last_sync_[dir_and_name.first];
545
+ list[dir_and_name.second] = kNewFileNoOverwrite;
546
+ } else {
547
+ should_track = false;
548
+ }
549
+ }
550
+ if (should_track) {
551
+ result->reset(
552
+ new TestFSWritableFile(fname, file_opts, std::move(*result), this));
553
+ }
554
+ {
555
+ IOStatus in_s = InjectMetadataWriteError();
556
+ if (!in_s.ok()) {
557
+ return in_s;
558
+ }
559
+ }
285
560
  }
286
561
  return io_s;
287
562
  }
@@ -292,20 +567,36 @@ IOStatus FaultInjectionTestFS::NewRandomRWFile(
292
567
  if (!IsFilesystemActive()) {
293
568
  return GetError();
294
569
  }
295
- if (IsFilesystemDirectWritable()) {
570
+ if (ShouldUseDiretWritable(fname)) {
296
571
  return target()->NewRandomRWFile(fname, file_opts, result, dbg);
297
572
  }
573
+ {
574
+ IOStatus in_s = InjectMetadataWriteError();
575
+ if (!in_s.ok()) {
576
+ return in_s;
577
+ }
578
+ }
298
579
  IOStatus io_s = target()->NewRandomRWFile(fname, file_opts, result, dbg);
299
580
  if (io_s.ok()) {
300
581
  result->reset(new TestFSRandomRWFile(fname, std::move(*result), this));
301
582
  // WritableFileWriter* file is opened
302
583
  // again then it will be truncated - so forget our saved state.
303
584
  UntrackFile(fname);
304
- MutexLock l(&mutex_);
305
- open_files_.insert(fname);
306
- auto dir_and_name = TestFSGetDirAndName(fname);
307
- auto& list = dir_to_new_files_since_last_sync_[dir_and_name.first];
308
- list.insert(dir_and_name.second);
585
+ {
586
+ MutexLock l(&mutex_);
587
+ open_managed_files_.insert(fname);
588
+ auto dir_and_name = TestFSGetDirAndName(fname);
589
+ auto& list = dir_to_new_files_since_last_sync_[dir_and_name.first];
590
+ // It could be overwriting an old file, but we simplify the
591
+ // implementation by ignoring it.
592
+ list[dir_and_name.second] = kNewFileNoOverwrite;
593
+ }
594
+ {
595
+ IOStatus in_s = InjectMetadataWriteError();
596
+ if (!in_s.ok()) {
597
+ return in_s;
598
+ }
599
+ }
309
600
  }
310
601
  return io_s;
311
602
  }
@@ -316,7 +607,13 @@ IOStatus FaultInjectionTestFS::NewRandomAccessFile(
316
607
  if (!IsFilesystemActive()) {
317
608
  return GetError();
318
609
  }
319
- IOStatus io_s = InjectError(ErrorOperation::kOpen, nullptr, false, nullptr);
610
+ if (ShouldInjectRandomReadError()) {
611
+ return IOStatus::IOError("Injected error when open random access file");
612
+ }
613
+ IOStatus io_s = InjectThreadSpecificReadError(ErrorOperation::kOpen, nullptr,
614
+ false, nullptr,
615
+ /*need_count_increase=*/true,
616
+ /*fault_injected=*/nullptr);
320
617
  if (io_s.ok()) {
321
618
  io_s = target()->NewRandomAccessFile(fname, file_opts, result, dbg);
322
619
  }
@@ -326,15 +623,44 @@ IOStatus FaultInjectionTestFS::NewRandomAccessFile(
326
623
  return io_s;
327
624
  }
328
625
 
626
+ IOStatus FaultInjectionTestFS::NewSequentialFile(
627
+ const std::string& fname, const FileOptions& file_opts,
628
+ std::unique_ptr<FSSequentialFile>* result, IODebugContext* dbg) {
629
+ if (!IsFilesystemActive()) {
630
+ return GetError();
631
+ }
632
+
633
+ if (ShouldInjectRandomReadError()) {
634
+ return IOStatus::IOError("Injected read error when creating seq file");
635
+ }
636
+ IOStatus io_s = target()->NewSequentialFile(fname, file_opts, result, dbg);
637
+ if (io_s.ok()) {
638
+ result->reset(new TestFSSequentialFile(std::move(*result), this));
639
+ }
640
+ return io_s;
641
+ }
642
+
329
643
  IOStatus FaultInjectionTestFS::DeleteFile(const std::string& f,
330
644
  const IOOptions& options,
331
645
  IODebugContext* dbg) {
332
646
  if (!IsFilesystemActive()) {
333
647
  return GetError();
334
648
  }
649
+ {
650
+ IOStatus in_s = InjectMetadataWriteError();
651
+ if (!in_s.ok()) {
652
+ return in_s;
653
+ }
654
+ }
335
655
  IOStatus io_s = FileSystemWrapper::DeleteFile(f, options, dbg);
336
656
  if (io_s.ok()) {
337
657
  UntrackFile(f);
658
+ {
659
+ IOStatus in_s = InjectMetadataWriteError();
660
+ if (!in_s.ok()) {
661
+ return in_s;
662
+ }
663
+ }
338
664
  }
339
665
  return io_s;
340
666
  }
@@ -346,21 +672,91 @@ IOStatus FaultInjectionTestFS::RenameFile(const std::string& s,
346
672
  if (!IsFilesystemActive()) {
347
673
  return GetError();
348
674
  }
675
+ {
676
+ IOStatus in_s = InjectMetadataWriteError();
677
+ if (!in_s.ok()) {
678
+ return in_s;
679
+ }
680
+ }
681
+
682
+ // We preserve contents of overwritten files up to a size threshold.
683
+ // We could keep previous file in another name, but we need to worry about
684
+ // garbage collect the those files. We do it if it is needed later.
685
+ // We ignore I/O errors here for simplicity.
686
+ std::string previous_contents = kNewFileNoOverwrite;
687
+ if (target()->FileExists(t, IOOptions(), nullptr).ok()) {
688
+ uint64_t file_size;
689
+ if (target()->GetFileSize(t, IOOptions(), &file_size, nullptr).ok() &&
690
+ file_size < 1024) {
691
+ ReadFileToString(target(), t, &previous_contents).PermitUncheckedError();
692
+ }
693
+ }
349
694
  IOStatus io_s = FileSystemWrapper::RenameFile(s, t, options, dbg);
350
695
 
351
696
  if (io_s.ok()) {
352
- MutexLock l(&mutex_);
353
- if (db_file_state_.find(s) != db_file_state_.end()) {
354
- db_file_state_[t] = db_file_state_[s];
355
- db_file_state_.erase(s);
697
+ {
698
+ MutexLock l(&mutex_);
699
+ if (db_file_state_.find(s) != db_file_state_.end()) {
700
+ db_file_state_[t] = db_file_state_[s];
701
+ db_file_state_.erase(s);
702
+ }
703
+
704
+ auto sdn = TestFSGetDirAndName(s);
705
+ auto tdn = TestFSGetDirAndName(t);
706
+ if (dir_to_new_files_since_last_sync_[sdn.first].erase(sdn.second) != 0) {
707
+ auto& tlist = dir_to_new_files_since_last_sync_[tdn.first];
708
+ assert(tlist.find(tdn.second) == tlist.end());
709
+ tlist[tdn.second] = previous_contents;
710
+ }
711
+ }
712
+ IOStatus in_s = InjectMetadataWriteError();
713
+ if (!in_s.ok()) {
714
+ return in_s;
356
715
  }
716
+ }
357
717
 
358
- auto sdn = TestFSGetDirAndName(s);
359
- auto tdn = TestFSGetDirAndName(t);
360
- if (dir_to_new_files_since_last_sync_[sdn.first].erase(sdn.second) != 0) {
361
- auto& tlist = dir_to_new_files_since_last_sync_[tdn.first];
362
- assert(tlist.find(tdn.second) == tlist.end());
363
- tlist.insert(tdn.second);
718
+ return io_s;
719
+ }
720
+
721
+ IOStatus FaultInjectionTestFS::LinkFile(const std::string& s,
722
+ const std::string& t,
723
+ const IOOptions& options,
724
+ IODebugContext* dbg) {
725
+ if (!IsFilesystemActive()) {
726
+ return GetError();
727
+ }
728
+ {
729
+ IOStatus in_s = InjectMetadataWriteError();
730
+ if (!in_s.ok()) {
731
+ return in_s;
732
+ }
733
+ }
734
+
735
+ // Using the value in `dir_to_new_files_since_last_sync_` for the source file
736
+ // may be a more reasonable choice.
737
+ std::string previous_contents = kNewFileNoOverwrite;
738
+
739
+ IOStatus io_s = FileSystemWrapper::LinkFile(s, t, options, dbg);
740
+
741
+ if (io_s.ok()) {
742
+ {
743
+ MutexLock l(&mutex_);
744
+ if (db_file_state_.find(s) != db_file_state_.end()) {
745
+ db_file_state_[t] = db_file_state_[s];
746
+ }
747
+
748
+ auto sdn = TestFSGetDirAndName(s);
749
+ auto tdn = TestFSGetDirAndName(t);
750
+ if (dir_to_new_files_since_last_sync_[sdn.first].find(sdn.second) !=
751
+ dir_to_new_files_since_last_sync_[sdn.first].end()) {
752
+ auto& tlist = dir_to_new_files_since_last_sync_[tdn.first];
753
+ assert(tlist.find(tdn.second) == tlist.end());
754
+ tlist[tdn.second] = previous_contents;
755
+ }
756
+ }
757
+ IOStatus in_s = InjectMetadataWriteError();
758
+ if (!in_s.ok()) {
759
+ return in_s;
364
760
  }
365
761
  }
366
762
 
@@ -369,15 +765,15 @@ IOStatus FaultInjectionTestFS::RenameFile(const std::string& s,
369
765
 
370
766
  void FaultInjectionTestFS::WritableFileClosed(const FSFileState& state) {
371
767
  MutexLock l(&mutex_);
372
- if (open_files_.find(state.filename_) != open_files_.end()) {
768
+ if (open_managed_files_.find(state.filename_) != open_managed_files_.end()) {
373
769
  db_file_state_[state.filename_] = state;
374
- open_files_.erase(state.filename_);
770
+ open_managed_files_.erase(state.filename_);
375
771
  }
376
772
  }
377
773
 
378
774
  void FaultInjectionTestFS::WritableFileSynced(const FSFileState& state) {
379
775
  MutexLock l(&mutex_);
380
- if (open_files_.find(state.filename_) != open_files_.end()) {
776
+ if (open_managed_files_.find(state.filename_) != open_managed_files_.end()) {
381
777
  if (db_file_state_.find(state.filename_) == db_file_state_.end()) {
382
778
  db_file_state_.insert(std::make_pair(state.filename_, state));
383
779
  } else {
@@ -388,7 +784,7 @@ void FaultInjectionTestFS::WritableFileSynced(const FSFileState& state) {
388
784
 
389
785
  void FaultInjectionTestFS::WritableFileAppended(const FSFileState& state) {
390
786
  MutexLock l(&mutex_);
391
- if (open_files_.find(state.filename_) != open_files_.end()) {
787
+ if (open_managed_files_.find(state.filename_) != open_managed_files_.end()) {
392
788
  if (db_file_state_.find(state.filename_) == db_file_state_.end()) {
393
789
  db_file_state_.insert(std::make_pair(state.filename_, state));
394
790
  } else {
@@ -426,7 +822,7 @@ IOStatus FaultInjectionTestFS::DropRandomUnsyncedFileData(Random* rnd) {
426
822
  IOStatus FaultInjectionTestFS::DeleteFilesCreatedAfterLastDirSync(
427
823
  const IOOptions& options, IODebugContext* dbg) {
428
824
  // Because DeleteFile access this container make a copy to avoid deadlock
429
- std::map<std::string, std::set<std::string>> map_copy;
825
+ std::map<std::string, std::map<std::string, std::string>> map_copy;
430
826
  {
431
827
  MutexLock l(&mutex_);
432
828
  map_copy.insert(dir_to_new_files_since_last_sync_.begin(),
@@ -434,10 +830,20 @@ IOStatus FaultInjectionTestFS::DeleteFilesCreatedAfterLastDirSync(
434
830
  }
435
831
 
436
832
  for (auto& pair : map_copy) {
437
- for (std::string name : pair.second) {
438
- IOStatus io_s = DeleteFile(pair.first + "/" + name, options, dbg);
439
- if (!io_s.ok()) {
440
- return io_s;
833
+ for (auto& file_pair : pair.second) {
834
+ if (file_pair.second == kNewFileNoOverwrite) {
835
+ IOStatus io_s =
836
+ DeleteFile(pair.first + "/" + file_pair.first, options, dbg);
837
+ if (!io_s.ok()) {
838
+ return io_s;
839
+ }
840
+ } else {
841
+ IOStatus io_s =
842
+ WriteStringToFile(target(), file_pair.second,
843
+ pair.first + "/" + file_pair.first, true);
844
+ if (!io_s.ok()) {
845
+ return io_s;
846
+ }
441
847
  }
442
848
  }
443
849
  }
@@ -457,13 +863,15 @@ void FaultInjectionTestFS::UntrackFile(const std::string& f) {
457
863
  dir_to_new_files_since_last_sync_[dir_and_name.first].erase(
458
864
  dir_and_name.second);
459
865
  db_file_state_.erase(f);
460
- open_files_.erase(f);
866
+ open_managed_files_.erase(f);
461
867
  }
462
868
 
463
- IOStatus FaultInjectionTestFS::InjectError(ErrorOperation op,
464
- Slice* result,
465
- bool direct_io,
466
- char* scratch) {
869
+ IOStatus FaultInjectionTestFS::InjectThreadSpecificReadError(
870
+ ErrorOperation op, Slice* result, bool direct_io, char* scratch,
871
+ bool need_count_increase, bool* fault_injected) {
872
+ bool dummy_bool;
873
+ bool& ret_fault_injected = fault_injected ? *fault_injected : dummy_bool;
874
+ ret_fault_injected = false;
467
875
  ErrorContext* ctx =
468
876
  static_cast<ErrorContext*>(thread_local_error_->Get());
469
877
  if (ctx == nullptr || !ctx->enable_error_injection || !ctx->one_in) {
@@ -471,72 +879,62 @@ IOStatus FaultInjectionTestFS::InjectError(ErrorOperation op,
471
879
  }
472
880
 
473
881
  if (ctx->rand.OneIn(ctx->one_in)) {
474
- ctx->count++;
882
+ if (ctx->count == 0) {
883
+ ctx->message = "";
884
+ }
885
+ if (need_count_increase) {
886
+ ctx->count++;
887
+ }
475
888
  if (ctx->callstack) {
476
889
  free(ctx->callstack);
477
890
  }
478
891
  ctx->callstack = port::SaveStack(&ctx->frames);
479
- switch (op) {
480
- case kRead:
481
- {
482
- if (!direct_io) {
483
- ctx->type =
484
- static_cast<ErrorType>(ctx->rand.Uniform(ErrorType::kErrorTypeMax));
485
- } else {
486
- // In Direct IO mode, the actual read will read extra data due to
487
- // alignment restrictions. So don't inject corruption or
488
- // truncated reads as we don't know if it will actually cause a
489
- // detectable error
490
- ctx->type = ErrorType::kErrorTypeStatus;
491
- }
492
- switch (ctx->type) {
493
- // Inject IO error
494
- case ErrorType::kErrorTypeStatus:
495
- return IOStatus::IOError();
496
- // Inject random corruption
497
- case ErrorType::kErrorTypeCorruption:
498
- {
499
- if (result->data() == scratch) {
500
- uint64_t offset = ctx->rand.Uniform((uint32_t)result->size());
501
- uint64_t len =
502
- std::min<uint64_t>(result->size() - offset, 64UL);
503
- assert(offset < result->size());
504
- assert(offset + len <= result->size());
505
- std::string str;
506
- // The randomly generated string could be identical to the
507
- // original one, so retry
508
- do {
509
- str = ctx->rand.RandomString(static_cast<int>(len));
510
- } while (str == std::string(scratch + offset, len));
511
- memcpy(scratch + offset, str.data(), len);
512
- break;
513
- } else {
514
- FALLTHROUGH_INTENDED;
515
- }
516
- }
517
- // Truncate the result
518
- case ErrorType::kErrorTypeTruncated:
519
- {
520
- assert(result->size() > 0);
521
- uint64_t offset = ctx->rand.Uniform((uint32_t)result->size());
522
- assert(offset < result->size());
523
- *result = Slice(result->data(), offset);
524
- break;
525
- }
526
- default:
527
- assert(false);
528
- }
529
- break;
530
- }
531
- case kOpen:
532
- return IOStatus::IOError();
533
- default:
534
- assert(false);
892
+
893
+ if (op != ErrorOperation::kMultiReadSingleReq) {
894
+ // Likely non-per read status code for MultiRead
895
+ ctx->message += "error; ";
896
+ ret_fault_injected = true;
897
+ return IOStatus::IOError();
898
+ } else if (Random::GetTLSInstance()->OneIn(8)) {
899
+ assert(result);
900
+ // For a small chance, set the failure to status but turn the
901
+ // result to be empty, which is supposed to be caught for a check.
902
+ *result = Slice();
903
+ ctx->message += "inject empty result; ";
904
+ ret_fault_injected = true;
905
+ } else if (!direct_io && Random::GetTLSInstance()->OneIn(7) &&
906
+ scratch != nullptr && result->data() == scratch) {
907
+ assert(result);
908
+ // With direct I/O, many extra bytes might be read so corrupting
909
+ // one byte might not cause checksum mismatch. Skip checksum
910
+ // corruption injection.
911
+ // We only corrupt data if the result is filled to `scratch`. For other
912
+ // cases, the data might not be able to be modified (e.g mmaped files)
913
+ // or has unintended side effects.
914
+ // For a small chance, set the failure to status but corrupt the
915
+ // result in a way that checksum checking is supposed to fail.
916
+ // Corrupt the last byte, which is supposed to be a checksum byte
917
+ // It would work for CRC. Not 100% sure for xxhash and will adjust
918
+ // if it is not the case.
919
+ const_cast<char*>(result->data())[result->size() - 1]++;
920
+ ctx->message += "corrupt last byte; ";
921
+ ret_fault_injected = true;
922
+ } else {
923
+ ctx->message += "error result multiget single; ";
924
+ ret_fault_injected = true;
925
+ return IOStatus::IOError();
535
926
  }
536
927
  }
537
928
  return IOStatus::OK();
538
929
  }
539
930
 
931
+ bool FaultInjectionTestFS::TryParseFileName(const std::string& file_name,
932
+ uint64_t* number, FileType* type) {
933
+ std::size_t found = file_name.find_last_of("/");
934
+ std::string file = file_name.substr(found);
935
+ return ParseFileName(file, number, type);
936
+ }
937
+
540
938
  IOStatus FaultInjectionTestFS::InjectWriteError(const std::string& file_name) {
541
939
  MutexLock l(&mutex_);
542
940
  if (!enable_write_error_injection_ || !write_error_one_in_) {
@@ -544,15 +942,16 @@ IOStatus FaultInjectionTestFS::InjectWriteError(const std::string& file_name) {
544
942
  }
545
943
  bool allowed_type = false;
546
944
 
547
- uint64_t number;
548
- FileType cur_type = kTempFile;
549
- std::size_t found = file_name.find_last_of("/");
550
- std::string file = file_name.substr(found);
551
- bool ret = ParseFileName(file, &number, &cur_type);
552
- if (ret) {
553
- for (const auto& type : write_error_allowed_types_) {
554
- if (cur_type == type) {
555
- allowed_type = true;
945
+ if (inject_for_all_file_types_) {
946
+ allowed_type = true;
947
+ } else {
948
+ uint64_t number;
949
+ FileType cur_type = kTempFile;
950
+ if (TryParseFileName(file_name, &number, &cur_type)) {
951
+ for (const auto& type : write_error_allowed_types_) {
952
+ if (cur_type == type) {
953
+ allowed_type = true;
954
+ }
556
955
  }
557
956
  }
558
957
  }
@@ -565,6 +964,19 @@ IOStatus FaultInjectionTestFS::InjectWriteError(const std::string& file_name) {
565
964
  return IOStatus::OK();
566
965
  }
567
966
 
967
+ IOStatus FaultInjectionTestFS::InjectMetadataWriteError() {
968
+ {
969
+ MutexLock l(&mutex_);
970
+ if (!enable_metadata_write_error_injection_ ||
971
+ !metadata_write_error_one_in_ ||
972
+ !write_error_rand_.OneIn(metadata_write_error_one_in_)) {
973
+ return IOStatus::OK();
974
+ }
975
+ }
976
+ TEST_SYNC_POINT("FaultInjectionTestFS::InjectMetadataWriteError:Injected");
977
+ return IOStatus::IOError();
978
+ }
979
+
568
980
  void FaultInjectionTestFS::PrintFaultBacktrace() {
569
981
  #if defined(OS_LINUX)
570
982
  ErrorContext* ctx =
@@ -573,6 +985,7 @@ void FaultInjectionTestFS::PrintFaultBacktrace() {
573
985
  return;
574
986
  }
575
987
  fprintf(stderr, "Injected error type = %d\n", ctx->type);
988
+ fprintf(stderr, "Message: %s\n", ctx->message.c_str());
576
989
  port::PrintAndFreeStack(ctx->callstack, ctx->frames);
577
990
  ctx->callstack = nullptr;
578
991
  #endif