@nxtedition/rocksdb 5.2.21 → 5.2.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (909) hide show
  1. package/binding.cc +216 -252
  2. package/binding.gyp +78 -72
  3. package/deps/rocksdb/build_version.cc +70 -4
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
  5. package/deps/rocksdb/rocksdb/Makefile +459 -469
  6. package/deps/rocksdb/rocksdb/README.md +4 -4
  7. package/deps/rocksdb/rocksdb/TARGETS +5244 -1500
  8. package/deps/rocksdb/rocksdb/cache/cache.cc +12 -3
  9. package/deps/rocksdb/rocksdb/cache/cache_bench.cc +7 -368
  10. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +924 -0
  11. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +128 -0
  12. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +103 -0
  13. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +183 -0
  14. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +11 -0
  15. package/deps/rocksdb/rocksdb/cache/cache_key.cc +344 -0
  16. package/deps/rocksdb/rocksdb/cache/cache_key.h +132 -0
  17. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +183 -0
  18. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +288 -0
  19. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +468 -0
  20. package/deps/rocksdb/rocksdb/cache/cache_test.cc +85 -8
  21. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +121 -51
  22. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +171 -0
  23. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +86 -0
  24. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +607 -0
  25. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +381 -154
  26. package/deps/rocksdb/rocksdb/cache/lru_cache.h +176 -33
  27. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1659 -3
  28. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +94 -23
  29. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +49 -28
  30. package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
  32. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
  33. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
  34. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
  35. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
  36. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
  40. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
  41. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
  42. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
  43. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
  44. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
  45. package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
  51. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
  52. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
  53. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
  54. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
  55. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
  56. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
  57. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
  58. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
  59. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
  60. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
  61. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
  62. package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
  63. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
  64. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
  65. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
  66. package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
  67. package/deps/rocksdb/rocksdb/db/builder.h +16 -37
  68. package/deps/rocksdb/rocksdb/db/c.cc +413 -208
  69. package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
  70. package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
  71. package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
  72. package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
  73. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
  74. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
  75. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
  76. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
  77. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
  78. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
  79. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
  80. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
  81. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
  82. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
  83. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
  84. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  85. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
  96. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
  97. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
  98. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  99. package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
  100. package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
  101. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
  102. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
  103. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
  104. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
  105. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
  106. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
  107. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
  108. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
  110. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
  111. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
  112. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
  113. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
  114. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
  115. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
  116. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
  117. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
  118. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
  119. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
  120. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
  121. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
  122. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
  124. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
  125. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
  126. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
  127. package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
  128. package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
  129. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
  130. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
  131. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
  132. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
  133. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
  134. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
  135. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
  136. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
  137. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
  138. package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
  139. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
  140. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
  141. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
  142. package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
  143. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
  144. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
  145. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
  146. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
  147. package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
  148. package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
  149. package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
  150. package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
  151. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
  152. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
  153. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
  154. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
  155. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
  156. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
  157. package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
  158. package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
  159. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
  160. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
  161. package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
  162. package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
  163. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
  164. package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
  165. package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
  166. package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
  167. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
  168. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
  169. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
  170. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
  171. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
  172. package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
  173. package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
  174. package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
  175. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
  176. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
  177. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
  178. package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
  179. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
  180. package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
  181. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
  182. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
  183. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
  184. package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
  185. package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
  186. package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
  187. package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
  188. package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
  189. package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
  190. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
  191. package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
  192. package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
  193. package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
  194. package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
  195. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
  196. package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
  197. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
  198. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
  199. package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
  200. package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
  201. package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
  202. package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
  203. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
  204. package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
  205. package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
  206. package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
  207. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
  208. package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
  209. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
  210. package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
  211. package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
  212. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
  213. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
  214. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
  215. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
  216. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
  217. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
  218. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
  219. package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
  220. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
  221. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
  222. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
  223. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
  224. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
  225. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
  226. package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
  227. package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
  228. package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
  229. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
  230. package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
  231. package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
  232. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
  233. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
  234. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
  235. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
  236. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
  237. package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
  238. package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
  239. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
  240. package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
  241. package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
  242. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
  243. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
  244. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
  245. package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
  246. package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
  247. package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
  248. package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
  249. package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
  250. package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
  251. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
  252. package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
  253. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
  254. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
  255. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
  256. package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
  257. package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
  258. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
  259. package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
  260. package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
  261. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
  262. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
  263. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
  264. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
  265. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
  266. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
  267. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
  268. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
  269. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
  270. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
  271. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
  272. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
  273. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
  274. package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
  280. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
  281. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
  283. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
  284. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
  285. package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
  286. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
  287. package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
  288. package/deps/rocksdb/rocksdb/env/env.cc +632 -42
  289. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
  290. package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
  291. package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
  292. package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
  293. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
  294. package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
  295. package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
  296. package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
  297. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
  298. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
  299. package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
  300. package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
  301. package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
  302. package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
  303. package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
  304. package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
  305. package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
  306. package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
  307. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
  308. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
  309. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
  310. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
  311. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
  312. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
  313. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
  314. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
  315. package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
  316. package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
  317. package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
  318. package/deps/rocksdb/rocksdb/file/filename.h +13 -8
  319. package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
  320. package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
  321. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
  322. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
  323. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
  324. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
  325. package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
  326. package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
  327. package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
  328. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
  329. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
  330. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
  331. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
  332. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
  333. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
  334. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
  335. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
  336. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
  337. package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
  338. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
  339. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
  340. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
  341. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
  342. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
  343. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
  344. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
  345. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
  346. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
  347. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
  348. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
  349. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
  350. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
  351. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
  352. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
  353. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
  354. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
  355. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
  356. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
  357. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
  358. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
  359. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
  360. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
  361. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
  362. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
  363. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
  364. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
  365. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
  366. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
  367. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
  368. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
  369. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
  370. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
  371. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
  372. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
  373. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
  374. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
  375. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
  376. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
  377. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
  378. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
  380. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
  381. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
  382. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
  383. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
  385. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
  386. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
  387. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
  388. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
  389. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
  390. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
  391. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
  392. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
  393. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
  396. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
  397. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
  398. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
  407. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
  408. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
  409. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
  410. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
  411. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
  412. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
  413. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
  414. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
  415. package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
  416. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
  417. package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
  418. package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
  419. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  420. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
  421. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
  422. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
  423. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
  424. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
  425. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
  426. package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
  427. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
  428. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
  429. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
  430. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
  431. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
  432. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  433. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
  434. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
  435. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
  436. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
  437. package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
  438. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  439. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
  440. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
  441. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
  442. package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
  443. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
  444. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
  445. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
  446. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
  447. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
  448. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
  449. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
  450. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
  451. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
  452. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
  453. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
  454. package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
  455. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
  456. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
  457. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
  458. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
  459. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
  460. package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
  461. package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
  462. package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
  463. package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
  464. package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
  465. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
  466. package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
  467. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
  468. package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
  469. package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
  470. package/deps/rocksdb/rocksdb/options/options.cc +49 -17
  471. package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
  472. package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
  473. package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
  474. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
  475. package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
  476. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  477. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
  478. package/deps/rocksdb/rocksdb/port/lang.h +52 -0
  479. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  480. package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
  481. package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
  482. package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
  483. package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
  484. package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
  485. package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
  486. package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
  487. package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
  488. package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
  489. package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
  490. package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
  491. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
  492. package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
  493. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
  494. package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
  495. package/deps/rocksdb/rocksdb/python.mk +9 -0
  496. package/deps/rocksdb/rocksdb/src.mk +82 -34
  497. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
  498. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
  499. package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
  500. package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
  501. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
  502. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
  503. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
  504. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
  505. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
  506. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
  507. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
  508. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
  509. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
  510. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
  511. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
  512. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
  513. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
  514. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
  515. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
  516. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
  517. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
  518. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
  519. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
  520. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
  521. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
  522. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
  523. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
  524. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
  525. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
  526. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
  527. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
  528. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
  529. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
  530. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
  531. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
  532. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  533. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  534. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  535. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
  536. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
  537. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
  538. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
  539. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
  540. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
  541. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
  542. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
  543. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
  544. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
  545. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
  546. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
  547. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
  548. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
  549. package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
  550. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
  551. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
  552. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
  553. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
  554. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
  555. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
  556. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
  557. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
  558. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
  559. package/deps/rocksdb/rocksdb/table/format.cc +258 -104
  560. package/deps/rocksdb/rocksdb/table/format.h +120 -109
  561. package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
  562. package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
  563. package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
  564. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  565. package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
  566. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
  567. package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
  568. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
  569. package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
  570. package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
  571. package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
  572. package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
  573. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
  574. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
  575. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
  576. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
  577. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
  578. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
  579. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
  580. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
  581. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
  582. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
  583. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
  584. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
  585. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
  586. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
  587. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
  588. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
  589. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
  590. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
  591. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
  592. package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
  593. package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
  594. package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
  595. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
  596. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
  597. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
  598. package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
  599. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
  600. package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
  601. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
  602. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
  603. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
  604. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
  605. package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
  606. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
  607. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
  608. package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
  609. package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
  610. package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
  611. package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
  612. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
  613. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
  614. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
  615. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  616. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
  617. package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
  618. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
  619. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
  620. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
  621. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
  622. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
  623. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
  624. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
  625. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
  626. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
  627. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  628. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
  629. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
  630. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
  631. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
  632. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
  633. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
  634. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
  635. package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
  636. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
  637. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
  638. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
  639. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
  640. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
  641. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
  642. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
  643. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
  644. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
  645. package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
  646. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
  647. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
  648. package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
  649. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
  650. package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
  651. package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
  652. package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
  653. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  654. package/deps/rocksdb/rocksdb/util/channel.h +2 -0
  655. package/deps/rocksdb/rocksdb/util/coding.h +1 -33
  656. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
  657. package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
  658. package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
  659. package/deps/rocksdb/rocksdb/util/compression.h +212 -7
  660. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
  661. package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
  662. package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
  663. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
  664. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
  665. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
  666. package/deps/rocksdb/rocksdb/util/defer.h +30 -1
  667. package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
  668. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
  669. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
  670. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
  671. package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
  672. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
  673. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
  674. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
  675. package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
  676. package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
  677. package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
  678. package/deps/rocksdb/rocksdb/util/hash.h +31 -1
  679. package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
  680. package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
  681. package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
  682. package/deps/rocksdb/rocksdb/util/heap.h +6 -1
  683. package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
  684. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
  685. package/deps/rocksdb/rocksdb/util/math.h +74 -7
  686. package/deps/rocksdb/rocksdb/util/math128.h +13 -1
  687. package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
  688. package/deps/rocksdb/rocksdb/util/random.cc +9 -0
  689. package/deps/rocksdb/rocksdb/util/random.h +6 -0
  690. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
  691. package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
  692. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
  693. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
  694. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
  695. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
  696. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
  697. package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
  698. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
  699. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
  700. package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
  701. package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
  702. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
  703. package/deps/rocksdb/rocksdb/util/status.cc +32 -29
  704. package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
  705. package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
  706. package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
  707. package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
  708. package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
  709. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
  710. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
  711. package/deps/rocksdb/rocksdb/util/timer.h +55 -46
  712. package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
  713. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
  714. package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
  715. package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
  716. package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
  717. package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
  718. package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
  719. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
  720. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
  721. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
  722. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
  723. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
  724. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
  725. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
  726. package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
  727. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
  728. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
  729. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
  730. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
  731. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
  732. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
  733. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
  734. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
  735. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
  736. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
  737. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
  738. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
  739. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
  740. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
  741. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
  742. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
  743. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
  744. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
  745. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
  746. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
  747. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
  748. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
  749. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
  750. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
  751. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
  752. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
  753. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
  754. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
  755. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
  756. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
  757. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
  758. package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
  759. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
  760. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
  761. package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
  762. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
  763. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
  764. package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
  765. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
  766. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
  767. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
  768. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
  769. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
  770. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
  771. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
  772. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
  773. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
  774. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
  775. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
  776. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
  777. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
  778. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
  779. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
  780. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
  781. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
  782. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
  783. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
  784. package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
  785. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
  786. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
  787. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
  788. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
  789. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
  790. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
  791. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
  792. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
  793. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
  794. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
  795. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
  796. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
  797. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
  798. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
  799. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  800. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
  801. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
  802. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
  803. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
  804. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
  805. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
  806. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
  807. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
  808. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
  809. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
  810. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
  811. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
  812. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
  813. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  814. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
  815. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
  816. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
  817. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
  818. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
  819. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
  820. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
  821. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
  822. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
  823. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
  824. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
  825. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
  826. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
  827. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
  828. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
  829. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
  830. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
  831. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
  832. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
  833. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
  834. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
  835. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
  836. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
  837. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
  838. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
  839. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
  840. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
  841. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
  842. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
  843. package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
  844. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
  845. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
  846. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
  847. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
  848. package/deps/rocksdb/rocksdb.gyp +425 -446
  849. package/package.json +8 -8
  850. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  851. package/prebuilds/darwin-x86/node.napi.node +0 -0
  852. package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
  853. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
  854. package/deps/rocksdb/rocksdb/hdfs/README +0 -23
  855. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
  856. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
  857. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
  858. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
  859. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
  860. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
  861. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
  862. package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
  863. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
  864. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
  865. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
  866. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
  867. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
  868. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
  869. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
  870. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
  871. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
  872. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
  873. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
  874. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
  875. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
  876. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
  877. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
  878. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
  879. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
  880. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
  881. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
  882. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
  883. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
  884. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
  885. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
  886. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
  887. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
  888. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
  889. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
  890. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
  891. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
  892. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
  893. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
  894. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
  895. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
  896. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
  897. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
  898. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
  899. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
  900. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
  901. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
  902. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
  903. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
  904. package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
  905. package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
  906. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
  907. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
  908. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
  909. package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
@@ -21,13 +21,16 @@
21
21
  #include "db/db_impl/db_impl.h"
22
22
  #include "db/dbformat.h"
23
23
  #include "db/log_reader.h"
24
+ #include "db/version_util.h"
24
25
  #include "db/write_batch_internal.h"
25
- #include "env/composite_env_wrapper.h"
26
26
  #include "file/filename.h"
27
27
  #include "rocksdb/cache.h"
28
+ #include "rocksdb/experimental.h"
28
29
  #include "rocksdb/file_checksum.h"
30
+ #include "rocksdb/filter_policy.h"
31
+ #include "rocksdb/options.h"
29
32
  #include "rocksdb/table_properties.h"
30
- #include "rocksdb/utilities/backupable_db.h"
33
+ #include "rocksdb/utilities/backup_engine.h"
31
34
  #include "rocksdb/utilities/checkpoint.h"
32
35
  #include "rocksdb/utilities/debug.h"
33
36
  #include "rocksdb/utilities/options_util.h"
@@ -50,6 +53,7 @@ class FileChecksumGenCrc32c;
50
53
  class FileChecksumGenCrc32cFactory;
51
54
 
52
55
  const std::string LDBCommand::ARG_ENV_URI = "env_uri";
56
+ const std::string LDBCommand::ARG_FS_URI = "fs_uri";
53
57
  const std::string LDBCommand::ARG_DB = "db";
54
58
  const std::string LDBCommand::ARG_PATH = "path";
55
59
  const std::string LDBCommand::ARG_SECONDARY_PATH = "secondary_path";
@@ -81,6 +85,20 @@ const std::string LDBCommand::ARG_WRITE_BUFFER_SIZE = "write_buffer_size";
81
85
  const std::string LDBCommand::ARG_FILE_SIZE = "file_size";
82
86
  const std::string LDBCommand::ARG_CREATE_IF_MISSING = "create_if_missing";
83
87
  const std::string LDBCommand::ARG_NO_VALUE = "no_value";
88
+ const std::string LDBCommand::ARG_ENABLE_BLOB_FILES = "enable_blob_files";
89
+ const std::string LDBCommand::ARG_MIN_BLOB_SIZE = "min_blob_size";
90
+ const std::string LDBCommand::ARG_BLOB_FILE_SIZE = "blob_file_size";
91
+ const std::string LDBCommand::ARG_BLOB_COMPRESSION_TYPE =
92
+ "blob_compression_type";
93
+ const std::string LDBCommand::ARG_ENABLE_BLOB_GARBAGE_COLLECTION =
94
+ "enable_blob_garbage_collection";
95
+ const std::string LDBCommand::ARG_BLOB_GARBAGE_COLLECTION_AGE_CUTOFF =
96
+ "blob_garbage_collection_age_cutoff";
97
+ const std::string LDBCommand::ARG_BLOB_GARBAGE_COLLECTION_FORCE_THRESHOLD =
98
+ "blob_garbage_collection_force_threshold";
99
+ const std::string LDBCommand::ARG_BLOB_COMPACTION_READAHEAD_SIZE =
100
+ "blob_compaction_readahead_size";
101
+ const std::string LDBCommand::ARG_DECODE_BLOB_INDEX = "decode_blob_index";
84
102
 
85
103
  const char* LDBCommand::DELIM = " ==> ";
86
104
 
@@ -91,7 +109,7 @@ void DumpWalFile(Options options, std::string wal_file, bool print_header,
91
109
  LDBCommandExecuteResult* exec_state);
92
110
 
93
111
  void DumpSstFile(Options options, std::string filename, bool output_hex,
94
- bool show_properties);
112
+ bool show_properties, bool decode_blob_index);
95
113
  };
96
114
 
97
115
  LDBCommand* LDBCommand::InitFromCmdLineArgs(
@@ -247,6 +265,10 @@ LDBCommand* LDBCommand::SelectCommand(const ParsedParams& parsed_params) {
247
265
  return new DBFileDumperCommand(parsed_params.cmd_params,
248
266
  parsed_params.option_map,
249
267
  parsed_params.flags);
268
+ } else if (parsed_params.cmd == DBLiveFilesMetadataDumperCommand::Name()) {
269
+ return new DBLiveFilesMetadataDumperCommand(parsed_params.cmd_params,
270
+ parsed_params.option_map,
271
+ parsed_params.flags);
250
272
  } else if (parsed_params.cmd == InternalDumpCommand::Name()) {
251
273
  return new InternalDumpCommand(parsed_params.cmd_params,
252
274
  parsed_params.option_map,
@@ -283,6 +305,10 @@ LDBCommand* LDBCommand::SelectCommand(const ParsedParams& parsed_params) {
283
305
  return new UnsafeRemoveSstFileCommand(parsed_params.cmd_params,
284
306
  parsed_params.option_map,
285
307
  parsed_params.flags);
308
+ } else if (parsed_params.cmd == UpdateManifestCommand::Name()) {
309
+ return new UpdateManifestCommand(parsed_params.cmd_params,
310
+ parsed_params.option_map,
311
+ parsed_params.flags);
286
312
  }
287
313
  return nullptr;
288
314
  }
@@ -295,9 +321,10 @@ void LDBCommand::Run() {
295
321
 
296
322
  if (!options_.env || options_.env == Env::Default()) {
297
323
  Env* env = Env::Default();
298
- Status s = Env::LoadEnv(env_uri_, &env, &env_guard_);
299
- if (!s.ok() && !s.IsNotFound()) {
300
- fprintf(stderr, "LoadEnv: %s\n", s.ToString().c_str());
324
+ Status s = Env::CreateFromUri(config_options_, env_uri_, fs_uri_, &env,
325
+ &env_guard_);
326
+ if (!s.ok()) {
327
+ fprintf(stderr, "%s\n", s.ToString().c_str());
301
328
  exec_state_ = LDBCommandExecuteResult::Failed(s.ToString());
302
329
  return;
303
330
  }
@@ -342,7 +369,7 @@ LDBCommand::LDBCommand(const std::map<std::string, std::string>& options,
342
369
  option_map_(options),
343
370
  flags_(flags),
344
371
  valid_cmd_line_options_(valid_cmd_line_options) {
345
- std::map<std::string, std::string>::const_iterator itr = options.find(ARG_DB);
372
+ auto itr = options.find(ARG_DB);
346
373
  if (itr != options.end()) {
347
374
  db_path_ = itr->second;
348
375
  }
@@ -352,6 +379,11 @@ LDBCommand::LDBCommand(const std::map<std::string, std::string>& options,
352
379
  env_uri_ = itr->second;
353
380
  }
354
381
 
382
+ itr = options.find(ARG_FS_URI);
383
+ if (itr != options.end()) {
384
+ fs_uri_ = itr->second;
385
+ }
386
+
355
387
  itr = options.find(ARG_CF_NAME);
356
388
  if (itr != options.end()) {
357
389
  column_family_name_ = itr->second;
@@ -372,6 +404,9 @@ LDBCommand::LDBCommand(const std::map<std::string, std::string>& options,
372
404
  try_load_options_ = IsFlagPresent(flags, ARG_TRY_LOAD_OPTIONS);
373
405
  force_consistency_checks_ =
374
406
  !IsFlagPresent(flags, ARG_DISABLE_CONSISTENCY_CHECKS);
407
+ enable_blob_files_ = IsFlagPresent(flags, ARG_ENABLE_BLOB_FILES);
408
+ enable_blob_garbage_collection_ =
409
+ IsFlagPresent(flags, ARG_ENABLE_BLOB_GARBAGE_COLLECTION);
375
410
  config_options_.ignore_unknown_options =
376
411
  IsFlagPresent(flags, ARG_IGNORE_UNKNOWN_OPTIONS);
377
412
  }
@@ -484,6 +519,7 @@ ColumnFamilyHandle* LDBCommand::GetCfHandle() {
484
519
  std::vector<std::string> LDBCommand::BuildCmdLineOptions(
485
520
  std::vector<std::string> options) {
486
521
  std::vector<std::string> ret = {ARG_ENV_URI,
522
+ ARG_FS_URI,
487
523
  ARG_DB,
488
524
  ARG_SECONDARY_PATH,
489
525
  ARG_BLOOM_BITS,
@@ -496,12 +532,61 @@ std::vector<std::string> LDBCommand::BuildCmdLineOptions(
496
532
  ARG_FIX_PREFIX_LEN,
497
533
  ARG_TRY_LOAD_OPTIONS,
498
534
  ARG_DISABLE_CONSISTENCY_CHECKS,
535
+ ARG_ENABLE_BLOB_FILES,
536
+ ARG_MIN_BLOB_SIZE,
537
+ ARG_BLOB_FILE_SIZE,
538
+ ARG_BLOB_COMPRESSION_TYPE,
539
+ ARG_ENABLE_BLOB_GARBAGE_COLLECTION,
540
+ ARG_BLOB_GARBAGE_COLLECTION_AGE_CUTOFF,
541
+ ARG_BLOB_GARBAGE_COLLECTION_FORCE_THRESHOLD,
542
+ ARG_BLOB_COMPACTION_READAHEAD_SIZE,
499
543
  ARG_IGNORE_UNKNOWN_OPTIONS,
500
544
  ARG_CF_NAME};
501
545
  ret.insert(ret.end(), options.begin(), options.end());
502
546
  return ret;
503
547
  }
504
548
 
549
+ /**
550
+ * Parses the specific double option and fills in the value.
551
+ * Returns true if the option is found.
552
+ * Returns false if the option is not found or if there is an error parsing the
553
+ * value. If there is an error, the specified exec_state is also
554
+ * updated.
555
+ */
556
+ bool LDBCommand::ParseDoubleOption(
557
+ const std::map<std::string, std::string>& /*options*/,
558
+ const std::string& option, double& value,
559
+ LDBCommandExecuteResult& exec_state) {
560
+ auto itr = option_map_.find(option);
561
+ if (itr != option_map_.end()) {
562
+ #if defined(CYGWIN)
563
+ char* str_end = nullptr;
564
+ value = std::strtod(itr->second.c_str(), &str_end);
565
+ if (str_end == itr->second.c_str()) {
566
+ exec_state =
567
+ LDBCommandExecuteResult::Failed(option + " has an invalid value.");
568
+ } else if (errno == ERANGE) {
569
+ exec_state = LDBCommandExecuteResult::Failed(
570
+ option + " has a value out-of-range.");
571
+ } else {
572
+ return true;
573
+ }
574
+ #else
575
+ try {
576
+ value = std::stod(itr->second);
577
+ return true;
578
+ } catch (const std::invalid_argument&) {
579
+ exec_state =
580
+ LDBCommandExecuteResult::Failed(option + " has an invalid value.");
581
+ } catch (const std::out_of_range&) {
582
+ exec_state = LDBCommandExecuteResult::Failed(
583
+ option + " has a value out-of-range.");
584
+ }
585
+ #endif
586
+ }
587
+ return false;
588
+ }
589
+
505
590
  /**
506
591
  * Parses the specific integer option and fills in the value.
507
592
  * Returns true if the option is found.
@@ -513,15 +598,23 @@ bool LDBCommand::ParseIntOption(
513
598
  const std::map<std::string, std::string>& /*options*/,
514
599
  const std::string& option, int& value,
515
600
  LDBCommandExecuteResult& exec_state) {
516
- std::map<std::string, std::string>::const_iterator itr =
517
- option_map_.find(option);
601
+ auto itr = option_map_.find(option);
518
602
  if (itr != option_map_.end()) {
519
- try {
520
603
  #if defined(CYGWIN)
521
- value = strtol(itr->second.c_str(), 0, 10);
604
+ char* str_end = nullptr;
605
+ value = strtol(itr->second.c_str(), &str_end, 10);
606
+ if (str_end == itr->second.c_str()) {
607
+ exec_state =
608
+ LDBCommandExecuteResult::Failed(option + " has an invalid value.");
609
+ } else if (errno == ERANGE) {
610
+ exec_state = LDBCommandExecuteResult::Failed(
611
+ option + " has a value out-of-range.");
612
+ } else {
613
+ return true;
614
+ }
522
615
  #else
616
+ try {
523
617
  value = std::stoi(itr->second);
524
- #endif
525
618
  return true;
526
619
  } catch (const std::invalid_argument&) {
527
620
  exec_state =
@@ -530,6 +623,7 @@ bool LDBCommand::ParseIntOption(
530
623
  exec_state = LDBCommandExecuteResult::Failed(
531
624
  option + " has a value out-of-range.");
532
625
  }
626
+ #endif
533
627
  }
534
628
  return false;
535
629
  }
@@ -550,6 +644,51 @@ bool LDBCommand::ParseStringOption(
550
644
  return false;
551
645
  }
552
646
 
647
+ /**
648
+ * Parses the specified compression type and fills in the value.
649
+ * Returns true if the compression type is found.
650
+ * Returns false otherwise.
651
+ */
652
+ bool LDBCommand::ParseCompressionTypeOption(
653
+ const std::map<std::string, std::string>& /*options*/,
654
+ const std::string& option, CompressionType& value,
655
+ LDBCommandExecuteResult& exec_state) {
656
+ auto itr = option_map_.find(option);
657
+ if (itr != option_map_.end()) {
658
+ const std::string& comp = itr->second;
659
+ if (comp == "no") {
660
+ value = kNoCompression;
661
+ return true;
662
+ } else if (comp == "snappy") {
663
+ value = kSnappyCompression;
664
+ return true;
665
+ } else if (comp == "zlib") {
666
+ value = kZlibCompression;
667
+ return true;
668
+ } else if (comp == "bzip2") {
669
+ value = kBZip2Compression;
670
+ return true;
671
+ } else if (comp == "lz4") {
672
+ value = kLZ4Compression;
673
+ return true;
674
+ } else if (comp == "lz4hc") {
675
+ value = kLZ4HCCompression;
676
+ return true;
677
+ } else if (comp == "xpress") {
678
+ value = kXpressCompression;
679
+ return true;
680
+ } else if (comp == "zstd") {
681
+ value = kZSTD;
682
+ return true;
683
+ } else {
684
+ // Unknown compression.
685
+ exec_state = LDBCommandExecuteResult::Failed(
686
+ "Unknown compression algorithm: " + comp);
687
+ }
688
+ }
689
+ return false;
690
+ }
691
+
553
692
  void LDBCommand::OverrideBaseOptions() {
554
693
  options_.create_if_missing = false;
555
694
 
@@ -602,37 +741,88 @@ void LDBCommand::OverrideBaseCFOptions(ColumnFamilyOptions* cf_opts) {
602
741
  cf_opts->table_factory.reset(NewBlockBasedTableFactory(table_options));
603
742
  }
604
743
 
605
- auto itr = option_map_.find(ARG_AUTO_COMPACTION);
606
- if (itr != option_map_.end()) {
607
- cf_opts->disable_auto_compactions = !StringToBool(itr->second);
744
+ cf_opts->enable_blob_files = enable_blob_files_;
745
+
746
+ int min_blob_size;
747
+ if (ParseIntOption(option_map_, ARG_MIN_BLOB_SIZE, min_blob_size,
748
+ exec_state_)) {
749
+ if (min_blob_size >= 0) {
750
+ cf_opts->min_blob_size = min_blob_size;
751
+ } else {
752
+ exec_state_ =
753
+ LDBCommandExecuteResult::Failed(ARG_MIN_BLOB_SIZE + " must be >= 0.");
754
+ }
608
755
  }
609
756
 
610
- itr = option_map_.find(ARG_COMPRESSION_TYPE);
611
- if (itr != option_map_.end()) {
612
- std::string comp = itr->second;
613
- if (comp == "no") {
614
- cf_opts->compression = kNoCompression;
615
- } else if (comp == "snappy") {
616
- cf_opts->compression = kSnappyCompression;
617
- } else if (comp == "zlib") {
618
- cf_opts->compression = kZlibCompression;
619
- } else if (comp == "bzip2") {
620
- cf_opts->compression = kBZip2Compression;
621
- } else if (comp == "lz4") {
622
- cf_opts->compression = kLZ4Compression;
623
- } else if (comp == "lz4hc") {
624
- cf_opts->compression = kLZ4HCCompression;
625
- } else if (comp == "xpress") {
626
- cf_opts->compression = kXpressCompression;
627
- } else if (comp == "zstd") {
628
- cf_opts->compression = kZSTD;
757
+ int blob_file_size;
758
+ if (ParseIntOption(option_map_, ARG_BLOB_FILE_SIZE, blob_file_size,
759
+ exec_state_)) {
760
+ if (blob_file_size > 0) {
761
+ cf_opts->blob_file_size = blob_file_size;
629
762
  } else {
630
- // Unknown compression.
631
763
  exec_state_ =
632
- LDBCommandExecuteResult::Failed("Unknown compression level: " + comp);
764
+ LDBCommandExecuteResult::Failed(ARG_BLOB_FILE_SIZE + " must be > 0.");
765
+ }
766
+ }
767
+
768
+ cf_opts->enable_blob_garbage_collection = enable_blob_garbage_collection_;
769
+
770
+ double blob_garbage_collection_age_cutoff;
771
+ if (ParseDoubleOption(option_map_, ARG_BLOB_GARBAGE_COLLECTION_AGE_CUTOFF,
772
+ blob_garbage_collection_age_cutoff, exec_state_)) {
773
+ if (blob_garbage_collection_age_cutoff >= 0 &&
774
+ blob_garbage_collection_age_cutoff <= 1) {
775
+ cf_opts->blob_garbage_collection_age_cutoff =
776
+ blob_garbage_collection_age_cutoff;
777
+ } else {
778
+ exec_state_ = LDBCommandExecuteResult::Failed(
779
+ ARG_BLOB_GARBAGE_COLLECTION_AGE_CUTOFF + " must be >= 0 and <= 1.");
780
+ }
781
+ }
782
+
783
+ double blob_garbage_collection_force_threshold;
784
+ if (ParseDoubleOption(option_map_,
785
+ ARG_BLOB_GARBAGE_COLLECTION_FORCE_THRESHOLD,
786
+ blob_garbage_collection_force_threshold, exec_state_)) {
787
+ if (blob_garbage_collection_force_threshold >= 0 &&
788
+ blob_garbage_collection_force_threshold <= 1) {
789
+ cf_opts->blob_garbage_collection_force_threshold =
790
+ blob_garbage_collection_force_threshold;
791
+ } else {
792
+ exec_state_ = LDBCommandExecuteResult::Failed(
793
+ ARG_BLOB_GARBAGE_COLLECTION_FORCE_THRESHOLD +
794
+ " must be >= 0 and <= 1.");
795
+ }
796
+ }
797
+
798
+ int blob_compaction_readahead_size;
799
+ if (ParseIntOption(option_map_, ARG_BLOB_COMPACTION_READAHEAD_SIZE,
800
+ blob_compaction_readahead_size, exec_state_)) {
801
+ if (blob_compaction_readahead_size > 0) {
802
+ cf_opts->blob_compaction_readahead_size = blob_compaction_readahead_size;
803
+ } else {
804
+ exec_state_ = LDBCommandExecuteResult::Failed(
805
+ ARG_BLOB_COMPACTION_READAHEAD_SIZE + " must be > 0.");
633
806
  }
634
807
  }
635
808
 
809
+ auto itr = option_map_.find(ARG_AUTO_COMPACTION);
810
+ if (itr != option_map_.end()) {
811
+ cf_opts->disable_auto_compactions = !StringToBool(itr->second);
812
+ }
813
+
814
+ CompressionType compression_type;
815
+ if (ParseCompressionTypeOption(option_map_, ARG_COMPRESSION_TYPE,
816
+ compression_type, exec_state_)) {
817
+ cf_opts->compression = compression_type;
818
+ }
819
+
820
+ CompressionType blob_compression_type;
821
+ if (ParseCompressionTypeOption(option_map_, ARG_BLOB_COMPRESSION_TYPE,
822
+ blob_compression_type, exec_state_)) {
823
+ cf_opts->blob_compression_type = blob_compression_type;
824
+ }
825
+
636
826
  int compression_max_dict_bytes;
637
827
  if (ParseIntOption(option_map_, ARG_COMPRESSION_MAX_DICT_BYTES,
638
828
  compression_max_dict_bytes, exec_state_)) {
@@ -693,11 +883,13 @@ void LDBCommand::PrepareOptions() {
693
883
  db_ = nullptr;
694
884
  return;
695
885
  }
696
- if (options_.env->FileExists(options_.wal_dir).IsNotFound()) {
697
- options_.wal_dir = db_path_;
698
- fprintf(
699
- stderr,
700
- "wal_dir loaded from the option file doesn't exist. Ignore it.\n");
886
+ if (!options_.wal_dir.empty()) {
887
+ if (options_.env->FileExists(options_.wal_dir).IsNotFound()) {
888
+ options_.wal_dir = db_path_;
889
+ fprintf(
890
+ stderr,
891
+ "wal_dir loaded from the option file doesn't exist. Ignore it.\n");
892
+ }
701
893
  }
702
894
 
703
895
  // If merge operator is not set, set a string append operator.
@@ -709,6 +901,10 @@ void LDBCommand::PrepareOptions() {
709
901
  }
710
902
  }
711
903
 
904
+ if (options_.env == Env::Default()) {
905
+ options_.env = config_options_.env;
906
+ }
907
+
712
908
  OverrideBaseOptions();
713
909
  if (exec_state_.IsFailed()) {
714
910
  return;
@@ -775,9 +971,7 @@ bool LDBCommand::ParseKeyValue(const std::string& line, std::string* key,
775
971
  * appropriate error msg to stderr.
776
972
  */
777
973
  bool LDBCommand::ValidateCmdLineOptions() {
778
- for (std::map<std::string, std::string>::const_iterator itr =
779
- option_map_.begin();
780
- itr != option_map_.end(); ++itr) {
974
+ for (auto itr = option_map_.begin(); itr != option_map_.end(); ++itr) {
781
975
  if (std::find(valid_cmd_line_options_.begin(),
782
976
  valid_cmd_line_options_.end(),
783
977
  itr->first) == valid_cmd_line_options_.end()) {
@@ -866,7 +1060,7 @@ bool LDBCommand::IsValueHex(const std::map<std::string, std::string>& options,
866
1060
  bool LDBCommand::ParseBooleanOption(
867
1061
  const std::map<std::string, std::string>& options,
868
1062
  const std::string& option, bool default_val) {
869
- std::map<std::string, std::string>::const_iterator itr = options.find(option);
1063
+ auto itr = options.find(option);
870
1064
  if (itr != options.end()) {
871
1065
  std::string option_val = itr->second;
872
1066
  return StringToBool(itr->second);
@@ -896,8 +1090,7 @@ CompactorCommand::CompactorCommand(
896
1090
  ARG_VALUE_HEX, ARG_TTL})),
897
1091
  null_from_(true),
898
1092
  null_to_(true) {
899
- std::map<std::string, std::string>::const_iterator itr =
900
- options.find(ARG_FROM);
1093
+ auto itr = options.find(ARG_FROM);
901
1094
  if (itr != options.end()) {
902
1095
  null_from_ = false;
903
1096
  from_ = itr->second;
@@ -944,8 +1137,14 @@ void CompactorCommand::DoCommand() {
944
1137
  CompactRangeOptions cro;
945
1138
  cro.bottommost_level_compaction = BottommostLevelCompaction::kForceOptimized;
946
1139
 
947
- db_->CompactRange(cro, GetCfHandle(), begin, end);
948
- exec_state_ = LDBCommandExecuteResult::Succeed("");
1140
+ Status s = db_->CompactRange(cro, GetCfHandle(), begin, end);
1141
+ if (!s.ok()) {
1142
+ std::stringstream oss;
1143
+ oss << "Compaction failed: " << s.ToString();
1144
+ exec_state_ = LDBCommandExecuteResult::Failed(oss.str());
1145
+ } else {
1146
+ exec_state_ = LDBCommandExecuteResult::Succeed("");
1147
+ }
949
1148
 
950
1149
  delete begin;
951
1150
  delete end;
@@ -1008,11 +1207,12 @@ void DBLoaderCommand::DoCommand() {
1008
1207
  // prefer ifstream getline performance vs that from std::cin istream
1009
1208
  std::ifstream ifs_stdin("/dev/stdin");
1010
1209
  std::istream* istream_p = ifs_stdin.is_open() ? &ifs_stdin : &std::cin;
1011
- while (getline(*istream_p, line, '\n')) {
1210
+ Status s;
1211
+ while (s.ok() && getline(*istream_p, line, '\n')) {
1012
1212
  std::string key;
1013
1213
  std::string value;
1014
1214
  if (ParseKeyValue(line, &key, &value, is_key_hex_, is_value_hex_)) {
1015
- db_->Put(write_options, GetCfHandle(), Slice(key), Slice(value));
1215
+ s = db_->Put(write_options, GetCfHandle(), Slice(key), Slice(value));
1016
1216
  } else if (0 == line.find("Keys in range:")) {
1017
1217
  // ignore this line
1018
1218
  } else if (0 == line.find("Created bg thread 0x")) {
@@ -1025,8 +1225,19 @@ void DBLoaderCommand::DoCommand() {
1025
1225
  if (bad_lines > 0) {
1026
1226
  std::cout << "Warning: " << bad_lines << " bad lines ignored." << std::endl;
1027
1227
  }
1028
- if (compact_) {
1029
- db_->CompactRange(CompactRangeOptions(), GetCfHandle(), nullptr, nullptr);
1228
+ if (!s.ok()) {
1229
+ std::stringstream oss;
1230
+ oss << "Load failed: " << s.ToString();
1231
+ exec_state_ = LDBCommandExecuteResult::Failed(oss.str());
1232
+ }
1233
+ if (compact_ && s.ok()) {
1234
+ s = db_->CompactRange(CompactRangeOptions(), GetCfHandle(), nullptr,
1235
+ nullptr);
1236
+ }
1237
+ if (!s.ok()) {
1238
+ std::stringstream oss;
1239
+ oss << "Compaction failed: " << s.ToString();
1240
+ exec_state_ = LDBCommandExecuteResult::Failed(oss.str());
1030
1241
  }
1031
1242
  }
1032
1243
 
@@ -1049,7 +1260,8 @@ void DumpManifestFile(Options options, std::string file, bool verbose, bool hex,
1049
1260
  WriteBufferManager wb(options.db_write_buffer_size);
1050
1261
  ImmutableDBOptions immutable_db_options(options);
1051
1262
  VersionSet versions(dbname, &immutable_db_options, sopt, tc.get(), &wb, &wc,
1052
- /*block_cache_tracer=*/nullptr, /*io_tracer=*/nullptr);
1263
+ /*block_cache_tracer=*/nullptr, /*io_tracer=*/nullptr,
1264
+ /*db_session_id*/ "");
1053
1265
  Status s = versions.DumpManifest(options, file, verbose, hex, json);
1054
1266
  if (!s.ok()) {
1055
1267
  fprintf(stderr, "Error in processing file %s %s\n", file.c_str(),
@@ -1085,8 +1297,7 @@ ManifestDumpCommand::ManifestDumpCommand(
1085
1297
  verbose_ = IsFlagPresent(flags, ARG_VERBOSE);
1086
1298
  json_ = IsFlagPresent(flags, ARG_JSON);
1087
1299
 
1088
- std::map<std::string, std::string>::const_iterator itr =
1089
- options.find(ARG_PATH);
1300
+ auto itr = options.find(ARG_PATH);
1090
1301
  if (itr != options.end()) {
1091
1302
  path_ = itr->second;
1092
1303
  if (path_.empty()) {
@@ -1154,7 +1365,7 @@ void ManifestDumpCommand::DoCommand() {
1154
1365
  exec_state_ = LDBCommandExecuteResult::Failed(err_msg);
1155
1366
  return;
1156
1367
  }
1157
- if (db_path_[db_path_.length() - 1] != '/') {
1368
+ if (db_path_.back() != '/') {
1158
1369
  db_path_.append("/");
1159
1370
  }
1160
1371
  manifestfile = db_path_ + matched_file;
@@ -1174,9 +1385,9 @@ void ManifestDumpCommand::DoCommand() {
1174
1385
  // ----------------------------------------------------------------------------
1175
1386
  namespace {
1176
1387
 
1177
- void GetLiveFilesChecksumInfoFromVersionSet(Options options,
1178
- const std::string& db_path,
1179
- FileChecksumList* checksum_list) {
1388
+ Status GetLiveFilesChecksumInfoFromVersionSet(Options options,
1389
+ const std::string& db_path,
1390
+ FileChecksumList* checksum_list) {
1180
1391
  EnvOptions sopt;
1181
1392
  Status s;
1182
1393
  std::string dbname(db_path);
@@ -1191,7 +1402,8 @@ void GetLiveFilesChecksumInfoFromVersionSet(Options options,
1191
1402
  WriteBufferManager wb(options.db_write_buffer_size);
1192
1403
  ImmutableDBOptions immutable_db_options(options);
1193
1404
  VersionSet versions(dbname, &immutable_db_options, sopt, tc.get(), &wb, &wc,
1194
- /*block_cache_tracer=*/nullptr, /*io_tracer=*/nullptr);
1405
+ /*block_cache_tracer=*/nullptr, /*io_tracer=*/nullptr,
1406
+ /*db_session_id*/ "");
1195
1407
  std::vector<std::string> cf_name_list;
1196
1408
  s = versions.ListColumnFamilies(&cf_name_list, db_path,
1197
1409
  immutable_db_options.fs.get());
@@ -1205,9 +1417,7 @@ void GetLiveFilesChecksumInfoFromVersionSet(Options options,
1205
1417
  if (s.ok()) {
1206
1418
  s = versions.GetLiveFilesChecksumInfo(checksum_list);
1207
1419
  }
1208
- if (!s.ok()) {
1209
- fprintf(stderr, "Error Status: %s", s.ToString().c_str());
1210
- }
1420
+ return s;
1211
1421
  }
1212
1422
 
1213
1423
  } // namespace
@@ -1228,8 +1438,7 @@ FileChecksumDumpCommand::FileChecksumDumpCommand(
1228
1438
  : LDBCommand(options, flags, false,
1229
1439
  BuildCmdLineOptions({ARG_PATH, ARG_HEX})),
1230
1440
  path_("") {
1231
- std::map<std::string, std::string>::const_iterator itr =
1232
- options.find(ARG_PATH);
1441
+ auto itr = options.find(ARG_PATH);
1233
1442
  if (itr != options.end()) {
1234
1443
  path_ = itr->second;
1235
1444
  if (path_.empty()) {
@@ -1246,14 +1455,14 @@ void FileChecksumDumpCommand::DoCommand() {
1246
1455
  // ......
1247
1456
 
1248
1457
  std::unique_ptr<FileChecksumList> checksum_list(NewFileChecksumList());
1249
- GetLiveFilesChecksumInfoFromVersionSet(options_, db_path_,
1250
- checksum_list.get());
1251
- if (checksum_list != nullptr) {
1458
+ Status s = GetLiveFilesChecksumInfoFromVersionSet(options_, db_path_,
1459
+ checksum_list.get());
1460
+ if (s.ok() && checksum_list != nullptr) {
1252
1461
  std::vector<uint64_t> file_numbers;
1253
1462
  std::vector<std::string> checksums;
1254
1463
  std::vector<std::string> checksum_func_names;
1255
- Status s = checksum_list->GetAllFileChecksums(&file_numbers, &checksums,
1256
- &checksum_func_names);
1464
+ s = checksum_list->GetAllFileChecksums(&file_numbers, &checksums,
1465
+ &checksum_func_names);
1257
1466
  if (s.ok()) {
1258
1467
  for (size_t i = 0; i < file_numbers.size(); i++) {
1259
1468
  assert(i < file_numbers.size());
@@ -1268,8 +1477,12 @@ void FileChecksumDumpCommand::DoCommand() {
1268
1477
  fprintf(stdout, "%" PRId64 ", %s, %s\n", file_numbers[i],
1269
1478
  checksum_func_names[i].c_str(), checksum.c_str());
1270
1479
  }
1480
+ fprintf(stdout, "Print SST file checksum information finished \n");
1271
1481
  }
1272
- fprintf(stdout, "Print SST file checksum information finished \n");
1482
+ }
1483
+
1484
+ if (!s.ok()) {
1485
+ exec_state_ = LDBCommandExecuteResult::Failed(s.ToString());
1273
1486
  }
1274
1487
  }
1275
1488
 
@@ -1500,8 +1713,7 @@ InternalDumpCommand::InternalDumpCommand(
1500
1713
  has_to_ = ParseStringOption(options, ARG_TO, &to_);
1501
1714
 
1502
1715
  ParseIntOption(options, ARG_MAX_KEYS, max_keys_, exec_state_);
1503
- std::map<std::string, std::string>::const_iterator itr =
1504
- options.find(ARG_COUNT_DELIM);
1716
+ auto itr = options.find(ARG_COUNT_DELIM);
1505
1717
  if (itr != options.end()) {
1506
1718
  delim_ = itr->second;
1507
1719
  count_delim_ = true;
@@ -1636,8 +1848,7 @@ DBDumperCommand::DBDumperCommand(
1636
1848
  count_only_(false),
1637
1849
  count_delim_(false),
1638
1850
  print_stats_(false) {
1639
- std::map<std::string, std::string>::const_iterator itr =
1640
- options.find(ARG_FROM);
1851
+ auto itr = options.find(ARG_FROM);
1641
1852
  if (itr != options.end()) {
1642
1853
  null_from_ = false;
1643
1854
  from_ = itr->second;
@@ -1746,7 +1957,8 @@ void DBDumperCommand::DoCommand() {
1746
1957
  &exec_state_);
1747
1958
  break;
1748
1959
  case kTableFile:
1749
- DumpSstFile(options_, path_, is_key_hex_, /* show_properties */ true);
1960
+ DumpSstFile(options_, path_, is_key_hex_, /* show_properties */ true,
1961
+ /* decode_blob_index */ false);
1750
1962
  break;
1751
1963
  case kDescriptorFile:
1752
1964
  DumpManifestFile(options_, path_, /* verbose_ */ false, is_key_hex_,
@@ -1972,7 +2184,8 @@ Status ReduceDBLevelsCommand::GetOldNumOfLevels(Options& opt,
1972
2184
  WriteController wc(opt.delayed_write_rate);
1973
2185
  WriteBufferManager wb(opt.db_write_buffer_size);
1974
2186
  VersionSet versions(db_path_, &db_options, soptions, tc.get(), &wb, &wc,
1975
- /*block_cache_tracer=*/nullptr, /*io_tracer=*/nullptr);
2187
+ /*block_cache_tracer=*/nullptr, /*io_tracer=*/nullptr,
2188
+ /*db_session_id*/ "");
1976
2189
  std::vector<ColumnFamilyDescriptor> dummy;
1977
2190
  ColumnFamilyDescriptor dummy_descriptor(kDefaultColumnFamilyName,
1978
2191
  ColumnFamilyOptions(opt));
@@ -2129,8 +2342,7 @@ void ChangeCompactionStyleCommand::DoCommand() {
2129
2342
  std::string property;
2130
2343
  std::string files_per_level;
2131
2344
  for (int i = 0; i < db_->NumberLevels(GetCfHandle()); i++) {
2132
- db_->GetProperty(GetCfHandle(),
2133
- "rocksdb.num-files-at-level" + NumberToString(i),
2345
+ db_->GetProperty(GetCfHandle(), "rocksdb.num-files-at-level" + ToString(i),
2134
2346
  &property);
2135
2347
 
2136
2348
  // format print string
@@ -2145,14 +2357,20 @@ void ChangeCompactionStyleCommand::DoCommand() {
2145
2357
  CompactRangeOptions compact_options;
2146
2358
  compact_options.change_level = true;
2147
2359
  compact_options.target_level = 0;
2148
- db_->CompactRange(compact_options, GetCfHandle(), nullptr, nullptr);
2360
+ Status s =
2361
+ db_->CompactRange(compact_options, GetCfHandle(), nullptr, nullptr);
2362
+ if (!s.ok()) {
2363
+ std::stringstream oss;
2364
+ oss << "Compaction failed: " << s.ToString();
2365
+ exec_state_ = LDBCommandExecuteResult::Failed(oss.str());
2366
+ return;
2367
+ }
2149
2368
 
2150
2369
  // verify compaction result
2151
2370
  files_per_level = "";
2152
2371
  int num_files = 0;
2153
2372
  for (int i = 0; i < db_->NumberLevels(GetCfHandle()); i++) {
2154
- db_->GetProperty(GetCfHandle(),
2155
- "rocksdb.num-files-at-level" + NumberToString(i),
2373
+ db_->GetProperty(GetCfHandle(), "rocksdb.num-files-at-level" + ToString(i),
2156
2374
  &property);
2157
2375
 
2158
2376
  // format print string
@@ -2276,6 +2494,14 @@ class InMemoryHandler : public WriteBatch::Handler {
2276
2494
  return Status::OK();
2277
2495
  }
2278
2496
 
2497
+ Status MarkCommitWithTimestamp(const Slice& xid,
2498
+ const Slice& commit_ts) override {
2499
+ row_ << "COMMIT_WITH_TIMESTAMP(";
2500
+ row_ << LDBCommand::StringToHex(xid.ToString()) << ", ";
2501
+ row_ << LDBCommand::StringToHex(commit_ts.ToString()) << ") ";
2502
+ return Status::OK();
2503
+ }
2504
+
2279
2505
  ~InMemoryHandler() override {}
2280
2506
 
2281
2507
  protected:
@@ -2290,19 +2516,11 @@ class InMemoryHandler : public WriteBatch::Handler {
2290
2516
  void DumpWalFile(Options options, std::string wal_file, bool print_header,
2291
2517
  bool print_values, bool is_write_committed,
2292
2518
  LDBCommandExecuteResult* exec_state) {
2293
- Env* env = options.env;
2294
- EnvOptions soptions(options);
2519
+ const auto& fs = options.env->GetFileSystem();
2520
+ FileOptions soptions(options);
2295
2521
  std::unique_ptr<SequentialFileReader> wal_file_reader;
2296
-
2297
- Status status;
2298
- {
2299
- std::unique_ptr<SequentialFile> file;
2300
- status = env->NewSequentialFile(wal_file, &file, soptions);
2301
- if (status.ok()) {
2302
- wal_file_reader.reset(new SequentialFileReader(
2303
- NewLegacySequentialFileWrapper(file), wal_file));
2304
- }
2305
- }
2522
+ Status status = SequentialFileReader::Create(fs, wal_file, soptions,
2523
+ &wal_file_reader, nullptr);
2306
2524
  if (!status.ok()) {
2307
2525
  if (exec_state) {
2308
2526
  *exec_state = LDBCommandExecuteResult::Failed("Failed to open WAL file " +
@@ -2338,19 +2556,38 @@ void DumpWalFile(Options options, std::string wal_file, bool print_header,
2338
2556
  }
2339
2557
  std::cout << "\n";
2340
2558
  }
2341
- while (reader.ReadRecord(&record, &scratch)) {
2559
+ while (status.ok() && reader.ReadRecord(&record, &scratch)) {
2342
2560
  row.str("");
2343
2561
  if (record.size() < WriteBatchInternal::kHeader) {
2344
2562
  reporter.Corruption(record.size(),
2345
2563
  Status::Corruption("log record too small"));
2346
2564
  } else {
2347
- WriteBatchInternal::SetContents(&batch, record);
2565
+ status = WriteBatchInternal::SetContents(&batch, record);
2566
+ if (!status.ok()) {
2567
+ std::stringstream oss;
2568
+ oss << "Parsing write batch failed: " << status.ToString();
2569
+ if (exec_state) {
2570
+ *exec_state = LDBCommandExecuteResult::Failed(oss.str());
2571
+ } else {
2572
+ std::cerr << oss.str() << std::endl;
2573
+ }
2574
+ break;
2575
+ }
2348
2576
  row << WriteBatchInternal::Sequence(&batch) << ",";
2349
2577
  row << WriteBatchInternal::Count(&batch) << ",";
2350
2578
  row << WriteBatchInternal::ByteSize(&batch) << ",";
2351
2579
  row << reader.LastRecordOffset() << ",";
2352
2580
  InMemoryHandler handler(row, print_values, is_write_committed);
2353
- batch.Iterate(&handler);
2581
+ status = batch.Iterate(&handler);
2582
+ if (!status.ok()) {
2583
+ if (exec_state) {
2584
+ std::stringstream oss;
2585
+ oss << "Print write batch error: " << status.ToString();
2586
+ *exec_state = LDBCommandExecuteResult::Failed(oss.str());
2587
+ }
2588
+ row << "error: " << status.ToString();
2589
+ break;
2590
+ }
2354
2591
  row << "\n";
2355
2592
  }
2356
2593
  std::cout << row.str();
@@ -2377,8 +2614,7 @@ WALDumperCommand::WALDumperCommand(
2377
2614
  is_write_committed_(false) {
2378
2615
  wal_file_.clear();
2379
2616
 
2380
- std::map<std::string, std::string>::const_iterator itr =
2381
- options.find(ARG_WAL_FILE);
2617
+ auto itr = options.find(ARG_WAL_FILE);
2382
2618
  if (itr != options.end()) {
2383
2619
  wal_file_ = itr->second;
2384
2620
  }
@@ -2448,7 +2684,9 @@ void GetCommand::DoCommand() {
2448
2684
  fprintf(stdout, "%s\n",
2449
2685
  (is_value_hex_ ? StringToHex(value) : value).c_str());
2450
2686
  } else {
2451
- exec_state_ = LDBCommandExecuteResult::Failed(st.ToString());
2687
+ std::stringstream oss;
2688
+ oss << "Get failed: " << st.ToString();
2689
+ exec_state_ = LDBCommandExecuteResult::Failed(oss.str());
2452
2690
  }
2453
2691
  }
2454
2692
 
@@ -2500,7 +2738,9 @@ void ApproxSizeCommand::DoCommand() {
2500
2738
  uint64_t sizes[1];
2501
2739
  Status s = db_->GetApproximateSizes(GetCfHandle(), ranges, 1, sizes);
2502
2740
  if (!s.ok()) {
2503
- exec_state_ = LDBCommandExecuteResult::Failed(s.ToString());
2741
+ std::stringstream oss;
2742
+ oss << "ApproximateSize failed: " << s.ToString();
2743
+ exec_state_ = LDBCommandExecuteResult::Failed(oss.str());
2504
2744
  } else {
2505
2745
  fprintf(stdout, "%lu\n", (unsigned long)sizes[0]);
2506
2746
  }
@@ -2549,16 +2789,28 @@ void BatchPutCommand::DoCommand() {
2549
2789
  }
2550
2790
  WriteBatch batch;
2551
2791
 
2792
+ Status st;
2793
+ std::stringstream oss;
2552
2794
  for (std::vector<std::pair<std::string, std::string>>::const_iterator itr =
2553
2795
  key_values_.begin();
2554
2796
  itr != key_values_.end(); ++itr) {
2555
- batch.Put(GetCfHandle(), itr->first, itr->second);
2797
+ st = batch.Put(GetCfHandle(), itr->first, itr->second);
2798
+ if (!st.ok()) {
2799
+ oss << "Put to write batch failed: " << itr->first << "=>" << itr->second
2800
+ << " error: " << st.ToString();
2801
+ break;
2802
+ }
2803
+ }
2804
+ if (st.ok()) {
2805
+ st = db_->Write(WriteOptions(), &batch);
2806
+ if (!st.ok()) {
2807
+ oss << "Write failed: " << st.ToString();
2808
+ }
2556
2809
  }
2557
- Status st = db_->Write(WriteOptions(), &batch);
2558
2810
  if (st.ok()) {
2559
2811
  fprintf(stdout, "OK\n");
2560
2812
  } else {
2561
- exec_state_ = LDBCommandExecuteResult::Failed(st.ToString());
2813
+ exec_state_ = LDBCommandExecuteResult::Failed(oss.str());
2562
2814
  }
2563
2815
  }
2564
2816
 
@@ -2581,8 +2833,7 @@ ScanCommand::ScanCommand(const std::vector<std::string>& /*params*/,
2581
2833
  end_key_specified_(false),
2582
2834
  max_keys_scanned_(-1),
2583
2835
  no_value_(false) {
2584
- std::map<std::string, std::string>::const_iterator itr =
2585
- options.find(ARG_FROM);
2836
+ auto itr = options.find(ARG_FROM);
2586
2837
  if (itr != options.end()) {
2587
2838
  start_key_ = itr->second;
2588
2839
  if (is_key_hex_) {
@@ -2886,7 +3137,9 @@ void DBQuerierCommand::DoCommand() {
2886
3137
  std::string line;
2887
3138
  std::string key;
2888
3139
  std::string value;
2889
- while (getline(std::cin, line, '\n')) {
3140
+ Status s;
3141
+ std::stringstream oss;
3142
+ while (s.ok() && getline(std::cin, line, '\n')) {
2890
3143
  // Parse line into std::vector<std::string>
2891
3144
  std::vector<std::string> tokens;
2892
3145
  size_t pos = 0;
@@ -2909,26 +3162,42 @@ void DBQuerierCommand::DoCommand() {
2909
3162
  "delete <key>\n");
2910
3163
  } else if (cmd == DELETE_CMD && tokens.size() == 2) {
2911
3164
  key = (is_key_hex_ ? HexToString(tokens[1]) : tokens[1]);
2912
- db_->Delete(write_options, GetCfHandle(), Slice(key));
2913
- fprintf(stdout, "Successfully deleted %s\n", tokens[1].c_str());
3165
+ s = db_->Delete(write_options, GetCfHandle(), Slice(key));
3166
+ if (s.ok()) {
3167
+ fprintf(stdout, "Successfully deleted %s\n", tokens[1].c_str());
3168
+ } else {
3169
+ oss << "delete " << key << " failed: " << s.ToString();
3170
+ }
2914
3171
  } else if (cmd == PUT_CMD && tokens.size() == 3) {
2915
3172
  key = (is_key_hex_ ? HexToString(tokens[1]) : tokens[1]);
2916
3173
  value = (is_value_hex_ ? HexToString(tokens[2]) : tokens[2]);
2917
- db_->Put(write_options, GetCfHandle(), Slice(key), Slice(value));
2918
- fprintf(stdout, "Successfully put %s %s\n",
2919
- tokens[1].c_str(), tokens[2].c_str());
3174
+ s = db_->Put(write_options, GetCfHandle(), Slice(key), Slice(value));
3175
+ if (s.ok()) {
3176
+ fprintf(stdout, "Successfully put %s %s\n", tokens[1].c_str(),
3177
+ tokens[2].c_str());
3178
+ } else {
3179
+ oss << "put " << key << "=>" << value << " failed: " << s.ToString();
3180
+ }
2920
3181
  } else if (cmd == GET_CMD && tokens.size() == 2) {
2921
3182
  key = (is_key_hex_ ? HexToString(tokens[1]) : tokens[1]);
2922
- if (db_->Get(read_options, GetCfHandle(), Slice(key), &value).ok()) {
3183
+ s = db_->Get(read_options, GetCfHandle(), Slice(key), &value);
3184
+ if (s.ok()) {
2923
3185
  fprintf(stdout, "%s\n", PrintKeyValue(key, value,
2924
3186
  is_key_hex_, is_value_hex_).c_str());
2925
3187
  } else {
2926
- fprintf(stdout, "Not found %s\n", tokens[1].c_str());
3188
+ if (s.IsNotFound()) {
3189
+ fprintf(stdout, "Not found %s\n", tokens[1].c_str());
3190
+ } else {
3191
+ oss << "get " << key << " error: " << s.ToString();
3192
+ }
2927
3193
  }
2928
3194
  } else {
2929
3195
  fprintf(stdout, "Unknown command %s\n", line.c_str());
2930
3196
  }
2931
3197
  }
3198
+ if (!s.ok()) {
3199
+ exec_state_ = LDBCommandExecuteResult::Failed(oss.str());
3200
+ }
2932
3201
  }
2933
3202
 
2934
3203
  // ----------------------------------------------------------------------------
@@ -2995,20 +3264,26 @@ void CheckPointCommand::DoCommand() {
2995
3264
 
2996
3265
  // ----------------------------------------------------------------------------
2997
3266
 
3267
+ const std::string RepairCommand::ARG_VERBOSE = "verbose";
3268
+
2998
3269
  RepairCommand::RepairCommand(const std::vector<std::string>& /*params*/,
2999
3270
  const std::map<std::string, std::string>& options,
3000
3271
  const std::vector<std::string>& flags)
3001
- : LDBCommand(options, flags, false, BuildCmdLineOptions({})) {}
3272
+ : LDBCommand(options, flags, false, BuildCmdLineOptions({ARG_VERBOSE})) {
3273
+ verbose_ = IsFlagPresent(flags, ARG_VERBOSE);
3274
+ }
3002
3275
 
3003
3276
  void RepairCommand::Help(std::string& ret) {
3004
3277
  ret.append(" ");
3005
3278
  ret.append(RepairCommand::Name());
3279
+ ret.append(" [--" + ARG_VERBOSE + "]");
3006
3280
  ret.append("\n");
3007
3281
  }
3008
3282
 
3009
3283
  void RepairCommand::OverrideBaseOptions() {
3010
3284
  LDBCommand::OverrideBaseOptions();
3011
- options_.info_log.reset(new StderrLogger(InfoLogLevel::WARN_LEVEL));
3285
+ auto level = verbose_ ? InfoLogLevel::INFO_LEVEL : InfoLogLevel::WARN_LEVEL;
3286
+ options_.info_log.reset(new StderrLogger(level));
3012
3287
  }
3013
3288
 
3014
3289
  void RepairCommand::DoCommand() {
@@ -3023,18 +3298,21 @@ void RepairCommand::DoCommand() {
3023
3298
 
3024
3299
  // ----------------------------------------------------------------------------
3025
3300
 
3026
- const std::string BackupableCommand::ARG_NUM_THREADS = "num_threads";
3027
- const std::string BackupableCommand::ARG_BACKUP_ENV_URI = "backup_env_uri";
3028
- const std::string BackupableCommand::ARG_BACKUP_DIR = "backup_dir";
3029
- const std::string BackupableCommand::ARG_STDERR_LOG_LEVEL = "stderr_log_level";
3301
+ const std::string BackupEngineCommand::ARG_NUM_THREADS = "num_threads";
3302
+ const std::string BackupEngineCommand::ARG_BACKUP_ENV_URI = "backup_env_uri";
3303
+ const std::string BackupEngineCommand::ARG_BACKUP_FS_URI = "backup_fs_uri";
3304
+ const std::string BackupEngineCommand::ARG_BACKUP_DIR = "backup_dir";
3305
+ const std::string BackupEngineCommand::ARG_STDERR_LOG_LEVEL =
3306
+ "stderr_log_level";
3030
3307
 
3031
- BackupableCommand::BackupableCommand(
3308
+ BackupEngineCommand::BackupEngineCommand(
3032
3309
  const std::vector<std::string>& /*params*/,
3033
3310
  const std::map<std::string, std::string>& options,
3034
3311
  const std::vector<std::string>& flags)
3035
3312
  : LDBCommand(options, flags, false /* is_read_only */,
3036
- BuildCmdLineOptions({ARG_BACKUP_ENV_URI, ARG_BACKUP_DIR,
3037
- ARG_NUM_THREADS, ARG_STDERR_LOG_LEVEL})),
3313
+ BuildCmdLineOptions({ARG_BACKUP_ENV_URI, ARG_BACKUP_FS_URI,
3314
+ ARG_BACKUP_DIR, ARG_NUM_THREADS,
3315
+ ARG_STDERR_LOG_LEVEL})),
3038
3316
  num_threads_(1) {
3039
3317
  auto itr = options.find(ARG_NUM_THREADS);
3040
3318
  if (itr != options.end()) {
@@ -3044,6 +3322,15 @@ BackupableCommand::BackupableCommand(
3044
3322
  if (itr != options.end()) {
3045
3323
  backup_env_uri_ = itr->second;
3046
3324
  }
3325
+ itr = options.find(ARG_BACKUP_FS_URI);
3326
+ if (itr != options.end()) {
3327
+ backup_fs_uri_ = itr->second;
3328
+ }
3329
+ if (!backup_env_uri_.empty() && !backup_fs_uri_.empty()) {
3330
+ exec_state_ = LDBCommandExecuteResult::Failed(
3331
+ "you may not specity both --" + ARG_BACKUP_ENV_URI + " and --" +
3332
+ ARG_BACKUP_FS_URI);
3333
+ }
3047
3334
  itr = options.find(ARG_BACKUP_DIR);
3048
3335
  if (itr == options.end()) {
3049
3336
  exec_state_ = LDBCommandExecuteResult::Failed("--" + ARG_BACKUP_DIR +
@@ -3067,10 +3354,10 @@ BackupableCommand::BackupableCommand(
3067
3354
  }
3068
3355
  }
3069
3356
 
3070
- void BackupableCommand::Help(const std::string& name, std::string& ret) {
3357
+ void BackupEngineCommand::Help(const std::string& name, std::string& ret) {
3071
3358
  ret.append(" ");
3072
3359
  ret.append(name);
3073
- ret.append(" [--" + ARG_BACKUP_ENV_URI + "] ");
3360
+ ret.append(" [--" + ARG_BACKUP_ENV_URI + " | --" + ARG_BACKUP_FS_URI + "] ");
3074
3361
  ret.append(" [--" + ARG_BACKUP_DIR + "] ");
3075
3362
  ret.append(" [--" + ARG_NUM_THREADS + "] ");
3076
3363
  ret.append(" [--" + ARG_STDERR_LOG_LEVEL + "=<int (InfoLogLevel)>] ");
@@ -3082,10 +3369,10 @@ void BackupableCommand::Help(const std::string& name, std::string& ret) {
3082
3369
  BackupCommand::BackupCommand(const std::vector<std::string>& params,
3083
3370
  const std::map<std::string, std::string>& options,
3084
3371
  const std::vector<std::string>& flags)
3085
- : BackupableCommand(params, options, flags) {}
3372
+ : BackupEngineCommand(params, options, flags) {}
3086
3373
 
3087
3374
  void BackupCommand::Help(std::string& ret) {
3088
- BackupableCommand::Help(Name(), ret);
3375
+ BackupEngineCommand::Help(Name(), ret);
3089
3376
  }
3090
3377
 
3091
3378
  void BackupCommand::DoCommand() {
@@ -3096,15 +3383,24 @@ void BackupCommand::DoCommand() {
3096
3383
  return;
3097
3384
  }
3098
3385
  fprintf(stdout, "open db OK\n");
3099
- Env* custom_env = nullptr;
3100
- Env::LoadEnv(backup_env_uri_, &custom_env, &backup_env_guard_);
3386
+
3387
+ Env* custom_env = backup_env_guard_.get();
3388
+ if (custom_env == nullptr) {
3389
+ Status s =
3390
+ Env::CreateFromUri(config_options_, backup_env_uri_, backup_fs_uri_,
3391
+ &custom_env, &backup_env_guard_);
3392
+ if (!s.ok()) {
3393
+ exec_state_ = LDBCommandExecuteResult::Failed(s.ToString());
3394
+ return;
3395
+ }
3396
+ }
3101
3397
  assert(custom_env != nullptr);
3102
3398
 
3103
- BackupableDBOptions backup_options =
3104
- BackupableDBOptions(backup_dir_, custom_env);
3399
+ BackupEngineOptions backup_options =
3400
+ BackupEngineOptions(backup_dir_, custom_env);
3105
3401
  backup_options.info_log = logger_.get();
3106
3402
  backup_options.max_background_operations = num_threads_;
3107
- status = BackupEngine::Open(custom_env, backup_options, &backup_engine);
3403
+ status = BackupEngine::Open(options_.env, backup_options, &backup_engine);
3108
3404
  if (status.ok()) {
3109
3405
  fprintf(stdout, "open backup engine OK\n");
3110
3406
  } else {
@@ -3126,26 +3422,34 @@ RestoreCommand::RestoreCommand(
3126
3422
  const std::vector<std::string>& params,
3127
3423
  const std::map<std::string, std::string>& options,
3128
3424
  const std::vector<std::string>& flags)
3129
- : BackupableCommand(params, options, flags) {}
3425
+ : BackupEngineCommand(params, options, flags) {}
3130
3426
 
3131
3427
  void RestoreCommand::Help(std::string& ret) {
3132
- BackupableCommand::Help(Name(), ret);
3428
+ BackupEngineCommand::Help(Name(), ret);
3133
3429
  }
3134
3430
 
3135
3431
  void RestoreCommand::DoCommand() {
3136
- Env* custom_env = nullptr;
3137
- Env::LoadEnv(backup_env_uri_, &custom_env, &backup_env_guard_);
3432
+ Env* custom_env = backup_env_guard_.get();
3433
+ if (custom_env == nullptr) {
3434
+ Status s =
3435
+ Env::CreateFromUri(config_options_, backup_env_uri_, backup_fs_uri_,
3436
+ &custom_env, &backup_env_guard_);
3437
+ if (!s.ok()) {
3438
+ exec_state_ = LDBCommandExecuteResult::Failed(s.ToString());
3439
+ return;
3440
+ }
3441
+ }
3138
3442
  assert(custom_env != nullptr);
3139
3443
 
3140
3444
  std::unique_ptr<BackupEngineReadOnly> restore_engine;
3141
3445
  Status status;
3142
3446
  {
3143
- BackupableDBOptions opts(backup_dir_, custom_env);
3447
+ BackupEngineOptions opts(backup_dir_, custom_env);
3144
3448
  opts.info_log = logger_.get();
3145
3449
  opts.max_background_operations = num_threads_;
3146
3450
  BackupEngineReadOnly* raw_restore_engine_ptr;
3147
3451
  status =
3148
- BackupEngineReadOnly::Open(custom_env, opts, &raw_restore_engine_ptr);
3452
+ BackupEngineReadOnly::Open(options_.env, opts, &raw_restore_engine_ptr);
3149
3453
  if (status.ok()) {
3150
3454
  restore_engine.reset(raw_restore_engine_ptr);
3151
3455
  }
@@ -3166,7 +3470,7 @@ void RestoreCommand::DoCommand() {
3166
3470
  namespace {
3167
3471
 
3168
3472
  void DumpSstFile(Options options, std::string filename, bool output_hex,
3169
- bool show_properties) {
3473
+ bool show_properties, bool decode_blob_index) {
3170
3474
  std::string from_key;
3171
3475
  std::string to_key;
3172
3476
  if (filename.length() <= 4 ||
@@ -3175,11 +3479,10 @@ void DumpSstFile(Options options, std::string filename, bool output_hex,
3175
3479
  return;
3176
3480
  }
3177
3481
  // no verification
3178
- // TODO: add support for decoding blob indexes in ldb as well
3179
3482
  ROCKSDB_NAMESPACE::SstFileDumper dumper(
3180
- options, filename, 2 * 1024 * 1024 /* readahead_size */,
3181
- /* verify_checksum */ false, output_hex,
3182
- /* decode_blob_index */ false);
3483
+ options, filename, Temperature::kUnknown,
3484
+ 2 * 1024 * 1024 /* readahead_size */,
3485
+ /* verify_checksum */ false, output_hex, decode_blob_index);
3183
3486
  Status st = dumper.ReadSequential(true, std::numeric_limits<uint64_t>::max(),
3184
3487
  false, // has_from
3185
3488
  from_key, false, // has_to
@@ -3216,11 +3519,14 @@ DBFileDumperCommand::DBFileDumperCommand(
3216
3519
  const std::vector<std::string>& /*params*/,
3217
3520
  const std::map<std::string, std::string>& options,
3218
3521
  const std::vector<std::string>& flags)
3219
- : LDBCommand(options, flags, true, BuildCmdLineOptions({})) {}
3522
+ : LDBCommand(options, flags, true,
3523
+ BuildCmdLineOptions({ARG_DECODE_BLOB_INDEX})),
3524
+ decode_blob_index_(IsFlagPresent(flags, ARG_DECODE_BLOB_INDEX)) {}
3220
3525
 
3221
3526
  void DBFileDumperCommand::Help(std::string& ret) {
3222
3527
  ret.append(" ");
3223
3528
  ret.append(DBFileDumperCommand::Name());
3529
+ ret.append(" [--" + ARG_DECODE_BLOB_INDEX + "] ");
3224
3530
  ret.append("\n");
3225
3531
  }
3226
3532
 
@@ -3244,6 +3550,11 @@ void DBFileDumperCommand::DoCommand() {
3244
3550
  // remove the trailing '\n'
3245
3551
  manifest_filename.resize(manifest_filename.size() - 1);
3246
3552
  std::string manifest_filepath = db_->GetName() + "/" + manifest_filename;
3553
+ // Correct concatenation of filepath and filename:
3554
+ // Check that there is no double slashes (or more!) when concatenation
3555
+ // happens.
3556
+ manifest_filepath = NormalizePath(manifest_filepath);
3557
+
3247
3558
  std::cout << manifest_filepath << std::endl;
3248
3559
  DumpManifestFile(options_, manifest_filepath, false, false, false);
3249
3560
  std::cout << std::endl;
@@ -3253,10 +3564,14 @@ void DBFileDumperCommand::DoCommand() {
3253
3564
  std::vector<LiveFileMetaData> metadata;
3254
3565
  db_->GetLiveFilesMetaData(&metadata);
3255
3566
  for (auto& fileMetadata : metadata) {
3256
- std::string filename = fileMetadata.db_path + fileMetadata.name;
3567
+ std::string filename = fileMetadata.db_path + "/" + fileMetadata.name;
3568
+ // Correct concatenation of filepath and filename:
3569
+ // Check that there is no double slashes (or more!) when concatenation
3570
+ // happens.
3571
+ filename = NormalizePath(filename);
3257
3572
  std::cout << filename << " level:" << fileMetadata.level << std::endl;
3258
3573
  std::cout << "------------------------------" << std::endl;
3259
- DumpSstFile(options_, filename, false, true);
3574
+ DumpSstFile(options_, filename, false, true, decode_blob_index_);
3260
3575
  std::cout << std::endl;
3261
3576
  }
3262
3577
  std::cout << std::endl;
@@ -3268,9 +3583,15 @@ void DBFileDumperCommand::DoCommand() {
3268
3583
  if (!s.ok()) {
3269
3584
  std::cerr << "Error when getting WAL files" << std::endl;
3270
3585
  } else {
3586
+ std::string wal_dir;
3587
+ if (options_.wal_dir.empty()) {
3588
+ wal_dir = db_->GetName();
3589
+ } else {
3590
+ wal_dir = NormalizePath(options_.wal_dir + "/");
3591
+ }
3271
3592
  for (auto& wal : wal_files) {
3272
3593
  // TODO(qyang): option.wal_dir should be passed into ldb command
3273
- std::string filename = db_->GetOptions().wal_dir + wal->PathName();
3594
+ std::string filename = wal_dir + wal->PathName();
3274
3595
  std::cout << filename << std::endl;
3275
3596
  // TODO(myabandeh): allow configuring is_write_commited
3276
3597
  DumpWalFile(options_, filename, true, true, true /* is_write_commited */,
@@ -3279,6 +3600,129 @@ void DBFileDumperCommand::DoCommand() {
3279
3600
  }
3280
3601
  }
3281
3602
 
3603
+ const std::string DBLiveFilesMetadataDumperCommand::ARG_SORT_BY_FILENAME =
3604
+ "sort_by_filename";
3605
+
3606
+ DBLiveFilesMetadataDumperCommand::DBLiveFilesMetadataDumperCommand(
3607
+ const std::vector<std::string>& /*params*/,
3608
+ const std::map<std::string, std::string>& options,
3609
+ const std::vector<std::string>& flags)
3610
+ : LDBCommand(options, flags, true,
3611
+ BuildCmdLineOptions({ARG_SORT_BY_FILENAME})) {
3612
+ sort_by_filename_ = IsFlagPresent(flags, ARG_SORT_BY_FILENAME);
3613
+ }
3614
+
3615
+ void DBLiveFilesMetadataDumperCommand::Help(std::string& ret) {
3616
+ ret.append(" ");
3617
+ ret.append(DBLiveFilesMetadataDumperCommand::Name());
3618
+ ret.append(" [--" + ARG_SORT_BY_FILENAME + "] ");
3619
+ ret.append("\n");
3620
+ }
3621
+
3622
+ void DBLiveFilesMetadataDumperCommand::DoCommand() {
3623
+ if (!db_) {
3624
+ assert(GetExecuteState().IsFailed());
3625
+ return;
3626
+ }
3627
+ Status s;
3628
+
3629
+ std::vector<ColumnFamilyMetaData> metadata;
3630
+ db_->GetAllColumnFamilyMetaData(&metadata);
3631
+ if (sort_by_filename_) {
3632
+ std::cout << "Live SST and Blob Files:" << std::endl;
3633
+ // tuple of <file path, level, column family name>
3634
+ std::vector<std::tuple<std::string, int, std::string>> all_files;
3635
+
3636
+ for (const auto& column_metadata : metadata) {
3637
+ // Iterate Levels
3638
+ const auto& levels = column_metadata.levels;
3639
+ const std::string& cf = column_metadata.name;
3640
+ for (const auto& level_metadata : levels) {
3641
+ // Iterate SST files
3642
+ const auto& sst_files = level_metadata.files;
3643
+ int level = level_metadata.level;
3644
+ for (const auto& sst_metadata : sst_files) {
3645
+ // The SstFileMetaData.name always starts with "/",
3646
+ // however SstFileMetaData.db_path is the string provided by
3647
+ // the user as an input. Therefore we check if we can
3648
+ // concantenate the two strings directly or if we need to
3649
+ // drop a possible extra "/" at the end of SstFileMetaData.db_path.
3650
+ std::string filename =
3651
+ NormalizePath(sst_metadata.db_path + "/" + sst_metadata.name);
3652
+ all_files.emplace_back(filename, level, cf);
3653
+ } // End of for-loop over sst files
3654
+ } // End of for-loop over levels
3655
+
3656
+ const auto& blob_files = column_metadata.blob_files;
3657
+ for (const auto& blob_metadata : blob_files) {
3658
+ // The BlobMetaData.blob_file_name always starts with "/",
3659
+ // however BlobMetaData.blob_file_path is the string provided by
3660
+ // the user as an input. Therefore we check if we can
3661
+ // concantenate the two strings directly or if we need to
3662
+ // drop a possible extra "/" at the end of BlobMetaData.blob_file_path.
3663
+ std::string filename = NormalizePath(
3664
+ blob_metadata.blob_file_path + "/" + blob_metadata.blob_file_name);
3665
+ // Level for blob files is encoded as -1
3666
+ all_files.emplace_back(filename, -1, cf);
3667
+ } // End of for-loop over blob files
3668
+ } // End of for-loop over column metadata
3669
+
3670
+ // Sort by filename (i.e. first entry in tuple)
3671
+ std::sort(all_files.begin(), all_files.end());
3672
+
3673
+ for (const auto& item : all_files) {
3674
+ const std::string& filename = std::get<0>(item);
3675
+ int level = std::get<1>(item);
3676
+ const std::string& cf = std::get<2>(item);
3677
+ if (level == -1) { // Blob File
3678
+ std::cout << filename << ", column family '" << cf << "'" << std::endl;
3679
+ } else { // SST file
3680
+ std::cout << filename << " : level " << level << ", column family '"
3681
+ << cf << "'" << std::endl;
3682
+ }
3683
+ }
3684
+ } else {
3685
+ for (const auto& column_metadata : metadata) {
3686
+ std::cout << "===== Column Family: " << column_metadata.name
3687
+ << " =====" << std::endl;
3688
+
3689
+ std::cout << "Live SST Files:" << std::endl;
3690
+ // Iterate levels
3691
+ const auto& levels = column_metadata.levels;
3692
+ for (const auto& level_metadata : levels) {
3693
+ std::cout << "---------- level " << level_metadata.level
3694
+ << " ----------" << std::endl;
3695
+ // Iterate SST files
3696
+ const auto& sst_files = level_metadata.files;
3697
+ for (const auto& sst_metadata : sst_files) {
3698
+ // The SstFileMetaData.name always starts with "/",
3699
+ // however SstFileMetaData.db_path is the string provided by
3700
+ // the user as an input. Therefore we check if we can
3701
+ // concantenate the two strings directly or if we need to
3702
+ // drop a possible extra "/" at the end of SstFileMetaData.db_path.
3703
+ std::string filename =
3704
+ NormalizePath(sst_metadata.db_path + "/" + sst_metadata.name);
3705
+ std::cout << filename << std::endl;
3706
+ } // End of for-loop over sst files
3707
+ } // End of for-loop over levels
3708
+
3709
+ std::cout << "Live Blob Files:" << std::endl;
3710
+ const auto& blob_files = column_metadata.blob_files;
3711
+ for (const auto& blob_metadata : blob_files) {
3712
+ // The BlobMetaData.blob_file_name always starts with "/",
3713
+ // however BlobMetaData.blob_file_path is the string provided by
3714
+ // the user as an input. Therefore we check if we can
3715
+ // concantenate the two strings directly or if we need to
3716
+ // drop a possible extra "/" at the end of BlobMetaData.blob_file_path.
3717
+ std::string filename = NormalizePath(
3718
+ blob_metadata.blob_file_path + "/" + blob_metadata.blob_file_name);
3719
+ std::cout << filename << std::endl;
3720
+ } // End of for-loop over blob files
3721
+ } // End of for-loop over column metadata
3722
+ } // End of else ("not sort_by_filename")
3723
+ std::cout << "------------------------------" << std::endl;
3724
+ }
3725
+
3282
3726
  void WriteExternalSstFilesCommand::Help(std::string& ret) {
3283
3727
  ret.append(" ");
3284
3728
  ret.append(WriteExternalSstFilesCommand::Name());
@@ -3479,8 +3923,7 @@ ListFileRangeDeletesCommand::ListFileRangeDeletesCommand(
3479
3923
  const std::map<std::string, std::string>& options,
3480
3924
  const std::vector<std::string>& flags)
3481
3925
  : LDBCommand(options, flags, true, BuildCmdLineOptions({ARG_MAX_KEYS})) {
3482
- std::map<std::string, std::string>::const_iterator itr =
3483
- options.find(ARG_MAX_KEYS);
3926
+ auto itr = options.find(ARG_MAX_KEYS);
3484
3927
  if (itr != options.end()) {
3485
3928
  try {
3486
3929
  #if defined(CYGWIN)
@@ -3528,7 +3971,7 @@ void UnsafeRemoveSstFileCommand::Help(std::string& ret) {
3528
3971
  ret.append(" ");
3529
3972
  ret.append(UnsafeRemoveSstFileCommand::Name());
3530
3973
  ret.append(" <SST file number>");
3531
- ret.append("\n");
3974
+ ret.append(" ");
3532
3975
  ret.append(" MUST NOT be used on a live DB.");
3533
3976
  ret.append("\n");
3534
3977
  }
@@ -3553,48 +3996,27 @@ UnsafeRemoveSstFileCommand::UnsafeRemoveSstFileCommand(
3553
3996
  }
3554
3997
 
3555
3998
  void UnsafeRemoveSstFileCommand::DoCommand() {
3556
- // Instead of opening a `DB` and calling `DeleteFile()`, this implementation
3557
- // uses the underlying `VersionSet` API to read and modify the MANIFEST. This
3558
- // allows us to use the user's real options, while not having to worry about
3559
- // the DB persisting new SST files via flush/compaction or attempting to read/
3560
- // compact files which may fail, particularly for the file we intend to remove
3561
- // (the user may want to remove an already deleted file from MANIFEST).
3562
3999
  PrepareOptions();
3563
4000
 
3564
- if (options_.db_paths.empty()) {
3565
- // `VersionSet` expects options that have been through `SanitizeOptions()`,
3566
- // which would sanitize an empty `db_paths`.
3567
- options_.db_paths.emplace_back(db_path_, 0 /* target_size */);
4001
+ OfflineManifestWriter w(options_, db_path_);
4002
+ if (column_families_.empty()) {
4003
+ column_families_.emplace_back(kDefaultColumnFamilyName, options_);
3568
4004
  }
3569
-
3570
- WriteController wc(options_.delayed_write_rate);
3571
- WriteBufferManager wb(options_.db_write_buffer_size);
3572
- ImmutableDBOptions immutable_db_options(options_);
3573
- std::shared_ptr<Cache> tc(
3574
- NewLRUCache(1 << 20 /* capacity */, options_.table_cache_numshardbits));
3575
- EnvOptions sopt;
3576
- VersionSet versions(db_path_, &immutable_db_options, sopt, tc.get(), &wb, &wc,
3577
- /*block_cache_tracer=*/nullptr, /*io_tracer=*/nullptr);
3578
- Status s = versions.Recover(column_families_);
4005
+ Status s = w.Recover(column_families_);
3579
4006
 
3580
4007
  ColumnFamilyData* cfd = nullptr;
3581
4008
  int level = -1;
3582
4009
  if (s.ok()) {
3583
4010
  FileMetaData* metadata = nullptr;
3584
- s = versions.GetMetadataForFile(sst_file_number_, &level, &metadata, &cfd);
4011
+ s = w.Versions().GetMetadataForFile(sst_file_number_, &level, &metadata,
4012
+ &cfd);
3585
4013
  }
3586
4014
 
3587
4015
  if (s.ok()) {
3588
4016
  VersionEdit edit;
3589
4017
  edit.SetColumnFamily(cfd->GetID());
3590
4018
  edit.DeleteFile(level, sst_file_number_);
3591
- // Use `mutex` to imitate a locked DB mutex when calling `LogAndApply()`.
3592
- InstrumentedMutex mutex;
3593
- mutex.Lock();
3594
- s = versions.LogAndApply(cfd, *cfd->GetLatestMutableCFOptions(), &edit,
3595
- &mutex, nullptr /* db_directory */,
3596
- false /* new_descriptor_log */);
3597
- mutex.Unlock();
4019
+ s = w.LogAndApply(cfd, &edit);
3598
4020
  }
3599
4021
 
3600
4022
  if (!s.ok()) {
@@ -3605,5 +4027,59 @@ void UnsafeRemoveSstFileCommand::DoCommand() {
3605
4027
  }
3606
4028
  }
3607
4029
 
4030
+ const std::string UpdateManifestCommand::ARG_VERBOSE = "verbose";
4031
+ const std::string UpdateManifestCommand::ARG_UPDATE_TEMPERATURES =
4032
+ "update_temperatures";
4033
+
4034
+ void UpdateManifestCommand::Help(std::string& ret) {
4035
+ ret.append(" ");
4036
+ ret.append(UpdateManifestCommand::Name());
4037
+ ret.append(" [--update_temperatures]");
4038
+ ret.append(" ");
4039
+ ret.append(" MUST NOT be used on a live DB.");
4040
+ ret.append("\n");
4041
+ }
4042
+
4043
+ UpdateManifestCommand::UpdateManifestCommand(
4044
+ const std::vector<std::string>& /*params*/,
4045
+ const std::map<std::string, std::string>& options,
4046
+ const std::vector<std::string>& flags)
4047
+ : LDBCommand(options, flags, false /* is_read_only */,
4048
+ BuildCmdLineOptions({ARG_VERBOSE, ARG_UPDATE_TEMPERATURES})) {
4049
+ verbose_ = IsFlagPresent(flags, ARG_VERBOSE) ||
4050
+ ParseBooleanOption(options, ARG_VERBOSE, false);
4051
+ update_temperatures_ =
4052
+ IsFlagPresent(flags, ARG_UPDATE_TEMPERATURES) ||
4053
+ ParseBooleanOption(options, ARG_UPDATE_TEMPERATURES, false);
4054
+
4055
+ if (!update_temperatures_) {
4056
+ exec_state_ = LDBCommandExecuteResult::Failed(
4057
+ "No action like --update_temperatures specified for update_manifest");
4058
+ }
4059
+ }
4060
+
4061
+ void UpdateManifestCommand::DoCommand() {
4062
+ PrepareOptions();
4063
+
4064
+ auto level = verbose_ ? InfoLogLevel::INFO_LEVEL : InfoLogLevel::WARN_LEVEL;
4065
+ options_.info_log.reset(new StderrLogger(level));
4066
+
4067
+ experimental::UpdateManifestForFilesStateOptions opts;
4068
+ opts.update_temperatures = update_temperatures_;
4069
+ if (column_families_.empty()) {
4070
+ column_families_.emplace_back(kDefaultColumnFamilyName, options_);
4071
+ }
4072
+ Status s = experimental::UpdateManifestForFilesState(options_, db_path_,
4073
+ column_families_);
4074
+
4075
+ if (!s.ok()) {
4076
+ exec_state_ = LDBCommandExecuteResult::Failed(
4077
+ "failed to update manifest: " + s.ToString());
4078
+ } else {
4079
+ exec_state_ =
4080
+ LDBCommandExecuteResult::Succeed("Manifest updates successful");
4081
+ }
4082
+ }
4083
+
3608
4084
  } // namespace ROCKSDB_NAMESPACE
3609
4085
  #endif // ROCKSDB_LITE