@nxtedition/rocksdb 5.2.21 → 5.2.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (909) hide show
  1. package/binding.cc +216 -252
  2. package/binding.gyp +78 -72
  3. package/deps/rocksdb/build_version.cc +70 -4
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
  5. package/deps/rocksdb/rocksdb/Makefile +459 -469
  6. package/deps/rocksdb/rocksdb/README.md +4 -4
  7. package/deps/rocksdb/rocksdb/TARGETS +5244 -1500
  8. package/deps/rocksdb/rocksdb/cache/cache.cc +12 -3
  9. package/deps/rocksdb/rocksdb/cache/cache_bench.cc +7 -368
  10. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +924 -0
  11. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +128 -0
  12. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +103 -0
  13. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +183 -0
  14. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +11 -0
  15. package/deps/rocksdb/rocksdb/cache/cache_key.cc +344 -0
  16. package/deps/rocksdb/rocksdb/cache/cache_key.h +132 -0
  17. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +183 -0
  18. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +288 -0
  19. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +468 -0
  20. package/deps/rocksdb/rocksdb/cache/cache_test.cc +85 -8
  21. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +121 -51
  22. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +171 -0
  23. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +86 -0
  24. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +607 -0
  25. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +381 -154
  26. package/deps/rocksdb/rocksdb/cache/lru_cache.h +176 -33
  27. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1659 -3
  28. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +94 -23
  29. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +49 -28
  30. package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
  32. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
  33. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
  34. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
  35. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
  36. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
  40. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
  41. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
  42. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
  43. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
  44. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
  45. package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
  51. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
  52. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
  53. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
  54. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
  55. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
  56. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
  57. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
  58. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
  59. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
  60. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
  61. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
  62. package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
  63. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
  64. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
  65. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
  66. package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
  67. package/deps/rocksdb/rocksdb/db/builder.h +16 -37
  68. package/deps/rocksdb/rocksdb/db/c.cc +413 -208
  69. package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
  70. package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
  71. package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
  72. package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
  73. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
  74. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
  75. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
  76. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
  77. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
  78. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
  79. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
  80. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
  81. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
  82. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
  83. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
  84. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  85. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
  96. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
  97. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
  98. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  99. package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
  100. package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
  101. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
  102. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
  103. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
  104. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
  105. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
  106. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
  107. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
  108. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
  110. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
  111. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
  112. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
  113. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
  114. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
  115. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
  116. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
  117. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
  118. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
  119. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
  120. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
  121. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
  122. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
  124. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
  125. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
  126. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
  127. package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
  128. package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
  129. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
  130. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
  131. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
  132. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
  133. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
  134. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
  135. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
  136. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
  137. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
  138. package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
  139. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
  140. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
  141. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
  142. package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
  143. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
  144. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
  145. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
  146. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
  147. package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
  148. package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
  149. package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
  150. package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
  151. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
  152. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
  153. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
  154. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
  155. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
  156. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
  157. package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
  158. package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
  159. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
  160. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
  161. package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
  162. package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
  163. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
  164. package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
  165. package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
  166. package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
  167. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
  168. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
  169. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
  170. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
  171. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
  172. package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
  173. package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
  174. package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
  175. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
  176. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
  177. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
  178. package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
  179. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
  180. package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
  181. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
  182. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
  183. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
  184. package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
  185. package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
  186. package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
  187. package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
  188. package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
  189. package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
  190. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
  191. package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
  192. package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
  193. package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
  194. package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
  195. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
  196. package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
  197. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
  198. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
  199. package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
  200. package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
  201. package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
  202. package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
  203. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
  204. package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
  205. package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
  206. package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
  207. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
  208. package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
  209. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
  210. package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
  211. package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
  212. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
  213. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
  214. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
  215. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
  216. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
  217. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
  218. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
  219. package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
  220. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
  221. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
  222. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
  223. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
  224. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
  225. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
  226. package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
  227. package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
  228. package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
  229. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
  230. package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
  231. package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
  232. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
  233. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
  234. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
  235. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
  236. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
  237. package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
  238. package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
  239. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
  240. package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
  241. package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
  242. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
  243. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
  244. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
  245. package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
  246. package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
  247. package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
  248. package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
  249. package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
  250. package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
  251. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
  252. package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
  253. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
  254. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
  255. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
  256. package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
  257. package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
  258. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
  259. package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
  260. package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
  261. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
  262. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
  263. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
  264. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
  265. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
  266. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
  267. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
  268. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
  269. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
  270. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
  271. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
  272. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
  273. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
  274. package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
  280. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
  281. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
  283. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
  284. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
  285. package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
  286. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
  287. package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
  288. package/deps/rocksdb/rocksdb/env/env.cc +632 -42
  289. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
  290. package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
  291. package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
  292. package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
  293. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
  294. package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
  295. package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
  296. package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
  297. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
  298. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
  299. package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
  300. package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
  301. package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
  302. package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
  303. package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
  304. package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
  305. package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
  306. package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
  307. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
  308. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
  309. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
  310. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
  311. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
  312. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
  313. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
  314. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
  315. package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
  316. package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
  317. package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
  318. package/deps/rocksdb/rocksdb/file/filename.h +13 -8
  319. package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
  320. package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
  321. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
  322. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
  323. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
  324. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
  325. package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
  326. package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
  327. package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
  328. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
  329. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
  330. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
  331. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
  332. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
  333. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
  334. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
  335. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
  336. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
  337. package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
  338. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
  339. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
  340. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
  341. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
  342. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
  343. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
  344. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
  345. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
  346. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
  347. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
  348. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
  349. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
  350. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
  351. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
  352. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
  353. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
  354. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
  355. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
  356. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
  357. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
  358. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
  359. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
  360. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
  361. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
  362. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
  363. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
  364. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
  365. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
  366. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
  367. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
  368. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
  369. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
  370. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
  371. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
  372. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
  373. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
  374. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
  375. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
  376. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
  377. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
  378. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
  380. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
  381. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
  382. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
  383. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
  385. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
  386. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
  387. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
  388. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
  389. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
  390. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
  391. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
  392. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
  393. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
  396. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
  397. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
  398. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
  407. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
  408. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
  409. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
  410. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
  411. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
  412. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
  413. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
  414. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
  415. package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
  416. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
  417. package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
  418. package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
  419. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  420. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
  421. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
  422. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
  423. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
  424. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
  425. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
  426. package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
  427. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
  428. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
  429. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
  430. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
  431. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
  432. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  433. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
  434. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
  435. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
  436. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
  437. package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
  438. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  439. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
  440. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
  441. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
  442. package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
  443. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
  444. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
  445. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
  446. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
  447. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
  448. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
  449. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
  450. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
  451. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
  452. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
  453. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
  454. package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
  455. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
  456. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
  457. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
  458. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
  459. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
  460. package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
  461. package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
  462. package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
  463. package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
  464. package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
  465. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
  466. package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
  467. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
  468. package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
  469. package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
  470. package/deps/rocksdb/rocksdb/options/options.cc +49 -17
  471. package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
  472. package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
  473. package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
  474. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
  475. package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
  476. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  477. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
  478. package/deps/rocksdb/rocksdb/port/lang.h +52 -0
  479. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  480. package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
  481. package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
  482. package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
  483. package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
  484. package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
  485. package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
  486. package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
  487. package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
  488. package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
  489. package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
  490. package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
  491. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
  492. package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
  493. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
  494. package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
  495. package/deps/rocksdb/rocksdb/python.mk +9 -0
  496. package/deps/rocksdb/rocksdb/src.mk +82 -34
  497. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
  498. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
  499. package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
  500. package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
  501. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
  502. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
  503. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
  504. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
  505. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
  506. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
  507. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
  508. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
  509. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
  510. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
  511. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
  512. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
  513. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
  514. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
  515. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
  516. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
  517. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
  518. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
  519. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
  520. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
  521. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
  522. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
  523. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
  524. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
  525. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
  526. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
  527. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
  528. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
  529. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
  530. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
  531. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
  532. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  533. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  534. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  535. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
  536. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
  537. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
  538. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
  539. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
  540. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
  541. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
  542. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
  543. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
  544. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
  545. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
  546. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
  547. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
  548. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
  549. package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
  550. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
  551. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
  552. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
  553. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
  554. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
  555. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
  556. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
  557. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
  558. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
  559. package/deps/rocksdb/rocksdb/table/format.cc +258 -104
  560. package/deps/rocksdb/rocksdb/table/format.h +120 -109
  561. package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
  562. package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
  563. package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
  564. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  565. package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
  566. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
  567. package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
  568. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
  569. package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
  570. package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
  571. package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
  572. package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
  573. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
  574. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
  575. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
  576. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
  577. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
  578. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
  579. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
  580. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
  581. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
  582. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
  583. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
  584. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
  585. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
  586. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
  587. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
  588. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
  589. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
  590. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
  591. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
  592. package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
  593. package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
  594. package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
  595. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
  596. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
  597. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
  598. package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
  599. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
  600. package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
  601. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
  602. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
  603. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
  604. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
  605. package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
  606. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
  607. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
  608. package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
  609. package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
  610. package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
  611. package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
  612. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
  613. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
  614. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
  615. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  616. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
  617. package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
  618. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
  619. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
  620. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
  621. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
  622. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
  623. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
  624. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
  625. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
  626. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
  627. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  628. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
  629. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
  630. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
  631. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
  632. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
  633. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
  634. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
  635. package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
  636. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
  637. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
  638. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
  639. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
  640. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
  641. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
  642. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
  643. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
  644. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
  645. package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
  646. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
  647. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
  648. package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
  649. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
  650. package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
  651. package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
  652. package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
  653. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  654. package/deps/rocksdb/rocksdb/util/channel.h +2 -0
  655. package/deps/rocksdb/rocksdb/util/coding.h +1 -33
  656. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
  657. package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
  658. package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
  659. package/deps/rocksdb/rocksdb/util/compression.h +212 -7
  660. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
  661. package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
  662. package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
  663. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
  664. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
  665. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
  666. package/deps/rocksdb/rocksdb/util/defer.h +30 -1
  667. package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
  668. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
  669. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
  670. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
  671. package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
  672. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
  673. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
  674. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
  675. package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
  676. package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
  677. package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
  678. package/deps/rocksdb/rocksdb/util/hash.h +31 -1
  679. package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
  680. package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
  681. package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
  682. package/deps/rocksdb/rocksdb/util/heap.h +6 -1
  683. package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
  684. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
  685. package/deps/rocksdb/rocksdb/util/math.h +74 -7
  686. package/deps/rocksdb/rocksdb/util/math128.h +13 -1
  687. package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
  688. package/deps/rocksdb/rocksdb/util/random.cc +9 -0
  689. package/deps/rocksdb/rocksdb/util/random.h +6 -0
  690. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
  691. package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
  692. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
  693. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
  694. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
  695. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
  696. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
  697. package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
  698. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
  699. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
  700. package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
  701. package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
  702. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
  703. package/deps/rocksdb/rocksdb/util/status.cc +32 -29
  704. package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
  705. package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
  706. package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
  707. package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
  708. package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
  709. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
  710. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
  711. package/deps/rocksdb/rocksdb/util/timer.h +55 -46
  712. package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
  713. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
  714. package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
  715. package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
  716. package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
  717. package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
  718. package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
  719. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
  720. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
  721. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
  722. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
  723. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
  724. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
  725. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
  726. package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
  727. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
  728. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
  729. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
  730. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
  731. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
  732. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
  733. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
  734. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
  735. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
  736. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
  737. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
  738. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
  739. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
  740. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
  741. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
  742. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
  743. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
  744. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
  745. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
  746. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
  747. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
  748. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
  749. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
  750. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
  751. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
  752. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
  753. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
  754. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
  755. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
  756. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
  757. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
  758. package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
  759. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
  760. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
  761. package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
  762. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
  763. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
  764. package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
  765. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
  766. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
  767. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
  768. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
  769. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
  770. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
  771. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
  772. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
  773. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
  774. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
  775. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
  776. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
  777. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
  778. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
  779. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
  780. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
  781. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
  782. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
  783. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
  784. package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
  785. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
  786. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
  787. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
  788. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
  789. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
  790. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
  791. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
  792. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
  793. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
  794. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
  795. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
  796. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
  797. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
  798. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
  799. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  800. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
  801. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
  802. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
  803. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
  804. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
  805. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
  806. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
  807. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
  808. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
  809. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
  810. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
  811. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
  812. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
  813. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  814. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
  815. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
  816. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
  817. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
  818. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
  819. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
  820. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
  821. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
  822. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
  823. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
  824. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
  825. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
  826. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
  827. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
  828. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
  829. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
  830. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
  831. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
  832. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
  833. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
  834. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
  835. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
  836. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
  837. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
  838. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
  839. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
  840. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
  841. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
  842. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
  843. package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
  844. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
  845. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
  846. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
  847. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
  848. package/deps/rocksdb/rocksdb.gyp +425 -446
  849. package/package.json +8 -8
  850. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  851. package/prebuilds/darwin-x86/node.napi.node +0 -0
  852. package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
  853. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
  854. package/deps/rocksdb/rocksdb/hdfs/README +0 -23
  855. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
  856. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
  857. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
  858. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
  859. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
  860. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
  861. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
  862. package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
  863. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
  864. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
  865. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
  866. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
  867. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
  868. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
  869. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
  870. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
  871. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
  872. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
  873. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
  874. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
  875. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
  876. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
  877. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
  878. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
  879. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
  880. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
  881. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
  882. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
  883. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
  884. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
  885. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
  886. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
  887. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
  888. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
  889. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
  890. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
  891. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
  892. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
  893. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
  894. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
  895. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
  896. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
  897. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
  898. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
  899. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
  900. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
  901. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
  902. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
  903. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
  904. package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
  905. package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
  906. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
  907. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
  908. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
  909. package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
@@ -1,1497 +0,0 @@
1
- // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2
- // vim: ts=8 sw=2 smarttab
3
- // Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
4
- #include "rocksdb/utilities/env_librados.h"
5
- #include "util/random.h"
6
- #include <mutex>
7
- #include <cstdlib>
8
-
9
- namespace ROCKSDB_NAMESPACE {
10
- /* GLOBAL DIFINE */
11
- // #define DEBUG
12
- #ifdef DEBUG
13
- #include <cstdio>
14
- #include <sys/syscall.h>
15
- #include <unistd.h>
16
- #define LOG_DEBUG(...) do{\
17
- printf("[%ld:%s:%i:%s]", syscall(SYS_gettid), __FILE__, __LINE__, __FUNCTION__);\
18
- printf(__VA_ARGS__);\
19
- }while(0)
20
- #else
21
- #define LOG_DEBUG(...)
22
- #endif
23
-
24
- /* GLOBAL CONSTANT */
25
- const char *default_db_name = "default_envlibrados_db";
26
- const char *default_pool_name = "default_envlibrados_pool";
27
- const char *default_config_path = "CEPH_CONFIG_PATH"; // the env variable name of ceph configure file
28
- // maximum dir/file that can store in the fs
29
- const int MAX_ITEMS_IN_FS = 1 << 30;
30
- // root dir tag
31
- const std::string ROOT_DIR_KEY = "/";
32
- const std::string DIR_ID_VALUE = "<DIR>";
33
-
34
- /**
35
- * @brief convert error code to status
36
- * @details Convert internal linux error code to Status
37
- *
38
- * @param r [description]
39
- * @return [description]
40
- */
41
- Status err_to_status(int r)
42
- {
43
- switch (r) {
44
- case 0:
45
- return Status::OK();
46
- case -ENOENT:
47
- return Status::IOError();
48
- case -ENODATA:
49
- case -ENOTDIR:
50
- return Status::NotFound(Status::kNone);
51
- case -EINVAL:
52
- return Status::InvalidArgument(Status::kNone);
53
- case -EIO:
54
- return Status::IOError(Status::kNone);
55
- default:
56
- // FIXME :(
57
- assert(0 == "unrecognized error code");
58
- return Status::NotSupported(Status::kNone);
59
- }
60
- }
61
-
62
- /**
63
- * @brief split file path into dir path and file name
64
- * @details
65
- * Because rocksdb only need a 2-level structure (dir/file), all input path will be shortened to dir/file format
66
- * For example:
67
- * b/c => dir '/b', file 'c'
68
- * /a/b/c => dir '/b', file 'c'
69
- *
70
- * @param fn [description]
71
- * @param dir [description]
72
- * @param file [description]
73
- */
74
- void split(const std::string &fn, std::string *dir, std::string *file) {
75
- LOG_DEBUG("[IN]%s\n", fn.c_str());
76
- int pos = fn.size() - 1;
77
- while ('/' == fn[pos]) --pos;
78
- size_t fstart = fn.rfind('/', pos);
79
- *file = fn.substr(fstart + 1, pos - fstart);
80
-
81
- pos = fstart;
82
- while (pos >= 0 && '/' == fn[pos]) --pos;
83
-
84
- if (pos < 0) {
85
- *dir = "/";
86
- } else {
87
- size_t dstart = fn.rfind('/', pos);
88
- *dir = fn.substr(dstart + 1, pos - dstart);
89
- *dir = std::string("/") + *dir;
90
- }
91
-
92
- LOG_DEBUG("[OUT]%s | %s\n", dir->c_str(), file->c_str());
93
- }
94
-
95
- // A file abstraction for reading sequentially through a file
96
- class LibradosSequentialFile : public SequentialFile {
97
- librados::IoCtx * _io_ctx;
98
- std::string _fid;
99
- std::string _hint;
100
- int _offset;
101
- public:
102
- LibradosSequentialFile(librados::IoCtx * io_ctx, std::string fid, std::string hint):
103
- _io_ctx(io_ctx), _fid(fid), _hint(hint), _offset(0) {}
104
-
105
- ~LibradosSequentialFile() {}
106
-
107
- /**
108
- * @brief read file
109
- * @details
110
- * Read up to "n" bytes from the file. "scratch[0..n-1]" may be
111
- * written by this routine. Sets "*result" to the data that was
112
- * read (including if fewer than "n" bytes were successfully read).
113
- * May set "*result" to point at data in "scratch[0..n-1]", so
114
- * "scratch[0..n-1]" must be live when "*result" is used.
115
- * If an error was encountered, returns a non-OK status.
116
- *
117
- * REQUIRES: External synchronization
118
- *
119
- * @param n [description]
120
- * @param result [description]
121
- * @param scratch [description]
122
- * @return [description]
123
- */
124
- Status Read(size_t n, Slice* result, char* scratch) {
125
- LOG_DEBUG("[IN]%i\n", (int)n);
126
- librados::bufferlist buffer;
127
- Status s;
128
- int r = _io_ctx->read(_fid, buffer, n, _offset);
129
- if (r >= 0) {
130
- buffer.begin().copy(r, scratch);
131
- *result = Slice(scratch, r);
132
- _offset += r;
133
- s = Status::OK();
134
- } else {
135
- s = err_to_status(r);
136
- if (s == Status::IOError()) {
137
- *result = Slice();
138
- s = Status::OK();
139
- }
140
- }
141
- LOG_DEBUG("[OUT]%s, %i, %s\n", s.ToString().c_str(), (int)r, buffer.c_str());
142
- return s;
143
- }
144
-
145
- /**
146
- * @brief skip "n" bytes from the file
147
- * @details
148
- * Skip "n" bytes from the file. This is guaranteed to be no
149
- * slower that reading the same data, but may be faster.
150
- *
151
- * If end of file is reached, skipping will stop at the end of the
152
- * file, and Skip will return OK.
153
- *
154
- * REQUIRES: External synchronization
155
- *
156
- * @param n [description]
157
- * @return [description]
158
- */
159
- Status Skip(uint64_t n) {
160
- _offset += n;
161
- return Status::OK();
162
- }
163
-
164
- /**
165
- * @brief noop
166
- * @details
167
- * rocksdb has it's own caching capabilities that we should be able to use,
168
- * without relying on a cache here. This can safely be a no-op.
169
- *
170
- * @param offset [description]
171
- * @param length [description]
172
- *
173
- * @return [description]
174
- */
175
- Status InvalidateCache(size_t offset, size_t length) {
176
- return Status::OK();
177
- }
178
- };
179
-
180
- // A file abstraction for randomly reading the contents of a file.
181
- class LibradosRandomAccessFile : public RandomAccessFile {
182
- librados::IoCtx * _io_ctx;
183
- std::string _fid;
184
- std::string _hint;
185
- public:
186
- LibradosRandomAccessFile(librados::IoCtx * io_ctx, std::string fid, std::string hint):
187
- _io_ctx(io_ctx), _fid(fid), _hint(hint) {}
188
-
189
- ~LibradosRandomAccessFile() {}
190
-
191
- /**
192
- * @brief read file
193
- * @details similar to LibradosSequentialFile::Read
194
- *
195
- * @param offset [description]
196
- * @param n [description]
197
- * @param result [description]
198
- * @param scratch [description]
199
- * @return [description]
200
- */
201
- Status Read(uint64_t offset, size_t n, Slice* result,
202
- char* scratch) const {
203
- LOG_DEBUG("[IN]%i\n", (int)n);
204
- librados::bufferlist buffer;
205
- Status s;
206
- int r = _io_ctx->read(_fid, buffer, n, offset);
207
- if (r >= 0) {
208
- buffer.begin().copy(r, scratch);
209
- *result = Slice(scratch, r);
210
- s = Status::OK();
211
- } else {
212
- s = err_to_status(r);
213
- if (s == Status::IOError()) {
214
- *result = Slice();
215
- s = Status::OK();
216
- }
217
- }
218
- LOG_DEBUG("[OUT]%s, %i, %s\n", s.ToString().c_str(), (int)r, buffer.c_str());
219
- return s;
220
- }
221
-
222
- /**
223
- * @brief [brief description]
224
- * @details Get unique id for each file and guarantee this id is different for each file
225
- *
226
- * @param id [description]
227
- * @param max_size max size of id, it shoud be larger than 16
228
- *
229
- * @return [description]
230
- */
231
- size_t GetUniqueId(char* id, size_t max_size) const {
232
- // All fid has the same db_id prefix, so we need to ignore db_id prefix
233
- size_t s = std::min(max_size, _fid.size());
234
- strncpy(id, _fid.c_str() + (_fid.size() - s), s);
235
- id[s - 1] = '\0';
236
- return s;
237
- };
238
-
239
- //enum AccessPattern { NORMAL, RANDOM, SEQUENTIAL, WILLNEED, DONTNEED };
240
- void Hint(AccessPattern pattern) {
241
- /* Do nothing */
242
- }
243
-
244
- /**
245
- * @brief noop
246
- * @details [long description]
247
- *
248
- * @param offset [description]
249
- * @param length [description]
250
- *
251
- * @return [description]
252
- */
253
- Status InvalidateCache(size_t offset, size_t length) {
254
- return Status::OK();
255
- }
256
- };
257
-
258
-
259
- // A file abstraction for sequential writing. The implementation
260
- // must provide buffering since callers may append small fragments
261
- // at a time to the file.
262
- class LibradosWritableFile : public WritableFile {
263
- librados::IoCtx * _io_ctx;
264
- std::string _fid;
265
- std::string _hint;
266
- const EnvLibrados * const _env;
267
-
268
- std::mutex _mutex; // used to protect modification of all following variables
269
- librados::bufferlist _buffer; // write buffer
270
- uint64_t _buffer_size; // write buffer size
271
- uint64_t _file_size; // this file size doesn't include buffer size
272
-
273
- /**
274
- * @brief assuming caller holds lock
275
- * @details [long description]
276
- * @return [description]
277
- */
278
- int _SyncLocked() {
279
- // 1. sync append data to RADOS
280
- int r = _io_ctx->append(_fid, _buffer, _buffer_size);
281
- assert(r >= 0);
282
-
283
- // 2. update local variables
284
- if (0 == r) {
285
- _buffer.clear();
286
- _file_size += _buffer_size;
287
- _buffer_size = 0;
288
- }
289
-
290
- return r;
291
- }
292
-
293
- public:
294
- LibradosWritableFile(librados::IoCtx* io_ctx, std::string fid,
295
- std::string hint, const EnvLibrados* const env,
296
- const EnvOptions& options)
297
- : WritableFile(options),
298
- _io_ctx(io_ctx),
299
- _fid(fid),
300
- _hint(hint),
301
- _env(env),
302
- _buffer(),
303
- _buffer_size(0),
304
- _file_size(0) {
305
- int ret = _io_ctx->stat(_fid, &_file_size, nullptr);
306
-
307
- // if file not exist
308
- if (ret < 0) {
309
- _file_size = 0;
310
- }
311
- }
312
-
313
- ~LibradosWritableFile() {
314
- // sync before closeing writable file
315
- Sync();
316
- }
317
-
318
- /**
319
- * @brief append data to file
320
- * @details
321
- * Append will save all written data in buffer util buffer size
322
- * reaches buffer max size. Then, it will write buffer into rados
323
- *
324
- * @param data [description]
325
- * @return [description]
326
- */
327
- Status Append(const Slice& data) {
328
- // append buffer
329
- LOG_DEBUG("[IN] %i | %s\n", (int)data.size(), data.data());
330
- int r = 0;
331
-
332
- std::lock_guard<std::mutex> lock(_mutex);
333
- _buffer.append(data.data(), data.size());
334
- _buffer_size += data.size();
335
-
336
- if (_buffer_size > _env->_write_buffer_size) {
337
- r = _SyncLocked();
338
- }
339
-
340
- LOG_DEBUG("[OUT] %i\n", r);
341
- return err_to_status(r);
342
- }
343
-
344
- /**
345
- * @brief not supported
346
- * @details [long description]
347
- * @return [description]
348
- */
349
- Status PositionedAppend(
350
- const Slice& /* data */,
351
- uint64_t /* offset */) {
352
- return Status::NotSupported();
353
- }
354
-
355
- /**
356
- * @brief truncate file to assigned size
357
- * @details [long description]
358
- *
359
- * @param size [description]
360
- * @return [description]
361
- */
362
- Status Truncate(uint64_t size) {
363
- LOG_DEBUG("[IN]%lld|%lld|%lld\n", (long long)size, (long long)_file_size, (long long)_buffer_size);
364
- int r = 0;
365
-
366
- std::lock_guard<std::mutex> lock(_mutex);
367
- if (_file_size > size) {
368
- r = _io_ctx->trunc(_fid, size);
369
-
370
- if (r == 0) {
371
- _buffer.clear();
372
- _buffer_size = 0;
373
- _file_size = size;
374
- }
375
- } else if (_file_size == size) {
376
- _buffer.clear();
377
- _buffer_size = 0;
378
- } else {
379
- librados::bufferlist tmp;
380
- tmp.claim(_buffer);
381
- _buffer.substr_of(tmp, 0, size - _file_size);
382
- _buffer_size = size - _file_size;
383
- }
384
-
385
- LOG_DEBUG("[OUT] %i\n", r);
386
- return err_to_status(r);
387
- }
388
-
389
- /**
390
- * @brief close file
391
- * @details [long description]
392
- * @return [description]
393
- */
394
- Status Close() {
395
- LOG_DEBUG("%s | %lld | %lld\n", _hint.c_str(), (long long)_buffer_size, (long long)_file_size);
396
- return Sync();
397
- }
398
-
399
- /**
400
- * @brief flush file,
401
- * @details initiate an aio write and not wait
402
- *
403
- * @return [description]
404
- */
405
- Status Flush() {
406
- librados::AioCompletion *write_completion = librados::Rados::aio_create_completion();
407
- int r = 0;
408
-
409
- std::lock_guard<std::mutex> lock(_mutex);
410
- r = _io_ctx->aio_append(_fid, write_completion, _buffer, _buffer_size);
411
-
412
- if (0 == r) {
413
- _file_size += _buffer_size;
414
- _buffer.clear();
415
- _buffer_size = 0;
416
- }
417
-
418
- write_completion->release();
419
-
420
- return err_to_status(r);
421
- }
422
-
423
- /**
424
- * @brief write buffer data to rados
425
- * @details initiate an aio write and wait for result
426
- * @return [description]
427
- */
428
- Status Sync() { // sync data
429
- int r = 0;
430
-
431
- std::lock_guard<std::mutex> lock(_mutex);
432
- if (_buffer_size > 0) {
433
- r = _SyncLocked();
434
- }
435
-
436
- return err_to_status(r);
437
- }
438
-
439
- /**
440
- * @brief [brief description]
441
- * @details [long description]
442
- * @return true if Sync() and Fsync() are safe to call concurrently with Append()and Flush().
443
- */
444
- bool IsSyncThreadSafe() const {
445
- return true;
446
- }
447
-
448
- /**
449
- * @brief Indicates the upper layers if the current WritableFile implementation uses direct IO.
450
- * @details [long description]
451
- * @return [description]
452
- */
453
- bool use_direct_io() const {
454
- return false;
455
- }
456
-
457
- /**
458
- * @brief Get file size
459
- * @details
460
- * This API will use cached file_size.
461
- * @return [description]
462
- */
463
- uint64_t GetFileSize() {
464
- LOG_DEBUG("%lld|%lld\n", (long long)_buffer_size, (long long)_file_size);
465
-
466
- std::lock_guard<std::mutex> lock(_mutex);
467
- int file_size = _file_size + _buffer_size;
468
-
469
- return file_size;
470
- }
471
-
472
- /**
473
- * @brief For documentation, refer to RandomAccessFile::GetUniqueId()
474
- * @details [long description]
475
- *
476
- * @param id [description]
477
- * @param max_size [description]
478
- *
479
- * @return [description]
480
- */
481
- size_t GetUniqueId(char* id, size_t max_size) const {
482
- // All fid has the same db_id prefix, so we need to ignore db_id prefix
483
- size_t s = std::min(max_size, _fid.size());
484
- strncpy(id, _fid.c_str() + (_fid.size() - s), s);
485
- id[s - 1] = '\0';
486
- return s;
487
- }
488
-
489
- /**
490
- * @brief noop
491
- * @details [long description]
492
- *
493
- * @param offset [description]
494
- * @param length [description]
495
- *
496
- * @return [description]
497
- */
498
- Status InvalidateCache(size_t offset, size_t length) {
499
- return Status::OK();
500
- }
501
-
502
- using WritableFile::RangeSync;
503
- /**
504
- * @brief No RangeSync support, just call Sync()
505
- * @details [long description]
506
- *
507
- * @param offset [description]
508
- * @param nbytes [description]
509
- *
510
- * @return [description]
511
- */
512
- Status RangeSync(off_t offset, off_t nbytes) {
513
- return Sync();
514
- }
515
-
516
- protected:
517
- using WritableFile::Allocate;
518
- /**
519
- * @brief noop
520
- * @details [long description]
521
- *
522
- * @param offset [description]
523
- * @param len [description]
524
- *
525
- * @return [description]
526
- */
527
- Status Allocate(off_t offset, off_t len) {
528
- return Status::OK();
529
- }
530
- };
531
-
532
-
533
- // Directory object represents collection of files and implements
534
- // filesystem operations that can be executed on directories.
535
- class LibradosDirectory : public Directory {
536
- librados::IoCtx * _io_ctx;
537
- std::string _fid;
538
- public:
539
- explicit LibradosDirectory(librados::IoCtx * io_ctx, std::string fid):
540
- _io_ctx(io_ctx), _fid(fid) {}
541
-
542
- // Fsync directory. Can be called concurrently from multiple threads.
543
- Status Fsync() {
544
- return Status::OK();
545
- }
546
- };
547
-
548
- // Identifies a locked file.
549
- // This is exclusive lock and can't nested lock by same thread
550
- class LibradosFileLock : public FileLock {
551
- librados::IoCtx * _io_ctx;
552
- const std::string _obj_name;
553
- const std::string _lock_name;
554
- const std::string _cookie;
555
- int lock_state;
556
- public:
557
- LibradosFileLock(
558
- librados::IoCtx * io_ctx,
559
- const std::string obj_name):
560
- _io_ctx(io_ctx),
561
- _obj_name(obj_name),
562
- _lock_name("lock_name"),
563
- _cookie("cookie") {
564
-
565
- // TODO: the lock will never expire. It may cause problem if the process crash or abnormally exit.
566
- while (!_io_ctx->lock_exclusive(
567
- _obj_name,
568
- _lock_name,
569
- _cookie,
570
- "description", nullptr, 0));
571
- }
572
-
573
- ~LibradosFileLock() {
574
- _io_ctx->unlock(_obj_name, _lock_name, _cookie);
575
- }
576
- };
577
-
578
-
579
- // --------------------
580
- // --- EnvLibrados ----
581
- // --------------------
582
- /**
583
- * @brief EnvLibrados ctor
584
- * @details [long description]
585
- *
586
- * @param db_name unique database name
587
- * @param config_path the configure file path for rados
588
- */
589
- EnvLibrados::EnvLibrados(const std::string& db_name,
590
- const std::string& config_path,
591
- const std::string& db_pool)
592
- : EnvLibrados("client.admin",
593
- "ceph",
594
- 0,
595
- db_name,
596
- config_path,
597
- db_pool,
598
- "/wal",
599
- db_pool,
600
- 1 << 20) {}
601
-
602
- /**
603
- * @brief EnvLibrados ctor
604
- * @details [long description]
605
- *
606
- * @param client_name first 3 parameters is for RADOS client init
607
- * @param cluster_name
608
- * @param flags
609
- * @param db_name unique database name, used as db_id key
610
- * @param config_path the configure file path for rados
611
- * @param db_pool the pool for db data
612
- * @param wal_pool the pool for WAL data
613
- * @param write_buffer_size WritableFile buffer max size
614
- */
615
- EnvLibrados::EnvLibrados(const std::string& client_name,
616
- const std::string& cluster_name,
617
- const uint64_t flags,
618
- const std::string& db_name,
619
- const std::string& config_path,
620
- const std::string& db_pool,
621
- const std::string& wal_dir,
622
- const std::string& wal_pool,
623
- const uint64_t write_buffer_size)
624
- : EnvWrapper(Env::Default()),
625
- _client_name(client_name),
626
- _cluster_name(cluster_name),
627
- _flags(flags),
628
- _db_name(db_name),
629
- _config_path(config_path),
630
- _db_pool_name(db_pool),
631
- _wal_dir(wal_dir),
632
- _wal_pool_name(wal_pool),
633
- _write_buffer_size(write_buffer_size) {
634
- int ret = 0;
635
-
636
- // 1. create a Rados object and initialize it
637
- ret = _rados.init2(_client_name.c_str(), _cluster_name.c_str(), _flags); // just use the client.admin keyring
638
- if (ret < 0) { // let's handle any error that might have come back
639
- std::cerr << "couldn't initialize rados! error " << ret << std::endl;
640
- ret = EXIT_FAILURE;
641
- goto out;
642
- }
643
-
644
- // 2. read configure file
645
- ret = _rados.conf_read_file(_config_path.c_str());
646
- if (ret < 0) {
647
- // This could fail if the config file is malformed, but it'd be hard.
648
- std::cerr << "failed to parse config file " << _config_path
649
- << "! error" << ret << std::endl;
650
- ret = EXIT_FAILURE;
651
- goto out;
652
- }
653
-
654
- // 3. we actually connect to the cluster
655
- ret = _rados.connect();
656
- if (ret < 0) {
657
- std::cerr << "couldn't connect to cluster! error " << ret << std::endl;
658
- ret = EXIT_FAILURE;
659
- goto out;
660
- }
661
-
662
- // 4. create db_pool if not exist
663
- ret = _rados.pool_create(_db_pool_name.c_str());
664
- if (ret < 0 && ret != -EEXIST && ret != -EPERM) {
665
- std::cerr << "couldn't create pool! error " << ret << std::endl;
666
- goto out;
667
- }
668
-
669
- // 5. create db_pool_ioctx
670
- ret = _rados.ioctx_create(_db_pool_name.c_str(), _db_pool_ioctx);
671
- if (ret < 0) {
672
- std::cerr << "couldn't set up ioctx! error " << ret << std::endl;
673
- ret = EXIT_FAILURE;
674
- goto out;
675
- }
676
-
677
- // 6. create wal_pool if not exist
678
- ret = _rados.pool_create(_wal_pool_name.c_str());
679
- if (ret < 0 && ret != -EEXIST && ret != -EPERM) {
680
- std::cerr << "couldn't create pool! error " << ret << std::endl;
681
- goto out;
682
- }
683
-
684
- // 7. create wal_pool_ioctx
685
- ret = _rados.ioctx_create(_wal_pool_name.c_str(), _wal_pool_ioctx);
686
- if (ret < 0) {
687
- std::cerr << "couldn't set up ioctx! error " << ret << std::endl;
688
- ret = EXIT_FAILURE;
689
- goto out;
690
- }
691
-
692
- // 8. add root dir
693
- _AddFid(ROOT_DIR_KEY, DIR_ID_VALUE);
694
-
695
- out:
696
- LOG_DEBUG("rados connect result code : %i\n", ret);
697
- }
698
-
699
- /****************************************************
700
- private functions to handle fid operation.
701
- Dir also have fid, but the value is DIR_ID_VALUE
702
- ****************************************************/
703
-
704
- /**
705
- * @brief generate a new fid
706
- * @details [long description]
707
- * @return [description]
708
- */
709
- std::string EnvLibrados::_CreateFid() {
710
- return _db_name + "." + GenerateUniqueId();
711
- }
712
-
713
- /**
714
- * @brief get fid
715
- * @details [long description]
716
- *
717
- * @param fname [description]
718
- * @param fid [description]
719
- *
720
- * @return
721
- * Status::OK()
722
- * Status::NotFound()
723
- */
724
- Status EnvLibrados::_GetFid(
725
- const std::string &fname,
726
- std::string& fid) {
727
- std::set<std::string> keys;
728
- std::map<std::string, librados::bufferlist> kvs;
729
- keys.insert(fname);
730
- int r = _db_pool_ioctx.omap_get_vals_by_keys(_db_name, keys, &kvs);
731
-
732
- if (0 == r && 0 == kvs.size()) {
733
- return Status::NotFound();
734
- } else if (0 == r && 0 != kvs.size()) {
735
- fid.assign(kvs[fname].c_str(), kvs[fname].length());
736
- return Status::OK();
737
- } else {
738
- return err_to_status(r);
739
- }
740
- }
741
-
742
- /**
743
- * @brief rename fid
744
- * @details Only modify object in rados once,
745
- * so this rename operation is atomic in term of rados
746
- *
747
- * @param old_fname [description]
748
- * @param new_fname [description]
749
- *
750
- * @return [description]
751
- */
752
- Status EnvLibrados::_RenameFid(const std::string& old_fname,
753
- const std::string& new_fname) {
754
- std::string fid;
755
- Status s = _GetFid(old_fname, fid);
756
-
757
- if (Status::OK() != s) {
758
- return s;
759
- }
760
-
761
- librados::bufferlist bl;
762
- std::set<std::string> keys;
763
- std::map<std::string, librados::bufferlist> kvs;
764
- librados::ObjectWriteOperation o;
765
- bl.append(fid);
766
- keys.insert(old_fname);
767
- kvs[new_fname] = bl;
768
- o.omap_rm_keys(keys);
769
- o.omap_set(kvs);
770
- int r = _db_pool_ioctx.operate(_db_name, &o);
771
- return err_to_status(r);
772
- }
773
-
774
- /**
775
- * @brief add <file path, fid> to metadata object. It may overwrite exist key.
776
- * @details [long description]
777
- *
778
- * @param fname [description]
779
- * @param fid [description]
780
- *
781
- * @return [description]
782
- */
783
- Status EnvLibrados::_AddFid(
784
- const std::string& fname,
785
- const std::string& fid) {
786
- std::map<std::string, librados::bufferlist> kvs;
787
- librados::bufferlist value;
788
- value.append(fid);
789
- kvs[fname] = value;
790
- int r = _db_pool_ioctx.omap_set(_db_name, kvs);
791
- return err_to_status(r);
792
- }
793
-
794
- /**
795
- * @brief return subfile names of dir.
796
- * @details
797
- * RocksDB has a 2-level structure, so all keys
798
- * that have dir as prefix are subfiles of dir.
799
- * So we can just return these files' name.
800
- *
801
- * @param dir [description]
802
- * @param result [description]
803
- *
804
- * @return [description]
805
- */
806
- Status EnvLibrados::_GetSubFnames(
807
- const std::string& dir,
808
- std::vector<std::string> * result
809
- ) {
810
- std::string start_after(dir);
811
- std::string filter_prefix(dir);
812
- std::map<std::string, librados::bufferlist> kvs;
813
- _db_pool_ioctx.omap_get_vals(_db_name,
814
- start_after, filter_prefix,
815
- MAX_ITEMS_IN_FS, &kvs);
816
-
817
- result->clear();
818
- for (auto i = kvs.begin(); i != kvs.end(); i++) {
819
- result->push_back(i->first.substr(dir.size() + 1));
820
- }
821
- return Status::OK();
822
- }
823
-
824
- /**
825
- * @brief delete key fname from metadata object
826
- * @details [long description]
827
- *
828
- * @param fname [description]
829
- * @return [description]
830
- */
831
- Status EnvLibrados::_DelFid(
832
- const std::string& fname) {
833
- std::set<std::string> keys;
834
- keys.insert(fname);
835
- int r = _db_pool_ioctx.omap_rm_keys(_db_name, keys);
836
- return err_to_status(r);
837
- }
838
-
839
- /**
840
- * @brief get match IoCtx from _prefix_pool_map
841
- * @details [long description]
842
- *
843
- * @param prefix [description]
844
- * @return [description]
845
- *
846
- */
847
- librados::IoCtx* EnvLibrados::_GetIoctx(const std::string& fpath) {
848
- auto is_prefix = [](const std::string & s1, const std::string & s2) {
849
- auto it1 = s1.begin(), it2 = s2.begin();
850
- while (it1 != s1.end() && it2 != s2.end() && *it1 == *it2) ++it1, ++it2;
851
- return it1 == s1.end();
852
- };
853
-
854
- if (is_prefix(_wal_dir, fpath)) {
855
- return &_wal_pool_ioctx;
856
- } else {
857
- return &_db_pool_ioctx;
858
- }
859
- }
860
-
861
- /************************************************************
862
- public functions
863
- ************************************************************/
864
- /**
865
- * @brief generate unique id
866
- * @details Combine system time and random number.
867
- * @return [description]
868
- */
869
- std::string EnvLibrados::GenerateUniqueId() {
870
- Random64 r(time(nullptr));
871
- uint64_t random_uuid_portion =
872
- r.Uniform(std::numeric_limits<uint64_t>::max());
873
- uint64_t nanos_uuid_portion = NowNanos();
874
- char uuid2[200];
875
- snprintf(uuid2,
876
- 200,
877
- "%16lx-%16lx",
878
- (unsigned long)nanos_uuid_portion,
879
- (unsigned long)random_uuid_portion);
880
- return uuid2;
881
- }
882
-
883
- /**
884
- * @brief create a new sequential read file handler
885
- * @details it will check the existence of fname
886
- *
887
- * @param fname [description]
888
- * @param result [description]
889
- * @param options [description]
890
- * @return [description]
891
- */
892
- Status EnvLibrados::NewSequentialFile(
893
- const std::string& fname,
894
- std::unique_ptr<SequentialFile>* result,
895
- const EnvOptions& options)
896
- {
897
- LOG_DEBUG("[IN]%s\n", fname.c_str());
898
- std::string dir, file, fid;
899
- split(fname, &dir, &file);
900
- Status s;
901
- std::string fpath = dir + "/" + file;
902
- do {
903
- s = _GetFid(dir, fid);
904
-
905
- if (!s.ok() || fid != DIR_ID_VALUE) {
906
- if (fid != DIR_ID_VALUE) s = Status::IOError();
907
- break;
908
- }
909
-
910
- s = _GetFid(fpath, fid);
911
-
912
- if (Status::NotFound() == s) {
913
- s = Status::IOError();
914
- errno = ENOENT;
915
- break;
916
- }
917
-
918
- result->reset(new LibradosSequentialFile(_GetIoctx(fpath), fid, fpath));
919
- s = Status::OK();
920
- } while (0);
921
-
922
- LOG_DEBUG("[OUT]%s\n", s.ToString().c_str());
923
- return s;
924
- }
925
-
926
- /**
927
- * @brief create a new random access file handler
928
- * @details it will check the existence of fname
929
- *
930
- * @param fname [description]
931
- * @param result [description]
932
- * @param options [description]
933
- * @return [description]
934
- */
935
- Status EnvLibrados::NewRandomAccessFile(
936
- const std::string& fname,
937
- std::unique_ptr<RandomAccessFile>* result,
938
- const EnvOptions& options)
939
- {
940
- LOG_DEBUG("[IN]%s\n", fname.c_str());
941
- std::string dir, file, fid;
942
- split(fname, &dir, &file);
943
- Status s;
944
- std::string fpath = dir + "/" + file;
945
- do {
946
- s = _GetFid(dir, fid);
947
-
948
- if (!s.ok() || fid != DIR_ID_VALUE) {
949
- s = Status::IOError();
950
- break;
951
- }
952
-
953
- s = _GetFid(fpath, fid);
954
-
955
- if (Status::NotFound() == s) {
956
- s = Status::IOError();
957
- errno = ENOENT;
958
- break;
959
- }
960
-
961
- result->reset(new LibradosRandomAccessFile(_GetIoctx(fpath), fid, fpath));
962
- s = Status::OK();
963
- } while (0);
964
-
965
- LOG_DEBUG("[OUT]%s\n", s.ToString().c_str());
966
- return s;
967
- }
968
-
969
- /**
970
- * @brief create a new write file handler
971
- * @details it will check the existence of fname
972
- *
973
- * @param fname [description]
974
- * @param result [description]
975
- * @param options [description]
976
- * @return [description]
977
- */
978
- Status EnvLibrados::NewWritableFile(
979
- const std::string& fname,
980
- std::unique_ptr<WritableFile>* result,
981
- const EnvOptions& options)
982
- {
983
- LOG_DEBUG("[IN]%s\n", fname.c_str());
984
- std::string dir, file, fid;
985
- split(fname, &dir, &file);
986
- Status s;
987
- std::string fpath = dir + "/" + file;
988
-
989
- do {
990
- // 1. check if dir exist
991
- s = _GetFid(dir, fid);
992
- if (!s.ok()) {
993
- break;
994
- }
995
-
996
- if (fid != DIR_ID_VALUE) {
997
- s = Status::IOError();
998
- break;
999
- }
1000
-
1001
- // 2. check if file exist.
1002
- // 2.1 exist, use it
1003
- // 2.2 not exist, create it
1004
- s = _GetFid(fpath, fid);
1005
- if (Status::NotFound() == s) {
1006
- fid = _CreateFid();
1007
- _AddFid(fpath, fid);
1008
- }
1009
-
1010
- result->reset(
1011
- new LibradosWritableFile(_GetIoctx(fpath), fid, fpath, this, options));
1012
- s = Status::OK();
1013
- } while (0);
1014
-
1015
- LOG_DEBUG("[OUT]%s\n", s.ToString().c_str());
1016
- return s;
1017
- }
1018
-
1019
- /**
1020
- * @brief reuse write file handler
1021
- * @details
1022
- * This function will rename old_fname to new_fname,
1023
- * then return the handler of new_fname
1024
- *
1025
- * @param new_fname [description]
1026
- * @param old_fname [description]
1027
- * @param result [description]
1028
- * @param options [description]
1029
- * @return [description]
1030
- */
1031
- Status EnvLibrados::ReuseWritableFile(
1032
- const std::string& new_fname,
1033
- const std::string& old_fname,
1034
- std::unique_ptr<WritableFile>* result,
1035
- const EnvOptions& options)
1036
- {
1037
- LOG_DEBUG("[IN]%s => %s\n", old_fname.c_str(), new_fname.c_str());
1038
- std::string src_fid, tmp_fid, src_dir, src_file, dst_dir, dst_file;
1039
- split(old_fname, &src_dir, &src_file);
1040
- split(new_fname, &dst_dir, &dst_file);
1041
-
1042
- std::string src_fpath = src_dir + "/" + src_file;
1043
- std::string dst_fpath = dst_dir + "/" + dst_file;
1044
- Status r = Status::OK();
1045
- do {
1046
- r = _RenameFid(src_fpath,
1047
- dst_fpath);
1048
- if (!r.ok()) {
1049
- break;
1050
- }
1051
-
1052
- result->reset(new LibradosWritableFile(_GetIoctx(dst_fpath), src_fid,
1053
- dst_fpath, this, options));
1054
- } while (0);
1055
-
1056
- LOG_DEBUG("[OUT]%s\n", r.ToString().c_str());
1057
- return r;
1058
- }
1059
-
1060
- /**
1061
- * @brief create a new directory handler
1062
- * @details [long description]
1063
- *
1064
- * @param name [description]
1065
- * @param result [description]
1066
- *
1067
- * @return [description]
1068
- */
1069
- Status EnvLibrados::NewDirectory(
1070
- const std::string& name,
1071
- std::unique_ptr<Directory>* result)
1072
- {
1073
- LOG_DEBUG("[IN]%s\n", name.c_str());
1074
- std::string fid, dir, file;
1075
- /* just want to get dir name */
1076
- split(name + "/tmp", &dir, &file);
1077
- Status s;
1078
-
1079
- do {
1080
- s = _GetFid(dir, fid);
1081
-
1082
- if (!s.ok() || DIR_ID_VALUE != fid) {
1083
- s = Status::IOError(name, strerror(-ENOENT));
1084
- break;
1085
- }
1086
-
1087
- if (Status::NotFound() == s) {
1088
- s = _AddFid(dir, DIR_ID_VALUE);
1089
- if (!s.ok()) break;
1090
- } else if (!s.ok()) {
1091
- break;
1092
- }
1093
-
1094
- result->reset(new LibradosDirectory(_GetIoctx(dir), dir));
1095
- s = Status::OK();
1096
- } while (0);
1097
-
1098
- LOG_DEBUG("[OUT]%s\n", s.ToString().c_str());
1099
- return s;
1100
- }
1101
-
1102
- /**
1103
- * @brief check if fname is exist
1104
- * @details [long description]
1105
- *
1106
- * @param fname [description]
1107
- * @return [description]
1108
- */
1109
- Status EnvLibrados::FileExists(const std::string& fname)
1110
- {
1111
- LOG_DEBUG("[IN]%s\n", fname.c_str());
1112
- std::string fid, dir, file;
1113
- split(fname, &dir, &file);
1114
- Status s = _GetFid(dir + "/" + file, fid);
1115
-
1116
- if (s.ok() && fid != DIR_ID_VALUE) {
1117
- s = Status::OK();
1118
- }
1119
-
1120
- LOG_DEBUG("[OUT]%s\n", s.ToString().c_str());
1121
- return s;
1122
- }
1123
-
1124
- /**
1125
- * @brief get subfile name of dir_in
1126
- * @details [long description]
1127
- *
1128
- * @param dir_in [description]
1129
- * @param result [description]
1130
- *
1131
- * @return [description]
1132
- */
1133
- Status EnvLibrados::GetChildren(
1134
- const std::string& dir_in,
1135
- std::vector<std::string>* result)
1136
- {
1137
- LOG_DEBUG("[IN]%s\n", dir_in.c_str());
1138
- std::string fid, dir, file;
1139
- split(dir_in + "/temp", &dir, &file);
1140
- Status s;
1141
-
1142
- do {
1143
- s = _GetFid(dir, fid);
1144
- if (!s.ok()) {
1145
- break;
1146
- }
1147
-
1148
- if (fid != DIR_ID_VALUE) {
1149
- s = Status::IOError();
1150
- break;
1151
- }
1152
-
1153
- s = _GetSubFnames(dir, result);
1154
- } while (0);
1155
-
1156
- LOG_DEBUG("[OUT]%s\n", s.ToString().c_str());
1157
- return s;
1158
- }
1159
-
1160
- /**
1161
- * @brief delete fname
1162
- * @details [long description]
1163
- *
1164
- * @param fname [description]
1165
- * @return [description]
1166
- */
1167
- Status EnvLibrados::DeleteFile(const std::string& fname)
1168
- {
1169
- LOG_DEBUG("[IN]%s\n", fname.c_str());
1170
- std::string fid, dir, file;
1171
- split(fname, &dir, &file);
1172
- Status s = _GetFid(dir + "/" + file, fid);
1173
-
1174
- if (s.ok() && DIR_ID_VALUE != fid) {
1175
- s = _DelFid(dir + "/" + file);
1176
- } else {
1177
- s = Status::NotFound();
1178
- }
1179
- LOG_DEBUG("[OUT]%s\n", s.ToString().c_str());
1180
- return s;
1181
- }
1182
-
1183
- /**
1184
- * @brief create new dir
1185
- * @details [long description]
1186
- *
1187
- * @param dirname [description]
1188
- * @return [description]
1189
- */
1190
- Status EnvLibrados::CreateDir(const std::string& dirname)
1191
- {
1192
- LOG_DEBUG("[IN]%s\n", dirname.c_str());
1193
- std::string fid, dir, file;
1194
- split(dirname + "/temp", &dir, &file);
1195
- Status s = _GetFid(dir + "/" + file, fid);
1196
-
1197
- do {
1198
- if (Status::NotFound() != s && fid != DIR_ID_VALUE) {
1199
- break;
1200
- } else if (Status::OK() == s && fid == DIR_ID_VALUE) {
1201
- break;
1202
- }
1203
-
1204
- s = _AddFid(dir, DIR_ID_VALUE);
1205
- } while (0);
1206
-
1207
- LOG_DEBUG("[OUT]%s\n", s.ToString().c_str());
1208
- return s;
1209
- }
1210
-
1211
- /**
1212
- * @brief create dir if missing
1213
- * @details [long description]
1214
- *
1215
- * @param dirname [description]
1216
- * @return [description]
1217
- */
1218
- Status EnvLibrados::CreateDirIfMissing(const std::string& dirname)
1219
- {
1220
- LOG_DEBUG("[IN]%s\n", dirname.c_str());
1221
- std::string fid, dir, file;
1222
- split(dirname + "/temp", &dir, &file);
1223
- Status s = Status::OK();
1224
-
1225
- do {
1226
- s = _GetFid(dir, fid);
1227
- if (Status::NotFound() != s) {
1228
- break;
1229
- }
1230
-
1231
- s = _AddFid(dir, DIR_ID_VALUE);
1232
- } while (0);
1233
-
1234
- LOG_DEBUG("[OUT]%s\n", s.ToString().c_str());
1235
- return s;
1236
- }
1237
-
1238
- /**
1239
- * @brief delete dir
1240
- * @details
1241
- *
1242
- * @param dirname [description]
1243
- * @return [description]
1244
- */
1245
- Status EnvLibrados::DeleteDir(const std::string& dirname)
1246
- {
1247
- LOG_DEBUG("[IN]%s\n", dirname.c_str());
1248
- std::string fid, dir, file;
1249
- split(dirname + "/temp", &dir, &file);
1250
- Status s = Status::OK();
1251
-
1252
- s = _GetFid(dir, fid);
1253
-
1254
- if (s.ok() && DIR_ID_VALUE == fid) {
1255
- std::vector<std::string> subs;
1256
- s = _GetSubFnames(dir, &subs);
1257
- // if subfiles exist, can't delete dir
1258
- if (subs.size() > 0) {
1259
- s = Status::IOError();
1260
- } else {
1261
- s = _DelFid(dir);
1262
- }
1263
- } else {
1264
- s = Status::NotFound();
1265
- }
1266
-
1267
- LOG_DEBUG("[OUT]%s\n", s.ToString().c_str());
1268
- return s;
1269
- }
1270
-
1271
- /**
1272
- * @brief return file size
1273
- * @details [long description]
1274
- *
1275
- * @param fname [description]
1276
- * @param file_size [description]
1277
- *
1278
- * @return [description]
1279
- */
1280
- Status EnvLibrados::GetFileSize(
1281
- const std::string& fname,
1282
- uint64_t* file_size)
1283
- {
1284
- LOG_DEBUG("[IN]%s\n", fname.c_str());
1285
- std::string fid, dir, file;
1286
- split(fname, &dir, &file);
1287
- time_t mtime;
1288
- Status s;
1289
-
1290
- do {
1291
- std::string fpath = dir + "/" + file;
1292
- s = _GetFid(fpath, fid);
1293
-
1294
- if (!s.ok()) {
1295
- break;
1296
- }
1297
-
1298
- int ret = _GetIoctx(fpath)->stat(fid, file_size, &mtime);
1299
- if (ret < 0) {
1300
- LOG_DEBUG("%i\n", ret);
1301
- if (-ENOENT == ret) {
1302
- *file_size = 0;
1303
- s = Status::OK();
1304
- } else {
1305
- s = err_to_status(ret);
1306
- }
1307
- } else {
1308
- s = Status::OK();
1309
- }
1310
- } while (0);
1311
-
1312
- LOG_DEBUG("[OUT]%s|%lld\n", s.ToString().c_str(), (long long)*file_size);
1313
- return s;
1314
- }
1315
-
1316
- /**
1317
- * @brief get file modification time
1318
- * @details [long description]
1319
- *
1320
- * @param fname [description]
1321
- * @param file_mtime [description]
1322
- *
1323
- * @return [description]
1324
- */
1325
- Status EnvLibrados::GetFileModificationTime(const std::string& fname,
1326
- uint64_t* file_mtime)
1327
- {
1328
- LOG_DEBUG("[IN]%s\n", fname.c_str());
1329
- std::string fid, dir, file;
1330
- split(fname, &dir, &file);
1331
- time_t mtime;
1332
- uint64_t file_size;
1333
- Status s = Status::OK();
1334
- do {
1335
- std::string fpath = dir + "/" + file;
1336
- s = _GetFid(dir + "/" + file, fid);
1337
-
1338
- if (!s.ok()) {
1339
- break;
1340
- }
1341
-
1342
- int ret = _GetIoctx(fpath)->stat(fid, &file_size, &mtime);
1343
- if (ret < 0) {
1344
- if (Status::NotFound() == err_to_status(ret)) {
1345
- *file_mtime = static_cast<uint64_t>(mtime);
1346
- s = Status::OK();
1347
- } else {
1348
- s = err_to_status(ret);
1349
- }
1350
- } else {
1351
- s = Status::OK();
1352
- }
1353
- } while (0);
1354
-
1355
- LOG_DEBUG("[OUT]%s\n", s.ToString().c_str());
1356
- return s;
1357
- }
1358
-
1359
- /**
1360
- * @brief rename file
1361
- * @details
1362
- *
1363
- * @param src [description]
1364
- * @param target_in [description]
1365
- *
1366
- * @return [description]
1367
- */
1368
- Status EnvLibrados::RenameFile(
1369
- const std::string& src,
1370
- const std::string& target_in)
1371
- {
1372
- LOG_DEBUG("[IN]%s => %s\n", src.c_str(), target_in.c_str());
1373
- std::string src_fid, tmp_fid, src_dir, src_file, dst_dir, dst_file;
1374
- split(src, &src_dir, &src_file);
1375
- split(target_in, &dst_dir, &dst_file);
1376
-
1377
- auto s = _RenameFid(src_dir + "/" + src_file,
1378
- dst_dir + "/" + dst_file);
1379
- LOG_DEBUG("[OUT]%s\n", s.ToString().c_str());
1380
- return s;
1381
- }
1382
-
1383
- /**
1384
- * @brief not support
1385
- * @details [long description]
1386
- *
1387
- * @param src [description]
1388
- * @param target_in [description]
1389
- *
1390
- * @return [description]
1391
- */
1392
- Status EnvLibrados::LinkFile(
1393
- const std::string& src,
1394
- const std::string& target_in)
1395
- {
1396
- LOG_DEBUG("[IO]%s => %s\n", src.c_str(), target_in.c_str());
1397
- return Status::NotSupported();
1398
- }
1399
-
1400
- /**
1401
- * @brief lock file. create if missing.
1402
- * @details [long description]
1403
- *
1404
- * It seems that LockFile is used for preventing other instance of RocksDB
1405
- * from opening up the database at the same time. From RocksDB source code,
1406
- * the invokes of LockFile are at following locations:
1407
- *
1408
- * ./db/db_impl.cc:1159: s = env_->LockFile(LockFileName(dbname_), &db_lock_); // DBImpl::Recover
1409
- * ./db/db_impl.cc:5839: Status result = env->LockFile(lockname, &lock); // Status DestroyDB
1410
- *
1411
- * When db recovery and db destroy, RocksDB will call LockFile
1412
- *
1413
- * @param fname [description]
1414
- * @param lock [description]
1415
- *
1416
- * @return [description]
1417
- */
1418
- Status EnvLibrados::LockFile(
1419
- const std::string& fname,
1420
- FileLock** lock)
1421
- {
1422
- LOG_DEBUG("[IN]%s\n", fname.c_str());
1423
- std::string fid, dir, file;
1424
- split(fname, &dir, &file);
1425
- Status s = Status::OK();
1426
-
1427
- do {
1428
- std::string fpath = dir + "/" + file;
1429
- s = _GetFid(fpath, fid);
1430
-
1431
- if (Status::OK() != s &&
1432
- Status::NotFound() != s) {
1433
- break;
1434
- } else if (Status::NotFound() == s) {
1435
- s = _AddFid(fpath, _CreateFid());
1436
- if (!s.ok()) {
1437
- break;
1438
- }
1439
- } else if (Status::OK() == s && DIR_ID_VALUE == fid) {
1440
- s = Status::IOError();
1441
- break;
1442
- }
1443
-
1444
- *lock = new LibradosFileLock(_GetIoctx(fpath), fpath);
1445
- } while (0);
1446
-
1447
- LOG_DEBUG("[OUT]%s\n", s.ToString().c_str());
1448
- return s;
1449
- }
1450
-
1451
- /**
1452
- * @brief unlock file
1453
- * @details [long description]
1454
- *
1455
- * @param lock [description]
1456
- * @return [description]
1457
- */
1458
- Status EnvLibrados::UnlockFile(FileLock* lock)
1459
- {
1460
- LOG_DEBUG("[IO]%p\n", lock);
1461
- if (nullptr != lock) {
1462
- delete lock;
1463
- }
1464
- return Status::OK();
1465
- }
1466
-
1467
-
1468
- /**
1469
- * @brief not support
1470
- * @details [long description]
1471
- *
1472
- * @param db_path [description]
1473
- * @param output_path [description]
1474
- *
1475
- * @return [description]
1476
- */
1477
- Status EnvLibrados::GetAbsolutePath(
1478
- const std::string& db_path,
1479
- std::string* output_path)
1480
- {
1481
- LOG_DEBUG("[IO]%s\n", db_path.c_str());
1482
- return Status::NotSupported();
1483
- }
1484
-
1485
- /**
1486
- * @brief Get default EnvLibrados
1487
- * @details [long description]
1488
- * @return [description]
1489
- */
1490
- EnvLibrados* EnvLibrados::Default() {
1491
- static EnvLibrados default_env(default_db_name,
1492
- std::getenv(default_config_path),
1493
- default_pool_name);
1494
- return &default_env;
1495
- }
1496
-
1497
- } // namespace ROCKSDB_NAMESPACE