@nxtedition/rocksdb 8.2.8 → 9.0.1

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 (483) hide show
  1. package/binding.cc +0 -21
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +20 -10
  3. package/deps/rocksdb/rocksdb/Makefile +37 -25
  4. package/deps/rocksdb/rocksdb/README.md +29 -0
  5. package/deps/rocksdb/rocksdb/TARGETS +25 -2
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +229 -74
  8. package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +2 -1
  9. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +4 -3
  10. package/deps/rocksdb/rocksdb/cache/cache_test.cc +58 -95
  11. package/deps/rocksdb/rocksdb/cache/charged_cache.cc +4 -2
  12. package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -3
  13. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +2683 -496
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.h +580 -159
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +145 -42
  16. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +20 -1
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +391 -17
  18. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  19. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +309 -212
  20. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -32
  21. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +439 -12
  22. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +44 -2
  23. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +11 -1
  24. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -3
  25. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
  26. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
  27. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
  28. package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
  29. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  30. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +28 -12
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
  32. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
  33. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  34. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  35. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  36. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +20 -22
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  40. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  41. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  42. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
  43. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
  44. package/deps/rocksdb/rocksdb/db/builder.cc +35 -10
  45. package/deps/rocksdb/rocksdb/db/c.cc +233 -6
  46. package/deps/rocksdb/rocksdb/db/c_test.c +140 -6
  47. package/deps/rocksdb/rocksdb/db/column_family.cc +110 -51
  48. package/deps/rocksdb/rocksdb/db/column_family.h +34 -2
  49. package/deps/rocksdb/rocksdb/db/column_family_test.cc +314 -7
  50. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +106 -23
  52. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +47 -9
  53. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +10 -11
  54. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  55. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  56. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +148 -60
  57. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +22 -7
  58. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  59. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -4
  60. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +33 -23
  61. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +14 -5
  62. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  63. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
  64. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +90 -4
  65. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +170 -95
  66. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  67. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +32 -58
  68. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +3 -1
  69. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  70. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  71. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  72. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  73. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +46 -10
  74. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -3
  75. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +74 -15
  76. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
  77. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +850 -44
  78. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  79. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +275 -1
  80. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +52 -19
  81. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  82. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +733 -320
  83. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +155 -66
  84. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +516 -155
  85. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +8 -4
  86. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  87. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +17 -4
  88. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +100 -35
  89. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +95 -50
  90. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -9
  91. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +136 -79
  92. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +6 -95
  93. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +31 -22
  94. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
  95. package/deps/rocksdb/rocksdb/db/db_iter.cc +85 -57
  96. package/deps/rocksdb/rocksdb/db/db_iter.h +11 -2
  97. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
  98. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
  99. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
  100. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  101. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +193 -7
  102. package/deps/rocksdb/rocksdb/db/db_options_test.cc +294 -26
  103. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  104. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +364 -0
  105. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +13 -3
  106. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
  107. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
  108. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
  109. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  110. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  111. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +282 -167
  112. package/deps/rocksdb/rocksdb/db/db_test.cc +180 -49
  113. package/deps/rocksdb/rocksdb/db/db_test2.cc +84 -12
  114. package/deps/rocksdb/rocksdb/db/db_test_util.cc +25 -12
  115. package/deps/rocksdb/rocksdb/db/db_test_util.h +45 -2
  116. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +14 -1
  117. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +245 -0
  118. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +480 -1
  119. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  120. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  121. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  122. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  123. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  124. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
  125. package/deps/rocksdb/rocksdb/db/error_handler.cc +67 -34
  126. package/deps/rocksdb/rocksdb/db/error_handler.h +13 -9
  127. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  128. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  129. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  130. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  131. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  132. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +144 -4
  133. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  134. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  135. package/deps/rocksdb/rocksdb/db/flush_job.cc +105 -17
  136. package/deps/rocksdb/rocksdb/db/flush_job.h +27 -4
  137. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -12
  138. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  139. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  140. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  141. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  142. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  143. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  144. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  145. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  146. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  147. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  148. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  149. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -3
  150. package/deps/rocksdb/rocksdb/db/memtable.cc +70 -83
  151. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  152. package/deps/rocksdb/rocksdb/db/memtable_list.cc +45 -11
  153. package/deps/rocksdb/rocksdb/db/memtable_list.h +43 -2
  154. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +91 -5
  155. package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
  156. package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
  157. package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
  158. package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
  159. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +5 -2
  160. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
  161. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -0
  162. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  163. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
  164. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
  165. package/deps/rocksdb/rocksdb/db/repair.cc +25 -7
  166. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  167. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +459 -74
  168. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
  169. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
  170. package/deps/rocksdb/rocksdb/db/table_cache.cc +76 -54
  171. package/deps/rocksdb/rocksdb/db/table_cache.h +18 -12
  172. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  173. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  174. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  175. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  176. package/deps/rocksdb/rocksdb/db/version_edit.h +58 -10
  177. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  178. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  179. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  180. package/deps/rocksdb/rocksdb/db/version_set.cc +207 -110
  181. package/deps/rocksdb/rocksdb/db/version_set.h +36 -15
  182. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
  183. package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -26
  184. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
  185. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
  186. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
  187. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
  188. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
  189. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
  190. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
  191. package/deps/rocksdb/rocksdb/db/write_batch.cc +55 -20
  192. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  193. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  194. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  195. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
  196. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
  197. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
  198. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +37 -13
  199. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +110 -58
  200. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  201. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +68 -17
  202. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
  203. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +8 -1
  204. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +429 -237
  205. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +13 -6
  206. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +21 -14
  207. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
  208. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
  209. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
  210. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  211. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +29 -38
  212. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +302 -101
  213. package/deps/rocksdb/rocksdb/env/env.cc +6 -2
  214. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  215. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  216. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  217. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  218. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  219. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +79 -0
  220. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  221. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  222. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  223. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +100 -70
  224. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +64 -18
  225. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  226. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  227. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1225 -97
  228. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +72 -33
  229. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  230. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  231. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  232. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +40 -14
  233. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +163 -91
  234. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +112 -2
  235. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +108 -16
  236. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
  237. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  238. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +42 -2
  239. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  240. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +92 -12
  241. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +34 -4
  242. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  243. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +91 -13
  244. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
  245. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
  246. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -0
  247. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  248. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
  249. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +130 -22
  250. package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
  251. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
  252. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +92 -9
  253. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  254. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  255. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +37 -2
  256. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
  257. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
  258. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  259. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +20 -3
  260. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +7 -0
  261. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
  262. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
  263. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  264. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
  265. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  266. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +42 -2
  267. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  268. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  269. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
  270. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -2
  271. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  272. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +4 -3
  273. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
  274. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  275. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  276. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  277. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +22 -1
  278. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
  279. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
  280. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  281. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  282. package/deps/rocksdb/rocksdb/options/customizable_test.cc +6 -1
  283. package/deps/rocksdb/rocksdb/options/db_options.cc +54 -2
  284. package/deps/rocksdb/rocksdb/options/db_options.h +4 -0
  285. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  286. package/deps/rocksdb/rocksdb/options/options_helper.cc +18 -0
  287. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +14 -4
  288. package/deps/rocksdb/rocksdb/options/options_test.cc +14 -1
  289. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  290. package/deps/rocksdb/rocksdb/port/README +10 -0
  291. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  292. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  293. package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
  294. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
  295. package/deps/rocksdb/rocksdb/port/stack_trace.cc +32 -12
  296. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  297. package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
  298. package/deps/rocksdb/rocksdb/src.mk +10 -1
  299. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  300. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  301. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  302. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +116 -43
  303. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +9 -6
  304. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +321 -49
  305. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +98 -4
  306. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +233 -98
  307. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +58 -23
  308. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
  309. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +52 -24
  310. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  311. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  312. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  313. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
  314. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
  315. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -18
  316. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +20 -8
  317. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +232 -71
  318. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
  319. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
  320. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
  321. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  322. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  323. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  324. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -2
  325. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  326. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +36 -19
  327. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  328. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  329. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
  330. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +11 -7
  331. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  332. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  333. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
  334. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +14 -13
  335. package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
  336. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +9 -2
  337. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  338. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  339. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  340. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  341. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  342. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  343. package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
  344. package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
  345. package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
  346. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
  347. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +22 -2
  348. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  349. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  350. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  351. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  352. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  353. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  354. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  355. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +45 -9
  356. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
  357. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +24 -1
  358. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  359. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  360. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
  361. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  362. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
  363. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
  364. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  365. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  366. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  367. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  368. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
  369. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +87 -65
  370. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +221 -33
  371. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
  372. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
  373. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  374. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -11
  375. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  376. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  377. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  378. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  379. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  380. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  381. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  382. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  383. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  384. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  385. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  386. package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
  387. package/deps/rocksdb/rocksdb/util/cast_util.h +24 -0
  388. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  389. package/deps/rocksdb/rocksdb/util/comparator.cc +55 -8
  390. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  391. package/deps/rocksdb/rocksdb/util/compression.h +119 -35
  392. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  393. package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
  394. package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
  395. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  396. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  397. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  398. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  399. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  400. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  401. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  402. package/deps/rocksdb/rocksdb/util/overload.h +23 -0
  403. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
  404. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
  405. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
  406. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  407. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
  408. package/deps/rocksdb/rocksdb/util/status.cc +1 -0
  409. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  410. package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
  411. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  412. package/deps/rocksdb/rocksdb/util/thread_operation.h +10 -1
  413. package/deps/rocksdb/rocksdb/util/udt_util.cc +385 -0
  414. package/deps/rocksdb/rocksdb/util/udt_util.h +192 -1
  415. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +461 -0
  416. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  417. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  418. package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
  419. package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
  420. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  421. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +71 -26
  422. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  423. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  424. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  425. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  426. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  427. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  428. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
  429. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +20 -16
  430. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
  431. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  432. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +7 -1
  433. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
  434. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +12 -3
  435. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  436. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
  437. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  438. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  439. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  440. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
  441. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  442. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  443. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  444. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +272 -33
  445. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
  446. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -1
  447. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  448. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  449. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +195 -23
  450. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +19 -12
  451. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +88 -1
  452. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  453. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +43 -17
  454. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  455. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +73 -24
  456. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  457. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  458. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +41 -12
  459. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  460. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +15 -8
  461. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  462. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  463. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  464. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  465. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +59 -28
  466. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
  467. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
  468. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +111 -14
  469. package/deps/rocksdb/rocksdb.gyp +6 -2
  470. package/index.js +0 -8
  471. package/package.json +1 -1
  472. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  473. package/prebuilds/linux-x64/node.napi.node +0 -0
  474. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
  475. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
  476. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
  477. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
  478. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
  479. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
  480. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
  481. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
  482. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
  483. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
@@ -0,0 +1,25 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ //
3
+ // This source code is licensed under both the GPLv2 (found in the
4
+ // COPYING file in the root directory) and Apache 2.0 License
5
+ // (found in the LICENSE.Apache file in the root directory).
6
+
7
+ #include "util/write_batch_util.h"
8
+
9
+ namespace ROCKSDB_NAMESPACE {
10
+
11
+ Status CollectColumnFamilyIdsFromWriteBatch(
12
+ const WriteBatch& batch, std::vector<uint32_t>* column_family_ids) {
13
+ assert(column_family_ids != nullptr);
14
+ column_family_ids->clear();
15
+ ColumnFamilyCollector handler;
16
+ Status s = batch.Iterate(&handler);
17
+ if (s.ok()) {
18
+ for (const auto& cf : handler.column_families()) {
19
+ column_family_ids->push_back(cf);
20
+ }
21
+ }
22
+ return s;
23
+ }
24
+
25
+ } // namespace ROCKSDB_NAMESPACE
@@ -0,0 +1,80 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ //
3
+ // This source code is licensed under both the GPLv2 (found in the
4
+ // COPYING file in the root directory) and Apache 2.0 License
5
+ // (found in the LICENSE.Apache file in the root directory).
6
+
7
+ #pragma once
8
+ #include <unordered_set>
9
+ #include <vector>
10
+
11
+ #include "rocksdb/slice.h"
12
+ #include "rocksdb/status.h"
13
+ #include "rocksdb/write_batch.h"
14
+
15
+ namespace ROCKSDB_NAMESPACE {
16
+ // ColumnFamilyCollector is a write batch handler which does nothing
17
+ // except recording unique column family IDs
18
+ class ColumnFamilyCollector : public WriteBatch::Handler {
19
+ std::unordered_set<uint32_t> column_family_ids_;
20
+
21
+ Status AddColumnFamilyId(uint32_t column_family_id) {
22
+ column_family_ids_.insert(column_family_id);
23
+ return Status::OK();
24
+ }
25
+
26
+ public:
27
+ explicit ColumnFamilyCollector() {}
28
+
29
+ ~ColumnFamilyCollector() override {}
30
+
31
+ Status PutCF(uint32_t column_family_id, const Slice&, const Slice&) override {
32
+ return AddColumnFamilyId(column_family_id);
33
+ }
34
+
35
+ Status DeleteCF(uint32_t column_family_id, const Slice&) override {
36
+ return AddColumnFamilyId(column_family_id);
37
+ }
38
+
39
+ Status SingleDeleteCF(uint32_t column_family_id, const Slice&) override {
40
+ return AddColumnFamilyId(column_family_id);
41
+ }
42
+
43
+ Status DeleteRangeCF(uint32_t column_family_id, const Slice&,
44
+ const Slice&) override {
45
+ return AddColumnFamilyId(column_family_id);
46
+ }
47
+
48
+ Status MergeCF(uint32_t column_family_id, const Slice&,
49
+ const Slice&) override {
50
+ return AddColumnFamilyId(column_family_id);
51
+ }
52
+
53
+ Status PutBlobIndexCF(uint32_t column_family_id, const Slice&,
54
+ const Slice&) override {
55
+ return AddColumnFamilyId(column_family_id);
56
+ }
57
+
58
+ Status MarkBeginPrepare(bool) override { return Status::OK(); }
59
+
60
+ Status MarkEndPrepare(const Slice&) override { return Status::OK(); }
61
+
62
+ Status MarkRollback(const Slice&) override { return Status::OK(); }
63
+
64
+ Status MarkCommit(const Slice&) override { return Status::OK(); }
65
+
66
+ Status MarkCommitWithTimestamp(const Slice&, const Slice&) override {
67
+ return Status::OK();
68
+ }
69
+
70
+ Status MarkNoop(bool) override { return Status::OK(); }
71
+
72
+ const std::unordered_set<uint32_t>& column_families() const {
73
+ return column_family_ids_;
74
+ }
75
+ };
76
+
77
+ Status CollectColumnFamilyIdsFromWriteBatch(
78
+ const WriteBatch& batch, std::vector<uint32_t>* column_family_ids);
79
+
80
+ } // namespace ROCKSDB_NAMESPACE
@@ -11,9 +11,6 @@
11
11
  #ifndef XXH_NAMESPACE
12
12
  #define XXH_NAMESPACE ROCKSDB_
13
13
  #endif // !defined(XXH_NAMESPACE)
14
-
15
- // for FALLTHROUGH_INTENDED, inserted as appropriate
16
- #include "port/lang.h"
17
14
  /* END RocksDB customizations */
18
15
 
19
16
  // clang-format off
@@ -386,10 +386,6 @@ typedef struct {
386
386
  #define XXPH_STATIC_LINKING_ONLY
387
387
  #endif
388
388
 
389
- /* BEGIN RocksDB customizations */
390
- #include "port/lang.h" /* for FALLTHROUGH_INTENDED, inserted as appropriate */
391
- /* END RocksDB customizations */
392
-
393
389
  /* *************************************
394
390
  * Compiler Specific Options
395
391
  ***************************************/
@@ -589,7 +589,7 @@ void AssertExists(DB* db, int from, int to) {
589
589
  for (int i = from; i < to; ++i) {
590
590
  std::string key = "testkey" + std::to_string(i);
591
591
  std::string value;
592
- Status s = db->Get(ReadOptions(), Slice(key), &value);
592
+ ASSERT_OK(db->Get(ReadOptions(), Slice(key), &value));
593
593
  ASSERT_EQ(value, "testvalue" + std::to_string(i));
594
594
  }
595
595
  }
@@ -4308,13 +4308,13 @@ TEST_F(BackupEngineTest, ExcludeFiles) {
4308
4308
  for (auto be_pair :
4309
4309
  {std::make_pair(backup_engine_.get(), alt_backup_engine),
4310
4310
  std::make_pair(alt_backup_engine, backup_engine_.get())}) {
4311
- DestroyDB(dbname_, options_);
4311
+ ASSERT_OK(DestroyDB(dbname_, options_));
4312
4312
  RestoreOptions ro;
4313
4313
  // Fails without alternate dir
4314
4314
  ASSERT_TRUE(be_pair.first->RestoreDBFromLatestBackup(dbname_, dbname_, ro)
4315
4315
  .IsInvalidArgument());
4316
4316
 
4317
- DestroyDB(dbname_, options_);
4317
+ ASSERT_OK(DestroyDB(dbname_, options_));
4318
4318
  // Works with alternate dir
4319
4319
  ro.alternate_dirs.push_front(be_pair.second);
4320
4320
  ASSERT_OK(be_pair.first->RestoreDBFromLatestBackup(dbname_, dbname_, ro));
@@ -4332,7 +4332,7 @@ TEST_F(BackupEngineTest, ExcludeFiles) {
4332
4332
  for (auto be_pair :
4333
4333
  {std::make_pair(backup_engine_.get(), alt_backup_engine),
4334
4334
  std::make_pair(alt_backup_engine, backup_engine_.get())}) {
4335
- DestroyDB(dbname_, options_);
4335
+ ASSERT_OK(DestroyDB(dbname_, options_));
4336
4336
  RestoreOptions ro;
4337
4337
  ro.alternate_dirs.push_front(be_pair.second);
4338
4338
  ASSERT_OK(be_pair.first->RestoreDBFromLatestBackup(dbname_, dbname_, ro));
@@ -269,7 +269,13 @@ Status BlobDBImpl::Open(std::vector<ColumnFamilyHandle*>* handles) {
269
269
  // Add trash files in blob dir to file delete scheduler.
270
270
  SstFileManagerImpl* sfm = static_cast<SstFileManagerImpl*>(
271
271
  db_impl_->immutable_db_options().sst_file_manager.get());
272
- DeleteScheduler::CleanupDirectory(env_, sfm, blob_dir_);
272
+ s = DeleteScheduler::CleanupDirectory(env_, sfm, blob_dir_);
273
+ if (!s.ok()) {
274
+ ROCKS_LOG_ERROR(db_options_.info_log,
275
+ "Failed to clean up directory %s, status: %s",
276
+ blob_dir_.c_str(), s.ToString().c_str());
277
+ return s;
278
+ }
273
279
 
274
280
  UpdateLiveSSTSize();
275
281
 
@@ -1142,7 +1148,7 @@ Slice BlobDBImpl::GetCompressedSlice(const Slice& raw,
1142
1148
  StopWatch compression_sw(clock_, statistics_, BLOB_DB_COMPRESSION_MICROS);
1143
1149
  CompressionType type = bdb_options_.compression;
1144
1150
  CompressionOptions opts;
1145
- CompressionContext context(type);
1151
+ CompressionContext context(type, opts);
1146
1152
  CompressionInfo info(opts, context, CompressionDict::GetEmptyDict(), type,
1147
1153
  0 /* sample_for_compression */);
1148
1154
  CompressBlock(raw, info, &type, kBlockBasedTableVersionFormat, false,
@@ -1384,28 +1390,46 @@ Status BlobDBImpl::AppendBlob(const std::shared_ptr<BlobFile>& bfile,
1384
1390
  return s;
1385
1391
  }
1386
1392
 
1387
- std::vector<Status> BlobDBImpl::MultiGet(const ReadOptions& read_options,
1393
+ std::vector<Status> BlobDBImpl::MultiGet(const ReadOptions& _read_options,
1388
1394
  const std::vector<Slice>& keys,
1389
1395
  std::vector<std::string>* values) {
1390
1396
  StopWatch multiget_sw(clock_, statistics_, BLOB_DB_MULTIGET_MICROS);
1391
1397
  RecordTick(statistics_, BLOB_DB_NUM_MULTIGET);
1392
1398
  // Get a snapshot to avoid blob file get deleted between we
1393
1399
  // fetch and index entry and reading from the file.
1394
- ReadOptions ro(read_options);
1395
- bool snapshot_created = SetSnapshotIfNeeded(&ro);
1396
-
1397
1400
  std::vector<Status> statuses;
1398
- statuses.reserve(keys.size());
1401
+ std::size_t num_keys = keys.size();
1402
+ statuses.reserve(num_keys);
1403
+
1404
+ if (_read_options.io_activity != Env::IOActivity::kUnknown &&
1405
+ _read_options.io_activity != Env::IOActivity::kMultiGet) {
1406
+ Status s = Status::InvalidArgument(
1407
+ "Can only call MultiGet with `ReadOptions::io_activity` is "
1408
+ "`Env::IOActivity::kUnknown` or `Env::IOActivity::kMultiGet`");
1409
+
1410
+ for (size_t i = 0; i < num_keys; ++i) {
1411
+ statuses.push_back(s);
1412
+ }
1413
+ return statuses;
1414
+ }
1415
+
1416
+ ReadOptions read_options(_read_options);
1417
+ if (read_options.io_activity == Env::IOActivity::kUnknown) {
1418
+ read_options.io_activity = Env::IOActivity::kMultiGet;
1419
+ }
1420
+ bool snapshot_created = SetSnapshotIfNeeded(&read_options);
1421
+
1399
1422
  values->clear();
1400
1423
  values->reserve(keys.size());
1401
1424
  PinnableSlice value;
1402
1425
  for (size_t i = 0; i < keys.size(); i++) {
1403
- statuses.push_back(Get(ro, DefaultColumnFamily(), keys[i], &value));
1426
+ statuses.push_back(
1427
+ GetImpl(read_options, DefaultColumnFamily(), keys[i], &value));
1404
1428
  values->push_back(value.ToString());
1405
1429
  value.Reset();
1406
1430
  }
1407
1431
  if (snapshot_created) {
1408
- db_->ReleaseSnapshot(ro.snapshot);
1432
+ db_->ReleaseSnapshot(read_options.snapshot);
1409
1433
  }
1410
1434
  return statuses;
1411
1435
  }
@@ -1544,12 +1568,12 @@ Status BlobDBImpl::GetRawBlobFromFile(const Slice& key, uint64_t file_number,
1544
1568
  if (reader->use_direct_io()) {
1545
1569
  s = reader->Read(IOOptions(), record_offset,
1546
1570
  static_cast<size_t>(record_size), &blob_record, nullptr,
1547
- &aligned_buf, Env::IO_TOTAL /* rate_limiter_priority */);
1571
+ &aligned_buf);
1548
1572
  } else {
1549
1573
  buf.reserve(static_cast<size_t>(record_size));
1550
1574
  s = reader->Read(IOOptions(), record_offset,
1551
1575
  static_cast<size_t>(record_size), &blob_record, &buf[0],
1552
- nullptr, Env::IO_TOTAL /* rate_limiter_priority */);
1576
+ nullptr);
1553
1577
  }
1554
1578
  RecordTick(statistics_, BLOB_DB_BLOB_FILE_BYTES_READ, blob_record.size());
1555
1579
  }
@@ -1609,16 +1633,36 @@ Status BlobDBImpl::GetRawBlobFromFile(const Slice& key, uint64_t file_number,
1609
1633
  return Status::OK();
1610
1634
  }
1611
1635
 
1612
- Status BlobDBImpl::Get(const ReadOptions& read_options,
1636
+ Status BlobDBImpl::Get(const ReadOptions& _read_options,
1613
1637
  ColumnFamilyHandle* column_family, const Slice& key,
1614
1638
  PinnableSlice* value) {
1615
- return Get(read_options, column_family, key, value,
1616
- static_cast<uint64_t*>(nullptr) /*expiration*/);
1639
+ if (_read_options.io_activity != Env::IOActivity::kUnknown &&
1640
+ _read_options.io_activity != Env::IOActivity::kGet) {
1641
+ return Status::InvalidArgument(
1642
+ "Can only call Get with `ReadOptions::io_activity` is "
1643
+ "`Env::IOActivity::kUnknown` or `Env::IOActivity::kGet`");
1644
+ }
1645
+ ReadOptions read_options(_read_options);
1646
+ if (read_options.io_activity == Env::IOActivity::kUnknown) {
1647
+ read_options.io_activity = Env::IOActivity::kGet;
1648
+ }
1649
+ return GetImpl(read_options, column_family, key, value);
1617
1650
  }
1618
1651
 
1619
- Status BlobDBImpl::Get(const ReadOptions& read_options,
1652
+ Status BlobDBImpl::Get(const ReadOptions& _read_options,
1620
1653
  ColumnFamilyHandle* column_family, const Slice& key,
1621
1654
  PinnableSlice* value, uint64_t* expiration) {
1655
+ if (_read_options.io_activity != Env::IOActivity::kUnknown &&
1656
+ _read_options.io_activity != Env::IOActivity::kGet) {
1657
+ return Status::InvalidArgument(
1658
+ "Can only call Get with `ReadOptions::io_activity` is "
1659
+ "`Env::IOActivity::kUnknown` or `Env::IOActivity::kGet`");
1660
+ }
1661
+ ReadOptions read_options(_read_options);
1662
+ if (read_options.io_activity == Env::IOActivity::kUnknown) {
1663
+ read_options.io_activity = Env::IOActivity::kGet;
1664
+ }
1665
+
1622
1666
  StopWatch get_sw(clock_, statistics_, BLOB_DB_GET_MICROS);
1623
1667
  RecordTick(statistics_, BLOB_DB_NUM_GET);
1624
1668
  return GetImpl(read_options, column_family, key, value, expiration);
@@ -1631,11 +1675,6 @@ Status BlobDBImpl::GetImpl(const ReadOptions& read_options,
1631
1675
  return Status::NotSupported(
1632
1676
  "Blob DB doesn't support non-default column family.");
1633
1677
  }
1634
- if (read_options.io_activity != Env::IOActivity::kUnknown) {
1635
- return Status::InvalidArgument(
1636
- "Cannot call Get with `ReadOptions::io_activity` != "
1637
- "`Env::IOActivity::kUnknown`");
1638
- }
1639
1678
  // Get a snapshot to avoid blob file get deleted between we
1640
1679
  // fetch and index entry and reading from the file.
1641
1680
  // TODO(yiwu): For Get() retry if file not found would be a simpler strategy.
@@ -1882,7 +1921,7 @@ std::pair<bool, int64_t> BlobDBImpl::EvictExpiredFiles(bool aborted) {
1882
1921
  }
1883
1922
 
1884
1923
  if (!blob_file->Immutable()) {
1885
- CloseBlobFile(blob_file);
1924
+ CloseBlobFile(blob_file).PermitUncheckedError();
1886
1925
  }
1887
1926
 
1888
1927
  assert(blob_file->Immutable());
@@ -2040,11 +2079,16 @@ void BlobDBImpl::CopyBlobFiles(
2040
2079
  }
2041
2080
  }
2042
2081
 
2043
- Iterator* BlobDBImpl::NewIterator(const ReadOptions& read_options) {
2044
- if (read_options.io_activity != Env::IOActivity::kUnknown) {
2082
+ Iterator* BlobDBImpl::NewIterator(const ReadOptions& _read_options) {
2083
+ if (_read_options.io_activity != Env::IOActivity::kUnknown &&
2084
+ _read_options.io_activity != Env::IOActivity::kDBIterator) {
2045
2085
  return NewErrorIterator(Status::InvalidArgument(
2046
- "Cannot call NewIterator with `ReadOptions::io_activity` != "
2047
- "`Env::IOActivity::kUnknown`"));
2086
+ "Can only call NewIterator with `ReadOptions::io_activity` is "
2087
+ "`Env::IOActivity::kUnknown` or `Env::IOActivity::kDBIterator`"));
2088
+ }
2089
+ ReadOptions read_options(_read_options);
2090
+ if (read_options.io_activity == Env::IOActivity::kUnknown) {
2091
+ read_options.io_activity = Env::IOActivity::kDBIterator;
2048
2092
  }
2049
2093
  auto* cfd =
2050
2094
  static_cast_with_check<ColumnFamilyHandleImpl>(DefaultColumnFamily())
@@ -2057,8 +2101,9 @@ Iterator* BlobDBImpl::NewIterator(const ReadOptions& read_options) {
2057
2101
  own_snapshot = new ManagedSnapshot(db_);
2058
2102
  snapshot = own_snapshot->snapshot();
2059
2103
  }
2104
+ SuperVersion* sv = cfd->GetReferencedSuperVersion(db_impl_);
2060
2105
  auto* iter = db_impl_->NewIteratorImpl(
2061
- read_options, cfd, snapshot->GetSequenceNumber(),
2106
+ read_options, cfd, sv, snapshot->GetSequenceNumber(),
2062
2107
  nullptr /*read_callback*/, true /*expose_blob_index*/);
2063
2108
  return new BlobDBIterator(own_snapshot, iter, this, clock_, statistics_);
2064
2109
  }
@@ -103,12 +103,13 @@ class BlobDBImpl : public BlobDB {
103
103
  const Slice& value) override;
104
104
 
105
105
  using BlobDB::Get;
106
- Status Get(const ReadOptions& read_options, ColumnFamilyHandle* column_family,
107
- const Slice& key, PinnableSlice* value) override;
106
+ Status Get(const ReadOptions& _read_options,
107
+ ColumnFamilyHandle* column_family, const Slice& key,
108
+ PinnableSlice* value) override;
108
109
 
109
- Status Get(const ReadOptions& read_options, ColumnFamilyHandle* column_family,
110
- const Slice& key, PinnableSlice* value,
111
- uint64_t* expiration) override;
110
+ Status Get(const ReadOptions& _read_options,
111
+ ColumnFamilyHandle* column_family, const Slice& key,
112
+ PinnableSlice* value, uint64_t* expiration) override;
112
113
 
113
114
  using BlobDB::NewIterator;
114
115
  virtual Iterator* NewIterator(const ReadOptions& read_options) override;
@@ -123,7 +124,7 @@ class BlobDBImpl : public BlobDB {
123
124
 
124
125
  using BlobDB::MultiGet;
125
126
  virtual std::vector<Status> MultiGet(
126
- const ReadOptions& read_options, const std::vector<Slice>& keys,
127
+ const ReadOptions& _read_options, const std::vector<Slice>& keys,
127
128
  std::vector<std::string>* values) override;
128
129
 
129
130
  using BlobDB::Write;
@@ -22,7 +22,7 @@ class BlobDBListener : public EventListener {
22
22
 
23
23
  void OnFlushBegin(DB* /*db*/, const FlushJobInfo& /*info*/) override {
24
24
  assert(blob_db_impl_ != nullptr);
25
- blob_db_impl_->SyncBlobFiles();
25
+ blob_db_impl_->SyncBlobFiles().PermitUncheckedError();
26
26
  }
27
27
 
28
28
  void OnFlushCompleted(DB* /*db*/, const FlushJobInfo& /*info*/) override {
@@ -102,8 +102,8 @@ Status BlobDumpTool::Read(uint64_t offset, size_t size, Slice* result) {
102
102
  }
103
103
  buffer_.reset(new char[buffer_size_]);
104
104
  }
105
- Status s = reader_->Read(IOOptions(), offset, size, result, buffer_.get(),
106
- nullptr, Env::IO_TOTAL /* rate_limiter_priority */);
105
+ Status s =
106
+ reader_->Read(IOOptions(), offset, size, result, buffer_.get(), nullptr);
107
107
  if (!s.ok()) {
108
108
  return s;
109
109
  }
@@ -277,4 +277,3 @@ std::string BlobDumpTool::GetString(std::pair<T, T> p) {
277
277
 
278
278
  } // namespace blob_db
279
279
  } // namespace ROCKSDB_NAMESPACE
280
-
@@ -114,13 +114,11 @@ Status BlobFile::ReadFooter(BlobLogFooter* bf) {
114
114
  // TODO: rate limit reading footers from blob files.
115
115
  if (ra_file_reader_->use_direct_io()) {
116
116
  s = ra_file_reader_->Read(IOOptions(), footer_offset, BlobLogFooter::kSize,
117
- &result, nullptr, &aligned_buf,
118
- Env::IO_TOTAL /* rate_limiter_priority */);
117
+ &result, nullptr, &aligned_buf);
119
118
  } else {
120
119
  buf.reserve(BlobLogFooter::kSize + 10);
121
120
  s = ra_file_reader_->Read(IOOptions(), footer_offset, BlobLogFooter::kSize,
122
- &result, &buf[0], nullptr,
123
- Env::IO_TOTAL /* rate_limiter_priority */);
121
+ &result, &buf[0], nullptr);
124
122
  }
125
123
  if (!s.ok()) return s;
126
124
  if (result.size() != BlobLogFooter::kSize) {
@@ -238,13 +236,11 @@ Status BlobFile::ReadMetadata(const std::shared_ptr<FileSystem>& fs,
238
236
  // TODO: rate limit reading headers from blob files.
239
237
  if (file_reader->use_direct_io()) {
240
238
  s = file_reader->Read(IOOptions(), 0, BlobLogHeader::kSize, &header_slice,
241
- nullptr, &aligned_buf,
242
- Env::IO_TOTAL /* rate_limiter_priority */);
239
+ nullptr, &aligned_buf);
243
240
  } else {
244
241
  header_buf.reserve(BlobLogHeader::kSize);
245
242
  s = file_reader->Read(IOOptions(), 0, BlobLogHeader::kSize, &header_slice,
246
- &header_buf[0], nullptr,
247
- Env::IO_TOTAL /* rate_limiter_priority */);
243
+ &header_buf[0], nullptr);
248
244
  }
249
245
  if (!s.ok()) {
250
246
  ROCKS_LOG_ERROR(
@@ -281,13 +277,12 @@ Status BlobFile::ReadMetadata(const std::shared_ptr<FileSystem>& fs,
281
277
  if (file_reader->use_direct_io()) {
282
278
  s = file_reader->Read(IOOptions(), file_size - BlobLogFooter::kSize,
283
279
  BlobLogFooter::kSize, &footer_slice, nullptr,
284
- &aligned_buf,
285
- Env::IO_TOTAL /* rate_limiter_priority */);
280
+ &aligned_buf);
286
281
  } else {
287
282
  footer_buf.reserve(BlobLogFooter::kSize);
288
283
  s = file_reader->Read(IOOptions(), file_size - BlobLogFooter::kSize,
289
284
  BlobLogFooter::kSize, &footer_slice, &footer_buf[0],
290
- nullptr, Env::IO_TOTAL /* rate_limiter_priority */);
285
+ nullptr);
291
286
  }
292
287
  if (!s.ok()) {
293
288
  ROCKS_LOG_ERROR(
@@ -249,8 +249,7 @@ class FromFileCacheDumpReader : public CacheDumpReader {
249
249
 
250
250
  while (to_read > 0) {
251
251
  io_s = file_reader_->Read(IOOptions(), offset_, to_read, &result_,
252
- buffer_, nullptr,
253
- Env::IO_TOTAL /* rate_limiter_priority */);
252
+ buffer_, nullptr);
254
253
  if (!io_s.ok()) {
255
254
  return io_s;
256
255
  }
@@ -460,8 +460,8 @@ TEST_F(CheckpointTest, CheckpointCF) {
460
460
  Options options = CurrentOptions();
461
461
  CreateAndReopenWithCF({"one", "two", "three", "four", "five"}, options);
462
462
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
463
- {{"CheckpointTest::CheckpointCF:2", "DBImpl::GetLiveFiles:2"},
464
- {"DBImpl::GetLiveFiles:1", "CheckpointTest::CheckpointCF:1"}});
463
+ {{"CheckpointTest::CheckpointCF:2", "DBImpl::FlushAllColumnFamilies:2"},
464
+ {"DBImpl::FlushAllColumnFamilies:1", "CheckpointTest::CheckpointCF:1"}});
465
465
 
466
466
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
467
467
 
@@ -925,7 +925,7 @@ TEST_F(CheckpointTest, CheckpointWithDbPath) {
925
925
  options.db_paths.emplace_back(dbname_ + "_2", 0);
926
926
  Reopen(options);
927
927
  ASSERT_OK(Put("key1", "val1"));
928
- Flush();
928
+ ASSERT_OK(Flush());
929
929
  Checkpoint* checkpoint;
930
930
  ASSERT_OK(Checkpoint::Create(db_, &checkpoint));
931
931
  // Currently not supported
@@ -968,7 +968,7 @@ TEST_F(CheckpointTest, PutRaceWithCheckpointTrackedWalSync) {
968
968
 
969
969
  // Simulate full loss of unsynced data. This drops "key2" -> "val2" from the
970
970
  // DB WAL.
971
- fault_env->DropUnsyncedFileData();
971
+ ASSERT_OK(fault_env->DropUnsyncedFileData());
972
972
 
973
973
  // Before the bug fix, reopening the DB would fail because the MANIFEST's
974
974
  // AddWal entry indicated the WAL should be synced through "key2" -> "val2".
@@ -985,4 +985,3 @@ int main(int argc, char** argv) {
985
985
  ::testing::InitGoogleTest(&argc, argv);
986
986
  return RUN_ALL_TESTS();
987
987
  }
988
-
@@ -96,6 +96,7 @@ class TestWritableFile : public WritableFile {
96
96
  virtual bool use_direct_io() const override {
97
97
  return target_->use_direct_io();
98
98
  };
99
+ uint64_t GetFileSize() final { return target_->GetFileSize(); }
99
100
 
100
101
  private:
101
102
  FileState state_;
@@ -242,6 +242,7 @@ IOStatus TestFSWritableFile::PositionedAppend(
242
242
  IOStatus TestFSWritableFile::Close(const IOOptions& options,
243
243
  IODebugContext* dbg) {
244
244
  MutexLock l(&mutex_);
245
+ fs_->WritableFileClosed(state_);
245
246
  if (!fs_->IsFilesystemActive()) {
246
247
  return fs_->GetError();
247
248
  }
@@ -263,7 +264,6 @@ IOStatus TestFSWritableFile::Close(const IOOptions& options,
263
264
  io_s = target_->Close(options, dbg);
264
265
  }
265
266
  if (io_s.ok()) {
266
- fs_->WritableFileClosed(state_);
267
267
  IOStatus in_s = fs_->InjectMetadataWriteError();
268
268
  if (!in_s.ok()) {
269
269
  return in_s;
@@ -408,7 +408,7 @@ IOStatus TestFSRandomAccessFile::Read(uint64_t offset, size_t n,
408
408
  scratch, /*need_count_increase=*/true, /*fault_injected=*/nullptr);
409
409
  }
410
410
  if (s.ok() && fs_->ShouldInjectRandomReadError()) {
411
- return IOStatus::IOError("Injected read error");
411
+ return IOStatus::IOError("injected read error");
412
412
  }
413
413
  return s;
414
414
  }
@@ -430,7 +430,7 @@ IOStatus TestFSRandomAccessFile::ReadAsync(
430
430
  }
431
431
  if (ret.ok()) {
432
432
  if (fs_->ShouldInjectRandomReadError()) {
433
- ret = IOStatus::IOError("Injected read error");
433
+ ret = IOStatus::IOError("injected read error");
434
434
  } else {
435
435
  s = target_->ReadAsync(req, opts, cb, cb_arg, io_handle, del_fn, nullptr);
436
436
  }
@@ -470,7 +470,7 @@ IOStatus TestFSRandomAccessFile::MultiRead(FSReadRequest* reqs, size_t num_reqs,
470
470
  /*fault_injected=*/nullptr);
471
471
  }
472
472
  if (s.ok() && fs_->ShouldInjectRandomReadError()) {
473
- return IOStatus::IOError("Injected read error");
473
+ return IOStatus::IOError("injected read error");
474
474
  }
475
475
  return s;
476
476
  }
@@ -487,7 +487,7 @@ IOStatus TestFSSequentialFile::Read(size_t n, const IOOptions& options,
487
487
  IODebugContext* dbg) {
488
488
  IOStatus s = target()->Read(n, options, result, scratch, dbg);
489
489
  if (s.ok() && fs_->ShouldInjectRandomReadError()) {
490
- return IOStatus::IOError("Injected seq read error");
490
+ return IOStatus::IOError("injected seq read error");
491
491
  }
492
492
  return s;
493
493
  }
@@ -499,7 +499,7 @@ IOStatus TestFSSequentialFile::PositionedRead(uint64_t offset, size_t n,
499
499
  IOStatus s =
500
500
  target()->PositionedRead(offset, n, options, result, scratch, dbg);
501
501
  if (s.ok() && fs_->ShouldInjectRandomReadError()) {
502
- return IOStatus::IOError("Injected seq positioned read error");
502
+ return IOStatus::IOError("injected seq positioned read error");
503
503
  }
504
504
  return s;
505
505
  }
@@ -678,7 +678,7 @@ IOStatus FaultInjectionTestFS::NewRandomAccessFile(
678
678
  return GetError();
679
679
  }
680
680
  if (ShouldInjectRandomReadError()) {
681
- return IOStatus::IOError("Injected error when open random access file");
681
+ return IOStatus::IOError("injected error when open random access file");
682
682
  }
683
683
  IOStatus io_s = InjectThreadSpecificReadError(ErrorOperation::kOpen, nullptr,
684
684
  false, nullptr,
@@ -701,7 +701,7 @@ IOStatus FaultInjectionTestFS::NewSequentialFile(
701
701
  }
702
702
 
703
703
  if (ShouldInjectRandomReadError()) {
704
- return IOStatus::IOError("Injected read error when creating seq file");
704
+ return IOStatus::IOError("injected read error when creating seq file");
705
705
  }
706
706
  IOStatus io_s = target()->NewSequentialFile(fname, file_opts, result, dbg);
707
707
  if (io_s.ok()) {
@@ -956,6 +956,7 @@ IOStatus FaultInjectionTestFS::InjectThreadSpecificReadError(
956
956
  return IOStatus::OK();
957
957
  }
958
958
 
959
+ IOStatus ret;
959
960
  if (ctx->rand.OneIn(ctx->one_in)) {
960
961
  if (ctx->count == 0) {
961
962
  ctx->message = "";
@@ -970,15 +971,15 @@ IOStatus FaultInjectionTestFS::InjectThreadSpecificReadError(
970
971
 
971
972
  if (op != ErrorOperation::kMultiReadSingleReq) {
972
973
  // Likely non-per read status code for MultiRead
973
- ctx->message += "error; ";
974
+ ctx->message += "injected read error; ";
974
975
  ret_fault_injected = true;
975
- return IOStatus::IOError();
976
+ ret = IOStatus::IOError(ctx->message);
976
977
  } else if (Random::GetTLSInstance()->OneIn(8)) {
977
978
  assert(result);
978
979
  // For a small chance, set the failure to status but turn the
979
980
  // result to be empty, which is supposed to be caught for a check.
980
981
  *result = Slice();
981
- ctx->message += "inject empty result; ";
982
+ ctx->message += "injected empty result; ";
982
983
  ret_fault_injected = true;
983
984
  } else if (!direct_io && Random::GetTLSInstance()->OneIn(7) &&
984
985
  scratch != nullptr && result->data() == scratch) {
@@ -995,15 +996,18 @@ IOStatus FaultInjectionTestFS::InjectThreadSpecificReadError(
995
996
  // It would work for CRC. Not 100% sure for xxhash and will adjust
996
997
  // if it is not the case.
997
998
  const_cast<char*>(result->data())[result->size() - 1]++;
998
- ctx->message += "corrupt last byte; ";
999
+ ctx->message += "injected corrupt last byte; ";
999
1000
  ret_fault_injected = true;
1000
1001
  } else {
1001
- ctx->message += "error result multiget single; ";
1002
+ ctx->message += "injected error result multiget single; ";
1002
1003
  ret_fault_injected = true;
1003
- return IOStatus::IOError();
1004
+ ret = IOStatus::IOError(ctx->message);
1004
1005
  }
1005
1006
  }
1006
- return IOStatus::OK();
1007
+ if (ctx->retryable) {
1008
+ ret.SetRetryable(true);
1009
+ }
1010
+ return ret;
1007
1011
  }
1008
1012
 
1009
1013
  bool FaultInjectionTestFS::TryParseFileName(const std::string& file_name,
@@ -1052,7 +1056,7 @@ IOStatus FaultInjectionTestFS::InjectMetadataWriteError() {
1052
1056
  }
1053
1057
  }
1054
1058
  TEST_SYNC_POINT("FaultInjectionTestFS::InjectMetadataWriteError:Injected");
1055
- return IOStatus::IOError();
1059
+ return IOStatus::IOError("injected metadata write error");
1056
1060
  }
1057
1061
 
1058
1062
  void FaultInjectionTestFS::PrintFaultBacktrace() {