@nxtedition/rocksdb 5.2.21 → 5.2.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (923) hide show
  1. package/binding.cc +510 -967
  2. package/binding.gyp +78 -72
  3. package/chained-batch.js +1 -2
  4. package/deps/rocksdb/build_version.cc +70 -4
  5. package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
  6. package/deps/rocksdb/rocksdb/Makefile +459 -469
  7. package/deps/rocksdb/rocksdb/TARGETS +5244 -1500
  8. package/deps/rocksdb/rocksdb/cache/cache.cc +12 -3
  9. package/deps/rocksdb/rocksdb/cache/cache_bench.cc +7 -368
  10. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +924 -0
  11. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +128 -0
  12. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +103 -0
  13. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +183 -0
  14. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +11 -0
  15. package/deps/rocksdb/rocksdb/cache/cache_key.cc +344 -0
  16. package/deps/rocksdb/rocksdb/cache/cache_key.h +132 -0
  17. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +183 -0
  18. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +288 -0
  19. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +468 -0
  20. package/deps/rocksdb/rocksdb/cache/cache_test.cc +85 -8
  21. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +121 -51
  22. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +171 -0
  23. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +86 -0
  24. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +607 -0
  25. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +381 -154
  26. package/deps/rocksdb/rocksdb/cache/lru_cache.h +176 -33
  27. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1659 -3
  28. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +94 -23
  29. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +49 -28
  30. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
  31. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
  32. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
  33. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
  34. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
  35. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
  36. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
  37. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
  38. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
  39. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
  40. package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
  41. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
  42. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
  43. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
  44. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
  45. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
  51. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
  52. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
  53. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
  54. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
  55. package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
  56. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
  57. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
  58. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
  59. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
  60. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
  61. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
  62. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
  63. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
  64. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
  65. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
  66. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
  67. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
  68. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
  69. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
  70. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
  71. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
  72. package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
  73. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
  74. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
  75. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
  76. package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
  77. package/deps/rocksdb/rocksdb/db/builder.h +16 -37
  78. package/deps/rocksdb/rocksdb/db/c.cc +413 -208
  79. package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
  80. package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
  81. package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
  82. package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
  83. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
  84. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
  85. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
  96. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
  97. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
  98. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
  99. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
  100. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
  101. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
  102. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
  103. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
  104. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
  105. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
  106. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
  107. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
  108. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
  110. package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
  111. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
  112. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
  113. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
  114. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
  115. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
  116. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
  117. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
  118. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
  119. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
  120. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
  121. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
  122. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
  124. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
  125. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
  126. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
  127. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
  128. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
  129. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
  130. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
  131. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
  132. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
  133. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
  134. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
  135. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
  136. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
  137. package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
  138. package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
  139. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
  140. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
  141. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
  142. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
  143. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
  144. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
  145. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
  146. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
  147. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
  148. package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
  149. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
  150. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
  151. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
  152. package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
  153. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
  154. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
  155. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
  156. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
  157. package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
  158. package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
  159. package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
  160. package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
  161. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
  162. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
  163. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
  164. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
  165. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
  166. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
  167. package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
  168. package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
  169. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
  170. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
  171. package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
  172. package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
  173. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
  174. package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
  175. package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
  176. package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
  177. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
  178. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
  179. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
  180. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
  181. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
  182. package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
  183. package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
  184. package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
  185. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
  186. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
  187. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
  188. package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
  189. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
  190. package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
  191. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
  192. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
  193. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
  194. package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
  195. package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
  196. package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
  197. package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
  198. package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
  199. package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
  200. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
  201. package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
  202. package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
  203. package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
  204. package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
  205. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
  206. package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
  207. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
  208. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
  209. package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
  210. package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
  211. package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
  212. package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
  213. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
  214. package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
  215. package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
  216. package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
  217. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
  218. package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
  219. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
  220. package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
  221. package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
  222. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
  223. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
  224. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
  225. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
  226. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
  227. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
  228. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
  229. package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
  230. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
  231. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
  232. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
  233. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
  234. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
  235. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
  236. package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
  237. package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
  238. package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
  239. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
  240. package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
  241. package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
  242. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
  243. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
  244. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
  245. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
  246. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
  247. package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
  248. package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
  249. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
  250. package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
  251. package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
  252. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
  253. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
  254. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
  255. package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
  256. package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
  257. package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
  258. package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
  259. package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
  260. package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
  261. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
  262. package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
  263. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
  264. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
  265. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
  266. package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
  267. package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
  268. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
  269. package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
  270. package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
  271. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
  272. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
  273. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
  274. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
  280. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
  281. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
  283. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
  284. package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
  285. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
  286. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
  287. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
  288. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
  289. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
  290. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
  291. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
  292. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
  293. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
  294. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
  295. package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
  296. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
  297. package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
  298. package/deps/rocksdb/rocksdb/env/env.cc +632 -42
  299. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
  300. package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
  301. package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
  302. package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
  303. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
  304. package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
  305. package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
  306. package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
  307. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
  308. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
  309. package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
  310. package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
  311. package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
  312. package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
  313. package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
  314. package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
  315. package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
  316. package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
  317. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
  318. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
  319. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
  320. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
  321. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
  322. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
  323. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
  324. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
  325. package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
  326. package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
  327. package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
  328. package/deps/rocksdb/rocksdb/file/filename.h +13 -8
  329. package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
  330. package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
  331. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
  332. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
  333. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
  334. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
  335. package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
  336. package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
  337. package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
  338. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
  339. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
  340. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
  341. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
  342. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
  343. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
  344. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
  345. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
  346. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
  347. package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
  348. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
  349. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
  350. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
  351. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
  352. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
  353. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
  354. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
  355. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
  356. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
  357. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
  358. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
  359. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
  360. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
  361. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
  362. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
  363. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
  364. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
  365. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
  366. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
  367. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
  368. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
  369. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
  370. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
  371. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
  372. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
  373. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
  374. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
  375. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
  376. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
  377. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
  378. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
  380. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
  381. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
  382. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
  383. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
  385. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
  386. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
  387. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
  388. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
  389. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
  390. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
  391. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
  392. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
  393. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
  396. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
  397. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
  398. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
  407. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
  408. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
  409. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
  410. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
  411. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
  412. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
  413. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
  414. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
  415. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
  416. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
  417. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
  418. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
  419. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
  420. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
  421. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
  422. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
  423. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
  424. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
  425. package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
  426. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
  427. package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
  428. package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
  429. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  430. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
  431. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
  432. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
  433. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
  434. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
  435. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
  436. package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
  437. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
  438. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
  439. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
  440. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
  441. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
  442. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  443. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
  444. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
  445. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
  446. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
  447. package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
  448. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
  449. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
  450. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
  451. package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
  452. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
  453. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
  454. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
  455. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
  456. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
  457. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
  458. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
  459. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
  460. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
  461. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
  462. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
  463. package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
  464. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
  465. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
  466. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
  467. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
  468. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
  469. package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
  470. package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
  471. package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
  472. package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
  473. package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
  474. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
  475. package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
  476. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
  477. package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
  478. package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
  479. package/deps/rocksdb/rocksdb/options/options.cc +49 -17
  480. package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
  481. package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
  482. package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
  483. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
  484. package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
  485. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
  486. package/deps/rocksdb/rocksdb/port/lang.h +52 -0
  487. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  488. package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
  489. package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
  490. package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
  491. package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
  492. package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
  493. package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
  494. package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
  495. package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
  496. package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
  497. package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
  498. package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
  499. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
  500. package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
  501. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
  502. package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
  503. package/deps/rocksdb/rocksdb/python.mk +9 -0
  504. package/deps/rocksdb/rocksdb/src.mk +82 -34
  505. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
  506. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
  507. package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
  508. package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
  509. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
  510. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
  511. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
  512. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
  513. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
  514. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
  515. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
  516. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
  517. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
  518. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
  519. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
  520. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
  521. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
  522. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
  523. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
  524. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
  525. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
  526. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
  527. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
  528. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
  529. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
  530. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
  531. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
  532. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
  533. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
  534. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
  535. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
  536. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
  537. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
  538. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
  539. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
  540. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  541. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  542. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  543. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
  544. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
  545. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
  546. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
  547. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
  548. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
  549. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
  550. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
  551. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
  552. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
  553. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
  554. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
  555. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
  556. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
  557. package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
  558. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
  559. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
  560. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
  561. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
  562. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
  563. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
  564. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
  565. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
  566. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
  567. package/deps/rocksdb/rocksdb/table/format.cc +258 -104
  568. package/deps/rocksdb/rocksdb/table/format.h +120 -109
  569. package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
  570. package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
  571. package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
  572. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  573. package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
  574. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
  575. package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
  576. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
  577. package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
  578. package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
  579. package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
  580. package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
  581. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
  582. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
  583. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
  584. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
  585. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
  586. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
  587. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
  588. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
  589. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
  590. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
  591. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
  592. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
  593. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
  594. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
  595. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
  596. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
  597. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
  598. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
  599. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
  600. package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
  601. package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
  602. package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
  603. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
  604. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
  605. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
  606. package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
  607. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
  608. package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
  609. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
  610. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
  611. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
  612. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
  613. package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
  614. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
  615. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
  616. package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
  617. package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
  618. package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
  619. package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
  620. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
  621. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
  622. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
  623. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  624. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
  625. package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
  626. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
  627. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
  628. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
  629. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
  630. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
  631. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
  632. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
  633. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
  634. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
  635. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  636. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
  637. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
  638. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
  639. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
  640. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
  641. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
  642. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
  643. package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
  644. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
  645. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
  646. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
  647. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
  648. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
  649. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
  650. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
  651. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
  652. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
  653. package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
  654. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
  655. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
  656. package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
  657. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
  658. package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
  659. package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
  660. package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
  661. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  662. package/deps/rocksdb/rocksdb/util/channel.h +2 -0
  663. package/deps/rocksdb/rocksdb/util/coding.h +1 -33
  664. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
  665. package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
  666. package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
  667. package/deps/rocksdb/rocksdb/util/compression.h +212 -7
  668. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
  669. package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
  670. package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
  671. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
  672. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
  673. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
  674. package/deps/rocksdb/rocksdb/util/defer.h +30 -1
  675. package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
  676. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
  677. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
  678. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
  679. package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
  680. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
  681. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
  682. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
  683. package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
  684. package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
  685. package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
  686. package/deps/rocksdb/rocksdb/util/hash.h +31 -1
  687. package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
  688. package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
  689. package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
  690. package/deps/rocksdb/rocksdb/util/heap.h +6 -1
  691. package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
  692. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
  693. package/deps/rocksdb/rocksdb/util/math.h +74 -7
  694. package/deps/rocksdb/rocksdb/util/math128.h +13 -1
  695. package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
  696. package/deps/rocksdb/rocksdb/util/random.cc +9 -0
  697. package/deps/rocksdb/rocksdb/util/random.h +6 -0
  698. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
  699. package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
  700. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
  701. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
  702. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
  703. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
  704. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
  705. package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
  706. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
  707. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
  708. package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
  709. package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
  710. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
  711. package/deps/rocksdb/rocksdb/util/status.cc +32 -29
  712. package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
  713. package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
  714. package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
  715. package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
  716. package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
  717. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
  718. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
  719. package/deps/rocksdb/rocksdb/util/timer.h +55 -46
  720. package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
  721. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
  722. package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
  723. package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
  724. package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
  725. package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
  726. package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
  727. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
  728. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
  729. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
  730. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
  731. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
  732. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
  733. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
  734. package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
  735. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
  736. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
  737. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
  738. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
  739. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
  740. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
  741. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
  742. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
  743. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
  744. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
  745. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
  746. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
  747. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
  748. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
  749. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
  750. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
  751. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
  752. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
  753. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
  754. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
  755. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
  756. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
  757. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
  758. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
  759. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
  760. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
  761. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
  762. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
  763. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
  764. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
  765. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
  766. package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
  767. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
  768. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
  769. package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
  770. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
  771. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
  772. package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
  773. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
  774. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
  775. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
  776. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
  777. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
  778. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
  779. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
  780. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
  781. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
  782. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
  783. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
  784. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
  785. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
  786. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
  787. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
  788. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
  789. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
  790. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
  791. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
  792. package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
  793. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
  794. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
  795. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
  796. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
  797. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
  798. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
  799. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
  800. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
  801. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
  802. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
  803. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
  804. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
  805. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
  806. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
  807. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  808. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
  809. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
  810. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
  811. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
  812. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
  813. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
  814. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
  815. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
  816. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
  817. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
  818. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
  819. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
  820. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
  821. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  822. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
  823. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
  824. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
  825. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
  826. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
  827. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
  828. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
  829. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
  830. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
  831. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
  832. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
  833. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
  834. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
  835. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
  836. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
  837. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
  838. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
  839. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
  840. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
  841. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
  842. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
  843. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
  844. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
  845. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
  846. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
  847. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
  848. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
  849. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
  850. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
  851. package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
  852. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
  853. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
  854. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
  855. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
  856. package/deps/rocksdb/rocksdb.gyp +425 -446
  857. package/index.js +5 -87
  858. package/package-lock.json +23687 -0
  859. package/package.json +8 -9
  860. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  861. package/prebuilds/darwin-x64/node.napi.node +0 -0
  862. package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
  863. package/deps/rocksdb/rocksdb/README.md +0 -32
  864. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
  865. package/deps/rocksdb/rocksdb/hdfs/README +0 -23
  866. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
  867. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
  868. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
  869. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
  870. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
  871. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
  872. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
  873. package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
  874. package/deps/rocksdb/rocksdb/port/README +0 -10
  875. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
  876. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
  877. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
  878. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
  879. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
  880. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
  881. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
  882. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
  883. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
  884. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
  885. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
  886. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
  887. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
  888. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
  889. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
  890. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
  891. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
  892. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
  893. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
  894. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
  895. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
  896. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
  897. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
  898. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
  899. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
  900. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
  901. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
  902. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
  903. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
  904. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
  905. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
  906. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
  907. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
  908. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
  909. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
  910. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
  911. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
  912. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
  913. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
  914. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
  915. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
  916. package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
  917. package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
  918. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
  919. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
  920. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
  921. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
  922. package/deps/snappy/snappy-1.1.7/README.md +0 -149
  923. package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
@@ -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