@nxtedition/rocksdb 1.0.0

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 (1088) hide show
  1. package/CHANGELOG.md +294 -0
  2. package/LICENSE +21 -0
  3. package/README.md +102 -0
  4. package/UPGRADING.md +91 -0
  5. package/binding.cc +1276 -0
  6. package/binding.gyp +73 -0
  7. package/binding.js +1 -0
  8. package/chained-batch.js +44 -0
  9. package/deps/rocksdb/build_version.cc +4 -0
  10. package/deps/rocksdb/rocksdb/CMakeLists.txt +1356 -0
  11. package/deps/rocksdb/rocksdb/COPYING +339 -0
  12. package/deps/rocksdb/rocksdb/LICENSE.Apache +202 -0
  13. package/deps/rocksdb/rocksdb/LICENSE.leveldb +29 -0
  14. package/deps/rocksdb/rocksdb/Makefile +2521 -0
  15. package/deps/rocksdb/rocksdb/TARGETS +2100 -0
  16. package/deps/rocksdb/rocksdb/cache/cache.cc +63 -0
  17. package/deps/rocksdb/rocksdb/cache/cache_bench.cc +381 -0
  18. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +114 -0
  19. package/deps/rocksdb/rocksdb/cache/cache_test.cc +775 -0
  20. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +769 -0
  21. package/deps/rocksdb/rocksdb/cache/clock_cache.h +16 -0
  22. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +574 -0
  23. package/deps/rocksdb/rocksdb/cache/lru_cache.h +339 -0
  24. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +199 -0
  25. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +162 -0
  26. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +111 -0
  27. package/deps/rocksdb/rocksdb/cmake/RocksDBConfig.cmake.in +54 -0
  28. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
  29. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
  30. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
  31. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
  32. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
  33. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
  34. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
  35. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
  36. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
  37. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +108 -0
  38. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +115 -0
  39. package/deps/rocksdb/rocksdb/db/blob/blob_constants.h +16 -0
  40. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +154 -0
  41. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.h +67 -0
  42. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +206 -0
  43. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +316 -0
  44. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +91 -0
  45. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +660 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +99 -0
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +49 -0
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +268 -0
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage.cc +134 -0
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage.h +57 -0
  51. package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage_test.cc +173 -0
  52. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +55 -0
  53. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +164 -0
  54. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +423 -0
  55. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +81 -0
  56. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +771 -0
  57. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +184 -0
  58. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.cc +145 -0
  59. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +148 -0
  60. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +132 -0
  61. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +76 -0
  62. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +168 -0
  63. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +83 -0
  64. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +307 -0
  65. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +464 -0
  66. package/deps/rocksdb/rocksdb/db/builder.cc +358 -0
  67. package/deps/rocksdb/rocksdb/db/builder.h +95 -0
  68. package/deps/rocksdb/rocksdb/db/c.cc +5281 -0
  69. package/deps/rocksdb/rocksdb/db/c_test.c +2883 -0
  70. package/deps/rocksdb/rocksdb/db/column_family.cc +1602 -0
  71. package/deps/rocksdb/rocksdb/db/column_family.h +787 -0
  72. package/deps/rocksdb/rocksdb/db/column_family_test.cc +3427 -0
  73. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +425 -0
  74. package/deps/rocksdb/rocksdb/db/compacted_db_impl.cc +169 -0
  75. package/deps/rocksdb/rocksdb/db/compacted_db_impl.h +118 -0
  76. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +591 -0
  77. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +389 -0
  78. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +37 -0
  79. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +1023 -0
  80. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +353 -0
  81. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +1254 -0
  82. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1917 -0
  83. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +208 -0
  84. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +1037 -0
  85. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +1224 -0
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +1135 -0
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +318 -0
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +255 -0
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +57 -0
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +510 -0
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +33 -0
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +2190 -0
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1103 -0
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +32 -0
  95. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +44 -0
  96. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +660 -0
  97. package/deps/rocksdb/rocksdb/db/convenience.cc +78 -0
  98. package/deps/rocksdb/rocksdb/db/corruption_test.cc +921 -0
  99. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +359 -0
  100. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +3820 -0
  101. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1058 -0
  102. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +2128 -0
  103. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +851 -0
  104. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +6292 -0
  105. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +509 -0
  106. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +130 -0
  107. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +137 -0
  108. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1119 -0
  109. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +5057 -0
  110. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +2274 -0
  111. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +3421 -0
  112. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +298 -0
  113. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +151 -0
  114. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +967 -0
  115. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +1806 -0
  116. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +270 -0
  117. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +146 -0
  118. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +683 -0
  119. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +333 -0
  120. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +2024 -0
  121. package/deps/rocksdb/rocksdb/db/db_impl/db_secondary_test.cc +932 -0
  122. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +137 -0
  123. package/deps/rocksdb/rocksdb/db/db_info_dumper.h +15 -0
  124. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +178 -0
  125. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +592 -0
  126. package/deps/rocksdb/rocksdb/db/db_iter.cc +1493 -0
  127. package/deps/rocksdb/rocksdb/db/db_iter.h +390 -0
  128. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +657 -0
  129. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +3268 -0
  130. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +3197 -0
  131. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +299 -0
  132. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +513 -0
  133. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +329 -0
  134. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +241 -0
  135. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +671 -0
  136. package/deps/rocksdb/rocksdb/db/db_options_test.cc +1022 -0
  137. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +1723 -0
  138. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +1694 -0
  139. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +1261 -0
  140. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +164 -0
  141. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +488 -0
  142. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +567 -0
  143. package/deps/rocksdb/rocksdb/db/db_test.cc +6736 -0
  144. package/deps/rocksdb/rocksdb/db/db_test2.cc +5408 -0
  145. package/deps/rocksdb/rocksdb/db/db_test_util.cc +1633 -0
  146. package/deps/rocksdb/rocksdb/db/db_test_util.h +1194 -0
  147. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +2235 -0
  148. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +1780 -0
  149. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +2520 -0
  150. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +119 -0
  151. package/deps/rocksdb/rocksdb/db/db_write_test.cc +465 -0
  152. package/deps/rocksdb/rocksdb/db/dbformat.cc +222 -0
  153. package/deps/rocksdb/rocksdb/db/dbformat.h +786 -0
  154. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +206 -0
  155. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +580 -0
  156. package/deps/rocksdb/rocksdb/db/error_handler.cc +726 -0
  157. package/deps/rocksdb/rocksdb/db/error_handler.h +117 -0
  158. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +2598 -0
  159. package/deps/rocksdb/rocksdb/db/event_helpers.cc +233 -0
  160. package/deps/rocksdb/rocksdb/db/event_helpers.h +57 -0
  161. package/deps/rocksdb/rocksdb/db/experimental.cc +50 -0
  162. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +1559 -0
  163. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +910 -0
  164. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +195 -0
  165. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +2936 -0
  166. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +556 -0
  167. package/deps/rocksdb/rocksdb/db/file_indexer.cc +216 -0
  168. package/deps/rocksdb/rocksdb/db/file_indexer.h +142 -0
  169. package/deps/rocksdb/rocksdb/db/file_indexer_test.cc +350 -0
  170. package/deps/rocksdb/rocksdb/db/filename_test.cc +179 -0
  171. package/deps/rocksdb/rocksdb/db/flush_job.cc +514 -0
  172. package/deps/rocksdb/rocksdb/db/flush_job.h +169 -0
  173. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +647 -0
  174. package/deps/rocksdb/rocksdb/db/flush_scheduler.cc +86 -0
  175. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +54 -0
  176. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1023 -0
  177. package/deps/rocksdb/rocksdb/db/forward_iterator.h +163 -0
  178. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +377 -0
  179. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +282 -0
  180. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +75 -0
  181. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +632 -0
  182. package/deps/rocksdb/rocksdb/db/internal_stats.cc +1461 -0
  183. package/deps/rocksdb/rocksdb/db/internal_stats.h +712 -0
  184. package/deps/rocksdb/rocksdb/db/job_context.h +226 -0
  185. package/deps/rocksdb/rocksdb/db/listener_test.cc +1118 -0
  186. package/deps/rocksdb/rocksdb/db/log_format.h +48 -0
  187. package/deps/rocksdb/rocksdb/db/log_reader.cc +654 -0
  188. package/deps/rocksdb/rocksdb/db/log_reader.h +192 -0
  189. package/deps/rocksdb/rocksdb/db/log_test.cc +901 -0
  190. package/deps/rocksdb/rocksdb/db/log_writer.cc +164 -0
  191. package/deps/rocksdb/rocksdb/db/log_writer.h +115 -0
  192. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.cc +67 -0
  193. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +63 -0
  194. package/deps/rocksdb/rocksdb/db/lookup_key.h +66 -0
  195. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +54 -0
  196. package/deps/rocksdb/rocksdb/db/malloc_stats.h +24 -0
  197. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +296 -0
  198. package/deps/rocksdb/rocksdb/db/memtable.cc +1169 -0
  199. package/deps/rocksdb/rocksdb/db/memtable.h +554 -0
  200. package/deps/rocksdb/rocksdb/db/memtable_list.cc +888 -0
  201. package/deps/rocksdb/rocksdb/db/memtable_list.h +438 -0
  202. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +935 -0
  203. package/deps/rocksdb/rocksdb/db/merge_context.h +134 -0
  204. package/deps/rocksdb/rocksdb/db/merge_helper.cc +421 -0
  205. package/deps/rocksdb/rocksdb/db/merge_helper.h +197 -0
  206. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +290 -0
  207. package/deps/rocksdb/rocksdb/db/merge_operator.cc +86 -0
  208. package/deps/rocksdb/rocksdb/db/merge_test.cc +608 -0
  209. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +338 -0
  210. package/deps/rocksdb/rocksdb/db/options_file_test.cc +119 -0
  211. package/deps/rocksdb/rocksdb/db/output_validator.cc +30 -0
  212. package/deps/rocksdb/rocksdb/db/output_validator.h +47 -0
  213. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +993 -0
  214. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +113 -0
  215. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +76 -0
  216. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +231 -0
  217. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +87 -0
  218. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1374 -0
  219. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +38 -0
  220. package/deps/rocksdb/rocksdb/db/prefix_test.cc +910 -0
  221. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +489 -0
  222. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +446 -0
  223. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +260 -0
  224. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +709 -0
  225. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +439 -0
  226. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +256 -0
  227. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +552 -0
  228. package/deps/rocksdb/rocksdb/db/read_callback.h +53 -0
  229. package/deps/rocksdb/rocksdb/db/repair.cc +722 -0
  230. package/deps/rocksdb/rocksdb/db/repair_test.cc +390 -0
  231. package/deps/rocksdb/rocksdb/db/snapshot_checker.h +61 -0
  232. package/deps/rocksdb/rocksdb/db/snapshot_impl.cc +26 -0
  233. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +167 -0
  234. package/deps/rocksdb/rocksdb/db/table_cache.cc +704 -0
  235. package/deps/rocksdb/rocksdb/db/table_cache.h +233 -0
  236. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +75 -0
  237. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +107 -0
  238. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +517 -0
  239. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +318 -0
  240. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +128 -0
  241. package/deps/rocksdb/rocksdb/db/trim_history_scheduler.cc +54 -0
  242. package/deps/rocksdb/rocksdb/db/trim_history_scheduler.h +44 -0
  243. package/deps/rocksdb/rocksdb/db/version_builder.cc +1078 -0
  244. package/deps/rocksdb/rocksdb/db/version_builder.h +69 -0
  245. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +1551 -0
  246. package/deps/rocksdb/rocksdb/db/version_edit.cc +955 -0
  247. package/deps/rocksdb/rocksdb/db/version_edit.h +609 -0
  248. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +699 -0
  249. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +252 -0
  250. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +597 -0
  251. package/deps/rocksdb/rocksdb/db/version_set.cc +6333 -0
  252. package/deps/rocksdb/rocksdb/db/version_set.h +1485 -0
  253. package/deps/rocksdb/rocksdb/db/version_set_test.cc +3035 -0
  254. package/deps/rocksdb/rocksdb/db/wal_edit.cc +204 -0
  255. package/deps/rocksdb/rocksdb/db/wal_edit.h +166 -0
  256. package/deps/rocksdb/rocksdb/db/wal_edit_test.cc +214 -0
  257. package/deps/rocksdb/rocksdb/db/wal_manager.cc +517 -0
  258. package/deps/rocksdb/rocksdb/db/wal_manager.h +119 -0
  259. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +340 -0
  260. package/deps/rocksdb/rocksdb/db/write_batch.cc +2174 -0
  261. package/deps/rocksdb/rocksdb/db/write_batch_base.cc +94 -0
  262. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +250 -0
  263. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +907 -0
  264. package/deps/rocksdb/rocksdb/db/write_callback.h +27 -0
  265. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +457 -0
  266. package/deps/rocksdb/rocksdb/db/write_controller.cc +128 -0
  267. package/deps/rocksdb/rocksdb/db/write_controller.h +144 -0
  268. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +135 -0
  269. package/deps/rocksdb/rocksdb/db/write_thread.cc +796 -0
  270. package/deps/rocksdb/rocksdb/db/write_thread.h +433 -0
  271. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +14 -0
  272. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +341 -0
  273. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +520 -0
  274. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +23 -0
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +337 -0
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +554 -0
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +79 -0
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +173 -0
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.h +17 -0
  280. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +38 -0
  281. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +763 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +222 -0
  283. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.cc +27 -0
  284. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +428 -0
  285. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +218 -0
  286. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +64 -0
  287. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +2430 -0
  288. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +237 -0
  289. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +343 -0
  290. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +800 -0
  291. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +920 -0
  292. package/deps/rocksdb/rocksdb/env/env.cc +733 -0
  293. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +352 -0
  294. package/deps/rocksdb/rocksdb/env/env_chroot.cc +346 -0
  295. package/deps/rocksdb/rocksdb/env/env_chroot.h +22 -0
  296. package/deps/rocksdb/rocksdb/env/env_encryption.cc +1148 -0
  297. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +137 -0
  298. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +648 -0
  299. package/deps/rocksdb/rocksdb/env/env_posix.cc +514 -0
  300. package/deps/rocksdb/rocksdb/env/env_test.cc +2230 -0
  301. package/deps/rocksdb/rocksdb/env/file_system.cc +132 -0
  302. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +448 -0
  303. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +415 -0
  304. package/deps/rocksdb/rocksdb/env/fs_posix.cc +1086 -0
  305. package/deps/rocksdb/rocksdb/env/io_posix.cc +1499 -0
  306. package/deps/rocksdb/rocksdb/env/io_posix.h +402 -0
  307. package/deps/rocksdb/rocksdb/env/io_posix_test.cc +140 -0
  308. package/deps/rocksdb/rocksdb/env/mock_env.cc +1066 -0
  309. package/deps/rocksdb/rocksdb/env/mock_env.h +41 -0
  310. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +85 -0
  311. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +402 -0
  312. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +150 -0
  313. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +717 -0
  314. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +156 -0
  315. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +99 -0
  316. package/deps/rocksdb/rocksdb/file/file_util.cc +268 -0
  317. package/deps/rocksdb/rocksdb/file/file_util.h +96 -0
  318. package/deps/rocksdb/rocksdb/file/filename.cc +473 -0
  319. package/deps/rocksdb/rocksdb/file/filename.h +182 -0
  320. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +188 -0
  321. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +315 -0
  322. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +142 -0
  323. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +482 -0
  324. package/deps/rocksdb/rocksdb/file/read_write_util.cc +67 -0
  325. package/deps/rocksdb/rocksdb/file/read_write_util.h +34 -0
  326. package/deps/rocksdb/rocksdb/file/readahead_raf.cc +169 -0
  327. package/deps/rocksdb/rocksdb/file/readahead_raf.h +29 -0
  328. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +237 -0
  329. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +63 -0
  330. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +552 -0
  331. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +203 -0
  332. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +523 -0
  333. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +251 -0
  334. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +386 -0
  335. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +839 -0
  336. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +2218 -0
  337. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +294 -0
  338. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +71 -0
  339. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +214 -0
  340. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +98 -0
  341. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +137 -0
  342. package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +40 -0
  343. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +46 -0
  344. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +359 -0
  345. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +499 -0
  346. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +138 -0
  347. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +1697 -0
  348. package/deps/rocksdb/rocksdb/include/rocksdb/db_bench_tool.h +11 -0
  349. package/deps/rocksdb/rocksdb/include/rocksdb/db_dump_tool.h +45 -0
  350. package/deps/rocksdb/rocksdb/include/rocksdb/db_stress_tool.h +11 -0
  351. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1671 -0
  352. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +405 -0
  353. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +29 -0
  354. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +129 -0
  355. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +1472 -0
  356. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +238 -0
  357. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +61 -0
  358. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +269 -0
  359. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +56 -0
  360. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +128 -0
  361. package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +43 -0
  362. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +556 -0
  363. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +77 -0
  364. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +385 -0
  365. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +257 -0
  366. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +155 -0
  367. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +1702 -0
  368. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +237 -0
  369. package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +35 -0
  370. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +73 -0
  371. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +139 -0
  372. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +10 -0
  373. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +269 -0
  374. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +103 -0
  375. package/deps/rocksdb/rocksdb/include/rocksdb/snapshot.h +48 -0
  376. package/deps/rocksdb/rocksdb/include/rocksdb/sst_dump_tool.h +19 -0
  377. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +136 -0
  378. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +47 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +145 -0
  380. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +135 -0
  381. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +592 -0
  382. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +69 -0
  383. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +608 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +711 -0
  385. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +280 -0
  386. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +188 -0
  387. package/deps/rocksdb/rocksdb/include/rocksdb/threadpool.h +58 -0
  388. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +48 -0
  389. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +121 -0
  390. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +74 -0
  391. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +86 -0
  392. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +535 -0
  393. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +61 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/convenience.h +10 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/db_ttl.h +72 -0
  396. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/debug.h +49 -0
  397. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +175 -0
  398. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +180 -0
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/info_log_finder.h +19 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +288 -0
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +71 -0
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/leveldb_options.h +145 -0
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_custom_library.h +43 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h +55 -0
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +50 -0
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +205 -0
  407. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +100 -0
  408. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +19 -0
  409. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +876 -0
  410. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +128 -0
  411. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +94 -0
  412. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +504 -0
  413. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +95 -0
  414. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +626 -0
  415. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +432 -0
  416. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +92 -0
  417. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +34 -0
  418. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +279 -0
  419. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +16 -0
  420. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +102 -0
  421. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +377 -0
  422. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +127 -0
  423. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +106 -0
  424. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +300 -0
  425. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +165 -0
  426. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +684 -0
  427. package/deps/rocksdb/rocksdb/logging/env_logger.h +165 -0
  428. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +162 -0
  429. package/deps/rocksdb/rocksdb/logging/event_logger.cc +70 -0
  430. package/deps/rocksdb/rocksdb/logging/event_logger.h +203 -0
  431. package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +43 -0
  432. package/deps/rocksdb/rocksdb/logging/log_buffer.cc +92 -0
  433. package/deps/rocksdb/rocksdb/logging/log_buffer.h +56 -0
  434. package/deps/rocksdb/rocksdb/logging/logging.h +68 -0
  435. package/deps/rocksdb/rocksdb/logging/posix_logger.h +185 -0
  436. package/deps/rocksdb/rocksdb/memory/allocator.h +57 -0
  437. package/deps/rocksdb/rocksdb/memory/arena.cc +233 -0
  438. package/deps/rocksdb/rocksdb/memory/arena.h +141 -0
  439. package/deps/rocksdb/rocksdb/memory/arena_test.cc +204 -0
  440. package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +47 -0
  441. package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +218 -0
  442. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +206 -0
  443. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +78 -0
  444. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +33 -0
  445. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +27 -0
  446. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +102 -0
  447. package/deps/rocksdb/rocksdb/memory/memory_allocator.h +38 -0
  448. package/deps/rocksdb/rocksdb/memory/memory_usage.h +25 -0
  449. package/deps/rocksdb/rocksdb/memtable/alloc_tracker.cc +62 -0
  450. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +844 -0
  451. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +49 -0
  452. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +349 -0
  453. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +44 -0
  454. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +997 -0
  455. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +663 -0
  456. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +677 -0
  457. package/deps/rocksdb/rocksdb/memtable/skiplist.h +496 -0
  458. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +388 -0
  459. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +280 -0
  460. package/deps/rocksdb/rocksdb/memtable/stl_wrappers.h +33 -0
  461. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +301 -0
  462. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -0
  463. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +203 -0
  464. package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +23 -0
  465. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +287 -0
  466. package/deps/rocksdb/rocksdb/monitoring/histogram.h +149 -0
  467. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +231 -0
  468. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +200 -0
  469. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +84 -0
  470. package/deps/rocksdb/rocksdb/monitoring/in_memory_stats_history.cc +49 -0
  471. package/deps/rocksdb/rocksdb/monitoring/in_memory_stats_history.h +74 -0
  472. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +71 -0
  473. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +98 -0
  474. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +62 -0
  475. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +60 -0
  476. package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +29 -0
  477. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +566 -0
  478. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +97 -0
  479. package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +28 -0
  480. package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +18 -0
  481. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +79 -0
  482. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +169 -0
  483. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.h +83 -0
  484. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +431 -0
  485. package/deps/rocksdb/rocksdb/monitoring/statistics.h +138 -0
  486. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -0
  487. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +652 -0
  488. package/deps/rocksdb/rocksdb/monitoring/thread_status_impl.cc +163 -0
  489. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +314 -0
  490. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +233 -0
  491. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater_debug.cc +43 -0
  492. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +206 -0
  493. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +134 -0
  494. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +32 -0
  495. package/deps/rocksdb/rocksdb/options/cf_options.cc +1026 -0
  496. package/deps/rocksdb/rocksdb/options/cf_options.h +308 -0
  497. package/deps/rocksdb/rocksdb/options/configurable.cc +681 -0
  498. package/deps/rocksdb/rocksdb/options/configurable_helper.h +251 -0
  499. package/deps/rocksdb/rocksdb/options/configurable_test.cc +757 -0
  500. package/deps/rocksdb/rocksdb/options/configurable_test.h +127 -0
  501. package/deps/rocksdb/rocksdb/options/customizable.cc +77 -0
  502. package/deps/rocksdb/rocksdb/options/customizable_helper.h +216 -0
  503. package/deps/rocksdb/rocksdb/options/customizable_test.cc +625 -0
  504. package/deps/rocksdb/rocksdb/options/db_options.cc +835 -0
  505. package/deps/rocksdb/rocksdb/options/db_options.h +126 -0
  506. package/deps/rocksdb/rocksdb/options/options.cc +664 -0
  507. package/deps/rocksdb/rocksdb/options/options_helper.cc +1391 -0
  508. package/deps/rocksdb/rocksdb/options/options_helper.h +118 -0
  509. package/deps/rocksdb/rocksdb/options/options_parser.cc +721 -0
  510. package/deps/rocksdb/rocksdb/options/options_parser.h +151 -0
  511. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +583 -0
  512. package/deps/rocksdb/rocksdb/options/options_test.cc +3794 -0
  513. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +106 -0
  514. package/deps/rocksdb/rocksdb/port/lang.h +16 -0
  515. package/deps/rocksdb/rocksdb/port/likely.h +18 -0
  516. package/deps/rocksdb/rocksdb/port/malloc.h +17 -0
  517. package/deps/rocksdb/rocksdb/port/port.h +21 -0
  518. package/deps/rocksdb/rocksdb/port/port_dirent.h +44 -0
  519. package/deps/rocksdb/rocksdb/port/port_example.h +101 -0
  520. package/deps/rocksdb/rocksdb/port/port_posix.cc +266 -0
  521. package/deps/rocksdb/rocksdb/port/port_posix.h +223 -0
  522. package/deps/rocksdb/rocksdb/port/stack_trace.cc +179 -0
  523. package/deps/rocksdb/rocksdb/port/stack_trace.h +28 -0
  524. package/deps/rocksdb/rocksdb/port/sys_time.h +47 -0
  525. package/deps/rocksdb/rocksdb/port/util_logger.h +20 -0
  526. package/deps/rocksdb/rocksdb/port/win/env_default.cc +45 -0
  527. package/deps/rocksdb/rocksdb/port/win/env_win.cc +1449 -0
  528. package/deps/rocksdb/rocksdb/port/win/env_win.h +294 -0
  529. package/deps/rocksdb/rocksdb/port/win/io_win.cc +1084 -0
  530. package/deps/rocksdb/rocksdb/port/win/io_win.h +494 -0
  531. package/deps/rocksdb/rocksdb/port/win/port_win.cc +283 -0
  532. package/deps/rocksdb/rocksdb/port/win/port_win.h +411 -0
  533. package/deps/rocksdb/rocksdb/port/win/win_jemalloc.cc +79 -0
  534. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +194 -0
  535. package/deps/rocksdb/rocksdb/port/win/win_logger.h +67 -0
  536. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +183 -0
  537. package/deps/rocksdb/rocksdb/port/win/win_thread.h +122 -0
  538. package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +221 -0
  539. package/deps/rocksdb/rocksdb/port/win/xpress_win.h +26 -0
  540. package/deps/rocksdb/rocksdb/port/xpress.h +17 -0
  541. package/deps/rocksdb/rocksdb/src.mk +631 -0
  542. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +126 -0
  543. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +57 -0
  544. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +73 -0
  545. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.h +48 -0
  546. package/deps/rocksdb/rocksdb/table/block_based/block.cc +1049 -0
  547. package/deps/rocksdb/rocksdb/table/block_based/block.h +720 -0
  548. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +348 -0
  549. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +119 -0
  550. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +434 -0
  551. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1835 -0
  552. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +193 -0
  553. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +839 -0
  554. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +95 -0
  555. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +383 -0
  556. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +251 -0
  557. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3563 -0
  558. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +681 -0
  559. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +190 -0
  560. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +347 -0
  561. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +201 -0
  562. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +78 -0
  563. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +66 -0
  564. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +32 -0
  565. package/deps/rocksdb/rocksdb/table/block_based/block_prefix_index.cc +232 -0
  566. package/deps/rocksdb/rocksdb/table/block_based/block_prefix_index.h +66 -0
  567. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +623 -0
  568. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +30 -0
  569. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +220 -0
  570. package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.cc +59 -0
  571. package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.h +25 -0
  572. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.cc +93 -0
  573. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.h +136 -0
  574. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +717 -0
  575. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +180 -0
  576. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +102 -0
  577. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +55 -0
  578. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +1407 -0
  579. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +168 -0
  580. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +88 -0
  581. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +41 -0
  582. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +344 -0
  583. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +139 -0
  584. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +333 -0
  585. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +147 -0
  586. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.h +49 -0
  587. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +248 -0
  588. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +444 -0
  589. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +54 -0
  590. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +85 -0
  591. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +56 -0
  592. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +22 -0
  593. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +40 -0
  594. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +521 -0
  595. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +144 -0
  596. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +424 -0
  597. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +163 -0
  598. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +142 -0
  599. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +186 -0
  600. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +51 -0
  601. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +64 -0
  602. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +38 -0
  603. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +120 -0
  604. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +59 -0
  605. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +324 -0
  606. package/deps/rocksdb/rocksdb/table/block_fetcher.h +129 -0
  607. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +534 -0
  608. package/deps/rocksdb/rocksdb/table/cleanable_test.cc +277 -0
  609. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +543 -0
  610. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +136 -0
  611. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +663 -0
  612. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +107 -0
  613. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +81 -0
  614. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +404 -0
  615. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +101 -0
  616. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +585 -0
  617. package/deps/rocksdb/rocksdb/table/format.cc +422 -0
  618. package/deps/rocksdb/rocksdb/table/format.h +348 -0
  619. package/deps/rocksdb/rocksdb/table/get_context.cc +408 -0
  620. package/deps/rocksdb/rocksdb/table/get_context.h +212 -0
  621. package/deps/rocksdb/rocksdb/table/internal_iterator.h +205 -0
  622. package/deps/rocksdb/rocksdb/table/iter_heap.h +42 -0
  623. package/deps/rocksdb/rocksdb/table/iterator.cc +210 -0
  624. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +180 -0
  625. package/deps/rocksdb/rocksdb/table/merger_test.cc +180 -0
  626. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +481 -0
  627. package/deps/rocksdb/rocksdb/table/merging_iterator.h +64 -0
  628. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +541 -0
  629. package/deps/rocksdb/rocksdb/table/meta_blocks.h +154 -0
  630. package/deps/rocksdb/rocksdb/table/mock_table.cc +328 -0
  631. package/deps/rocksdb/rocksdb/table/mock_table.h +89 -0
  632. package/deps/rocksdb/rocksdb/table/multiget_context.h +282 -0
  633. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +116 -0
  634. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +44 -0
  635. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +34 -0
  636. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.cc +78 -0
  637. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +135 -0
  638. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +332 -0
  639. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +153 -0
  640. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +263 -0
  641. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +182 -0
  642. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +211 -0
  643. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +249 -0
  644. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +506 -0
  645. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +201 -0
  646. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +781 -0
  647. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +247 -0
  648. package/deps/rocksdb/rocksdb/table/scoped_arena_iterator.h +61 -0
  649. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +502 -0
  650. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +96 -0
  651. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +98 -0
  652. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +228 -0
  653. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +340 -0
  654. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +94 -0
  655. package/deps/rocksdb/rocksdb/table/table_builder.h +203 -0
  656. package/deps/rocksdb/rocksdb/table/table_factory.cc +38 -0
  657. package/deps/rocksdb/rocksdb/table/table_properties.cc +300 -0
  658. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +30 -0
  659. package/deps/rocksdb/rocksdb/table/table_reader.h +147 -0
  660. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +347 -0
  661. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +39 -0
  662. package/deps/rocksdb/rocksdb/table/table_test.cc +4769 -0
  663. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +215 -0
  664. package/deps/rocksdb/rocksdb/table/two_level_iterator.h +43 -0
  665. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +38 -0
  666. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +74 -0
  667. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +93 -0
  668. package/deps/rocksdb/rocksdb/test_util/sync_point.h +161 -0
  669. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +129 -0
  670. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +74 -0
  671. package/deps/rocksdb/rocksdb/test_util/testharness.cc +56 -0
  672. package/deps/rocksdb/rocksdb/test_util/testharness.h +53 -0
  673. package/deps/rocksdb/rocksdb/test_util/testutil.cc +566 -0
  674. package/deps/rocksdb/rocksdb/test_util/testutil.h +887 -0
  675. package/deps/rocksdb/rocksdb/test_util/testutil_test.cc +43 -0
  676. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +388 -0
  677. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +132 -0
  678. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +27 -0
  679. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +45 -0
  680. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +166 -0
  681. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +570 -0
  682. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +92 -0
  683. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +54 -0
  684. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +152 -0
  685. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +59 -0
  686. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +141 -0
  687. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +33 -0
  688. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +74 -0
  689. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +117 -0
  690. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +263 -0
  691. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +96 -0
  692. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +40 -0
  693. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +29 -0
  694. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +144 -0
  695. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +30 -0
  696. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +51 -0
  697. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +28 -0
  698. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +10 -0
  699. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +26 -0
  700. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +138 -0
  701. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +23 -0
  702. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +57 -0
  703. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +260 -0
  704. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +52 -0
  705. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +328 -0
  706. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +1703 -0
  707. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +16 -0
  708. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +304 -0
  709. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +39 -0
  710. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +26 -0
  711. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +318 -0
  712. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.cpp +12 -0
  713. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +57 -0
  714. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +219 -0
  715. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +207 -0
  716. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +164 -0
  717. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +57 -0
  718. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +77 -0
  719. package/deps/rocksdb/rocksdb/third-party/gcc/ppc-asm.h +390 -0
  720. package/deps/rocksdb/rocksdb/thirdparty.inc +268 -0
  721. package/deps/rocksdb/rocksdb/tools/CMakeLists.txt +30 -0
  722. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +110 -0
  723. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/__init__.py +2 -0
  724. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +2000 -0
  725. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.sh +156 -0
  726. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim_test.py +734 -0
  727. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +2307 -0
  728. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +395 -0
  729. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +721 -0
  730. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +719 -0
  731. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_tool.cc +25 -0
  732. package/deps/rocksdb/rocksdb/tools/db_bench.cc +21 -0
  733. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +7416 -0
  734. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +328 -0
  735. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +130 -0
  736. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +297 -0
  737. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +259 -0
  738. package/deps/rocksdb/rocksdb/tools/dump/rocksdb_dump.cc +63 -0
  739. package/deps/rocksdb/rocksdb/tools/dump/rocksdb_undump.cc +62 -0
  740. package/deps/rocksdb/rocksdb/tools/io_tracer_parser.cc +25 -0
  741. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +187 -0
  742. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +120 -0
  743. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.h +40 -0
  744. package/deps/rocksdb/rocksdb/tools/ldb.cc +21 -0
  745. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +3609 -0
  746. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +665 -0
  747. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +746 -0
  748. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +159 -0
  749. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +221 -0
  750. package/deps/rocksdb/rocksdb/tools/sst_dump.cc +20 -0
  751. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +427 -0
  752. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +541 -0
  753. package/deps/rocksdb/rocksdb/tools/trace_analyzer.cc +25 -0
  754. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +752 -0
  755. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +2001 -0
  756. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +292 -0
  757. package/deps/rocksdb/rocksdb/tools/write_stress.cc +305 -0
  758. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +496 -0
  759. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +294 -0
  760. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +379 -0
  761. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +229 -0
  762. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +174 -0
  763. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +215 -0
  764. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +491 -0
  765. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +195 -0
  766. package/deps/rocksdb/rocksdb/util/aligned_buffer.h +255 -0
  767. package/deps/rocksdb/rocksdb/util/autovector.h +367 -0
  768. package/deps/rocksdb/rocksdb/util/autovector_test.cc +330 -0
  769. package/deps/rocksdb/rocksdb/util/bloom_impl.h +485 -0
  770. package/deps/rocksdb/rocksdb/util/bloom_test.cc +1191 -0
  771. package/deps/rocksdb/rocksdb/util/build_version.cc.in +5 -0
  772. package/deps/rocksdb/rocksdb/util/build_version.h +15 -0
  773. package/deps/rocksdb/rocksdb/util/cast_util.h +20 -0
  774. package/deps/rocksdb/rocksdb/util/channel.h +67 -0
  775. package/deps/rocksdb/rocksdb/util/coding.cc +89 -0
  776. package/deps/rocksdb/rocksdb/util/coding.h +419 -0
  777. package/deps/rocksdb/rocksdb/util/coding_lean.h +101 -0
  778. package/deps/rocksdb/rocksdb/util/coding_test.cc +217 -0
  779. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +92 -0
  780. package/deps/rocksdb/rocksdb/util/comparator.cc +219 -0
  781. package/deps/rocksdb/rocksdb/util/compression.h +1529 -0
  782. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +108 -0
  783. package/deps/rocksdb/rocksdb/util/compression_context_cache.h +47 -0
  784. package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.cc +67 -0
  785. package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.h +67 -0
  786. package/deps/rocksdb/rocksdb/util/core_local.h +83 -0
  787. package/deps/rocksdb/rocksdb/util/crc32c.cc +1283 -0
  788. package/deps/rocksdb/rocksdb/util/crc32c.h +51 -0
  789. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +169 -0
  790. package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +50 -0
  791. package/deps/rocksdb/rocksdb/util/crc32c_ppc.c +94 -0
  792. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +19 -0
  793. package/deps/rocksdb/rocksdb/util/crc32c_ppc_asm.S +756 -0
  794. package/deps/rocksdb/rocksdb/util/crc32c_ppc_constants.h +900 -0
  795. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +180 -0
  796. package/deps/rocksdb/rocksdb/util/defer.h +52 -0
  797. package/deps/rocksdb/rocksdb/util/defer_test.cc +39 -0
  798. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +68 -0
  799. package/deps/rocksdb/rocksdb/util/dynamic_bloom.cc +70 -0
  800. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +214 -0
  801. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +323 -0
  802. package/deps/rocksdb/rocksdb/util/fastrange.h +112 -0
  803. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +136 -0
  804. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +98 -0
  805. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +449 -0
  806. package/deps/rocksdb/rocksdb/util/filelock_test.cc +152 -0
  807. package/deps/rocksdb/rocksdb/util/filter_bench.cc +781 -0
  808. package/deps/rocksdb/rocksdb/util/gflags_compat.h +20 -0
  809. package/deps/rocksdb/rocksdb/util/hash.cc +83 -0
  810. package/deps/rocksdb/rocksdb/util/hash.h +107 -0
  811. package/deps/rocksdb/rocksdb/util/hash_map.h +67 -0
  812. package/deps/rocksdb/rocksdb/util/hash_test.cc +593 -0
  813. package/deps/rocksdb/rocksdb/util/heap.h +166 -0
  814. package/deps/rocksdb/rocksdb/util/heap_test.cc +139 -0
  815. package/deps/rocksdb/rocksdb/util/kv_map.h +33 -0
  816. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +86 -0
  817. package/deps/rocksdb/rocksdb/util/math.h +186 -0
  818. package/deps/rocksdb/rocksdb/util/math128.h +298 -0
  819. package/deps/rocksdb/rocksdb/util/murmurhash.cc +191 -0
  820. package/deps/rocksdb/rocksdb/util/murmurhash.h +42 -0
  821. package/deps/rocksdb/rocksdb/util/mutexlock.h +186 -0
  822. package/deps/rocksdb/rocksdb/util/ppc-opcode.h +27 -0
  823. package/deps/rocksdb/rocksdb/util/random.cc +56 -0
  824. package/deps/rocksdb/rocksdb/util/random.h +186 -0
  825. package/deps/rocksdb/rocksdb/util/random_test.cc +105 -0
  826. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +340 -0
  827. package/deps/rocksdb/rocksdb/util/rate_limiter.h +113 -0
  828. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +251 -0
  829. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +151 -0
  830. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +107 -0
  831. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +1201 -0
  832. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +1062 -0
  833. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +931 -0
  834. package/deps/rocksdb/rocksdb/util/set_comparator.h +22 -0
  835. package/deps/rocksdb/rocksdb/util/slice.cc +243 -0
  836. package/deps/rocksdb/rocksdb/util/slice_test.cc +163 -0
  837. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +153 -0
  838. package/deps/rocksdb/rocksdb/util/status.cc +149 -0
  839. package/deps/rocksdb/rocksdb/util/stderr_logger.h +31 -0
  840. package/deps/rocksdb/rocksdb/util/stop_watch.h +118 -0
  841. package/deps/rocksdb/rocksdb/util/string_util.cc +422 -0
  842. package/deps/rocksdb/rocksdb/util/string_util.h +144 -0
  843. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +354 -0
  844. package/deps/rocksdb/rocksdb/util/thread_local.cc +554 -0
  845. package/deps/rocksdb/rocksdb/util/thread_local.h +101 -0
  846. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +583 -0
  847. package/deps/rocksdb/rocksdb/util/thread_operation.h +121 -0
  848. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +506 -0
  849. package/deps/rocksdb/rocksdb/util/threadpool_imp.h +112 -0
  850. package/deps/rocksdb/rocksdb/util/timer.h +331 -0
  851. package/deps/rocksdb/rocksdb/util/timer_queue.h +230 -0
  852. package/deps/rocksdb/rocksdb/util/timer_queue_test.cc +72 -0
  853. package/deps/rocksdb/rocksdb/util/timer_test.cc +399 -0
  854. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +80 -0
  855. package/deps/rocksdb/rocksdb/util/vector_iterator.h +101 -0
  856. package/deps/rocksdb/rocksdb/util/work_queue.h +148 -0
  857. package/deps/rocksdb/rocksdb/util/work_queue_test.cc +268 -0
  858. package/deps/rocksdb/rocksdb/util/xxh3p.h +1392 -0
  859. package/deps/rocksdb/rocksdb/util/xxhash.cc +1158 -0
  860. package/deps/rocksdb/rocksdb/util/xxhash.h +598 -0
  861. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +2354 -0
  862. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db_test.cc +2955 -0
  863. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +488 -0
  864. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +199 -0
  865. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +112 -0
  866. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +266 -0
  867. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +52 -0
  868. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +2167 -0
  869. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +500 -0
  870. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +113 -0
  871. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +147 -0
  872. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +66 -0
  873. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +2386 -0
  874. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +281 -0
  875. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.h +58 -0
  876. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +314 -0
  877. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +244 -0
  878. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +47 -0
  879. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +42 -0
  880. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +375 -0
  881. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +327 -0
  882. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +114 -0
  883. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +187 -0
  884. package/deps/rocksdb/rocksdb/utilities/cassandra/format.cc +390 -0
  885. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +184 -0
  886. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +67 -0
  887. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +44 -0
  888. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +75 -0
  889. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +72 -0
  890. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +43 -0
  891. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +588 -0
  892. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +82 -0
  893. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +821 -0
  894. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +37 -0
  895. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +29 -0
  896. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +27 -0
  897. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +25 -0
  898. package/deps/rocksdb/rocksdb/utilities/debug.cc +82 -0
  899. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +1497 -0
  900. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +1146 -0
  901. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +262 -0
  902. package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +223 -0
  903. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +145 -0
  904. package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +44 -0
  905. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +490 -0
  906. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +242 -0
  907. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +581 -0
  908. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +437 -0
  909. package/deps/rocksdb/rocksdb/utilities/leveldb_options/leveldb_options.cc +56 -0
  910. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +275 -0
  911. package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +52 -0
  912. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.cc +59 -0
  913. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +39 -0
  914. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +77 -0
  915. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +83 -0
  916. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +97 -0
  917. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +38 -0
  918. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +59 -0
  919. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +31 -0
  920. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +117 -0
  921. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +49 -0
  922. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +598 -0
  923. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +69 -0
  924. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +55 -0
  925. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +87 -0
  926. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +174 -0
  927. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +168 -0
  928. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +431 -0
  929. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +159 -0
  930. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +655 -0
  931. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +425 -0
  932. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +156 -0
  933. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +609 -0
  934. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +296 -0
  935. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file_buffer.h +127 -0
  936. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +86 -0
  937. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +125 -0
  938. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +238 -0
  939. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_bench.cc +308 -0
  940. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +168 -0
  941. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +160 -0
  942. package/deps/rocksdb/rocksdb/utilities/persistent_cache/lrulist.h +174 -0
  943. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +360 -0
  944. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +456 -0
  945. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.h +286 -0
  946. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +167 -0
  947. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +339 -0
  948. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_util.h +67 -0
  949. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +140 -0
  950. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +142 -0
  951. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +285 -0
  952. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.h +231 -0
  953. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +494 -0
  954. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +356 -0
  955. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +224 -0
  956. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +122 -0
  957. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +72 -0
  958. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +244 -0
  959. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +125 -0
  960. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +48 -0
  961. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.cc +29 -0
  962. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.h +82 -0
  963. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_tracker.h +209 -0
  964. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +720 -0
  965. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +223 -0
  966. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +181 -0
  967. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +319 -0
  968. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +270 -0
  969. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.h +99 -0
  970. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_lock_manager.h +30 -0
  971. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +306 -0
  972. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/COPYING.AGPLv3 +661 -0
  973. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/COPYING.APACHEv2 +174 -0
  974. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/COPYING.GPLv2 +339 -0
  975. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +76 -0
  976. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/ft/comparator.h +138 -0
  977. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/ft/ft-status.h +102 -0
  978. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/concurrent_tree.cc +139 -0
  979. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/concurrent_tree.h +174 -0
  980. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/keyrange.cc +222 -0
  981. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/keyrange.h +141 -0
  982. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc +525 -0
  983. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.h +253 -0
  984. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +1007 -0
  985. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +560 -0
  986. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/manager.cc +527 -0
  987. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/range_buffer.cc +265 -0
  988. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/range_buffer.h +178 -0
  989. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/treenode.cc +520 -0
  990. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/treenode.h +302 -0
  991. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/txnid_set.cc +120 -0
  992. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/txnid_set.h +92 -0
  993. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/wfg.cc +213 -0
  994. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/wfg.h +124 -0
  995. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/memory.h +215 -0
  996. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_assert_subst.h +39 -0
  997. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_atomic.h +130 -0
  998. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +82 -0
  999. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_instrumentation.h +286 -0
  1000. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_portability.h +87 -0
  1001. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_pthread.h +520 -0
  1002. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_race_tools.h +179 -0
  1003. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +172 -0
  1004. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/txn_subst.h +27 -0
  1005. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/standalone_port.cc +132 -0
  1006. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +153 -0
  1007. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.h +98 -0
  1008. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/growable_array.h +144 -0
  1009. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/memarena.cc +201 -0
  1010. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/memarena.h +141 -0
  1011. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/omt.h +794 -0
  1012. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/omt_impl.h +1295 -0
  1013. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/partitioned_counter.h +165 -0
  1014. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/status.h +76 -0
  1015. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +479 -0
  1016. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +130 -0
  1017. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.cc +156 -0
  1018. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.h +146 -0
  1019. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +196 -0
  1020. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +101 -0
  1021. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +111 -0
  1022. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +87 -0
  1023. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1418 -0
  1024. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +752 -0
  1025. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +232 -0
  1026. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +628 -0
  1027. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +228 -0
  1028. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +49 -0
  1029. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +678 -0
  1030. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +373 -0
  1031. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +135 -0
  1032. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.h +26 -0
  1033. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +6350 -0
  1034. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +522 -0
  1035. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +188 -0
  1036. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +80 -0
  1037. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3531 -0
  1038. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +483 -0
  1039. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +119 -0
  1040. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +999 -0
  1041. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +1109 -0
  1042. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +786 -0
  1043. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +1039 -0
  1044. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +341 -0
  1045. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +470 -0
  1046. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +108 -0
  1047. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +332 -0
  1048. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +353 -0
  1049. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +703 -0
  1050. package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +99 -0
  1051. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +617 -0
  1052. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +345 -0
  1053. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +569 -0
  1054. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1867 -0
  1055. package/deps/rocksdb/rocksdb.gyp +475 -0
  1056. package/deps/snappy/freebsd/config.h +135 -0
  1057. package/deps/snappy/freebsd/snappy-stubs-public.h +100 -0
  1058. package/deps/snappy/linux/config.h +135 -0
  1059. package/deps/snappy/linux/snappy-stubs-public.h +100 -0
  1060. package/deps/snappy/mac/config.h +137 -0
  1061. package/deps/snappy/mac/snappy-stubs-public.h +100 -0
  1062. package/deps/snappy/openbsd/config.h +135 -0
  1063. package/deps/snappy/openbsd/snappy-stubs-public.h +100 -0
  1064. package/deps/snappy/snappy-1.1.7/COPYING +54 -0
  1065. package/deps/snappy/snappy-1.1.7/cmake/SnappyConfig.cmake +1 -0
  1066. package/deps/snappy/snappy-1.1.7/cmake/config.h.in +62 -0
  1067. package/deps/snappy/snappy-1.1.7/snappy-c.cc +90 -0
  1068. package/deps/snappy/snappy-1.1.7/snappy-c.h +138 -0
  1069. package/deps/snappy/snappy-1.1.7/snappy-internal.h +224 -0
  1070. package/deps/snappy/snappy-1.1.7/snappy-sinksource.cc +104 -0
  1071. package/deps/snappy/snappy-1.1.7/snappy-sinksource.h +182 -0
  1072. package/deps/snappy/snappy-1.1.7/snappy-stubs-internal.cc +42 -0
  1073. package/deps/snappy/snappy-1.1.7/snappy-stubs-internal.h +561 -0
  1074. package/deps/snappy/snappy-1.1.7/snappy-stubs-public.h.in +94 -0
  1075. package/deps/snappy/snappy-1.1.7/snappy-test.cc +612 -0
  1076. package/deps/snappy/snappy-1.1.7/snappy-test.h +573 -0
  1077. package/deps/snappy/snappy-1.1.7/snappy.cc +1515 -0
  1078. package/deps/snappy/snappy-1.1.7/snappy.h +203 -0
  1079. package/deps/snappy/snappy-1.1.7/snappy_unittest.cc +1410 -0
  1080. package/deps/snappy/snappy.gyp +90 -0
  1081. package/deps/snappy/solaris/config.h +135 -0
  1082. package/deps/snappy/solaris/snappy-stubs-public.h +100 -0
  1083. package/deps/snappy/win32/config.h +29 -0
  1084. package/deps/snappy/win32/snappy-stubs-public.h +100 -0
  1085. package/iterator.js +55 -0
  1086. package/leveldown.js +113 -0
  1087. package/package-lock.json +23687 -0
  1088. package/package.json +70 -0
@@ -0,0 +1,1917 @@
1
+ // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2
+ // This source code is licensed under both the GPLv2 (found in the
3
+ // COPYING file in the root directory) and Apache 2.0 License
4
+ // (found in the LICENSE.Apache file in the root directory).
5
+ //
6
+ // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
7
+ // Use of this source code is governed by a BSD-style license that can be
8
+ // found in the LICENSE file. See the AUTHORS file for names of contributors.
9
+
10
+ #include "db/compaction/compaction_job.h"
11
+
12
+ #include <algorithm>
13
+ #include <cinttypes>
14
+ #include <functional>
15
+ #include <list>
16
+ #include <memory>
17
+ #include <random>
18
+ #include <set>
19
+ #include <thread>
20
+ #include <utility>
21
+ #include <vector>
22
+
23
+ #include "db/blob/blob_file_addition.h"
24
+ #include "db/blob/blob_file_builder.h"
25
+ #include "db/builder.h"
26
+ #include "db/db_impl/db_impl.h"
27
+ #include "db/db_iter.h"
28
+ #include "db/dbformat.h"
29
+ #include "db/error_handler.h"
30
+ #include "db/event_helpers.h"
31
+ #include "db/log_reader.h"
32
+ #include "db/log_writer.h"
33
+ #include "db/memtable.h"
34
+ #include "db/memtable_list.h"
35
+ #include "db/merge_context.h"
36
+ #include "db/merge_helper.h"
37
+ #include "db/output_validator.h"
38
+ #include "db/range_del_aggregator.h"
39
+ #include "db/version_set.h"
40
+ #include "file/filename.h"
41
+ #include "file/read_write_util.h"
42
+ #include "file/sst_file_manager_impl.h"
43
+ #include "file/writable_file_writer.h"
44
+ #include "logging/log_buffer.h"
45
+ #include "logging/logging.h"
46
+ #include "monitoring/iostats_context_imp.h"
47
+ #include "monitoring/perf_context_imp.h"
48
+ #include "monitoring/thread_status_util.h"
49
+ #include "port/port.h"
50
+ #include "rocksdb/db.h"
51
+ #include "rocksdb/env.h"
52
+ #include "rocksdb/sst_partitioner.h"
53
+ #include "rocksdb/statistics.h"
54
+ #include "rocksdb/status.h"
55
+ #include "rocksdb/table.h"
56
+ #include "table/block_based/block.h"
57
+ #include "table/block_based/block_based_table_factory.h"
58
+ #include "table/merging_iterator.h"
59
+ #include "table/table_builder.h"
60
+ #include "test_util/sync_point.h"
61
+ #include "util/coding.h"
62
+ #include "util/hash.h"
63
+ #include "util/mutexlock.h"
64
+ #include "util/random.h"
65
+ #include "util/stop_watch.h"
66
+ #include "util/string_util.h"
67
+
68
+ namespace ROCKSDB_NAMESPACE {
69
+
70
+ const char* GetCompactionReasonString(CompactionReason compaction_reason) {
71
+ switch (compaction_reason) {
72
+ case CompactionReason::kUnknown:
73
+ return "Unknown";
74
+ case CompactionReason::kLevelL0FilesNum:
75
+ return "LevelL0FilesNum";
76
+ case CompactionReason::kLevelMaxLevelSize:
77
+ return "LevelMaxLevelSize";
78
+ case CompactionReason::kUniversalSizeAmplification:
79
+ return "UniversalSizeAmplification";
80
+ case CompactionReason::kUniversalSizeRatio:
81
+ return "UniversalSizeRatio";
82
+ case CompactionReason::kUniversalSortedRunNum:
83
+ return "UniversalSortedRunNum";
84
+ case CompactionReason::kFIFOMaxSize:
85
+ return "FIFOMaxSize";
86
+ case CompactionReason::kFIFOReduceNumFiles:
87
+ return "FIFOReduceNumFiles";
88
+ case CompactionReason::kFIFOTtl:
89
+ return "FIFOTtl";
90
+ case CompactionReason::kManualCompaction:
91
+ return "ManualCompaction";
92
+ case CompactionReason::kFilesMarkedForCompaction:
93
+ return "FilesMarkedForCompaction";
94
+ case CompactionReason::kBottommostFiles:
95
+ return "BottommostFiles";
96
+ case CompactionReason::kTtl:
97
+ return "Ttl";
98
+ case CompactionReason::kFlush:
99
+ return "Flush";
100
+ case CompactionReason::kExternalSstIngestion:
101
+ return "ExternalSstIngestion";
102
+ case CompactionReason::kPeriodicCompaction:
103
+ return "PeriodicCompaction";
104
+ case CompactionReason::kNumOfReasons:
105
+ // fall through
106
+ default:
107
+ assert(false);
108
+ return "Invalid";
109
+ }
110
+ }
111
+
112
+ // Maintains state for each sub-compaction
113
+ struct CompactionJob::SubcompactionState {
114
+ const Compaction* compaction;
115
+ std::unique_ptr<CompactionIterator> c_iter;
116
+
117
+ // The boundaries of the key-range this compaction is interested in. No two
118
+ // subcompactions may have overlapping key-ranges.
119
+ // 'start' is inclusive, 'end' is exclusive, and nullptr means unbounded
120
+ Slice *start, *end;
121
+
122
+ // The return status of this subcompaction
123
+ Status status;
124
+
125
+ // The return IO Status of this subcompaction
126
+ IOStatus io_status;
127
+
128
+ // Files produced by this subcompaction
129
+ struct Output {
130
+ Output(FileMetaData&& _meta, const InternalKeyComparator& _icmp,
131
+ bool _enable_order_check, bool _enable_hash)
132
+ : meta(std::move(_meta)),
133
+ validator(_icmp, _enable_order_check, _enable_hash),
134
+ finished(false) {}
135
+ FileMetaData meta;
136
+ OutputValidator validator;
137
+ bool finished;
138
+ std::shared_ptr<const TableProperties> table_properties;
139
+ };
140
+
141
+ // State kept for output being generated
142
+ std::vector<Output> outputs;
143
+ std::vector<BlobFileAddition> blob_file_additions;
144
+ std::unique_ptr<WritableFileWriter> outfile;
145
+ std::unique_ptr<TableBuilder> builder;
146
+
147
+ Output* current_output() {
148
+ if (outputs.empty()) {
149
+ // This subcompaction's output could be empty if compaction was aborted
150
+ // before this subcompaction had a chance to generate any output files.
151
+ // When subcompactions are executed sequentially this is more likely and
152
+ // will be particulalry likely for the later subcompactions to be empty.
153
+ // Once they are run in parallel however it should be much rarer.
154
+ return nullptr;
155
+ } else {
156
+ return &outputs.back();
157
+ }
158
+ }
159
+
160
+ uint64_t current_output_file_size = 0;
161
+
162
+ // State during the subcompaction
163
+ uint64_t total_bytes = 0;
164
+ uint64_t num_output_records = 0;
165
+ CompactionJobStats compaction_job_stats;
166
+ uint64_t approx_size = 0;
167
+ // An index that used to speed up ShouldStopBefore().
168
+ size_t grandparent_index = 0;
169
+ // The number of bytes overlapping between the current output and
170
+ // grandparent files used in ShouldStopBefore().
171
+ uint64_t overlapped_bytes = 0;
172
+ // A flag determine whether the key has been seen in ShouldStopBefore()
173
+ bool seen_key = false;
174
+
175
+ SubcompactionState(Compaction* c, Slice* _start, Slice* _end, uint64_t size)
176
+ : compaction(c), start(_start), end(_end), approx_size(size) {
177
+ assert(compaction != nullptr);
178
+ }
179
+
180
+ // Adds the key and value to the builder
181
+ // If paranoid is true, adds the key-value to the paranoid hash
182
+ Status AddToBuilder(const Slice& key, const Slice& value) {
183
+ auto curr = current_output();
184
+ assert(builder != nullptr);
185
+ assert(curr != nullptr);
186
+ Status s = curr->validator.Add(key, value);
187
+ if (!s.ok()) {
188
+ return s;
189
+ }
190
+ builder->Add(key, value);
191
+ return Status::OK();
192
+ }
193
+
194
+ // Returns true iff we should stop building the current output
195
+ // before processing "internal_key".
196
+ bool ShouldStopBefore(const Slice& internal_key, uint64_t curr_file_size) {
197
+ const InternalKeyComparator* icmp =
198
+ &compaction->column_family_data()->internal_comparator();
199
+ const std::vector<FileMetaData*>& grandparents = compaction->grandparents();
200
+
201
+ // Scan to find earliest grandparent file that contains key.
202
+ while (grandparent_index < grandparents.size() &&
203
+ icmp->Compare(internal_key,
204
+ grandparents[grandparent_index]->largest.Encode()) >
205
+ 0) {
206
+ if (seen_key) {
207
+ overlapped_bytes += grandparents[grandparent_index]->fd.GetFileSize();
208
+ }
209
+ assert(grandparent_index + 1 >= grandparents.size() ||
210
+ icmp->Compare(
211
+ grandparents[grandparent_index]->largest.Encode(),
212
+ grandparents[grandparent_index + 1]->smallest.Encode()) <= 0);
213
+ grandparent_index++;
214
+ }
215
+ seen_key = true;
216
+
217
+ if (overlapped_bytes + curr_file_size >
218
+ compaction->max_compaction_bytes()) {
219
+ // Too much overlap for current output; start new output
220
+ overlapped_bytes = 0;
221
+ return true;
222
+ }
223
+
224
+ return false;
225
+ }
226
+ };
227
+
228
+ // Maintains state for the entire compaction
229
+ struct CompactionJob::CompactionState {
230
+ Compaction* const compaction;
231
+
232
+ // REQUIRED: subcompaction states are stored in order of increasing
233
+ // key-range
234
+ std::vector<CompactionJob::SubcompactionState> sub_compact_states;
235
+ Status status;
236
+
237
+ size_t num_output_files = 0;
238
+ uint64_t total_bytes = 0;
239
+ size_t num_blob_output_files = 0;
240
+ uint64_t total_blob_bytes = 0;
241
+ uint64_t num_output_records = 0;
242
+
243
+ explicit CompactionState(Compaction* c) : compaction(c) {}
244
+
245
+ Slice SmallestUserKey() {
246
+ for (const auto& sub_compact_state : sub_compact_states) {
247
+ if (!sub_compact_state.outputs.empty() &&
248
+ sub_compact_state.outputs[0].finished) {
249
+ return sub_compact_state.outputs[0].meta.smallest.user_key();
250
+ }
251
+ }
252
+ // If there is no finished output, return an empty slice.
253
+ return Slice(nullptr, 0);
254
+ }
255
+
256
+ Slice LargestUserKey() {
257
+ for (auto it = sub_compact_states.rbegin(); it < sub_compact_states.rend();
258
+ ++it) {
259
+ if (!it->outputs.empty() && it->current_output()->finished) {
260
+ assert(it->current_output() != nullptr);
261
+ return it->current_output()->meta.largest.user_key();
262
+ }
263
+ }
264
+ // If there is no finished output, return an empty slice.
265
+ return Slice(nullptr, 0);
266
+ }
267
+ };
268
+
269
+ void CompactionJob::AggregateStatistics() {
270
+ assert(compact_);
271
+
272
+ for (SubcompactionState& sc : compact_->sub_compact_states) {
273
+ auto& outputs = sc.outputs;
274
+
275
+ if (!outputs.empty() && !outputs.back().meta.fd.file_size) {
276
+ // An error occurred, so ignore the last output.
277
+ outputs.pop_back();
278
+ }
279
+
280
+ compact_->num_output_files += outputs.size();
281
+ compact_->total_bytes += sc.total_bytes;
282
+
283
+ const auto& blobs = sc.blob_file_additions;
284
+
285
+ compact_->num_blob_output_files += blobs.size();
286
+
287
+ for (const auto& blob : blobs) {
288
+ compact_->total_blob_bytes += blob.GetTotalBlobBytes();
289
+ }
290
+
291
+ compact_->num_output_records += sc.num_output_records;
292
+
293
+ compaction_job_stats_->Add(sc.compaction_job_stats);
294
+ }
295
+ }
296
+
297
+ CompactionJob::CompactionJob(
298
+ int job_id, Compaction* compaction, const ImmutableDBOptions& db_options,
299
+ const FileOptions& file_options, VersionSet* versions,
300
+ const std::atomic<bool>* shutting_down,
301
+ const SequenceNumber preserve_deletes_seqnum, LogBuffer* log_buffer,
302
+ FSDirectory* db_directory, FSDirectory* output_directory,
303
+ FSDirectory* blob_output_directory, Statistics* stats,
304
+ InstrumentedMutex* db_mutex, ErrorHandler* db_error_handler,
305
+ std::vector<SequenceNumber> existing_snapshots,
306
+ SequenceNumber earliest_write_conflict_snapshot,
307
+ const SnapshotChecker* snapshot_checker, std::shared_ptr<Cache> table_cache,
308
+ EventLogger* event_logger, bool paranoid_file_checks, bool measure_io_stats,
309
+ const std::string& dbname, CompactionJobStats* compaction_job_stats,
310
+ Env::Priority thread_pri, const std::shared_ptr<IOTracer>& io_tracer,
311
+ const std::atomic<int>* manual_compaction_paused, const std::string& db_id,
312
+ const std::string& db_session_id, std::string full_history_ts_low)
313
+ : job_id_(job_id),
314
+ compact_(new CompactionState(compaction)),
315
+ compaction_job_stats_(compaction_job_stats),
316
+ compaction_stats_(compaction->compaction_reason(), 1),
317
+ dbname_(dbname),
318
+ db_id_(db_id),
319
+ db_session_id_(db_session_id),
320
+ db_options_(db_options),
321
+ file_options_(file_options),
322
+ env_(db_options.env),
323
+ io_tracer_(io_tracer),
324
+ fs_(db_options.fs, io_tracer),
325
+ file_options_for_read_(
326
+ fs_->OptimizeForCompactionTableRead(file_options, db_options_)),
327
+ versions_(versions),
328
+ shutting_down_(shutting_down),
329
+ manual_compaction_paused_(manual_compaction_paused),
330
+ preserve_deletes_seqnum_(preserve_deletes_seqnum),
331
+ log_buffer_(log_buffer),
332
+ db_directory_(db_directory),
333
+ output_directory_(output_directory),
334
+ blob_output_directory_(blob_output_directory),
335
+ stats_(stats),
336
+ db_mutex_(db_mutex),
337
+ db_error_handler_(db_error_handler),
338
+ existing_snapshots_(std::move(existing_snapshots)),
339
+ earliest_write_conflict_snapshot_(earliest_write_conflict_snapshot),
340
+ snapshot_checker_(snapshot_checker),
341
+ table_cache_(std::move(table_cache)),
342
+ event_logger_(event_logger),
343
+ bottommost_level_(false),
344
+ paranoid_file_checks_(paranoid_file_checks),
345
+ measure_io_stats_(measure_io_stats),
346
+ write_hint_(Env::WLTH_NOT_SET),
347
+ thread_pri_(thread_pri),
348
+ full_history_ts_low_(std::move(full_history_ts_low)) {
349
+ assert(compaction_job_stats_ != nullptr);
350
+ assert(log_buffer_ != nullptr);
351
+ const auto* cfd = compact_->compaction->column_family_data();
352
+ ThreadStatusUtil::SetColumnFamily(cfd, cfd->ioptions()->env,
353
+ db_options_.enable_thread_tracking);
354
+ ThreadStatusUtil::SetThreadOperation(ThreadStatus::OP_COMPACTION);
355
+ ReportStartedCompaction(compaction);
356
+ }
357
+
358
+ CompactionJob::~CompactionJob() {
359
+ assert(compact_ == nullptr);
360
+ ThreadStatusUtil::ResetThreadStatus();
361
+ }
362
+
363
+ void CompactionJob::ReportStartedCompaction(Compaction* compaction) {
364
+ const auto* cfd = compact_->compaction->column_family_data();
365
+ ThreadStatusUtil::SetColumnFamily(cfd, cfd->ioptions()->env,
366
+ db_options_.enable_thread_tracking);
367
+
368
+ ThreadStatusUtil::SetThreadOperationProperty(ThreadStatus::COMPACTION_JOB_ID,
369
+ job_id_);
370
+
371
+ ThreadStatusUtil::SetThreadOperationProperty(
372
+ ThreadStatus::COMPACTION_INPUT_OUTPUT_LEVEL,
373
+ (static_cast<uint64_t>(compact_->compaction->start_level()) << 32) +
374
+ compact_->compaction->output_level());
375
+
376
+ // In the current design, a CompactionJob is always created
377
+ // for non-trivial compaction.
378
+ assert(compaction->IsTrivialMove() == false ||
379
+ compaction->is_manual_compaction() == true);
380
+
381
+ ThreadStatusUtil::SetThreadOperationProperty(
382
+ ThreadStatus::COMPACTION_PROP_FLAGS,
383
+ compaction->is_manual_compaction() +
384
+ (compaction->deletion_compaction() << 1));
385
+
386
+ ThreadStatusUtil::SetThreadOperationProperty(
387
+ ThreadStatus::COMPACTION_TOTAL_INPUT_BYTES,
388
+ compaction->CalculateTotalInputSize());
389
+
390
+ IOSTATS_RESET(bytes_written);
391
+ IOSTATS_RESET(bytes_read);
392
+ ThreadStatusUtil::SetThreadOperationProperty(
393
+ ThreadStatus::COMPACTION_BYTES_WRITTEN, 0);
394
+ ThreadStatusUtil::SetThreadOperationProperty(
395
+ ThreadStatus::COMPACTION_BYTES_READ, 0);
396
+
397
+ // Set the thread operation after operation properties
398
+ // to ensure GetThreadList() can always show them all together.
399
+ ThreadStatusUtil::SetThreadOperation(ThreadStatus::OP_COMPACTION);
400
+
401
+ compaction_job_stats_->is_manual_compaction =
402
+ compaction->is_manual_compaction();
403
+ compaction_job_stats_->is_full_compaction = compaction->is_full_compaction();
404
+ }
405
+
406
+ void CompactionJob::Prepare() {
407
+ AutoThreadOperationStageUpdater stage_updater(
408
+ ThreadStatus::STAGE_COMPACTION_PREPARE);
409
+
410
+ // Generate file_levels_ for compaction berfore making Iterator
411
+ auto* c = compact_->compaction;
412
+ assert(c->column_family_data() != nullptr);
413
+ assert(c->column_family_data()->current()->storage_info()->NumLevelFiles(
414
+ compact_->compaction->level()) > 0);
415
+
416
+ write_hint_ =
417
+ c->column_family_data()->CalculateSSTWriteHint(c->output_level());
418
+ bottommost_level_ = c->bottommost_level();
419
+
420
+ if (c->ShouldFormSubcompactions()) {
421
+ {
422
+ StopWatch sw(env_, stats_, SUBCOMPACTION_SETUP_TIME);
423
+ GenSubcompactionBoundaries();
424
+ }
425
+ assert(sizes_.size() == boundaries_.size() + 1);
426
+
427
+ for (size_t i = 0; i <= boundaries_.size(); i++) {
428
+ Slice* start = i == 0 ? nullptr : &boundaries_[i - 1];
429
+ Slice* end = i == boundaries_.size() ? nullptr : &boundaries_[i];
430
+ compact_->sub_compact_states.emplace_back(c, start, end, sizes_[i]);
431
+ }
432
+ RecordInHistogram(stats_, NUM_SUBCOMPACTIONS_SCHEDULED,
433
+ compact_->sub_compact_states.size());
434
+ } else {
435
+ constexpr Slice* start = nullptr;
436
+ constexpr Slice* end = nullptr;
437
+ constexpr uint64_t size = 0;
438
+
439
+ compact_->sub_compact_states.emplace_back(c, start, end, size);
440
+ }
441
+ }
442
+
443
+ struct RangeWithSize {
444
+ Range range;
445
+ uint64_t size;
446
+
447
+ RangeWithSize(const Slice& a, const Slice& b, uint64_t s = 0)
448
+ : range(a, b), size(s) {}
449
+ };
450
+
451
+ void CompactionJob::GenSubcompactionBoundaries() {
452
+ auto* c = compact_->compaction;
453
+ auto* cfd = c->column_family_data();
454
+ const Comparator* cfd_comparator = cfd->user_comparator();
455
+ std::vector<Slice> bounds;
456
+ int start_lvl = c->start_level();
457
+ int out_lvl = c->output_level();
458
+
459
+ // Add the starting and/or ending key of certain input files as a potential
460
+ // boundary
461
+ for (size_t lvl_idx = 0; lvl_idx < c->num_input_levels(); lvl_idx++) {
462
+ int lvl = c->level(lvl_idx);
463
+ if (lvl >= start_lvl && lvl <= out_lvl) {
464
+ const LevelFilesBrief* flevel = c->input_levels(lvl_idx);
465
+ size_t num_files = flevel->num_files;
466
+
467
+ if (num_files == 0) {
468
+ continue;
469
+ }
470
+
471
+ if (lvl == 0) {
472
+ // For level 0 add the starting and ending key of each file since the
473
+ // files may have greatly differing key ranges (not range-partitioned)
474
+ for (size_t i = 0; i < num_files; i++) {
475
+ bounds.emplace_back(flevel->files[i].smallest_key);
476
+ bounds.emplace_back(flevel->files[i].largest_key);
477
+ }
478
+ } else {
479
+ // For all other levels add the smallest/largest key in the level to
480
+ // encompass the range covered by that level
481
+ bounds.emplace_back(flevel->files[0].smallest_key);
482
+ bounds.emplace_back(flevel->files[num_files - 1].largest_key);
483
+ if (lvl == out_lvl) {
484
+ // For the last level include the starting keys of all files since
485
+ // the last level is the largest and probably has the widest key
486
+ // range. Since it's range partitioned, the ending key of one file
487
+ // and the starting key of the next are very close (or identical).
488
+ for (size_t i = 1; i < num_files; i++) {
489
+ bounds.emplace_back(flevel->files[i].smallest_key);
490
+ }
491
+ }
492
+ }
493
+ }
494
+ }
495
+
496
+ std::sort(bounds.begin(), bounds.end(),
497
+ [cfd_comparator](const Slice& a, const Slice& b) -> bool {
498
+ return cfd_comparator->Compare(ExtractUserKey(a),
499
+ ExtractUserKey(b)) < 0;
500
+ });
501
+ // Remove duplicated entries from bounds
502
+ bounds.erase(
503
+ std::unique(bounds.begin(), bounds.end(),
504
+ [cfd_comparator](const Slice& a, const Slice& b) -> bool {
505
+ return cfd_comparator->Compare(ExtractUserKey(a),
506
+ ExtractUserKey(b)) == 0;
507
+ }),
508
+ bounds.end());
509
+
510
+ // Combine consecutive pairs of boundaries into ranges with an approximate
511
+ // size of data covered by keys in that range
512
+ uint64_t sum = 0;
513
+ std::vector<RangeWithSize> ranges;
514
+ // Get input version from CompactionState since it's already referenced
515
+ // earlier in SetInputVersioCompaction::SetInputVersion and will not change
516
+ // when db_mutex_ is released below
517
+ auto* v = compact_->compaction->input_version();
518
+ for (auto it = bounds.begin();;) {
519
+ const Slice a = *it;
520
+ ++it;
521
+
522
+ if (it == bounds.end()) {
523
+ break;
524
+ }
525
+
526
+ const Slice b = *it;
527
+
528
+ // ApproximateSize could potentially create table reader iterator to seek
529
+ // to the index block and may incur I/O cost in the process. Unlock db
530
+ // mutex to reduce contention
531
+ db_mutex_->Unlock();
532
+ uint64_t size = versions_->ApproximateSize(SizeApproximationOptions(), v, a,
533
+ b, start_lvl, out_lvl + 1,
534
+ TableReaderCaller::kCompaction);
535
+ db_mutex_->Lock();
536
+ ranges.emplace_back(a, b, size);
537
+ sum += size;
538
+ }
539
+
540
+ // Group the ranges into subcompactions
541
+ const double min_file_fill_percent = 4.0 / 5;
542
+ int base_level = v->storage_info()->base_level();
543
+ uint64_t max_output_files = static_cast<uint64_t>(std::ceil(
544
+ sum / min_file_fill_percent /
545
+ MaxFileSizeForLevel(*(c->mutable_cf_options()), out_lvl,
546
+ c->immutable_cf_options()->compaction_style, base_level,
547
+ c->immutable_cf_options()->level_compaction_dynamic_level_bytes)));
548
+ uint64_t subcompactions =
549
+ std::min({static_cast<uint64_t>(ranges.size()),
550
+ static_cast<uint64_t>(c->max_subcompactions()),
551
+ max_output_files});
552
+
553
+ if (subcompactions > 1) {
554
+ double mean = sum * 1.0 / subcompactions;
555
+ // Greedily add ranges to the subcompaction until the sum of the ranges'
556
+ // sizes becomes >= the expected mean size of a subcompaction
557
+ sum = 0;
558
+ for (size_t i = 0; i + 1 < ranges.size(); i++) {
559
+ sum += ranges[i].size;
560
+ if (subcompactions == 1) {
561
+ // If there's only one left to schedule then it goes to the end so no
562
+ // need to put an end boundary
563
+ continue;
564
+ }
565
+ if (sum >= mean) {
566
+ boundaries_.emplace_back(ExtractUserKey(ranges[i].range.limit));
567
+ sizes_.emplace_back(sum);
568
+ subcompactions--;
569
+ sum = 0;
570
+ }
571
+ }
572
+ sizes_.emplace_back(sum + ranges.back().size);
573
+ } else {
574
+ // Only one range so its size is the total sum of sizes computed above
575
+ sizes_.emplace_back(sum);
576
+ }
577
+ }
578
+
579
+ Status CompactionJob::Run() {
580
+ AutoThreadOperationStageUpdater stage_updater(
581
+ ThreadStatus::STAGE_COMPACTION_RUN);
582
+ TEST_SYNC_POINT("CompactionJob::Run():Start");
583
+ log_buffer_->FlushBufferToLog();
584
+ LogCompaction();
585
+
586
+ const size_t num_threads = compact_->sub_compact_states.size();
587
+ assert(num_threads > 0);
588
+ const uint64_t start_micros = env_->NowMicros();
589
+
590
+ // Launch a thread for each of subcompactions 1...num_threads-1
591
+ std::vector<port::Thread> thread_pool;
592
+ thread_pool.reserve(num_threads - 1);
593
+ for (size_t i = 1; i < compact_->sub_compact_states.size(); i++) {
594
+ thread_pool.emplace_back(&CompactionJob::ProcessKeyValueCompaction, this,
595
+ &compact_->sub_compact_states[i]);
596
+ }
597
+
598
+ // Always schedule the first subcompaction (whether or not there are also
599
+ // others) in the current thread to be efficient with resources
600
+ ProcessKeyValueCompaction(&compact_->sub_compact_states[0]);
601
+
602
+ // Wait for all other threads (if there are any) to finish execution
603
+ for (auto& thread : thread_pool) {
604
+ thread.join();
605
+ }
606
+
607
+ compaction_stats_.micros = env_->NowMicros() - start_micros;
608
+ compaction_stats_.cpu_micros = 0;
609
+ for (size_t i = 0; i < compact_->sub_compact_states.size(); i++) {
610
+ compaction_stats_.cpu_micros +=
611
+ compact_->sub_compact_states[i].compaction_job_stats.cpu_micros;
612
+ }
613
+
614
+ RecordTimeToHistogram(stats_, COMPACTION_TIME, compaction_stats_.micros);
615
+ RecordTimeToHistogram(stats_, COMPACTION_CPU_TIME,
616
+ compaction_stats_.cpu_micros);
617
+
618
+ TEST_SYNC_POINT("CompactionJob::Run:BeforeVerify");
619
+
620
+ // Check if any thread encountered an error during execution
621
+ Status status;
622
+ IOStatus io_s;
623
+ bool wrote_new_blob_files = false;
624
+
625
+ for (const auto& state : compact_->sub_compact_states) {
626
+ if (!state.status.ok()) {
627
+ status = state.status;
628
+ io_s = state.io_status;
629
+ break;
630
+ }
631
+
632
+ if (!state.blob_file_additions.empty()) {
633
+ wrote_new_blob_files = true;
634
+ }
635
+ }
636
+
637
+ if (io_status_.ok()) {
638
+ io_status_ = io_s;
639
+ }
640
+ if (status.ok()) {
641
+ constexpr IODebugContext* dbg = nullptr;
642
+
643
+ if (output_directory_) {
644
+ io_s = output_directory_->Fsync(IOOptions(), dbg);
645
+ }
646
+
647
+ if (io_s.ok() && wrote_new_blob_files && blob_output_directory_ &&
648
+ blob_output_directory_ != output_directory_) {
649
+ io_s = blob_output_directory_->Fsync(IOOptions(), dbg);
650
+ }
651
+ }
652
+ if (io_status_.ok()) {
653
+ io_status_ = io_s;
654
+ }
655
+ if (status.ok()) {
656
+ status = io_s;
657
+ }
658
+ if (status.ok()) {
659
+ thread_pool.clear();
660
+ std::vector<const CompactionJob::SubcompactionState::Output*> files_output;
661
+ for (const auto& state : compact_->sub_compact_states) {
662
+ for (const auto& output : state.outputs) {
663
+ files_output.emplace_back(&output);
664
+ }
665
+ }
666
+ ColumnFamilyData* cfd = compact_->compaction->column_family_data();
667
+ auto prefix_extractor =
668
+ compact_->compaction->mutable_cf_options()->prefix_extractor.get();
669
+ std::atomic<size_t> next_file_idx(0);
670
+ auto verify_table = [&](Status& output_status) {
671
+ while (true) {
672
+ size_t file_idx = next_file_idx.fetch_add(1);
673
+ if (file_idx >= files_output.size()) {
674
+ break;
675
+ }
676
+ // Verify that the table is usable
677
+ // We set for_compaction to false and don't OptimizeForCompactionTableRead
678
+ // here because this is a special case after we finish the table building
679
+ // No matter whether use_direct_io_for_flush_and_compaction is true,
680
+ // we will regard this verification as user reads since the goal is
681
+ // to cache it here for further user reads
682
+ ReadOptions read_options;
683
+ InternalIterator* iter = cfd->table_cache()->NewIterator(
684
+ read_options, file_options_, cfd->internal_comparator(),
685
+ files_output[file_idx]->meta, /*range_del_agg=*/nullptr,
686
+ prefix_extractor,
687
+ /*table_reader_ptr=*/nullptr,
688
+ cfd->internal_stats()->GetFileReadHist(
689
+ compact_->compaction->output_level()),
690
+ TableReaderCaller::kCompactionRefill, /*arena=*/nullptr,
691
+ /*skip_filters=*/false, compact_->compaction->output_level(),
692
+ MaxFileSizeForL0MetaPin(
693
+ *compact_->compaction->mutable_cf_options()),
694
+ /*smallest_compaction_key=*/nullptr,
695
+ /*largest_compaction_key=*/nullptr,
696
+ /*allow_unprepared_value=*/false);
697
+ auto s = iter->status();
698
+
699
+ if (s.ok() && paranoid_file_checks_) {
700
+ OutputValidator validator(cfd->internal_comparator(),
701
+ /*_enable_order_check=*/true,
702
+ /*_enable_hash=*/true);
703
+ for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
704
+ s = validator.Add(iter->key(), iter->value());
705
+ if (!s.ok()) {
706
+ break;
707
+ }
708
+ }
709
+ if (s.ok()) {
710
+ s = iter->status();
711
+ }
712
+ if (s.ok() &&
713
+ !validator.CompareValidator(files_output[file_idx]->validator)) {
714
+ s = Status::Corruption("Paranoid checksums do not match");
715
+ }
716
+ }
717
+
718
+ delete iter;
719
+
720
+ if (!s.ok()) {
721
+ output_status = s;
722
+ break;
723
+ }
724
+ }
725
+ };
726
+ for (size_t i = 1; i < compact_->sub_compact_states.size(); i++) {
727
+ thread_pool.emplace_back(verify_table,
728
+ std::ref(compact_->sub_compact_states[i].status));
729
+ }
730
+ verify_table(compact_->sub_compact_states[0].status);
731
+ for (auto& thread : thread_pool) {
732
+ thread.join();
733
+ }
734
+ for (const auto& state : compact_->sub_compact_states) {
735
+ if (!state.status.ok()) {
736
+ status = state.status;
737
+ break;
738
+ }
739
+ }
740
+ }
741
+
742
+ TablePropertiesCollection tp;
743
+ for (const auto& state : compact_->sub_compact_states) {
744
+ for (const auto& output : state.outputs) {
745
+ auto fn =
746
+ TableFileName(state.compaction->immutable_cf_options()->cf_paths,
747
+ output.meta.fd.GetNumber(), output.meta.fd.GetPathId());
748
+ tp[fn] = output.table_properties;
749
+ }
750
+ }
751
+ compact_->compaction->SetOutputTableProperties(std::move(tp));
752
+
753
+ // Finish up all book-keeping to unify the subcompaction results
754
+ AggregateStatistics();
755
+ UpdateCompactionStats();
756
+
757
+ RecordCompactionIOStats();
758
+ LogFlush(db_options_.info_log);
759
+ TEST_SYNC_POINT("CompactionJob::Run():End");
760
+
761
+ compact_->status = status;
762
+ return status;
763
+ }
764
+
765
+ Status CompactionJob::Install(const MutableCFOptions& mutable_cf_options) {
766
+ assert(compact_);
767
+
768
+ AutoThreadOperationStageUpdater stage_updater(
769
+ ThreadStatus::STAGE_COMPACTION_INSTALL);
770
+ db_mutex_->AssertHeld();
771
+ Status status = compact_->status;
772
+
773
+ ColumnFamilyData* cfd = compact_->compaction->column_family_data();
774
+ assert(cfd);
775
+
776
+ cfd->internal_stats()->AddCompactionStats(
777
+ compact_->compaction->output_level(), thread_pri_, compaction_stats_);
778
+
779
+ if (status.ok()) {
780
+ status = InstallCompactionResults(mutable_cf_options);
781
+ }
782
+ if (!versions_->io_status().ok()) {
783
+ io_status_ = versions_->io_status();
784
+ }
785
+
786
+ VersionStorageInfo::LevelSummaryStorage tmp;
787
+ auto vstorage = cfd->current()->storage_info();
788
+ const auto& stats = compaction_stats_;
789
+
790
+ double read_write_amp = 0.0;
791
+ double write_amp = 0.0;
792
+ double bytes_read_per_sec = 0;
793
+ double bytes_written_per_sec = 0;
794
+
795
+ if (stats.bytes_read_non_output_levels > 0) {
796
+ read_write_amp = (stats.bytes_written + stats.bytes_read_output_level +
797
+ stats.bytes_read_non_output_levels) /
798
+ static_cast<double>(stats.bytes_read_non_output_levels);
799
+ write_amp = stats.bytes_written /
800
+ static_cast<double>(stats.bytes_read_non_output_levels);
801
+ }
802
+ if (stats.micros > 0) {
803
+ bytes_read_per_sec =
804
+ (stats.bytes_read_non_output_levels + stats.bytes_read_output_level) /
805
+ static_cast<double>(stats.micros);
806
+ bytes_written_per_sec =
807
+ stats.bytes_written / static_cast<double>(stats.micros);
808
+ }
809
+
810
+ const std::string& column_family_name = cfd->GetName();
811
+
812
+ ROCKS_LOG_BUFFER(
813
+ log_buffer_,
814
+ "[%s] compacted to: %s, MB/sec: %.1f rd, %.1f wr, level %d, "
815
+ "files in(%d, %d) out(%d) "
816
+ "MB in(%.1f, %.1f) out(%.1f), read-write-amplify(%.1f) "
817
+ "write-amplify(%.1f) %s, records in: %" PRIu64
818
+ ", records dropped: %" PRIu64 " output_compression: %s\n",
819
+ column_family_name.c_str(), vstorage->LevelSummary(&tmp),
820
+ bytes_read_per_sec, bytes_written_per_sec,
821
+ compact_->compaction->output_level(),
822
+ stats.num_input_files_in_non_output_levels,
823
+ stats.num_input_files_in_output_level, stats.num_output_files,
824
+ stats.bytes_read_non_output_levels / 1048576.0,
825
+ stats.bytes_read_output_level / 1048576.0,
826
+ stats.bytes_written / 1048576.0, read_write_amp, write_amp,
827
+ status.ToString().c_str(), stats.num_input_records,
828
+ stats.num_dropped_records,
829
+ CompressionTypeToString(compact_->compaction->output_compression())
830
+ .c_str());
831
+
832
+ const auto& blob_files = vstorage->GetBlobFiles();
833
+ if (!blob_files.empty()) {
834
+ ROCKS_LOG_BUFFER(log_buffer_,
835
+ "[%s] Blob file summary: head=%" PRIu64 ", tail=%" PRIu64
836
+ "\n",
837
+ column_family_name.c_str(), blob_files.begin()->first,
838
+ blob_files.rbegin()->first);
839
+ }
840
+
841
+ UpdateCompactionJobStats(stats);
842
+
843
+ auto stream = event_logger_->LogToBuffer(log_buffer_);
844
+ stream << "job" << job_id_ << "event"
845
+ << "compaction_finished"
846
+ << "compaction_time_micros" << stats.micros
847
+ << "compaction_time_cpu_micros" << stats.cpu_micros << "output_level"
848
+ << compact_->compaction->output_level() << "num_output_files"
849
+ << compact_->num_output_files << "total_output_size"
850
+ << compact_->total_bytes;
851
+
852
+ if (compact_->num_blob_output_files > 0) {
853
+ stream << "num_blob_output_files" << compact_->num_blob_output_files
854
+ << "total_blob_output_size" << compact_->total_blob_bytes;
855
+ }
856
+
857
+ stream << "num_input_records" << stats.num_input_records
858
+ << "num_output_records" << compact_->num_output_records
859
+ << "num_subcompactions" << compact_->sub_compact_states.size()
860
+ << "output_compression"
861
+ << CompressionTypeToString(compact_->compaction->output_compression());
862
+
863
+ stream << "num_single_delete_mismatches"
864
+ << compaction_job_stats_->num_single_del_mismatch;
865
+ stream << "num_single_delete_fallthrough"
866
+ << compaction_job_stats_->num_single_del_fallthru;
867
+
868
+ if (measure_io_stats_) {
869
+ stream << "file_write_nanos" << compaction_job_stats_->file_write_nanos;
870
+ stream << "file_range_sync_nanos"
871
+ << compaction_job_stats_->file_range_sync_nanos;
872
+ stream << "file_fsync_nanos" << compaction_job_stats_->file_fsync_nanos;
873
+ stream << "file_prepare_write_nanos"
874
+ << compaction_job_stats_->file_prepare_write_nanos;
875
+ }
876
+
877
+ stream << "lsm_state";
878
+ stream.StartArray();
879
+ for (int level = 0; level < vstorage->num_levels(); ++level) {
880
+ stream << vstorage->NumLevelFiles(level);
881
+ }
882
+ stream.EndArray();
883
+
884
+ if (!blob_files.empty()) {
885
+ stream << "blob_file_head" << blob_files.begin()->first;
886
+ stream << "blob_file_tail" << blob_files.rbegin()->first;
887
+ }
888
+
889
+ CleanupCompaction();
890
+ return status;
891
+ }
892
+
893
+ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
894
+ assert(sub_compact);
895
+ assert(sub_compact->compaction);
896
+
897
+ uint64_t prev_cpu_micros = env_->NowCPUNanos() / 1000;
898
+
899
+ ColumnFamilyData* cfd = sub_compact->compaction->column_family_data();
900
+
901
+ // Create compaction filter and fail the compaction if
902
+ // IgnoreSnapshots() = false because it is not supported anymore
903
+ const CompactionFilter* compaction_filter =
904
+ cfd->ioptions()->compaction_filter;
905
+ std::unique_ptr<CompactionFilter> compaction_filter_from_factory = nullptr;
906
+ if (compaction_filter == nullptr) {
907
+ compaction_filter_from_factory =
908
+ sub_compact->compaction->CreateCompactionFilter();
909
+ compaction_filter = compaction_filter_from_factory.get();
910
+ }
911
+ if (compaction_filter != nullptr && !compaction_filter->IgnoreSnapshots()) {
912
+ sub_compact->status = Status::NotSupported(
913
+ "CompactionFilter::IgnoreSnapshots() = false is not supported "
914
+ "anymore.");
915
+ return;
916
+ }
917
+
918
+ CompactionRangeDelAggregator range_del_agg(&cfd->internal_comparator(),
919
+ existing_snapshots_);
920
+ ReadOptions read_options;
921
+ read_options.verify_checksums = true;
922
+ read_options.fill_cache = false;
923
+ // Compaction iterators shouldn't be confined to a single prefix.
924
+ // Compactions use Seek() for
925
+ // (a) concurrent compactions,
926
+ // (b) CompactionFilter::Decision::kRemoveAndSkipUntil.
927
+ read_options.total_order_seek = true;
928
+
929
+ // Although the v2 aggregator is what the level iterator(s) know about,
930
+ // the AddTombstones calls will be propagated down to the v1 aggregator.
931
+ std::unique_ptr<InternalIterator> input(
932
+ versions_->MakeInputIterator(read_options, sub_compact->compaction,
933
+ &range_del_agg, file_options_for_read_));
934
+
935
+ AutoThreadOperationStageUpdater stage_updater(
936
+ ThreadStatus::STAGE_COMPACTION_PROCESS_KV);
937
+
938
+ // I/O measurement variables
939
+ PerfLevel prev_perf_level = PerfLevel::kEnableTime;
940
+ const uint64_t kRecordStatsEvery = 1000;
941
+ uint64_t prev_write_nanos = 0;
942
+ uint64_t prev_fsync_nanos = 0;
943
+ uint64_t prev_range_sync_nanos = 0;
944
+ uint64_t prev_prepare_write_nanos = 0;
945
+ uint64_t prev_cpu_write_nanos = 0;
946
+ uint64_t prev_cpu_read_nanos = 0;
947
+ if (measure_io_stats_) {
948
+ prev_perf_level = GetPerfLevel();
949
+ SetPerfLevel(PerfLevel::kEnableTimeAndCPUTimeExceptForMutex);
950
+ prev_write_nanos = IOSTATS(write_nanos);
951
+ prev_fsync_nanos = IOSTATS(fsync_nanos);
952
+ prev_range_sync_nanos = IOSTATS(range_sync_nanos);
953
+ prev_prepare_write_nanos = IOSTATS(prepare_write_nanos);
954
+ prev_cpu_write_nanos = IOSTATS(cpu_write_nanos);
955
+ prev_cpu_read_nanos = IOSTATS(cpu_read_nanos);
956
+ }
957
+
958
+ MergeHelper merge(
959
+ env_, cfd->user_comparator(), cfd->ioptions()->merge_operator,
960
+ compaction_filter, db_options_.info_log.get(),
961
+ false /* internal key corruption is expected */,
962
+ existing_snapshots_.empty() ? 0 : existing_snapshots_.back(),
963
+ snapshot_checker_, compact_->compaction->level(),
964
+ db_options_.statistics.get());
965
+
966
+ const MutableCFOptions* mutable_cf_options =
967
+ sub_compact->compaction->mutable_cf_options();
968
+ assert(mutable_cf_options);
969
+
970
+ std::vector<std::string> blob_file_paths;
971
+
972
+ std::unique_ptr<BlobFileBuilder> blob_file_builder(
973
+ mutable_cf_options->enable_blob_files
974
+ ? new BlobFileBuilder(
975
+ versions_, env_, fs_.get(),
976
+ sub_compact->compaction->immutable_cf_options(),
977
+ mutable_cf_options, &file_options_, job_id_, cfd->GetID(),
978
+ cfd->GetName(), Env::IOPriority::IO_LOW, write_hint_,
979
+ &blob_file_paths, &sub_compact->blob_file_additions)
980
+ : nullptr);
981
+
982
+ TEST_SYNC_POINT("CompactionJob::Run():Inprogress");
983
+ TEST_SYNC_POINT_CALLBACK(
984
+ "CompactionJob::Run():PausingManualCompaction:1",
985
+ reinterpret_cast<void*>(
986
+ const_cast<std::atomic<int>*>(manual_compaction_paused_)));
987
+
988
+ Slice* start = sub_compact->start;
989
+ Slice* end = sub_compact->end;
990
+ if (start != nullptr) {
991
+ IterKey start_iter;
992
+ start_iter.SetInternalKey(*start, kMaxSequenceNumber, kValueTypeForSeek);
993
+ input->Seek(start_iter.GetInternalKey());
994
+ } else {
995
+ input->SeekToFirst();
996
+ }
997
+
998
+ Status status;
999
+ const std::string* const full_history_ts_low =
1000
+ full_history_ts_low_.empty() ? nullptr : &full_history_ts_low_;
1001
+ sub_compact->c_iter.reset(new CompactionIterator(
1002
+ input.get(), cfd->user_comparator(), &merge, versions_->LastSequence(),
1003
+ &existing_snapshots_, earliest_write_conflict_snapshot_,
1004
+ snapshot_checker_, env_, ShouldReportDetailedTime(env_, stats_),
1005
+ /*expect_valid_internal_key=*/true, &range_del_agg,
1006
+ blob_file_builder.get(), db_options_.allow_data_in_errors,
1007
+ sub_compact->compaction, compaction_filter, shutting_down_,
1008
+ preserve_deletes_seqnum_, manual_compaction_paused_, db_options_.info_log,
1009
+ full_history_ts_low));
1010
+ auto c_iter = sub_compact->c_iter.get();
1011
+ c_iter->SeekToFirst();
1012
+ if (c_iter->Valid() && sub_compact->compaction->output_level() != 0) {
1013
+ // ShouldStopBefore() maintains state based on keys processed so far. The
1014
+ // compaction loop always calls it on the "next" key, thus won't tell it the
1015
+ // first key. So we do that here.
1016
+ sub_compact->ShouldStopBefore(c_iter->key(),
1017
+ sub_compact->current_output_file_size);
1018
+ }
1019
+ const auto& c_iter_stats = c_iter->iter_stats();
1020
+
1021
+ std::unique_ptr<SstPartitioner> partitioner =
1022
+ sub_compact->compaction->output_level() == 0
1023
+ ? nullptr
1024
+ : sub_compact->compaction->CreateSstPartitioner();
1025
+ std::string last_key_for_partitioner;
1026
+
1027
+ while (status.ok() && !cfd->IsDropped() && c_iter->Valid()) {
1028
+ // Invariant: c_iter.status() is guaranteed to be OK if c_iter->Valid()
1029
+ // returns true.
1030
+ const Slice& key = c_iter->key();
1031
+ const Slice& value = c_iter->value();
1032
+
1033
+ // If an end key (exclusive) is specified, check if the current key is
1034
+ // >= than it and exit if it is because the iterator is out of its range
1035
+ if (end != nullptr &&
1036
+ cfd->user_comparator()->Compare(c_iter->user_key(), *end) >= 0) {
1037
+ break;
1038
+ }
1039
+ if (c_iter_stats.num_input_records % kRecordStatsEvery ==
1040
+ kRecordStatsEvery - 1) {
1041
+ RecordDroppedKeys(c_iter_stats, &sub_compact->compaction_job_stats);
1042
+ c_iter->ResetRecordCounts();
1043
+ RecordCompactionIOStats();
1044
+ }
1045
+
1046
+ // Open output file if necessary
1047
+ if (sub_compact->builder == nullptr) {
1048
+ status = OpenCompactionOutputFile(sub_compact);
1049
+ if (!status.ok()) {
1050
+ break;
1051
+ }
1052
+ }
1053
+ status = sub_compact->AddToBuilder(key, value);
1054
+ if (!status.ok()) {
1055
+ break;
1056
+ }
1057
+
1058
+ sub_compact->current_output_file_size =
1059
+ sub_compact->builder->EstimatedFileSize();
1060
+ const ParsedInternalKey& ikey = c_iter->ikey();
1061
+ sub_compact->current_output()->meta.UpdateBoundaries(
1062
+ key, value, ikey.sequence, ikey.type);
1063
+ sub_compact->num_output_records++;
1064
+
1065
+ // Close output file if it is big enough. Two possibilities determine it's
1066
+ // time to close it: (1) the current key should be this file's last key, (2)
1067
+ // the next key should not be in this file.
1068
+ //
1069
+ // TODO(aekmekji): determine if file should be closed earlier than this
1070
+ // during subcompactions (i.e. if output size, estimated by input size, is
1071
+ // going to be 1.2MB and max_output_file_size = 1MB, prefer to have 0.6MB
1072
+ // and 0.6MB instead of 1MB and 0.2MB)
1073
+ bool output_file_ended = false;
1074
+ if (sub_compact->compaction->output_level() != 0 &&
1075
+ sub_compact->current_output_file_size >=
1076
+ sub_compact->compaction->max_output_file_size()) {
1077
+ // (1) this key terminates the file. For historical reasons, the iterator
1078
+ // status before advancing will be given to FinishCompactionOutputFile().
1079
+ output_file_ended = true;
1080
+ }
1081
+ TEST_SYNC_POINT_CALLBACK(
1082
+ "CompactionJob::Run():PausingManualCompaction:2",
1083
+ reinterpret_cast<void*>(
1084
+ const_cast<std::atomic<int>*>(manual_compaction_paused_)));
1085
+ if (partitioner.get()) {
1086
+ last_key_for_partitioner.assign(c_iter->user_key().data_,
1087
+ c_iter->user_key().size_);
1088
+ }
1089
+ c_iter->Next();
1090
+ if (c_iter->status().IsManualCompactionPaused()) {
1091
+ break;
1092
+ }
1093
+ if (!output_file_ended && c_iter->Valid()) {
1094
+ if (((partitioner.get() &&
1095
+ partitioner->ShouldPartition(PartitionerRequest(
1096
+ last_key_for_partitioner, c_iter->user_key(),
1097
+ sub_compact->current_output_file_size)) == kRequired) ||
1098
+ (sub_compact->compaction->output_level() != 0 &&
1099
+ sub_compact->ShouldStopBefore(
1100
+ c_iter->key(), sub_compact->current_output_file_size))) &&
1101
+ sub_compact->builder != nullptr) {
1102
+ // (2) this key belongs to the next file. For historical reasons, the
1103
+ // iterator status after advancing will be given to
1104
+ // FinishCompactionOutputFile().
1105
+ output_file_ended = true;
1106
+ }
1107
+ }
1108
+ if (output_file_ended) {
1109
+ const Slice* next_key = nullptr;
1110
+ if (c_iter->Valid()) {
1111
+ next_key = &c_iter->key();
1112
+ }
1113
+ CompactionIterationStats range_del_out_stats;
1114
+ status = FinishCompactionOutputFile(input->status(), sub_compact,
1115
+ &range_del_agg, &range_del_out_stats,
1116
+ next_key);
1117
+ RecordDroppedKeys(range_del_out_stats,
1118
+ &sub_compact->compaction_job_stats);
1119
+ }
1120
+ }
1121
+
1122
+ sub_compact->compaction_job_stats.num_input_deletion_records =
1123
+ c_iter_stats.num_input_deletion_records;
1124
+ sub_compact->compaction_job_stats.num_corrupt_keys =
1125
+ c_iter_stats.num_input_corrupt_records;
1126
+ sub_compact->compaction_job_stats.num_single_del_fallthru =
1127
+ c_iter_stats.num_single_del_fallthru;
1128
+ sub_compact->compaction_job_stats.num_single_del_mismatch =
1129
+ c_iter_stats.num_single_del_mismatch;
1130
+ sub_compact->compaction_job_stats.total_input_raw_key_bytes +=
1131
+ c_iter_stats.total_input_raw_key_bytes;
1132
+ sub_compact->compaction_job_stats.total_input_raw_value_bytes +=
1133
+ c_iter_stats.total_input_raw_value_bytes;
1134
+
1135
+ RecordTick(stats_, FILTER_OPERATION_TOTAL_TIME,
1136
+ c_iter_stats.total_filter_time);
1137
+ RecordDroppedKeys(c_iter_stats, &sub_compact->compaction_job_stats);
1138
+ RecordCompactionIOStats();
1139
+
1140
+ if (status.ok() && cfd->IsDropped()) {
1141
+ status =
1142
+ Status::ColumnFamilyDropped("Column family dropped during compaction");
1143
+ }
1144
+ if ((status.ok() || status.IsColumnFamilyDropped()) &&
1145
+ shutting_down_->load(std::memory_order_relaxed)) {
1146
+ status = Status::ShutdownInProgress("Database shutdown");
1147
+ }
1148
+ if ((status.ok() || status.IsColumnFamilyDropped()) &&
1149
+ (manual_compaction_paused_ &&
1150
+ manual_compaction_paused_->load(std::memory_order_relaxed) > 0)) {
1151
+ status = Status::Incomplete(Status::SubCode::kManualCompactionPaused);
1152
+ }
1153
+ if (status.ok()) {
1154
+ status = input->status();
1155
+ }
1156
+ if (status.ok()) {
1157
+ status = c_iter->status();
1158
+ }
1159
+
1160
+ if (status.ok() && sub_compact->builder == nullptr &&
1161
+ sub_compact->outputs.size() == 0 && !range_del_agg.IsEmpty()) {
1162
+ // handle subcompaction containing only range deletions
1163
+ status = OpenCompactionOutputFile(sub_compact);
1164
+ }
1165
+
1166
+ // Call FinishCompactionOutputFile() even if status is not ok: it needs to
1167
+ // close the output file.
1168
+ if (sub_compact->builder != nullptr) {
1169
+ CompactionIterationStats range_del_out_stats;
1170
+ Status s = FinishCompactionOutputFile(status, sub_compact, &range_del_agg,
1171
+ &range_del_out_stats);
1172
+ if (!s.ok() && status.ok()) {
1173
+ status = s;
1174
+ }
1175
+ RecordDroppedKeys(range_del_out_stats, &sub_compact->compaction_job_stats);
1176
+ }
1177
+
1178
+ if (blob_file_builder) {
1179
+ if (status.ok()) {
1180
+ status = blob_file_builder->Finish();
1181
+ }
1182
+
1183
+ blob_file_builder.reset();
1184
+ }
1185
+
1186
+ sub_compact->compaction_job_stats.cpu_micros =
1187
+ env_->NowCPUNanos() / 1000 - prev_cpu_micros;
1188
+
1189
+ if (measure_io_stats_) {
1190
+ sub_compact->compaction_job_stats.file_write_nanos +=
1191
+ IOSTATS(write_nanos) - prev_write_nanos;
1192
+ sub_compact->compaction_job_stats.file_fsync_nanos +=
1193
+ IOSTATS(fsync_nanos) - prev_fsync_nanos;
1194
+ sub_compact->compaction_job_stats.file_range_sync_nanos +=
1195
+ IOSTATS(range_sync_nanos) - prev_range_sync_nanos;
1196
+ sub_compact->compaction_job_stats.file_prepare_write_nanos +=
1197
+ IOSTATS(prepare_write_nanos) - prev_prepare_write_nanos;
1198
+ sub_compact->compaction_job_stats.cpu_micros -=
1199
+ (IOSTATS(cpu_write_nanos) - prev_cpu_write_nanos +
1200
+ IOSTATS(cpu_read_nanos) - prev_cpu_read_nanos) /
1201
+ 1000;
1202
+ if (prev_perf_level != PerfLevel::kEnableTimeAndCPUTimeExceptForMutex) {
1203
+ SetPerfLevel(prev_perf_level);
1204
+ }
1205
+ }
1206
+ #ifdef ROCKSDB_ASSERT_STATUS_CHECKED
1207
+ if (!status.ok()) {
1208
+ if (sub_compact->c_iter) {
1209
+ sub_compact->c_iter->status().PermitUncheckedError();
1210
+ }
1211
+ if (input) {
1212
+ input->status().PermitUncheckedError();
1213
+ }
1214
+ }
1215
+ #endif // ROCKSDB_ASSERT_STATUS_CHECKED
1216
+
1217
+ sub_compact->c_iter.reset();
1218
+ input.reset();
1219
+ sub_compact->status = status;
1220
+ }
1221
+
1222
+ void CompactionJob::RecordDroppedKeys(
1223
+ const CompactionIterationStats& c_iter_stats,
1224
+ CompactionJobStats* compaction_job_stats) {
1225
+ if (c_iter_stats.num_record_drop_user > 0) {
1226
+ RecordTick(stats_, COMPACTION_KEY_DROP_USER,
1227
+ c_iter_stats.num_record_drop_user);
1228
+ }
1229
+ if (c_iter_stats.num_record_drop_hidden > 0) {
1230
+ RecordTick(stats_, COMPACTION_KEY_DROP_NEWER_ENTRY,
1231
+ c_iter_stats.num_record_drop_hidden);
1232
+ if (compaction_job_stats) {
1233
+ compaction_job_stats->num_records_replaced +=
1234
+ c_iter_stats.num_record_drop_hidden;
1235
+ }
1236
+ }
1237
+ if (c_iter_stats.num_record_drop_obsolete > 0) {
1238
+ RecordTick(stats_, COMPACTION_KEY_DROP_OBSOLETE,
1239
+ c_iter_stats.num_record_drop_obsolete);
1240
+ if (compaction_job_stats) {
1241
+ compaction_job_stats->num_expired_deletion_records +=
1242
+ c_iter_stats.num_record_drop_obsolete;
1243
+ }
1244
+ }
1245
+ if (c_iter_stats.num_record_drop_range_del > 0) {
1246
+ RecordTick(stats_, COMPACTION_KEY_DROP_RANGE_DEL,
1247
+ c_iter_stats.num_record_drop_range_del);
1248
+ }
1249
+ if (c_iter_stats.num_range_del_drop_obsolete > 0) {
1250
+ RecordTick(stats_, COMPACTION_RANGE_DEL_DROP_OBSOLETE,
1251
+ c_iter_stats.num_range_del_drop_obsolete);
1252
+ }
1253
+ if (c_iter_stats.num_optimized_del_drop_obsolete > 0) {
1254
+ RecordTick(stats_, COMPACTION_OPTIMIZED_DEL_DROP_OBSOLETE,
1255
+ c_iter_stats.num_optimized_del_drop_obsolete);
1256
+ }
1257
+ }
1258
+
1259
+ Status CompactionJob::FinishCompactionOutputFile(
1260
+ const Status& input_status, SubcompactionState* sub_compact,
1261
+ CompactionRangeDelAggregator* range_del_agg,
1262
+ CompactionIterationStats* range_del_out_stats,
1263
+ const Slice* next_table_min_key /* = nullptr */) {
1264
+ AutoThreadOperationStageUpdater stage_updater(
1265
+ ThreadStatus::STAGE_COMPACTION_SYNC_FILE);
1266
+ assert(sub_compact != nullptr);
1267
+ assert(sub_compact->outfile);
1268
+ assert(sub_compact->builder != nullptr);
1269
+ assert(sub_compact->current_output() != nullptr);
1270
+
1271
+ uint64_t output_number = sub_compact->current_output()->meta.fd.GetNumber();
1272
+ assert(output_number != 0);
1273
+
1274
+ ColumnFamilyData* cfd = sub_compact->compaction->column_family_data();
1275
+ const Comparator* ucmp = cfd->user_comparator();
1276
+ std::string file_checksum = kUnknownFileChecksum;
1277
+ std::string file_checksum_func_name = kUnknownFileChecksumFuncName;
1278
+
1279
+ // Check for iterator errors
1280
+ Status s = input_status;
1281
+ auto meta = &sub_compact->current_output()->meta;
1282
+ assert(meta != nullptr);
1283
+ if (s.ok()) {
1284
+ Slice lower_bound_guard, upper_bound_guard;
1285
+ std::string smallest_user_key;
1286
+ const Slice *lower_bound, *upper_bound;
1287
+ bool lower_bound_from_sub_compact = false;
1288
+ if (sub_compact->outputs.size() == 1) {
1289
+ // For the first output table, include range tombstones before the min key
1290
+ // but after the subcompaction boundary.
1291
+ lower_bound = sub_compact->start;
1292
+ lower_bound_from_sub_compact = true;
1293
+ } else if (meta->smallest.size() > 0) {
1294
+ // For subsequent output tables, only include range tombstones from min
1295
+ // key onwards since the previous file was extended to contain range
1296
+ // tombstones falling before min key.
1297
+ smallest_user_key = meta->smallest.user_key().ToString(false /*hex*/);
1298
+ lower_bound_guard = Slice(smallest_user_key);
1299
+ lower_bound = &lower_bound_guard;
1300
+ } else {
1301
+ lower_bound = nullptr;
1302
+ }
1303
+ if (next_table_min_key != nullptr) {
1304
+ // This may be the last file in the subcompaction in some cases, so we
1305
+ // need to compare the end key of subcompaction with the next file start
1306
+ // key. When the end key is chosen by the subcompaction, we know that
1307
+ // it must be the biggest key in output file. Therefore, it is safe to
1308
+ // use the smaller key as the upper bound of the output file, to ensure
1309
+ // that there is no overlapping between different output files.
1310
+ upper_bound_guard = ExtractUserKey(*next_table_min_key);
1311
+ if (sub_compact->end != nullptr &&
1312
+ ucmp->Compare(upper_bound_guard, *sub_compact->end) >= 0) {
1313
+ upper_bound = sub_compact->end;
1314
+ } else {
1315
+ upper_bound = &upper_bound_guard;
1316
+ }
1317
+ } else {
1318
+ // This is the last file in the subcompaction, so extend until the
1319
+ // subcompaction ends.
1320
+ upper_bound = sub_compact->end;
1321
+ }
1322
+ auto earliest_snapshot = kMaxSequenceNumber;
1323
+ if (existing_snapshots_.size() > 0) {
1324
+ earliest_snapshot = existing_snapshots_[0];
1325
+ }
1326
+ bool has_overlapping_endpoints;
1327
+ if (upper_bound != nullptr && meta->largest.size() > 0) {
1328
+ has_overlapping_endpoints =
1329
+ ucmp->Compare(meta->largest.user_key(), *upper_bound) == 0;
1330
+ } else {
1331
+ has_overlapping_endpoints = false;
1332
+ }
1333
+
1334
+ // The end key of the subcompaction must be bigger or equal to the upper
1335
+ // bound. If the end of subcompaction is null or the upper bound is null,
1336
+ // it means that this file is the last file in the compaction. So there
1337
+ // will be no overlapping between this file and others.
1338
+ assert(sub_compact->end == nullptr ||
1339
+ upper_bound == nullptr ||
1340
+ ucmp->Compare(*upper_bound , *sub_compact->end) <= 0);
1341
+ auto it = range_del_agg->NewIterator(lower_bound, upper_bound,
1342
+ has_overlapping_endpoints);
1343
+ // Position the range tombstone output iterator. There may be tombstone
1344
+ // fragments that are entirely out of range, so make sure that we do not
1345
+ // include those.
1346
+ if (lower_bound != nullptr) {
1347
+ it->Seek(*lower_bound);
1348
+ } else {
1349
+ it->SeekToFirst();
1350
+ }
1351
+ TEST_SYNC_POINT("CompactionJob::FinishCompactionOutputFile1");
1352
+ for (; it->Valid(); it->Next()) {
1353
+ auto tombstone = it->Tombstone();
1354
+ if (upper_bound != nullptr) {
1355
+ int cmp = ucmp->Compare(*upper_bound, tombstone.start_key_);
1356
+ if ((has_overlapping_endpoints && cmp < 0) ||
1357
+ (!has_overlapping_endpoints && cmp <= 0)) {
1358
+ // Tombstones starting after upper_bound only need to be included in
1359
+ // the next table. If the current SST ends before upper_bound, i.e.,
1360
+ // `has_overlapping_endpoints == false`, we can also skip over range
1361
+ // tombstones that start exactly at upper_bound. Such range tombstones
1362
+ // will be included in the next file and are not relevant to the point
1363
+ // keys or endpoints of the current file.
1364
+ break;
1365
+ }
1366
+ }
1367
+
1368
+ if (bottommost_level_ && tombstone.seq_ <= earliest_snapshot) {
1369
+ // TODO(andrewkr): tombstones that span multiple output files are
1370
+ // counted for each compaction output file, so lots of double counting.
1371
+ range_del_out_stats->num_range_del_drop_obsolete++;
1372
+ range_del_out_stats->num_record_drop_obsolete++;
1373
+ continue;
1374
+ }
1375
+
1376
+ auto kv = tombstone.Serialize();
1377
+ assert(lower_bound == nullptr ||
1378
+ ucmp->Compare(*lower_bound, kv.second) < 0);
1379
+ // Range tombstone is not supported by output validator yet.
1380
+ sub_compact->builder->Add(kv.first.Encode(), kv.second);
1381
+ InternalKey smallest_candidate = std::move(kv.first);
1382
+ if (lower_bound != nullptr &&
1383
+ ucmp->Compare(smallest_candidate.user_key(), *lower_bound) <= 0) {
1384
+ // Pretend the smallest key has the same user key as lower_bound
1385
+ // (the max key in the previous table or subcompaction) in order for
1386
+ // files to appear key-space partitioned.
1387
+ //
1388
+ // When lower_bound is chosen by a subcompaction, we know that
1389
+ // subcompactions over smaller keys cannot contain any keys at
1390
+ // lower_bound. We also know that smaller subcompactions exist, because
1391
+ // otherwise the subcompaction woud be unbounded on the left. As a
1392
+ // result, we know that no other files on the output level will contain
1393
+ // actual keys at lower_bound (an output file may have a largest key of
1394
+ // lower_bound@kMaxSequenceNumber, but this only indicates a large range
1395
+ // tombstone was truncated). Therefore, it is safe to use the
1396
+ // tombstone's sequence number, to ensure that keys at lower_bound at
1397
+ // lower levels are covered by truncated tombstones.
1398
+ //
1399
+ // If lower_bound was chosen by the smallest data key in the file,
1400
+ // choose lowest seqnum so this file's smallest internal key comes after
1401
+ // the previous file's largest. The fake seqnum is OK because the read
1402
+ // path's file-picking code only considers user key.
1403
+ smallest_candidate = InternalKey(
1404
+ *lower_bound, lower_bound_from_sub_compact ? tombstone.seq_ : 0,
1405
+ kTypeRangeDeletion);
1406
+ }
1407
+ InternalKey largest_candidate = tombstone.SerializeEndKey();
1408
+ if (upper_bound != nullptr &&
1409
+ ucmp->Compare(*upper_bound, largest_candidate.user_key()) <= 0) {
1410
+ // Pretend the largest key has the same user key as upper_bound (the
1411
+ // min key in the following table or subcompaction) in order for files
1412
+ // to appear key-space partitioned.
1413
+ //
1414
+ // Choose highest seqnum so this file's largest internal key comes
1415
+ // before the next file's/subcompaction's smallest. The fake seqnum is
1416
+ // OK because the read path's file-picking code only considers the user
1417
+ // key portion.
1418
+ //
1419
+ // Note Seek() also creates InternalKey with (user_key,
1420
+ // kMaxSequenceNumber), but with kTypeDeletion (0x7) instead of
1421
+ // kTypeRangeDeletion (0xF), so the range tombstone comes before the
1422
+ // Seek() key in InternalKey's ordering. So Seek() will look in the
1423
+ // next file for the user key.
1424
+ largest_candidate =
1425
+ InternalKey(*upper_bound, kMaxSequenceNumber, kTypeRangeDeletion);
1426
+ }
1427
+ #ifndef NDEBUG
1428
+ SequenceNumber smallest_ikey_seqnum = kMaxSequenceNumber;
1429
+ if (meta->smallest.size() > 0) {
1430
+ smallest_ikey_seqnum = GetInternalKeySeqno(meta->smallest.Encode());
1431
+ }
1432
+ #endif
1433
+ meta->UpdateBoundariesForRange(smallest_candidate, largest_candidate,
1434
+ tombstone.seq_,
1435
+ cfd->internal_comparator());
1436
+
1437
+ // The smallest key in a file is used for range tombstone truncation, so
1438
+ // it cannot have a seqnum of 0 (unless the smallest data key in a file
1439
+ // has a seqnum of 0). Otherwise, the truncated tombstone may expose
1440
+ // deleted keys at lower levels.
1441
+ assert(smallest_ikey_seqnum == 0 ||
1442
+ ExtractInternalKeyFooter(meta->smallest.Encode()) !=
1443
+ PackSequenceAndType(0, kTypeRangeDeletion));
1444
+ }
1445
+ }
1446
+ const uint64_t current_entries = sub_compact->builder->NumEntries();
1447
+ if (s.ok()) {
1448
+ s = sub_compact->builder->Finish();
1449
+ } else {
1450
+ sub_compact->builder->Abandon();
1451
+ }
1452
+ IOStatus io_s = sub_compact->builder->io_status();
1453
+ if (s.ok()) {
1454
+ s = io_s;
1455
+ }
1456
+ const uint64_t current_bytes = sub_compact->builder->FileSize();
1457
+ if (s.ok()) {
1458
+ meta->fd.file_size = current_bytes;
1459
+ meta->marked_for_compaction = sub_compact->builder->NeedCompact();
1460
+ }
1461
+ sub_compact->current_output()->finished = true;
1462
+ sub_compact->total_bytes += current_bytes;
1463
+
1464
+ // Finish and check for file errors
1465
+ if (s.ok()) {
1466
+ StopWatch sw(env_, stats_, COMPACTION_OUTFILE_SYNC_MICROS);
1467
+ io_s = sub_compact->outfile->Sync(db_options_.use_fsync);
1468
+ }
1469
+ if (s.ok() && io_s.ok()) {
1470
+ io_s = sub_compact->outfile->Close();
1471
+ }
1472
+ if (s.ok() && io_s.ok()) {
1473
+ // Add the checksum information to file metadata.
1474
+ meta->file_checksum = sub_compact->outfile->GetFileChecksum();
1475
+ meta->file_checksum_func_name =
1476
+ sub_compact->outfile->GetFileChecksumFuncName();
1477
+ file_checksum = meta->file_checksum;
1478
+ file_checksum_func_name = meta->file_checksum_func_name;
1479
+ }
1480
+ if (s.ok()) {
1481
+ s = io_s;
1482
+ }
1483
+ if (sub_compact->io_status.ok()) {
1484
+ sub_compact->io_status = io_s;
1485
+ // Since this error is really a copy of the
1486
+ // "normal" status, it does not also need to be checked
1487
+ sub_compact->io_status.PermitUncheckedError();
1488
+ }
1489
+ sub_compact->outfile.reset();
1490
+
1491
+ TableProperties tp;
1492
+ if (s.ok()) {
1493
+ tp = sub_compact->builder->GetTableProperties();
1494
+ }
1495
+
1496
+ if (s.ok() && current_entries == 0 && tp.num_range_deletions == 0) {
1497
+ // If there is nothing to output, no necessary to generate a sst file.
1498
+ // This happens when the output level is bottom level, at the same time
1499
+ // the sub_compact output nothing.
1500
+ std::string fname =
1501
+ TableFileName(sub_compact->compaction->immutable_cf_options()->cf_paths,
1502
+ meta->fd.GetNumber(), meta->fd.GetPathId());
1503
+
1504
+ // TODO(AR) it is not clear if there are any larger implications if
1505
+ // DeleteFile fails here
1506
+ Status ds = env_->DeleteFile(fname);
1507
+ if (!ds.ok()) {
1508
+ ROCKS_LOG_WARN(
1509
+ db_options_.info_log,
1510
+ "[%s] [JOB %d] Unable to remove SST file for table #%" PRIu64
1511
+ " at bottom level%s",
1512
+ cfd->GetName().c_str(), job_id_, output_number,
1513
+ meta->marked_for_compaction ? " (need compaction)" : "");
1514
+ }
1515
+
1516
+ // Also need to remove the file from outputs, or it will be added to the
1517
+ // VersionEdit.
1518
+ assert(!sub_compact->outputs.empty());
1519
+ sub_compact->outputs.pop_back();
1520
+ meta = nullptr;
1521
+ }
1522
+
1523
+ if (s.ok() && (current_entries > 0 || tp.num_range_deletions > 0)) {
1524
+ // Output to event logger and fire events.
1525
+ sub_compact->current_output()->table_properties =
1526
+ std::make_shared<TableProperties>(tp);
1527
+ ROCKS_LOG_INFO(db_options_.info_log,
1528
+ "[%s] [JOB %d] Generated table #%" PRIu64 ": %" PRIu64
1529
+ " keys, %" PRIu64 " bytes%s",
1530
+ cfd->GetName().c_str(), job_id_, output_number,
1531
+ current_entries, current_bytes,
1532
+ meta->marked_for_compaction ? " (need compaction)" : "");
1533
+ }
1534
+ std::string fname;
1535
+ FileDescriptor output_fd;
1536
+ uint64_t oldest_blob_file_number = kInvalidBlobFileNumber;
1537
+ if (meta != nullptr) {
1538
+ fname =
1539
+ TableFileName(sub_compact->compaction->immutable_cf_options()->cf_paths,
1540
+ meta->fd.GetNumber(), meta->fd.GetPathId());
1541
+ output_fd = meta->fd;
1542
+ oldest_blob_file_number = meta->oldest_blob_file_number;
1543
+ } else {
1544
+ fname = "(nil)";
1545
+ }
1546
+ EventHelpers::LogAndNotifyTableFileCreationFinished(
1547
+ event_logger_, cfd->ioptions()->listeners, dbname_, cfd->GetName(), fname,
1548
+ job_id_, output_fd, oldest_blob_file_number, tp,
1549
+ TableFileCreationReason::kCompaction, s, file_checksum,
1550
+ file_checksum_func_name);
1551
+
1552
+ #ifndef ROCKSDB_LITE
1553
+ // Report new file to SstFileManagerImpl
1554
+ auto sfm =
1555
+ static_cast<SstFileManagerImpl*>(db_options_.sst_file_manager.get());
1556
+ if (sfm && meta != nullptr && meta->fd.GetPathId() == 0) {
1557
+ Status add_s = sfm->OnAddFile(fname);
1558
+ if (!add_s.ok() && s.ok()) {
1559
+ s = add_s;
1560
+ }
1561
+ if (sfm->IsMaxAllowedSpaceReached()) {
1562
+ // TODO(ajkr): should we return OK() if max space was reached by the final
1563
+ // compaction output file (similarly to how flush works when full)?
1564
+ s = Status::SpaceLimit("Max allowed space was reached");
1565
+ TEST_SYNC_POINT(
1566
+ "CompactionJob::FinishCompactionOutputFile:"
1567
+ "MaxAllowedSpaceReached");
1568
+ InstrumentedMutexLock l(db_mutex_);
1569
+ db_error_handler_->SetBGError(s, BackgroundErrorReason::kCompaction);
1570
+ }
1571
+ }
1572
+ #endif
1573
+
1574
+ sub_compact->builder.reset();
1575
+ sub_compact->current_output_file_size = 0;
1576
+ return s;
1577
+ }
1578
+
1579
+ Status CompactionJob::InstallCompactionResults(
1580
+ const MutableCFOptions& mutable_cf_options) {
1581
+ assert(compact_);
1582
+
1583
+ db_mutex_->AssertHeld();
1584
+
1585
+ auto* compaction = compact_->compaction;
1586
+ assert(compaction);
1587
+
1588
+ // paranoia: verify that the files that we started with
1589
+ // still exist in the current version and in the same original level.
1590
+ // This ensures that a concurrent compaction did not erroneously
1591
+ // pick the same files to compact_.
1592
+ if (!versions_->VerifyCompactionFileConsistency(compaction)) {
1593
+ Compaction::InputLevelSummaryBuffer inputs_summary;
1594
+
1595
+ ROCKS_LOG_ERROR(db_options_.info_log, "[%s] [JOB %d] Compaction %s aborted",
1596
+ compaction->column_family_data()->GetName().c_str(),
1597
+ job_id_, compaction->InputLevelSummary(&inputs_summary));
1598
+ return Status::Corruption("Compaction input files inconsistent");
1599
+ }
1600
+
1601
+ {
1602
+ Compaction::InputLevelSummaryBuffer inputs_summary;
1603
+ ROCKS_LOG_INFO(db_options_.info_log,
1604
+ "[%s] [JOB %d] Compacted %s => %" PRIu64 " bytes",
1605
+ compaction->column_family_data()->GetName().c_str(), job_id_,
1606
+ compaction->InputLevelSummary(&inputs_summary),
1607
+ compact_->total_bytes + compact_->total_blob_bytes);
1608
+ }
1609
+
1610
+ VersionEdit* const edit = compaction->edit();
1611
+ assert(edit);
1612
+
1613
+ // Add compaction inputs
1614
+ compaction->AddInputDeletions(edit);
1615
+
1616
+ for (const auto& sub_compact : compact_->sub_compact_states) {
1617
+ for (const auto& out : sub_compact.outputs) {
1618
+ edit->AddFile(compaction->output_level(), out.meta);
1619
+ }
1620
+
1621
+ for (const auto& blob : sub_compact.blob_file_additions) {
1622
+ edit->AddBlobFile(blob);
1623
+ }
1624
+ }
1625
+
1626
+ return versions_->LogAndApply(compaction->column_family_data(),
1627
+ mutable_cf_options, edit, db_mutex_,
1628
+ db_directory_);
1629
+ }
1630
+
1631
+ void CompactionJob::RecordCompactionIOStats() {
1632
+ RecordTick(stats_, COMPACT_READ_BYTES, IOSTATS(bytes_read));
1633
+ RecordTick(stats_, COMPACT_WRITE_BYTES, IOSTATS(bytes_written));
1634
+ CompactionReason compaction_reason =
1635
+ compact_->compaction->compaction_reason();
1636
+ if (compaction_reason == CompactionReason::kFilesMarkedForCompaction) {
1637
+ RecordTick(stats_, COMPACT_READ_BYTES_MARKED, IOSTATS(bytes_read));
1638
+ RecordTick(stats_, COMPACT_WRITE_BYTES_MARKED, IOSTATS(bytes_written));
1639
+ } else if (compaction_reason == CompactionReason::kPeriodicCompaction) {
1640
+ RecordTick(stats_, COMPACT_READ_BYTES_PERIODIC, IOSTATS(bytes_read));
1641
+ RecordTick(stats_, COMPACT_WRITE_BYTES_PERIODIC, IOSTATS(bytes_written));
1642
+ } else if (compaction_reason == CompactionReason::kTtl) {
1643
+ RecordTick(stats_, COMPACT_READ_BYTES_TTL, IOSTATS(bytes_read));
1644
+ RecordTick(stats_, COMPACT_WRITE_BYTES_TTL, IOSTATS(bytes_written));
1645
+ }
1646
+ ThreadStatusUtil::IncreaseThreadOperationProperty(
1647
+ ThreadStatus::COMPACTION_BYTES_READ, IOSTATS(bytes_read));
1648
+ IOSTATS_RESET(bytes_read);
1649
+ ThreadStatusUtil::IncreaseThreadOperationProperty(
1650
+ ThreadStatus::COMPACTION_BYTES_WRITTEN, IOSTATS(bytes_written));
1651
+ IOSTATS_RESET(bytes_written);
1652
+ }
1653
+
1654
+ Status CompactionJob::OpenCompactionOutputFile(
1655
+ SubcompactionState* sub_compact) {
1656
+ assert(sub_compact != nullptr);
1657
+ assert(sub_compact->builder == nullptr);
1658
+ // no need to lock because VersionSet::next_file_number_ is atomic
1659
+ uint64_t file_number = versions_->NewFileNumber();
1660
+ std::string fname =
1661
+ TableFileName(sub_compact->compaction->immutable_cf_options()->cf_paths,
1662
+ file_number, sub_compact->compaction->output_path_id());
1663
+ // Fire events.
1664
+ ColumnFamilyData* cfd = sub_compact->compaction->column_family_data();
1665
+ #ifndef ROCKSDB_LITE
1666
+ EventHelpers::NotifyTableFileCreationStarted(
1667
+ cfd->ioptions()->listeners, dbname_, cfd->GetName(), fname, job_id_,
1668
+ TableFileCreationReason::kCompaction);
1669
+ #endif // !ROCKSDB_LITE
1670
+ // Make the output file
1671
+ std::unique_ptr<FSWritableFile> writable_file;
1672
+ #ifndef NDEBUG
1673
+ bool syncpoint_arg = file_options_.use_direct_writes;
1674
+ TEST_SYNC_POINT_CALLBACK("CompactionJob::OpenCompactionOutputFile",
1675
+ &syncpoint_arg);
1676
+ #endif
1677
+ Status s;
1678
+ IOStatus io_s =
1679
+ NewWritableFile(fs_.get(), fname, &writable_file, file_options_);
1680
+ s = io_s;
1681
+ if (sub_compact->io_status.ok()) {
1682
+ sub_compact->io_status = io_s;
1683
+ // Since this error is really a copy of the io_s that is checked below as s,
1684
+ // it does not also need to be checked.
1685
+ sub_compact->io_status.PermitUncheckedError();
1686
+ }
1687
+ if (!s.ok()) {
1688
+ ROCKS_LOG_ERROR(
1689
+ db_options_.info_log,
1690
+ "[%s] [JOB %d] OpenCompactionOutputFiles for table #%" PRIu64
1691
+ " fails at NewWritableFile with status %s",
1692
+ sub_compact->compaction->column_family_data()->GetName().c_str(),
1693
+ job_id_, file_number, s.ToString().c_str());
1694
+ LogFlush(db_options_.info_log);
1695
+ EventHelpers::LogAndNotifyTableFileCreationFinished(
1696
+ event_logger_, cfd->ioptions()->listeners, dbname_, cfd->GetName(),
1697
+ fname, job_id_, FileDescriptor(), kInvalidBlobFileNumber,
1698
+ TableProperties(), TableFileCreationReason::kCompaction, s,
1699
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName);
1700
+ return s;
1701
+ }
1702
+
1703
+ // Try to figure out the output file's oldest ancester time.
1704
+ int64_t temp_current_time = 0;
1705
+ auto get_time_status = env_->GetCurrentTime(&temp_current_time);
1706
+ // Safe to proceed even if GetCurrentTime fails. So, log and proceed.
1707
+ if (!get_time_status.ok()) {
1708
+ ROCKS_LOG_WARN(db_options_.info_log,
1709
+ "Failed to get current time. Status: %s",
1710
+ get_time_status.ToString().c_str());
1711
+ }
1712
+ uint64_t current_time = static_cast<uint64_t>(temp_current_time);
1713
+ uint64_t oldest_ancester_time =
1714
+ sub_compact->compaction->MinInputFileOldestAncesterTime();
1715
+ if (oldest_ancester_time == port::kMaxUint64) {
1716
+ oldest_ancester_time = current_time;
1717
+ }
1718
+
1719
+ // Initialize a SubcompactionState::Output and add it to sub_compact->outputs
1720
+ {
1721
+ FileMetaData meta;
1722
+ meta.fd = FileDescriptor(file_number,
1723
+ sub_compact->compaction->output_path_id(), 0);
1724
+ meta.oldest_ancester_time = oldest_ancester_time;
1725
+ meta.file_creation_time = current_time;
1726
+ sub_compact->outputs.emplace_back(
1727
+ std::move(meta), cfd->internal_comparator(),
1728
+ /*enable_order_check=*/
1729
+ sub_compact->compaction->mutable_cf_options()
1730
+ ->check_flush_compaction_key_order,
1731
+ /*enable_hash=*/paranoid_file_checks_);
1732
+ }
1733
+
1734
+ writable_file->SetIOPriority(Env::IOPriority::IO_LOW);
1735
+ writable_file->SetWriteLifeTimeHint(write_hint_);
1736
+ writable_file->SetPreallocationBlockSize(static_cast<size_t>(
1737
+ sub_compact->compaction->OutputFilePreallocationSize()));
1738
+ const auto& listeners =
1739
+ sub_compact->compaction->immutable_cf_options()->listeners;
1740
+ sub_compact->outfile.reset(new WritableFileWriter(
1741
+ std::move(writable_file), fname, file_options_, env_, io_tracer_,
1742
+ db_options_.statistics.get(), listeners,
1743
+ db_options_.file_checksum_gen_factory.get()));
1744
+
1745
+ // If the Column family flag is to only optimize filters for hits,
1746
+ // we can skip creating filters if this is the bottommost_level where
1747
+ // data is going to be found
1748
+ bool skip_filters =
1749
+ cfd->ioptions()->optimize_filters_for_hits && bottommost_level_;
1750
+
1751
+ sub_compact->builder.reset(NewTableBuilder(
1752
+ *cfd->ioptions(), *(sub_compact->compaction->mutable_cf_options()),
1753
+ cfd->internal_comparator(), cfd->int_tbl_prop_collector_factories(),
1754
+ cfd->GetID(), cfd->GetName(), sub_compact->outfile.get(),
1755
+ sub_compact->compaction->output_compression(),
1756
+ 0 /*sample_for_compression */,
1757
+ sub_compact->compaction->output_compression_opts(),
1758
+ sub_compact->compaction->output_level(), skip_filters,
1759
+ oldest_ancester_time, 0 /* oldest_key_time */,
1760
+ sub_compact->compaction->max_output_file_size(), current_time, db_id_,
1761
+ db_session_id_));
1762
+ LogFlush(db_options_.info_log);
1763
+ return s;
1764
+ }
1765
+
1766
+ void CompactionJob::CleanupCompaction() {
1767
+ for (SubcompactionState& sub_compact : compact_->sub_compact_states) {
1768
+ const auto& sub_status = sub_compact.status;
1769
+
1770
+ if (sub_compact.builder != nullptr) {
1771
+ // May happen if we get a shutdown call in the middle of compaction
1772
+ sub_compact.builder->Abandon();
1773
+ sub_compact.builder.reset();
1774
+ } else {
1775
+ assert(!sub_status.ok() || sub_compact.outfile == nullptr);
1776
+ }
1777
+ for (const auto& out : sub_compact.outputs) {
1778
+ // If this file was inserted into the table cache then remove
1779
+ // them here because this compaction was not committed.
1780
+ if (!sub_status.ok()) {
1781
+ TableCache::Evict(table_cache_.get(), out.meta.fd.GetNumber());
1782
+ }
1783
+ }
1784
+ // TODO: sub_compact.io_status is not checked like status. Not sure if thats
1785
+ // intentional. So ignoring the io_status as of now.
1786
+ sub_compact.io_status.PermitUncheckedError();
1787
+ }
1788
+ delete compact_;
1789
+ compact_ = nullptr;
1790
+ }
1791
+
1792
+ #ifndef ROCKSDB_LITE
1793
+ namespace {
1794
+ void CopyPrefix(const Slice& src, size_t prefix_length, std::string* dst) {
1795
+ assert(prefix_length > 0);
1796
+ size_t length = src.size() > prefix_length ? prefix_length : src.size();
1797
+ dst->assign(src.data(), length);
1798
+ }
1799
+ } // namespace
1800
+
1801
+ #endif // !ROCKSDB_LITE
1802
+
1803
+ void CompactionJob::UpdateCompactionStats() {
1804
+ assert(compact_);
1805
+
1806
+ Compaction* compaction = compact_->compaction;
1807
+ compaction_stats_.num_input_files_in_non_output_levels = 0;
1808
+ compaction_stats_.num_input_files_in_output_level = 0;
1809
+ for (int input_level = 0;
1810
+ input_level < static_cast<int>(compaction->num_input_levels());
1811
+ ++input_level) {
1812
+ if (compaction->level(input_level) != compaction->output_level()) {
1813
+ UpdateCompactionInputStatsHelper(
1814
+ &compaction_stats_.num_input_files_in_non_output_levels,
1815
+ &compaction_stats_.bytes_read_non_output_levels, input_level);
1816
+ } else {
1817
+ UpdateCompactionInputStatsHelper(
1818
+ &compaction_stats_.num_input_files_in_output_level,
1819
+ &compaction_stats_.bytes_read_output_level, input_level);
1820
+ }
1821
+ }
1822
+
1823
+ compaction_stats_.num_output_files =
1824
+ static_cast<int>(compact_->num_output_files) +
1825
+ static_cast<int>(compact_->num_blob_output_files);
1826
+ compaction_stats_.bytes_written =
1827
+ compact_->total_bytes + compact_->total_blob_bytes;
1828
+
1829
+ if (compaction_stats_.num_input_records > compact_->num_output_records) {
1830
+ compaction_stats_.num_dropped_records =
1831
+ compaction_stats_.num_input_records - compact_->num_output_records;
1832
+ }
1833
+ }
1834
+
1835
+ void CompactionJob::UpdateCompactionInputStatsHelper(int* num_files,
1836
+ uint64_t* bytes_read,
1837
+ int input_level) {
1838
+ const Compaction* compaction = compact_->compaction;
1839
+ auto num_input_files = compaction->num_input_files(input_level);
1840
+ *num_files += static_cast<int>(num_input_files);
1841
+
1842
+ for (size_t i = 0; i < num_input_files; ++i) {
1843
+ const auto* file_meta = compaction->input(input_level, i);
1844
+ *bytes_read += file_meta->fd.GetFileSize();
1845
+ compaction_stats_.num_input_records +=
1846
+ static_cast<uint64_t>(file_meta->num_entries);
1847
+ }
1848
+ }
1849
+
1850
+ void CompactionJob::UpdateCompactionJobStats(
1851
+ const InternalStats::CompactionStats& stats) const {
1852
+ #ifndef ROCKSDB_LITE
1853
+ compaction_job_stats_->elapsed_micros = stats.micros;
1854
+
1855
+ // input information
1856
+ compaction_job_stats_->total_input_bytes =
1857
+ stats.bytes_read_non_output_levels + stats.bytes_read_output_level;
1858
+ compaction_job_stats_->num_input_records = stats.num_input_records;
1859
+ compaction_job_stats_->num_input_files =
1860
+ stats.num_input_files_in_non_output_levels +
1861
+ stats.num_input_files_in_output_level;
1862
+ compaction_job_stats_->num_input_files_at_output_level =
1863
+ stats.num_input_files_in_output_level;
1864
+
1865
+ // output information
1866
+ compaction_job_stats_->total_output_bytes = stats.bytes_written;
1867
+ compaction_job_stats_->num_output_records = compact_->num_output_records;
1868
+ compaction_job_stats_->num_output_files = stats.num_output_files;
1869
+
1870
+ if (stats.num_output_files > 0) {
1871
+ CopyPrefix(compact_->SmallestUserKey(),
1872
+ CompactionJobStats::kMaxPrefixLength,
1873
+ &compaction_job_stats_->smallest_output_key_prefix);
1874
+ CopyPrefix(compact_->LargestUserKey(), CompactionJobStats::kMaxPrefixLength,
1875
+ &compaction_job_stats_->largest_output_key_prefix);
1876
+ }
1877
+ #else
1878
+ (void)stats;
1879
+ #endif // !ROCKSDB_LITE
1880
+ }
1881
+
1882
+ void CompactionJob::LogCompaction() {
1883
+ Compaction* compaction = compact_->compaction;
1884
+ ColumnFamilyData* cfd = compaction->column_family_data();
1885
+
1886
+ // Let's check if anything will get logged. Don't prepare all the info if
1887
+ // we're not logging
1888
+ if (db_options_.info_log_level <= InfoLogLevel::INFO_LEVEL) {
1889
+ Compaction::InputLevelSummaryBuffer inputs_summary;
1890
+ ROCKS_LOG_INFO(
1891
+ db_options_.info_log, "[%s] [JOB %d] Compacting %s, score %.2f",
1892
+ cfd->GetName().c_str(), job_id_,
1893
+ compaction->InputLevelSummary(&inputs_summary), compaction->score());
1894
+ char scratch[2345];
1895
+ compaction->Summary(scratch, sizeof(scratch));
1896
+ ROCKS_LOG_INFO(db_options_.info_log, "[%s] Compaction start summary: %s\n",
1897
+ cfd->GetName().c_str(), scratch);
1898
+ // build event logger report
1899
+ auto stream = event_logger_->Log();
1900
+ stream << "job" << job_id_ << "event"
1901
+ << "compaction_started"
1902
+ << "compaction_reason"
1903
+ << GetCompactionReasonString(compaction->compaction_reason());
1904
+ for (size_t i = 0; i < compaction->num_input_levels(); ++i) {
1905
+ stream << ("files_L" + ToString(compaction->level(i)));
1906
+ stream.StartArray();
1907
+ for (auto f : *compaction->inputs(i)) {
1908
+ stream << f->fd.GetNumber();
1909
+ }
1910
+ stream.EndArray();
1911
+ }
1912
+ stream << "score" << compaction->score() << "input_data_size"
1913
+ << compaction->CalculateTotalInputSize();
1914
+ }
1915
+ }
1916
+
1917
+ } // namespace ROCKSDB_NAMESPACE