@nxtedition/rocksdb 5.2.21 → 5.2.28

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 (923) hide show
  1. package/binding.cc +510 -967
  2. package/binding.gyp +78 -72
  3. package/chained-batch.js +1 -2
  4. package/deps/rocksdb/build_version.cc +70 -4
  5. package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
  6. package/deps/rocksdb/rocksdb/Makefile +459 -469
  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/cmake/modules/CxxFlags.cmake +7 -0
  31. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
  32. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
  33. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
  34. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
  35. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
  36. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
  37. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
  38. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
  39. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
  40. package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
  41. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
  42. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
  43. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
  44. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
  45. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
  51. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
  52. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
  53. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
  54. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
  55. package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
  56. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
  57. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
  58. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
  59. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
  60. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
  61. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
  62. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
  63. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
  64. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
  65. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
  66. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
  67. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
  68. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
  69. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
  70. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
  71. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
  72. package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
  73. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
  74. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
  75. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
  76. package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
  77. package/deps/rocksdb/rocksdb/db/builder.h +16 -37
  78. package/deps/rocksdb/rocksdb/db/c.cc +413 -208
  79. package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
  80. package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
  81. package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
  82. package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
  83. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
  84. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
  85. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
  96. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
  97. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
  98. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
  99. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
  100. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
  101. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
  102. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
  103. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
  104. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
  105. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
  106. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
  107. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
  108. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
  110. package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
  111. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
  112. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
  113. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
  114. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
  115. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
  116. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
  117. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
  118. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
  119. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
  120. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
  121. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
  122. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
  124. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
  125. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
  126. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
  127. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
  128. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
  129. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
  130. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
  131. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
  132. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
  133. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
  134. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
  135. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
  136. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
  137. package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
  138. package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
  139. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
  140. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
  141. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
  142. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
  143. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
  144. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
  145. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
  146. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
  147. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
  148. package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
  149. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
  150. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
  151. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
  152. package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
  153. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
  154. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
  155. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
  156. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
  157. package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
  158. package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
  159. package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
  160. package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
  161. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
  162. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
  163. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
  164. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
  165. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
  166. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
  167. package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
  168. package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
  169. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
  170. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
  171. package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
  172. package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
  173. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
  174. package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
  175. package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
  176. package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
  177. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
  178. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
  179. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
  180. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
  181. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
  182. package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
  183. package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
  184. package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
  185. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
  186. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
  187. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
  188. package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
  189. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
  190. package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
  191. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
  192. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
  193. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
  194. package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
  195. package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
  196. package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
  197. package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
  198. package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
  199. package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
  200. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
  201. package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
  202. package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
  203. package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
  204. package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
  205. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
  206. package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
  207. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
  208. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
  209. package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
  210. package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
  211. package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
  212. package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
  213. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
  214. package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
  215. package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
  216. package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
  217. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
  218. package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
  219. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
  220. package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
  221. package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
  222. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
  223. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
  224. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
  225. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
  226. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
  227. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
  228. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
  229. package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
  230. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
  231. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
  232. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
  233. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
  234. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
  235. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
  236. package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
  237. package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
  238. package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
  239. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
  240. package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
  241. package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
  242. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
  243. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
  244. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
  245. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
  246. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
  247. package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
  248. package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
  249. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
  250. package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
  251. package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
  252. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
  253. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
  254. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
  255. package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
  256. package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
  257. package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
  258. package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
  259. package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
  260. package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
  261. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
  262. package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
  263. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
  264. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
  265. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
  266. package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
  267. package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
  268. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
  269. package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
  270. package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
  271. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
  272. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
  273. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
  274. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
  280. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
  281. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
  283. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
  284. package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
  285. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
  286. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
  287. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
  288. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
  289. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
  290. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
  291. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
  292. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
  293. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
  294. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
  295. package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
  296. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
  297. package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
  298. package/deps/rocksdb/rocksdb/env/env.cc +632 -42
  299. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
  300. package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
  301. package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
  302. package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
  303. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
  304. package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
  305. package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
  306. package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
  307. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
  308. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
  309. package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
  310. package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
  311. package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
  312. package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
  313. package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
  314. package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
  315. package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
  316. package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
  317. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
  318. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
  319. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
  320. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
  321. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
  322. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
  323. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
  324. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
  325. package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
  326. package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
  327. package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
  328. package/deps/rocksdb/rocksdb/file/filename.h +13 -8
  329. package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
  330. package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
  331. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
  332. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
  333. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
  334. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
  335. package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
  336. package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
  337. package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
  338. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
  339. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
  340. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
  341. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
  342. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
  343. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
  344. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
  345. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
  346. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
  347. package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
  348. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
  349. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
  350. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
  351. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
  352. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
  353. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
  354. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
  355. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
  356. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
  357. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
  358. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
  359. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
  360. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
  361. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
  362. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
  363. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
  364. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
  365. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
  366. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
  367. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
  368. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
  369. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
  370. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
  371. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
  372. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
  373. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
  374. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
  375. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
  376. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
  377. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
  378. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
  380. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
  381. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
  382. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
  383. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
  385. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
  386. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
  387. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
  388. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
  389. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
  390. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
  391. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
  392. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
  393. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
  396. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
  397. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
  398. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
  407. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
  408. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
  409. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
  410. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
  411. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
  412. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
  413. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
  414. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
  415. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
  416. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
  417. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
  418. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
  419. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
  420. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
  421. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
  422. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
  423. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
  424. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
  425. package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
  426. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
  427. package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
  428. package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
  429. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  430. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
  431. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
  432. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
  433. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
  434. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
  435. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
  436. package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
  437. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
  438. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
  439. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
  440. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
  441. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
  442. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  443. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
  444. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
  445. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
  446. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
  447. package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
  448. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
  449. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
  450. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
  451. package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
  452. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
  453. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
  454. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
  455. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
  456. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
  457. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
  458. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
  459. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
  460. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
  461. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
  462. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
  463. package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
  464. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
  465. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
  466. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
  467. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
  468. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
  469. package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
  470. package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
  471. package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
  472. package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
  473. package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
  474. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
  475. package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
  476. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
  477. package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
  478. package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
  479. package/deps/rocksdb/rocksdb/options/options.cc +49 -17
  480. package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
  481. package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
  482. package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
  483. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
  484. package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
  485. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
  486. package/deps/rocksdb/rocksdb/port/lang.h +52 -0
  487. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  488. package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
  489. package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
  490. package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
  491. package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
  492. package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
  493. package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
  494. package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
  495. package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
  496. package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
  497. package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
  498. package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
  499. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
  500. package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
  501. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
  502. package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
  503. package/deps/rocksdb/rocksdb/python.mk +9 -0
  504. package/deps/rocksdb/rocksdb/src.mk +82 -34
  505. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
  506. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
  507. package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
  508. package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
  509. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
  510. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
  511. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
  512. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
  513. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
  514. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
  515. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
  516. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
  517. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
  518. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
  519. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
  520. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
  521. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
  522. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
  523. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
  524. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
  525. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
  526. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
  527. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
  528. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
  529. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
  530. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
  531. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
  532. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
  533. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
  534. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
  535. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
  536. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
  537. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
  538. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
  539. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
  540. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  541. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  542. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  543. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
  544. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
  545. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
  546. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
  547. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
  548. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
  549. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
  550. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
  551. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
  552. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
  553. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
  554. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
  555. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
  556. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
  557. package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
  558. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
  559. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
  560. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
  561. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
  562. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
  563. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
  564. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
  565. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
  566. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
  567. package/deps/rocksdb/rocksdb/table/format.cc +258 -104
  568. package/deps/rocksdb/rocksdb/table/format.h +120 -109
  569. package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
  570. package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
  571. package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
  572. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  573. package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
  574. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
  575. package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
  576. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
  577. package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
  578. package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
  579. package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
  580. package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
  581. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
  582. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
  583. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
  584. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
  585. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
  586. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
  587. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
  588. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
  589. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
  590. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
  591. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
  592. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
  593. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
  594. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
  595. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
  596. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
  597. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
  598. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
  599. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
  600. package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
  601. package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
  602. package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
  603. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
  604. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
  605. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
  606. package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
  607. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
  608. package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
  609. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
  610. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
  611. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
  612. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
  613. package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
  614. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
  615. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
  616. package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
  617. package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
  618. package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
  619. package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
  620. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
  621. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
  622. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
  623. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  624. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
  625. package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
  626. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
  627. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
  628. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
  629. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
  630. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
  631. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
  632. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
  633. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
  634. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
  635. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  636. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
  637. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
  638. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
  639. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
  640. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
  641. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
  642. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
  643. package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
  644. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
  645. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
  646. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
  647. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
  648. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
  649. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
  650. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
  651. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
  652. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
  653. package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
  654. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
  655. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
  656. package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
  657. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
  658. package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
  659. package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
  660. package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
  661. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  662. package/deps/rocksdb/rocksdb/util/channel.h +2 -0
  663. package/deps/rocksdb/rocksdb/util/coding.h +1 -33
  664. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
  665. package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
  666. package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
  667. package/deps/rocksdb/rocksdb/util/compression.h +212 -7
  668. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
  669. package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
  670. package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
  671. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
  672. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
  673. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
  674. package/deps/rocksdb/rocksdb/util/defer.h +30 -1
  675. package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
  676. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
  677. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
  678. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
  679. package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
  680. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
  681. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
  682. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
  683. package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
  684. package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
  685. package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
  686. package/deps/rocksdb/rocksdb/util/hash.h +31 -1
  687. package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
  688. package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
  689. package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
  690. package/deps/rocksdb/rocksdb/util/heap.h +6 -1
  691. package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
  692. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
  693. package/deps/rocksdb/rocksdb/util/math.h +74 -7
  694. package/deps/rocksdb/rocksdb/util/math128.h +13 -1
  695. package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
  696. package/deps/rocksdb/rocksdb/util/random.cc +9 -0
  697. package/deps/rocksdb/rocksdb/util/random.h +6 -0
  698. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
  699. package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
  700. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
  701. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
  702. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
  703. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
  704. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
  705. package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
  706. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
  707. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
  708. package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
  709. package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
  710. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
  711. package/deps/rocksdb/rocksdb/util/status.cc +32 -29
  712. package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
  713. package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
  714. package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
  715. package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
  716. package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
  717. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
  718. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
  719. package/deps/rocksdb/rocksdb/util/timer.h +55 -46
  720. package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
  721. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
  722. package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
  723. package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
  724. package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
  725. package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
  726. package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
  727. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
  728. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
  729. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
  730. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
  731. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
  732. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
  733. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
  734. package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
  735. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
  736. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
  737. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
  738. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
  739. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
  740. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
  741. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
  742. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
  743. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
  744. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
  745. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
  746. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
  747. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
  748. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
  749. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
  750. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
  751. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
  752. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
  753. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
  754. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
  755. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
  756. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
  757. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
  758. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
  759. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
  760. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
  761. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
  762. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
  763. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
  764. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
  765. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
  766. package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
  767. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
  768. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
  769. package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
  770. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
  771. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
  772. package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
  773. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
  774. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
  775. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
  776. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
  777. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
  778. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
  779. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
  780. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
  781. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
  782. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
  783. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
  784. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
  785. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
  786. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
  787. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
  788. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
  789. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
  790. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
  791. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
  792. package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
  793. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
  794. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
  795. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
  796. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
  797. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
  798. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
  799. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
  800. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
  801. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
  802. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
  803. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
  804. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
  805. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
  806. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
  807. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  808. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
  809. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
  810. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
  811. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
  812. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
  813. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
  814. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
  815. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
  816. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
  817. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
  818. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
  819. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
  820. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
  821. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  822. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
  823. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
  824. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
  825. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
  826. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
  827. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
  828. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
  829. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
  830. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
  831. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
  832. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
  833. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
  834. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
  835. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
  836. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
  837. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
  838. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
  839. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
  840. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
  841. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
  842. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
  843. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
  844. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
  845. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
  846. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
  847. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
  848. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
  849. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
  850. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
  851. package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
  852. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
  853. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
  854. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
  855. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
  856. package/deps/rocksdb/rocksdb.gyp +425 -446
  857. package/index.js +5 -87
  858. package/package-lock.json +23687 -0
  859. package/package.json +8 -9
  860. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  861. package/prebuilds/darwin-x64/node.napi.node +0 -0
  862. package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
  863. package/deps/rocksdb/rocksdb/README.md +0 -32
  864. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
  865. package/deps/rocksdb/rocksdb/hdfs/README +0 -23
  866. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
  867. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
  868. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
  869. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
  870. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
  871. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
  872. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
  873. package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
  874. package/deps/rocksdb/rocksdb/port/README +0 -10
  875. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
  876. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
  877. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
  878. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
  879. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
  880. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
  881. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
  882. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
  883. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
  884. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
  885. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
  886. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
  887. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
  888. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
  889. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
  890. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
  891. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
  892. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
  893. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
  894. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
  895. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
  896. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
  897. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
  898. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
  899. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
  900. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
  901. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
  902. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
  903. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
  904. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
  905. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
  906. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
  907. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
  908. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
  909. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
  910. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
  911. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
  912. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
  913. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
  914. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
  915. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
  916. package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
  917. package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
  918. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
  919. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
  920. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
  921. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
  922. package/deps/snappy/snappy-1.1.7/README.md +0 -149
  923. package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
@@ -12,65 +12,22 @@
12
12
  #include <cctype>
13
13
  #include <iostream>
14
14
 
15
+ #include "env/composite_env_wrapper.h"
15
16
  #include "env/env_encryption_ctr.h"
16
17
  #include "monitoring/perf_context_imp.h"
17
18
  #include "rocksdb/convenience.h"
19
+ #include "rocksdb/io_status.h"
20
+ #include "rocksdb/system_clock.h"
21
+ #include "rocksdb/utilities/customizable_util.h"
22
+ #include "rocksdb/utilities/options_type.h"
18
23
  #include "util/aligned_buffer.h"
19
24
  #include "util/coding.h"
20
25
  #include "util/random.h"
21
26
  #include "util/string_util.h"
22
27
 
23
28
  #endif
24
-
25
29
  namespace ROCKSDB_NAMESPACE {
26
-
27
30
  #ifndef ROCKSDB_LITE
28
- static constexpr char kROT13CipherName[] = "ROT13";
29
- static constexpr char kCTRProviderName[] = "CTR";
30
-
31
- Status BlockCipher::CreateFromString(const ConfigOptions& /*config_options*/,
32
- const std::string& value,
33
- std::shared_ptr<BlockCipher>* result) {
34
- std::string id = value;
35
- size_t colon = value.find(':');
36
- if (colon != std::string::npos) {
37
- id = value.substr(0, colon);
38
- }
39
- if (id == kROT13CipherName) {
40
- if (colon != std::string::npos) {
41
- size_t block_size = ParseSizeT(value.substr(colon + 1));
42
- result->reset(new ROT13BlockCipher(block_size));
43
- } else {
44
- result->reset(new ROT13BlockCipher(32));
45
- }
46
- return Status::OK();
47
- } else {
48
- return Status::NotSupported("Could not find cipher ", value);
49
- }
50
- }
51
-
52
- Status EncryptionProvider::CreateFromString(
53
- const ConfigOptions& /*config_options*/, const std::string& value,
54
- std::shared_ptr<EncryptionProvider>* result) {
55
- std::string id = value;
56
- bool is_test = StartsWith(value, "test://");
57
- Status status = Status::OK();
58
- if (is_test) {
59
- id = value.substr(strlen("test://"));
60
- }
61
- if (id == kCTRProviderName) {
62
- result->reset(new CTREncryptionProvider());
63
- } else if (is_test) {
64
- result->reset(new CTREncryptionProvider());
65
- } else {
66
- return Status::NotSupported("Could not find provider ", value);
67
- }
68
- if (status.ok() && is_test) {
69
- status = result->get()->TEST_Initialize();
70
- }
71
- return status;
72
- }
73
-
74
31
  std::shared_ptr<EncryptionProvider> EncryptionProvider::NewCTRProvider(
75
32
  const std::shared_ptr<BlockCipher>& cipher) {
76
33
  return std::make_shared<CTREncryptionProvider>(cipher);
@@ -84,19 +41,24 @@ std::shared_ptr<EncryptionProvider> EncryptionProvider::NewCTRProvider(
84
41
  // If an error was encountered, returns a non-OK status.
85
42
  //
86
43
  // REQUIRES: External synchronization
87
- Status EncryptedSequentialFile::Read(size_t n, Slice* result, char* scratch) {
44
+ IOStatus EncryptedSequentialFile::Read(size_t n, const IOOptions& options,
45
+ Slice* result, char* scratch,
46
+ IODebugContext* dbg) {
88
47
  assert(scratch);
89
- Status status = file_->Read(n, result, scratch);
90
- if (!status.ok()) {
91
- return status;
48
+ IOStatus io_s = file_->Read(n, options, result, scratch, dbg);
49
+ if (!io_s.ok()) {
50
+ return io_s;
92
51
  }
93
52
  {
94
53
  PERF_TIMER_GUARD(decrypt_data_nanos);
95
- status = stream_->Decrypt(offset_, (char*)result->data(), result->size());
54
+ io_s = status_to_io_status(
55
+ stream_->Decrypt(offset_, (char*)result->data(), result->size()));
96
56
  }
97
- offset_ += result->size(); // We've already ready data from disk, so update
98
- // offset_ even if decryption fails.
99
- return status;
57
+ if (io_s.ok()) {
58
+ offset_ += result->size(); // We've already ready data from disk, so update
59
+ // offset_ even if decryption fails.
60
+ }
61
+ return io_s;
100
62
  }
101
63
 
102
64
  // Skip "n" bytes from the file. This is guaranteed to be no
@@ -106,7 +68,7 @@ Status EncryptedSequentialFile::Read(size_t n, Slice* result, char* scratch) {
106
68
  // file, and Skip will return OK.
107
69
  //
108
70
  // REQUIRES: External synchronization
109
- Status EncryptedSequentialFile::Skip(uint64_t n) {
71
+ IOStatus EncryptedSequentialFile::Skip(uint64_t n) {
110
72
  auto status = file_->Skip(n);
111
73
  if (!status.ok()) {
112
74
  return status;
@@ -130,26 +92,30 @@ size_t EncryptedSequentialFile::GetRequiredBufferAlignment() const {
130
92
  // Remove any kind of caching of data from the offset to offset+length
131
93
  // of this file. If the length is 0, then it refers to the end of file.
132
94
  // If the system is not caching the file contents, then this is a noop.
133
- Status EncryptedSequentialFile::InvalidateCache(size_t offset, size_t length) {
95
+ IOStatus EncryptedSequentialFile::InvalidateCache(size_t offset,
96
+ size_t length) {
134
97
  return file_->InvalidateCache(offset + prefixLength_, length);
135
98
  }
136
99
 
137
100
  // Positioned Read for direct I/O
138
101
  // If Direct I/O enabled, offset, n, and scratch should be properly aligned
139
- Status EncryptedSequentialFile::PositionedRead(uint64_t offset, size_t n,
140
- Slice* result, char* scratch) {
102
+ IOStatus EncryptedSequentialFile::PositionedRead(uint64_t offset, size_t n,
103
+ const IOOptions& options,
104
+ Slice* result, char* scratch,
105
+ IODebugContext* dbg) {
141
106
  assert(scratch);
142
107
  offset += prefixLength_; // Skip prefix
143
- auto status = file_->PositionedRead(offset, n, result, scratch);
144
- if (!status.ok()) {
145
- return status;
108
+ auto io_s = file_->PositionedRead(offset, n, options, result, scratch, dbg);
109
+ if (!io_s.ok()) {
110
+ return io_s;
146
111
  }
147
112
  offset_ = offset + result->size();
148
113
  {
149
114
  PERF_TIMER_GUARD(decrypt_data_nanos);
150
- status = stream_->Decrypt(offset, (char*)result->data(), result->size());
115
+ io_s = status_to_io_status(
116
+ stream_->Decrypt(offset, (char*)result->data(), result->size()));
151
117
  }
152
- return status;
118
+ return io_s;
153
119
  }
154
120
 
155
121
  // Read up to "n" bytes from the file starting at "offset".
@@ -162,25 +128,30 @@ Status EncryptedSequentialFile::PositionedRead(uint64_t offset, size_t n,
162
128
  //
163
129
  // Safe for concurrent use by multiple threads.
164
130
  // If Direct I/O enabled, offset, n, and scratch should be aligned properly.
165
- Status EncryptedRandomAccessFile::Read(uint64_t offset, size_t n, Slice* result,
166
- char* scratch) const {
131
+ IOStatus EncryptedRandomAccessFile::Read(uint64_t offset, size_t n,
132
+ const IOOptions& options,
133
+ Slice* result, char* scratch,
134
+ IODebugContext* dbg) const {
167
135
  assert(scratch);
168
136
  offset += prefixLength_;
169
- auto status = file_->Read(offset, n, result, scratch);
170
- if (!status.ok()) {
171
- return status;
137
+ auto io_s = file_->Read(offset, n, options, result, scratch, dbg);
138
+ if (!io_s.ok()) {
139
+ return io_s;
172
140
  }
173
141
  {
174
142
  PERF_TIMER_GUARD(decrypt_data_nanos);
175
- status = stream_->Decrypt(offset, (char*)result->data(), result->size());
143
+ io_s = status_to_io_status(
144
+ stream_->Decrypt(offset, (char*)result->data(), result->size()));
176
145
  }
177
- return status;
146
+ return io_s;
178
147
  }
179
148
 
180
149
  // Readahead the file starting from offset by n bytes for caching.
181
- Status EncryptedRandomAccessFile::Prefetch(uint64_t offset, size_t n) {
150
+ IOStatus EncryptedRandomAccessFile::Prefetch(uint64_t offset, size_t n,
151
+ const IOOptions& options,
152
+ IODebugContext* dbg) {
182
153
  // return Status::OK();
183
- return file_->Prefetch(offset + prefixLength_, n);
154
+ return file_->Prefetch(offset + prefixLength_, n, options, dbg);
184
155
  }
185
156
 
186
157
  // Tries to get an unique ID for this file that will be the same each time
@@ -221,20 +192,21 @@ size_t EncryptedRandomAccessFile::GetRequiredBufferAlignment() const {
221
192
  // Remove any kind of caching of data from the offset to offset+length
222
193
  // of this file. If the length is 0, then it refers to the end of file.
223
194
  // If the system is not caching the file contents, then this is a noop.
224
- Status EncryptedRandomAccessFile::InvalidateCache(size_t offset,
225
- size_t length) {
195
+ IOStatus EncryptedRandomAccessFile::InvalidateCache(size_t offset,
196
+ size_t length) {
226
197
  return file_->InvalidateCache(offset + prefixLength_, length);
227
198
  }
228
199
 
229
200
  // A file abstraction for sequential writing. The implementation
230
201
  // must provide buffering since callers may append small fragments
231
202
  // at a time to the file.
232
- Status EncryptedWritableFile::Append(const Slice& data) {
203
+ IOStatus EncryptedWritableFile::Append(const Slice& data,
204
+ const IOOptions& options,
205
+ IODebugContext* dbg) {
233
206
  AlignedBuffer buf;
234
- Status status;
235
207
  Slice dataToAppend(data);
236
208
  if (data.size() > 0) {
237
- auto offset = file_->GetFileSize(); // size including prefix
209
+ auto offset = file_->GetFileSize(options, dbg); // size including prefix
238
210
  // Encrypt in cloned buffer
239
211
  buf.Alignment(GetRequiredBufferAlignment());
240
212
  buf.AllocateNewBuffer(data.size());
@@ -242,26 +214,25 @@ Status EncryptedWritableFile::Append(const Slice& data) {
242
214
  // so that the next two lines can be replaced with buf.Append().
243
215
  memmove(buf.BufferStart(), data.data(), data.size());
244
216
  buf.Size(data.size());
217
+ IOStatus io_s;
245
218
  {
246
219
  PERF_TIMER_GUARD(encrypt_data_nanos);
247
- status = stream_->Encrypt(offset, buf.BufferStart(), buf.CurrentSize());
220
+ io_s = status_to_io_status(
221
+ stream_->Encrypt(offset, buf.BufferStart(), buf.CurrentSize()));
248
222
  }
249
- if (!status.ok()) {
250
- return status;
223
+ if (!io_s.ok()) {
224
+ return io_s;
251
225
  }
252
226
  dataToAppend = Slice(buf.BufferStart(), buf.CurrentSize());
253
227
  }
254
- status = file_->Append(dataToAppend);
255
- if (!status.ok()) {
256
- return status;
257
- }
258
- return status;
228
+ return file_->Append(dataToAppend, options, dbg);
259
229
  }
260
230
 
261
- Status EncryptedWritableFile::PositionedAppend(const Slice& data,
262
- uint64_t offset) {
231
+ IOStatus EncryptedWritableFile::PositionedAppend(const Slice& data,
232
+ uint64_t offset,
233
+ const IOOptions& options,
234
+ IODebugContext* dbg) {
263
235
  AlignedBuffer buf;
264
- Status status;
265
236
  Slice dataToAppend(data);
266
237
  offset += prefixLength_;
267
238
  if (data.size() > 0) {
@@ -270,28 +241,32 @@ Status EncryptedWritableFile::PositionedAppend(const Slice& data,
270
241
  buf.AllocateNewBuffer(data.size());
271
242
  memmove(buf.BufferStart(), data.data(), data.size());
272
243
  buf.Size(data.size());
244
+ IOStatus io_s;
273
245
  {
274
246
  PERF_TIMER_GUARD(encrypt_data_nanos);
275
- status = stream_->Encrypt(offset, buf.BufferStart(), buf.CurrentSize());
247
+ io_s = status_to_io_status(
248
+ stream_->Encrypt(offset, buf.BufferStart(), buf.CurrentSize()));
276
249
  }
277
- if (!status.ok()) {
278
- return status;
250
+ if (!io_s.ok()) {
251
+ return io_s;
279
252
  }
280
253
  dataToAppend = Slice(buf.BufferStart(), buf.CurrentSize());
281
254
  }
282
- status = file_->PositionedAppend(dataToAppend, offset);
283
- if (!status.ok()) {
284
- return status;
285
- }
286
- return status;
255
+ return file_->PositionedAppend(dataToAppend, offset, options, dbg);
287
256
  }
288
257
 
289
- // Indicates the upper layers if the current WritableFile implementation
290
- // uses direct IO.
258
+ // Indicates the upper layers if the current WritableFile implementation
259
+ // uses direct IO.
291
260
  bool EncryptedWritableFile::use_direct_io() const {
292
261
  return file_->use_direct_io();
293
262
  }
294
263
 
264
+ // true if Sync() and Fsync() are safe to call concurrently with Append()
265
+ // and Flush().
266
+ bool EncryptedWritableFile::IsSyncThreadSafe() const {
267
+ return file_->IsSyncThreadSafe();
268
+ }
269
+
295
270
  // Use the returned alignment value to allocate
296
271
  // aligned buffer for Direct I/O
297
272
  size_t EncryptedWritableFile::GetRequiredBufferAlignment() const {
@@ -301,48 +276,83 @@ size_t EncryptedWritableFile::GetRequiredBufferAlignment() const {
301
276
  /*
302
277
  * Get the size of valid data in the file.
303
278
  */
304
- uint64_t EncryptedWritableFile::GetFileSize() {
305
- return file_->GetFileSize() - prefixLength_;
279
+ uint64_t EncryptedWritableFile::GetFileSize(const IOOptions& options,
280
+ IODebugContext* dbg) {
281
+ return file_->GetFileSize(options, dbg) - prefixLength_;
306
282
  }
307
283
 
308
- // Truncate is necessary to trim the file to the correct size
309
- // before closing. It is not always possible to keep track of the file
310
- // size due to whole pages writes. The behavior is undefined if called
311
- // with other writes to follow.
312
- Status EncryptedWritableFile::Truncate(uint64_t size) {
313
- return file_->Truncate(size + prefixLength_);
284
+ // Truncate is necessary to trim the file to the correct size
285
+ // before closing. It is not always possible to keep track of the file
286
+ // size due to whole pages writes. The behavior is undefined if called
287
+ // with other writes to follow.
288
+ IOStatus EncryptedWritableFile::Truncate(uint64_t size,
289
+ const IOOptions& options,
290
+ IODebugContext* dbg) {
291
+ return file_->Truncate(size + prefixLength_, options, dbg);
314
292
  }
315
293
 
316
- // Remove any kind of caching of data from the offset to offset+length
317
- // of this file. If the length is 0, then it refers to the end of file.
318
- // If the system is not caching the file contents, then this is a noop.
319
- // This call has no effect on dirty pages in the cache.
320
- Status EncryptedWritableFile::InvalidateCache(size_t offset, size_t length) {
294
+ // Remove any kind of caching of data from the offset to offset+length
295
+ // of this file. If the length is 0, then it refers to the end of file.
296
+ // If the system is not caching the file contents, then this is a noop.
297
+ // This call has no effect on dirty pages in the cache.
298
+ IOStatus EncryptedWritableFile::InvalidateCache(size_t offset, size_t length) {
321
299
  return file_->InvalidateCache(offset + prefixLength_, length);
322
300
  }
323
301
 
324
- // Sync a file range with disk.
325
- // offset is the starting byte of the file range to be synchronized.
326
- // nbytes specifies the length of the range to be synchronized.
327
- // This asks the OS to initiate flushing the cached data to disk,
328
- // without waiting for completion.
329
- // Default implementation does nothing.
330
- Status EncryptedWritableFile::RangeSync(uint64_t offset, uint64_t nbytes) {
331
- return file_->RangeSync(offset + prefixLength_, nbytes);
302
+ // Sync a file range with disk.
303
+ // offset is the starting byte of the file range to be synchronized.
304
+ // nbytes specifies the length of the range to be synchronized.
305
+ // This asks the OS to initiate flushing the cached data to disk,
306
+ // without waiting for completion.
307
+ // Default implementation does nothing.
308
+ IOStatus EncryptedWritableFile::RangeSync(uint64_t offset, uint64_t nbytes,
309
+ const IOOptions& options,
310
+ IODebugContext* dbg) {
311
+ return file_->RangeSync(offset + prefixLength_, nbytes, options, dbg);
312
+ }
313
+
314
+ // PrepareWrite performs any necessary preparation for a write
315
+ // before the write actually occurs. This allows for pre-allocation
316
+ // of space on devices where it can result in less file
317
+ // fragmentation and/or less waste from over-zealous filesystem
318
+ // pre-allocation.
319
+ void EncryptedWritableFile::PrepareWrite(size_t offset, size_t len,
320
+ const IOOptions& options,
321
+ IODebugContext* dbg) {
322
+ file_->PrepareWrite(offset + prefixLength_, len, options, dbg);
323
+ }
324
+
325
+ void EncryptedWritableFile::SetPreallocationBlockSize(size_t size) {
326
+ // the size here doesn't need to include prefixLength_, as it's a
327
+ // configuration will be use for `PrepareWrite()`.
328
+ file_->SetPreallocationBlockSize(size);
329
+ }
330
+
331
+ void EncryptedWritableFile::GetPreallocationStatus(
332
+ size_t* block_size, size_t* last_allocated_block) {
333
+ file_->GetPreallocationStatus(block_size, last_allocated_block);
334
+ }
335
+
336
+ // Pre-allocates space for a file.
337
+ IOStatus EncryptedWritableFile::Allocate(uint64_t offset, uint64_t len,
338
+ const IOOptions& options,
339
+ IODebugContext* dbg) {
340
+ return file_->Allocate(offset + prefixLength_, len, options, dbg);
341
+ }
342
+
343
+ IOStatus EncryptedWritableFile::Flush(const IOOptions& options,
344
+ IODebugContext* dbg) {
345
+ return file_->Flush(options, dbg);
332
346
  }
333
347
 
334
- // PrepareWrite performs any necessary preparation for a write
335
- // before the write actually occurs. This allows for pre-allocation
336
- // of space on devices where it can result in less file
337
- // fragmentation and/or less waste from over-zealous filesystem
338
- // pre-allocation.
339
- void EncryptedWritableFile::PrepareWrite(size_t offset, size_t len) {
340
- file_->PrepareWrite(offset + prefixLength_, len);
348
+ IOStatus EncryptedWritableFile::Sync(const IOOptions& options,
349
+ IODebugContext* dbg) {
350
+ return file_->Sync(options, dbg);
341
351
  }
342
352
 
343
- // Pre-allocates space for a file.
344
- Status EncryptedWritableFile::Allocate(uint64_t offset, uint64_t len) {
345
- return file_->Allocate(offset + prefixLength_, len);
353
+ IOStatus EncryptedWritableFile::Close(const IOOptions& options,
354
+ IODebugContext* dbg) {
355
+ return file_->Close(options, dbg);
346
356
  }
347
357
 
348
358
  // A file abstraction for random reading and writing.
@@ -361,9 +371,10 @@ size_t EncryptedRandomRWFile::GetRequiredBufferAlignment() const {
361
371
 
362
372
  // Write bytes in `data` at offset `offset`, Returns Status::OK() on success.
363
373
  // Pass aligned buffer when use_direct_io() returns true.
364
- Status EncryptedRandomRWFile::Write(uint64_t offset, const Slice& data) {
374
+ IOStatus EncryptedRandomRWFile::Write(uint64_t offset, const Slice& data,
375
+ const IOOptions& options,
376
+ IODebugContext* dbg) {
365
377
  AlignedBuffer buf;
366
- Status status;
367
378
  Slice dataToWrite(data);
368
379
  offset += prefixLength_;
369
380
  if (data.size() > 0) {
@@ -372,71 +383,98 @@ Status EncryptedRandomRWFile::Write(uint64_t offset, const Slice& data) {
372
383
  buf.AllocateNewBuffer(data.size());
373
384
  memmove(buf.BufferStart(), data.data(), data.size());
374
385
  buf.Size(data.size());
386
+ IOStatus io_s;
375
387
  {
376
388
  PERF_TIMER_GUARD(encrypt_data_nanos);
377
- status = stream_->Encrypt(offset, buf.BufferStart(), buf.CurrentSize());
389
+ io_s = status_to_io_status(
390
+ stream_->Encrypt(offset, buf.BufferStart(), buf.CurrentSize()));
378
391
  }
379
- if (!status.ok()) {
380
- return status;
392
+ if (!io_s.ok()) {
393
+ return io_s;
381
394
  }
382
395
  dataToWrite = Slice(buf.BufferStart(), buf.CurrentSize());
383
396
  }
384
- status = file_->Write(offset, dataToWrite);
385
- return status;
397
+ return file_->Write(offset, dataToWrite, options, dbg);
386
398
  }
387
399
 
388
400
  // Read up to `n` bytes starting from offset `offset` and store them in
389
401
  // result, provided `scratch` size should be at least `n`.
390
402
  // Returns Status::OK() on success.
391
- Status EncryptedRandomRWFile::Read(uint64_t offset, size_t n, Slice* result,
392
- char* scratch) const {
403
+ IOStatus EncryptedRandomRWFile::Read(uint64_t offset, size_t n,
404
+ const IOOptions& options, Slice* result,
405
+ char* scratch, IODebugContext* dbg) const {
393
406
  assert(scratch);
394
407
  offset += prefixLength_;
395
- auto status = file_->Read(offset, n, result, scratch);
408
+ auto status = file_->Read(offset, n, options, result, scratch, dbg);
396
409
  if (!status.ok()) {
397
410
  return status;
398
411
  }
399
412
  {
400
413
  PERF_TIMER_GUARD(decrypt_data_nanos);
401
- status = stream_->Decrypt(offset, (char*)result->data(), result->size());
414
+ status = status_to_io_status(
415
+ stream_->Decrypt(offset, (char*)result->data(), result->size()));
402
416
  }
403
417
  return status;
404
418
  }
405
419
 
406
- Status EncryptedRandomRWFile::Flush() { return file_->Flush(); }
420
+ IOStatus EncryptedRandomRWFile::Flush(const IOOptions& options,
421
+ IODebugContext* dbg) {
422
+ return file_->Flush(options, dbg);
423
+ }
407
424
 
408
- Status EncryptedRandomRWFile::Sync() { return file_->Sync(); }
425
+ IOStatus EncryptedRandomRWFile::Sync(const IOOptions& options,
426
+ IODebugContext* dbg) {
427
+ return file_->Sync(options, dbg);
428
+ }
409
429
 
410
- Status EncryptedRandomRWFile::Fsync() { return file_->Fsync(); }
430
+ IOStatus EncryptedRandomRWFile::Fsync(const IOOptions& options,
431
+ IODebugContext* dbg) {
432
+ return file_->Fsync(options, dbg);
433
+ }
411
434
 
412
- Status EncryptedRandomRWFile::Close() { return file_->Close(); }
435
+ IOStatus EncryptedRandomRWFile::Close(const IOOptions& options,
436
+ IODebugContext* dbg) {
437
+ return file_->Close(options, dbg);
438
+ }
413
439
 
414
- // EncryptedEnv implements an Env wrapper that adds encryption to files stored
415
- // on disk.
416
- class EncryptedEnvImpl : public EnvWrapper {
440
+ namespace {
441
+ static std::unordered_map<std::string, OptionTypeInfo> encrypted_fs_type_info =
442
+ {
443
+ {"provider",
444
+ OptionTypeInfo::AsCustomSharedPtr<EncryptionProvider>(
445
+ 0 /* No offset, whole struct*/, OptionVerificationType::kByName,
446
+ OptionTypeFlags::kNone)},
447
+ };
448
+ // EncryptedFileSystemImpl implements an FileSystemWrapper that adds encryption
449
+ // to files stored on disk.
450
+ class EncryptedFileSystemImpl : public EncryptedFileSystem {
451
+ public:
452
+ const char* Name() const override {
453
+ return EncryptedFileSystem::kClassName();
454
+ }
417
455
  // Returns the raw encryption provider that should be used to write the input
418
456
  // encrypted file. If there is no such provider, NotFound is returned.
419
- Status GetWritableProvider(const std::string& /*fname*/,
420
- EncryptionProvider** result) {
457
+ IOStatus GetWritableProvider(const std::string& /*fname*/,
458
+ EncryptionProvider** result) {
421
459
  if (provider_) {
422
460
  *result = provider_.get();
423
- return Status::OK();
461
+ return IOStatus::OK();
424
462
  } else {
425
463
  *result = nullptr;
426
- return Status::NotFound("No WriteProvider specified");
464
+ return IOStatus::NotFound("No WriteProvider specified");
427
465
  }
428
466
  }
429
467
 
430
468
  // Returns the raw encryption provider that should be used to read the input
431
469
  // encrypted file. If there is no such provider, NotFound is returned.
432
- Status GetReadableProvider(const std::string& /*fname*/,
433
- EncryptionProvider** result) {
470
+ IOStatus GetReadableProvider(const std::string& /*fname*/,
471
+ EncryptionProvider** result) {
434
472
  if (provider_) {
435
473
  *result = provider_.get();
436
- return Status::OK();
474
+ return IOStatus::OK();
437
475
  } else {
438
476
  *result = nullptr;
439
- return Status::NotFound("No Provider specified");
477
+ return IOStatus::NotFound("No Provider specified");
440
478
  }
441
479
  }
442
480
 
@@ -452,13 +490,13 @@ class EncryptedEnvImpl : public EnvWrapper {
452
490
  // should be encrypted
453
491
  // @return OK on success, non-OK on failure.
454
492
  template <class TypeFile>
455
- Status CreateWritableCipherStream(
493
+ IOStatus CreateWritableCipherStream(
456
494
  const std::string& fname, const std::unique_ptr<TypeFile>& underlying,
457
- const EnvOptions& options, size_t* prefix_length,
458
- std::unique_ptr<BlockAccessCipherStream>* stream) {
495
+ const FileOptions& options, size_t* prefix_length,
496
+ std::unique_ptr<BlockAccessCipherStream>* stream, IODebugContext* dbg) {
459
497
  EncryptionProvider* provider = nullptr;
460
498
  *prefix_length = 0;
461
- Status status = GetWritableProvider(fname, &provider);
499
+ IOStatus status = GetWritableProvider(fname, &provider);
462
500
  if (!status.ok()) {
463
501
  return status;
464
502
  } else if (provider != nullptr) {
@@ -470,34 +508,36 @@ class EncryptedEnvImpl : public EnvWrapper {
470
508
  // Initialize prefix
471
509
  buffer.Alignment(underlying->GetRequiredBufferAlignment());
472
510
  buffer.AllocateNewBuffer(*prefix_length);
473
- status = provider->CreateNewPrefix(fname, buffer.BufferStart(),
474
- *prefix_length);
511
+ status = status_to_io_status(provider->CreateNewPrefix(
512
+ fname, buffer.BufferStart(), *prefix_length));
475
513
  if (status.ok()) {
476
514
  buffer.Size(*prefix_length);
477
515
  prefix = Slice(buffer.BufferStart(), buffer.CurrentSize());
478
516
  // Write prefix
479
- status = underlying->Append(prefix);
517
+ status = underlying->Append(prefix, options.io_options, dbg);
480
518
  }
481
519
  if (!status.ok()) {
482
520
  return status;
483
521
  }
484
522
  }
485
523
  // Create cipher stream
486
- status = provider->CreateCipherStream(fname, options, prefix, stream);
524
+ status = status_to_io_status(
525
+ provider->CreateCipherStream(fname, options, prefix, stream));
487
526
  }
488
527
  return status;
489
528
  }
490
529
 
491
530
  template <class TypeFile>
492
- Status CreateWritableEncryptedFile(const std::string& fname,
493
- std::unique_ptr<TypeFile>& underlying,
494
- const EnvOptions& options,
495
- std::unique_ptr<TypeFile>* result) {
531
+ IOStatus CreateWritableEncryptedFile(const std::string& fname,
532
+ std::unique_ptr<TypeFile>& underlying,
533
+ const FileOptions& options,
534
+ std::unique_ptr<TypeFile>* result,
535
+ IODebugContext* dbg) {
496
536
  // Create cipher stream
497
537
  std::unique_ptr<BlockAccessCipherStream> stream;
498
538
  size_t prefix_length;
499
- Status status = CreateWritableCipherStream(fname, underlying, options,
500
- &prefix_length, &stream);
539
+ IOStatus status = CreateWritableCipherStream(fname, underlying, options,
540
+ &prefix_length, &stream, dbg);
501
541
  if (status.ok()) {
502
542
  if (stream) {
503
543
  result->reset(new EncryptedWritableFile(
@@ -521,15 +561,15 @@ class EncryptedEnvImpl : public EnvWrapper {
521
561
  // should be encrypted
522
562
  // @return OK on success, non-OK on failure.
523
563
  template <class TypeFile>
524
- Status CreateRandomWriteCipherStream(
564
+ IOStatus CreateRandomWriteCipherStream(
525
565
  const std::string& fname, const std::unique_ptr<TypeFile>& underlying,
526
- const EnvOptions& options, size_t* prefix_length,
527
- std::unique_ptr<BlockAccessCipherStream>* stream) {
566
+ const FileOptions& options, size_t* prefix_length,
567
+ std::unique_ptr<BlockAccessCipherStream>* stream, IODebugContext* dbg) {
528
568
  EncryptionProvider* provider = nullptr;
529
569
  *prefix_length = 0;
530
- Status status = GetWritableProvider(fname, &provider);
531
- if (!status.ok()) {
532
- return status;
570
+ IOStatus io_s = GetWritableProvider(fname, &provider);
571
+ if (!io_s.ok()) {
572
+ return io_s;
533
573
  } else if (provider != nullptr) {
534
574
  // Initialize & write prefix (if needed)
535
575
  AlignedBuffer buffer;
@@ -539,22 +579,23 @@ class EncryptedEnvImpl : public EnvWrapper {
539
579
  // Initialize prefix
540
580
  buffer.Alignment(underlying->GetRequiredBufferAlignment());
541
581
  buffer.AllocateNewBuffer(*prefix_length);
542
- status = provider->CreateNewPrefix(fname, buffer.BufferStart(),
543
- *prefix_length);
544
- if (status.ok()) {
582
+ io_s = status_to_io_status(provider->CreateNewPrefix(
583
+ fname, buffer.BufferStart(), *prefix_length));
584
+ if (io_s.ok()) {
545
585
  buffer.Size(*prefix_length);
546
586
  prefix = Slice(buffer.BufferStart(), buffer.CurrentSize());
547
587
  // Write prefix
548
- status = underlying->Write(0, prefix);
588
+ io_s = underlying->Write(0, prefix, options.io_options, dbg);
549
589
  }
550
- if (!status.ok()) {
551
- return status;
590
+ if (!io_s.ok()) {
591
+ return io_s;
552
592
  }
553
593
  }
554
594
  // Create cipher stream
555
- status = provider->CreateCipherStream(fname, options, prefix, stream);
595
+ io_s = status_to_io_status(
596
+ provider->CreateCipherStream(fname, options, prefix, stream));
556
597
  }
557
- return status;
598
+ return io_s;
558
599
  }
559
600
 
560
601
  // Creates a CipherStream for the underlying file/name using the options
@@ -569,10 +610,10 @@ class EncryptedEnvImpl : public EnvWrapper {
569
610
  // is encrypted
570
611
  // @return OK on success, non-OK on failure.
571
612
  template <class TypeFile>
572
- Status CreateSequentialCipherStream(
613
+ IOStatus CreateSequentialCipherStream(
573
614
  const std::string& fname, const std::unique_ptr<TypeFile>& underlying,
574
- const EnvOptions& options, size_t* prefix_length,
575
- std::unique_ptr<BlockAccessCipherStream>* stream) {
615
+ const FileOptions& options, size_t* prefix_length,
616
+ std::unique_ptr<BlockAccessCipherStream>* stream, IODebugContext* dbg) {
576
617
  // Read prefix (if needed)
577
618
  AlignedBuffer buffer;
578
619
  Slice prefix;
@@ -581,14 +622,15 @@ class EncryptedEnvImpl : public EnvWrapper {
581
622
  // Read prefix
582
623
  buffer.Alignment(underlying->GetRequiredBufferAlignment());
583
624
  buffer.AllocateNewBuffer(*prefix_length);
584
- Status status =
585
- underlying->Read(*prefix_length, &prefix, buffer.BufferStart());
625
+ IOStatus status = underlying->Read(*prefix_length, options.io_options,
626
+ &prefix, buffer.BufferStart(), dbg);
586
627
  if (!status.ok()) {
587
628
  return status;
588
629
  }
589
630
  buffer.Size(*prefix_length);
590
631
  }
591
- return provider_->CreateCipherStream(fname, options, prefix, stream);
632
+ return status_to_io_status(
633
+ provider_->CreateCipherStream(fname, options, prefix, stream));
592
634
  }
593
635
 
594
636
  // Creates a CipherStream for the underlying file/name using the options
@@ -603,10 +645,10 @@ class EncryptedEnvImpl : public EnvWrapper {
603
645
  // is encrypted
604
646
  // @return OK on success, non-OK on failure.
605
647
  template <class TypeFile>
606
- Status CreateRandomReadCipherStream(
648
+ IOStatus CreateRandomReadCipherStream(
607
649
  const std::string& fname, const std::unique_ptr<TypeFile>& underlying,
608
- const EnvOptions& options, size_t* prefix_length,
609
- std::unique_ptr<BlockAccessCipherStream>* stream) {
650
+ const FileOptions& options, size_t* prefix_length,
651
+ std::unique_ptr<BlockAccessCipherStream>* stream, IODebugContext* dbg) {
610
652
  // Read prefix (if needed)
611
653
  AlignedBuffer buffer;
612
654
  Slice prefix;
@@ -615,42 +657,61 @@ class EncryptedEnvImpl : public EnvWrapper {
615
657
  // Read prefix
616
658
  buffer.Alignment(underlying->GetRequiredBufferAlignment());
617
659
  buffer.AllocateNewBuffer(*prefix_length);
618
- Status status =
619
- underlying->Read(0, *prefix_length, &prefix, buffer.BufferStart());
660
+ IOStatus status = underlying->Read(0, *prefix_length, options.io_options,
661
+ &prefix, buffer.BufferStart(), dbg);
620
662
  if (!status.ok()) {
621
663
  return status;
622
664
  }
623
665
  buffer.Size(*prefix_length);
624
666
  }
625
- return provider_->CreateCipherStream(fname, options, prefix, stream);
667
+ return status_to_io_status(
668
+ provider_->CreateCipherStream(fname, options, prefix, stream));
626
669
  }
627
670
 
628
671
  public:
629
- EncryptedEnvImpl(Env* base_env,
630
- const std::shared_ptr<EncryptionProvider>& provider)
631
- : EnvWrapper(base_env) {
672
+ EncryptedFileSystemImpl(const std::shared_ptr<FileSystem>& base,
673
+ const std::shared_ptr<EncryptionProvider>& provider)
674
+ : EncryptedFileSystem(base) {
632
675
  provider_ = provider;
676
+ RegisterOptions("EncryptionProvider", &provider_, &encrypted_fs_type_info);
677
+ }
678
+
679
+ Status AddCipher(const std::string& descriptor, const char* cipher,
680
+ size_t len, bool for_write) override {
681
+ return provider_->AddCipher(descriptor, cipher, len, for_write);
633
682
  }
634
683
 
635
684
  // NewSequentialFile opens a file for sequential reading.
636
- virtual Status NewSequentialFile(const std::string& fname,
637
- std::unique_ptr<SequentialFile>* result,
638
- const EnvOptions& options) override {
685
+ IOStatus NewSequentialFile(const std::string& fname,
686
+ const FileOptions& options,
687
+ std::unique_ptr<FSSequentialFile>* result,
688
+ IODebugContext* dbg) override {
639
689
  result->reset();
640
690
  if (options.use_mmap_reads) {
641
- return Status::InvalidArgument();
691
+ return IOStatus::InvalidArgument();
642
692
  }
643
693
  // Open file using underlying Env implementation
644
- std::unique_ptr<SequentialFile> underlying;
645
- auto status = EnvWrapper::NewSequentialFile(fname, &underlying, options);
694
+ std::unique_ptr<FSSequentialFile> underlying;
695
+ auto status =
696
+ FileSystemWrapper::NewSequentialFile(fname, options, &underlying, dbg);
697
+ if (!status.ok()) {
698
+ return status;
699
+ }
700
+ uint64_t file_size;
701
+ status = FileSystemWrapper::GetFileSize(fname, options.io_options,
702
+ &file_size, dbg);
646
703
  if (!status.ok()) {
647
704
  return status;
648
705
  }
706
+ if (!file_size) {
707
+ *result = std::move(underlying);
708
+ return status;
709
+ }
649
710
  // Create cipher stream
650
711
  std::unique_ptr<BlockAccessCipherStream> stream;
651
712
  size_t prefix_length;
652
713
  status = CreateSequentialCipherStream(fname, underlying, options,
653
- &prefix_length, &stream);
714
+ &prefix_length, &stream, dbg);
654
715
  if (status.ok()) {
655
716
  result->reset(new EncryptedSequentialFile(
656
717
  std::move(underlying), std::move(stream), prefix_length));
@@ -659,23 +720,25 @@ class EncryptedEnvImpl : public EnvWrapper {
659
720
  }
660
721
 
661
722
  // NewRandomAccessFile opens a file for random read access.
662
- virtual Status NewRandomAccessFile(const std::string& fname,
663
- std::unique_ptr<RandomAccessFile>* result,
664
- const EnvOptions& options) override {
723
+ IOStatus NewRandomAccessFile(const std::string& fname,
724
+ const FileOptions& options,
725
+ std::unique_ptr<FSRandomAccessFile>* result,
726
+ IODebugContext* dbg) override {
665
727
  result->reset();
666
728
  if (options.use_mmap_reads) {
667
- return Status::InvalidArgument();
729
+ return IOStatus::InvalidArgument();
668
730
  }
669
731
  // Open file using underlying Env implementation
670
- std::unique_ptr<RandomAccessFile> underlying;
671
- auto status = EnvWrapper::NewRandomAccessFile(fname, &underlying, options);
732
+ std::unique_ptr<FSRandomAccessFile> underlying;
733
+ auto status = FileSystemWrapper::NewRandomAccessFile(fname, options,
734
+ &underlying, dbg);
672
735
  if (!status.ok()) {
673
736
  return status;
674
737
  }
675
738
  std::unique_ptr<BlockAccessCipherStream> stream;
676
739
  size_t prefix_length;
677
740
  status = CreateRandomReadCipherStream(fname, underlying, options,
678
- &prefix_length, &stream);
741
+ &prefix_length, &stream, dbg);
679
742
  if (status.ok()) {
680
743
  if (stream) {
681
744
  result->reset(new EncryptedRandomAccessFile(
@@ -688,20 +751,21 @@ class EncryptedEnvImpl : public EnvWrapper {
688
751
  }
689
752
 
690
753
  // NewWritableFile opens a file for sequential writing.
691
- virtual Status NewWritableFile(const std::string& fname,
692
- std::unique_ptr<WritableFile>* result,
693
- const EnvOptions& options) override {
754
+ IOStatus NewWritableFile(const std::string& fname, const FileOptions& options,
755
+ std::unique_ptr<FSWritableFile>* result,
756
+ IODebugContext* dbg) override {
694
757
  result->reset();
695
758
  if (options.use_mmap_writes) {
696
- return Status::InvalidArgument();
759
+ return IOStatus::InvalidArgument();
697
760
  }
698
761
  // Open file using underlying Env implementation
699
- std::unique_ptr<WritableFile> underlying;
700
- Status status = EnvWrapper::NewWritableFile(fname, &underlying, options);
762
+ std::unique_ptr<FSWritableFile> underlying;
763
+ IOStatus status =
764
+ FileSystemWrapper::NewWritableFile(fname, options, &underlying, dbg);
701
765
  if (!status.ok()) {
702
766
  return status;
703
767
  }
704
- return CreateWritableEncryptedFile(fname, underlying, options, result);
768
+ return CreateWritableEncryptedFile(fname, underlying, options, result, dbg);
705
769
  }
706
770
 
707
771
  // Create an object that writes to a new file with the specified
@@ -711,39 +775,42 @@ class EncryptedEnvImpl : public EnvWrapper {
711
775
  // returns non-OK.
712
776
  //
713
777
  // The returned file will only be accessed by one thread at a time.
714
- virtual Status ReopenWritableFile(const std::string& fname,
715
- std::unique_ptr<WritableFile>* result,
716
- const EnvOptions& options) override {
778
+ IOStatus ReopenWritableFile(const std::string& fname,
779
+ const FileOptions& options,
780
+ std::unique_ptr<FSWritableFile>* result,
781
+ IODebugContext* dbg) override {
717
782
  result->reset();
718
783
  if (options.use_mmap_writes) {
719
- return Status::InvalidArgument();
784
+ return IOStatus::InvalidArgument();
720
785
  }
721
786
  // Open file using underlying Env implementation
722
- std::unique_ptr<WritableFile> underlying;
723
- Status status = EnvWrapper::ReopenWritableFile(fname, &underlying, options);
787
+ std::unique_ptr<FSWritableFile> underlying;
788
+ IOStatus status =
789
+ FileSystemWrapper::ReopenWritableFile(fname, options, &underlying, dbg);
724
790
  if (!status.ok()) {
725
791
  return status;
726
792
  }
727
- return CreateWritableEncryptedFile(fname, underlying, options, result);
793
+ return CreateWritableEncryptedFile(fname, underlying, options, result, dbg);
728
794
  }
729
795
 
730
796
  // Reuse an existing file by renaming it and opening it as writable.
731
- virtual Status ReuseWritableFile(const std::string& fname,
732
- const std::string& old_fname,
733
- std::unique_ptr<WritableFile>* result,
734
- const EnvOptions& options) override {
797
+ IOStatus ReuseWritableFile(const std::string& fname,
798
+ const std::string& old_fname,
799
+ const FileOptions& options,
800
+ std::unique_ptr<FSWritableFile>* result,
801
+ IODebugContext* dbg) override {
735
802
  result->reset();
736
803
  if (options.use_mmap_writes) {
737
- return Status::InvalidArgument();
804
+ return IOStatus::InvalidArgument();
738
805
  }
739
806
  // Open file using underlying Env implementation
740
- std::unique_ptr<WritableFile> underlying;
741
- Status status =
742
- EnvWrapper::ReuseWritableFile(fname, old_fname, &underlying, options);
807
+ std::unique_ptr<FSWritableFile> underlying;
808
+ auto status = FileSystemWrapper::ReuseWritableFile(
809
+ fname, old_fname, options, &underlying, dbg);
743
810
  if (!status.ok()) {
744
811
  return status;
745
812
  }
746
- return CreateWritableEncryptedFile(fname, underlying, options, result);
813
+ return CreateWritableEncryptedFile(fname, underlying, options, result, dbg);
747
814
  }
748
815
 
749
816
  // Open `fname` for random read and write, if file doesn't exist the file
@@ -751,19 +818,20 @@ class EncryptedEnvImpl : public EnvWrapper {
751
818
  // *result and returns OK. On failure returns non-OK.
752
819
  //
753
820
  // The returned file will only be accessed by one thread at a time.
754
- virtual Status NewRandomRWFile(const std::string& fname,
755
- std::unique_ptr<RandomRWFile>* result,
756
- const EnvOptions& options) override {
821
+ IOStatus NewRandomRWFile(const std::string& fname, const FileOptions& options,
822
+ std::unique_ptr<FSRandomRWFile>* result,
823
+ IODebugContext* dbg) override {
757
824
  result->reset();
758
825
  if (options.use_mmap_reads || options.use_mmap_writes) {
759
- return Status::InvalidArgument();
826
+ return IOStatus::InvalidArgument();
760
827
  }
761
828
  // Check file exists
762
- bool isNewFile = !FileExists(fname).ok();
829
+ bool isNewFile = !FileExists(fname, options.io_options, dbg).ok();
763
830
 
764
831
  // Open file using underlying Env implementation
765
- std::unique_ptr<RandomRWFile> underlying;
766
- Status status = EnvWrapper::NewRandomRWFile(fname, &underlying, options);
832
+ std::unique_ptr<FSRandomRWFile> underlying;
833
+ auto status =
834
+ FileSystemWrapper::NewRandomRWFile(fname, options, &underlying, dbg);
767
835
  if (!status.ok()) {
768
836
  return status;
769
837
  }
@@ -773,10 +841,10 @@ class EncryptedEnvImpl : public EnvWrapper {
773
841
  if (!isNewFile) {
774
842
  // File already exists, read prefix
775
843
  status = CreateRandomReadCipherStream(fname, underlying, options,
776
- &prefix_length, &stream);
844
+ &prefix_length, &stream, dbg);
777
845
  } else {
778
846
  status = CreateRandomWriteCipherStream(fname, underlying, options,
779
- &prefix_length, &stream);
847
+ &prefix_length, &stream, dbg);
780
848
  }
781
849
  if (status.ok()) {
782
850
  if (stream) {
@@ -803,9 +871,12 @@ class EncryptedEnvImpl : public EnvWrapper {
803
871
  // have
804
872
  // permission to access "dir", or if "dir" is invalid.
805
873
  // IOError if an IO Error was encountered
806
- virtual Status GetChildrenFileAttributes(
807
- const std::string& dir, std::vector<FileAttributes>* result) override {
808
- auto status = EnvWrapper::GetChildrenFileAttributes(dir, result);
874
+ IOStatus GetChildrenFileAttributes(const std::string& dir,
875
+ const IOOptions& options,
876
+ std::vector<FileAttributes>* result,
877
+ IODebugContext* dbg) override {
878
+ auto status =
879
+ FileSystemWrapper::GetChildrenFileAttributes(dir, options, result, dbg);
809
880
  if (!status.ok()) {
810
881
  return status;
811
882
  }
@@ -823,14 +894,15 @@ class EncryptedEnvImpl : public EnvWrapper {
823
894
  it->size_bytes -= provider->GetPrefixLength();
824
895
  }
825
896
  }
826
- return Status::OK();
897
+ return IOStatus::OK();
827
898
  }
828
899
 
829
900
  // Store the size of fname in *file_size.
830
- virtual Status GetFileSize(const std::string& fname,
831
- uint64_t* file_size) override {
832
- auto status = EnvWrapper::GetFileSize(fname, file_size);
833
- if (!status.ok()) {
901
+ IOStatus GetFileSize(const std::string& fname, const IOOptions& options,
902
+ uint64_t* file_size, IODebugContext* dbg) override {
903
+ auto status =
904
+ FileSystemWrapper::GetFileSize(fname, options, file_size, dbg);
905
+ if (!status.ok() || !(*file_size)) {
834
906
  return status;
835
907
  }
836
908
  EncryptionProvider* provider;
@@ -846,12 +918,37 @@ class EncryptedEnvImpl : public EnvWrapper {
846
918
  private:
847
919
  std::shared_ptr<EncryptionProvider> provider_;
848
920
  };
921
+ } // namespace
849
922
 
923
+ Status NewEncryptedFileSystemImpl(
924
+ const std::shared_ptr<FileSystem>& base,
925
+ const std::shared_ptr<EncryptionProvider>& provider,
926
+ std::unique_ptr<FileSystem>* result) {
927
+ result->reset(new EncryptedFileSystemImpl(base, provider));
928
+ return Status::OK();
929
+ }
930
+
931
+ std::shared_ptr<FileSystem> NewEncryptedFS(
932
+ const std::shared_ptr<FileSystem>& base,
933
+ const std::shared_ptr<EncryptionProvider>& provider) {
934
+ std::unique_ptr<FileSystem> efs;
935
+ Status s = NewEncryptedFileSystemImpl(base, provider, &efs);
936
+ if (s.ok()) {
937
+ s = efs->PrepareOptions(ConfigOptions());
938
+ }
939
+ if (s.ok()) {
940
+ std::shared_ptr<FileSystem> result(efs.release());
941
+ return result;
942
+ } else {
943
+ return nullptr;
944
+ }
945
+ }
850
946
  // Returns an Env that encrypts data when stored on disk and decrypts data when
851
947
  // read from disk.
852
948
  Env* NewEncryptedEnv(Env* base_env,
853
949
  const std::shared_ptr<EncryptionProvider>& provider) {
854
- return new EncryptedEnvImpl(base_env, provider);
950
+ return new CompositeEnvWrapper(
951
+ base_env, NewEncryptedFS(base_env->GetFileSystem(), provider));
855
952
  }
856
953
 
857
954
  // Encrypt one or more (partial) blocks of data at the file offset.
@@ -952,20 +1049,53 @@ Status BlockAccessCipherStream::Decrypt(uint64_t fileOffset, char *data, size_t
952
1049
  }
953
1050
  }
954
1051
 
955
- const char* ROT13BlockCipher::Name() const { return kROT13CipherName; }
1052
+ namespace {
1053
+ static std::unordered_map<std::string, OptionTypeInfo>
1054
+ rot13_block_cipher_type_info = {
1055
+ {"block_size",
1056
+ {0 /* No offset, whole struct*/, OptionType::kInt,
1057
+ OptionVerificationType::kNormal, OptionTypeFlags::kNone}},
1058
+ };
1059
+ // Implements a BlockCipher using ROT13.
1060
+ //
1061
+ // Note: This is a sample implementation of BlockCipher,
1062
+ // it is NOT considered safe and should NOT be used in production.
1063
+ class ROT13BlockCipher : public BlockCipher {
1064
+ private:
1065
+ size_t blockSize_;
956
1066
 
957
- // Encrypt a block of data.
958
- // Length of data is equal to BlockSize().
959
- Status ROT13BlockCipher::Encrypt(char* data) {
960
- for (size_t i = 0; i < blockSize_; ++i) {
961
- data[i] += 13;
1067
+ public:
1068
+ explicit ROT13BlockCipher(size_t blockSize) : blockSize_(blockSize) {
1069
+ RegisterOptions("ROT13BlockCipherOptions", &blockSize_,
1070
+ &rot13_block_cipher_type_info);
1071
+ }
1072
+
1073
+ static const char* kClassName() { return "ROT13"; }
1074
+ const char* Name() const override { return kClassName(); }
1075
+ // BlockSize returns the size of each block supported by this cipher stream.
1076
+ size_t BlockSize() override { return blockSize_; }
1077
+
1078
+ // Encrypt a block of data.
1079
+ // Length of data is equal to BlockSize().
1080
+ Status Encrypt(char* data) override {
1081
+ for (size_t i = 0; i < blockSize_; ++i) {
1082
+ data[i] += 13;
1083
+ }
1084
+ return Status::OK();
962
1085
  }
963
- return Status::OK();
964
- }
965
1086
 
966
- // Decrypt a block of data.
967
- // Length of data is equal to BlockSize().
968
- Status ROT13BlockCipher::Decrypt(char* data) { return Encrypt(data); }
1087
+ // Decrypt a block of data.
1088
+ // Length of data is equal to BlockSize().
1089
+ Status Decrypt(char* data) override { return Encrypt(data); }
1090
+ };
1091
+ static const std::unordered_map<std::string, OptionTypeInfo>
1092
+ ctr_encryption_provider_type_info = {
1093
+ {"cipher",
1094
+ OptionTypeInfo::AsCustomSharedPtr<BlockCipher>(
1095
+ 0 /* No offset, whole struct*/, OptionVerificationType::kByName,
1096
+ OptionTypeFlags::kNone)},
1097
+ };
1098
+ } // anonymous namespace
969
1099
 
970
1100
  // Allocate scratch space which is passed to EncryptBlock/DecryptBlock.
971
1101
  void CTRCipherStream::AllocateScratch(std::string& scratch) {
@@ -1003,7 +1133,11 @@ Status CTRCipherStream::DecryptBlock(uint64_t blockIndex, char* data,
1003
1133
  return EncryptBlock(blockIndex, data, scratch);
1004
1134
  }
1005
1135
 
1006
- const char* CTREncryptionProvider::Name() const { return kCTRProviderName; }
1136
+ CTREncryptionProvider::CTREncryptionProvider(
1137
+ const std::shared_ptr<BlockCipher>& c)
1138
+ : cipher_(c) {
1139
+ RegisterOptions("Cipher", &cipher_, &ctr_encryption_provider_type_info);
1140
+ }
1007
1141
 
1008
1142
  // GetPrefixLength returns the length of the prefix that is added to every file
1009
1143
  // and used for storing encryption options.
@@ -1013,20 +1147,12 @@ size_t CTREncryptionProvider::GetPrefixLength() const {
1013
1147
  return defaultPrefixLength;
1014
1148
  }
1015
1149
 
1016
- Status CTREncryptionProvider::TEST_Initialize() {
1017
- if (!cipher_) {
1018
- return BlockCipher::CreateFromString(
1019
- ConfigOptions(), std::string(kROT13CipherName) + ":32", &cipher_);
1020
- }
1021
- return Status::OK();
1022
- }
1023
-
1024
1150
  Status CTREncryptionProvider::AddCipher(const std::string& /*descriptor*/,
1025
1151
  const char* cipher, size_t len,
1026
1152
  bool /*for_write*/) {
1027
1153
  if (cipher_) {
1028
1154
  return Status::NotSupported("Cannot add keys to CTREncryptionProvider");
1029
- } else if (strcmp(kROT13CipherName, cipher) == 0) {
1155
+ } else if (strcmp(ROT13BlockCipher::kClassName(), cipher) == 0) {
1030
1156
  cipher_.reset(new ROT13BlockCipher(len));
1031
1157
  return Status::OK();
1032
1158
  } else {
@@ -1054,7 +1180,7 @@ Status CTREncryptionProvider::CreateNewPrefix(const std::string& /*fname*/,
1054
1180
  return Status::InvalidArgument("Encryption Cipher is missing");
1055
1181
  }
1056
1182
  // Create & seed rnd.
1057
- Random rnd((uint32_t)Env::Default()->NowMicros());
1183
+ Random rnd((uint32_t)SystemClock::Default()->NowMicros());
1058
1184
  // Fill entire prefix block with random values.
1059
1185
  for (size_t i = 0; i < prefixLength; i++) {
1060
1186
  prefix[i] = rnd.Uniform(256) & 0xFF;
@@ -1143,6 +1269,72 @@ Status CTREncryptionProvider::CreateCipherStreamFromPrefix(
1143
1269
  return Status::OK();
1144
1270
  }
1145
1271
 
1272
+ namespace {
1273
+ static void RegisterEncryptionBuiltins() {
1274
+ static std::once_flag once;
1275
+ std::call_once(once, [&]() {
1276
+ auto lib = ObjectRegistry::Default()->AddLibrary("encryption");
1277
+ // Match "CTR" or "CTR://test"
1278
+ lib->AddFactory<EncryptionProvider>(
1279
+ ObjectLibrary::PatternEntry(CTREncryptionProvider::kClassName(), true)
1280
+ .AddSuffix("://test"),
1281
+ [](const std::string& uri, std::unique_ptr<EncryptionProvider>* guard,
1282
+ std::string* /*errmsg*/) {
1283
+ if (EndsWith(uri, "://test")) {
1284
+ std::shared_ptr<BlockCipher> cipher =
1285
+ std::make_shared<ROT13BlockCipher>(32);
1286
+ guard->reset(new CTREncryptionProvider(cipher));
1287
+ } else {
1288
+ guard->reset(new CTREncryptionProvider());
1289
+ }
1290
+ return guard->get();
1291
+ });
1292
+
1293
+ lib->AddFactory<EncryptionProvider>(
1294
+ "1://test", [](const std::string& /*uri*/,
1295
+ std::unique_ptr<EncryptionProvider>* guard,
1296
+ std::string* /*errmsg*/) {
1297
+ std::shared_ptr<BlockCipher> cipher =
1298
+ std::make_shared<ROT13BlockCipher>(32);
1299
+ guard->reset(new CTREncryptionProvider(cipher));
1300
+ return guard->get();
1301
+ });
1302
+
1303
+ // Match "ROT13" or "ROT13:[0-9]+"
1304
+ lib->AddFactory<BlockCipher>(
1305
+ ObjectLibrary::PatternEntry(ROT13BlockCipher::kClassName(), true)
1306
+ .AddNumber(":"),
1307
+ [](const std::string& uri, std::unique_ptr<BlockCipher>* guard,
1308
+ std::string* /* errmsg */) {
1309
+ size_t colon = uri.find(':');
1310
+ if (colon != std::string::npos) {
1311
+ size_t block_size = ParseSizeT(uri.substr(colon + 1));
1312
+ guard->reset(new ROT13BlockCipher(block_size));
1313
+ } else {
1314
+ guard->reset(new ROT13BlockCipher(32));
1315
+ }
1316
+
1317
+ return guard->get();
1318
+ });
1319
+ });
1320
+ }
1321
+ } // namespace
1322
+
1323
+ Status BlockCipher::CreateFromString(const ConfigOptions& config_options,
1324
+ const std::string& value,
1325
+ std::shared_ptr<BlockCipher>* result) {
1326
+ RegisterEncryptionBuiltins();
1327
+ return LoadSharedObject<BlockCipher>(config_options, value, nullptr, result);
1328
+ }
1329
+
1330
+ Status EncryptionProvider::CreateFromString(
1331
+ const ConfigOptions& config_options, const std::string& value,
1332
+ std::shared_ptr<EncryptionProvider>* result) {
1333
+ RegisterEncryptionBuiltins();
1334
+ return LoadSharedObject<EncryptionProvider>(config_options, value, nullptr,
1335
+ result);
1336
+ }
1337
+
1146
1338
  #endif // ROCKSDB_LITE
1147
1339
 
1148
1340
  } // namespace ROCKSDB_NAMESPACE