@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,1254 @@
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
+
7
+ #include <string>
8
+ #include <vector>
9
+
10
+ #include "db/compaction/compaction_iterator.h"
11
+ #include "port/port.h"
12
+ #include "test_util/testharness.h"
13
+ #include "test_util/testutil.h"
14
+ #include "util/string_util.h"
15
+ #include "utilities/merge_operators.h"
16
+
17
+ namespace ROCKSDB_NAMESPACE {
18
+
19
+ // Expects no merging attempts.
20
+ class NoMergingMergeOp : public MergeOperator {
21
+ public:
22
+ bool FullMergeV2(const MergeOperationInput& /*merge_in*/,
23
+ MergeOperationOutput* /*merge_out*/) const override {
24
+ ADD_FAILURE();
25
+ return false;
26
+ }
27
+ bool PartialMergeMulti(const Slice& /*key*/,
28
+ const std::deque<Slice>& /*operand_list*/,
29
+ std::string* /*new_value*/,
30
+ Logger* /*logger*/) const override {
31
+ ADD_FAILURE();
32
+ return false;
33
+ }
34
+ const char* Name() const override {
35
+ return "CompactionIteratorTest NoMergingMergeOp";
36
+ }
37
+ };
38
+
39
+ // Compaction filter that gets stuck when it sees a particular key,
40
+ // then gets unstuck when told to.
41
+ // Always returns Decition::kRemove.
42
+ class StallingFilter : public CompactionFilter {
43
+ public:
44
+ Decision FilterV2(int /*level*/, const Slice& key, ValueType /*type*/,
45
+ const Slice& /*existing_value*/, std::string* /*new_value*/,
46
+ std::string* /*skip_until*/) const override {
47
+ int k = std::atoi(key.ToString().c_str());
48
+ last_seen.store(k);
49
+ while (k >= stall_at.load()) {
50
+ std::this_thread::yield();
51
+ }
52
+ return Decision::kRemove;
53
+ }
54
+
55
+ const char* Name() const override {
56
+ return "CompactionIteratorTest StallingFilter";
57
+ }
58
+
59
+ // Wait until the filter sees a key >= k and stalls at that key.
60
+ // If `exact`, asserts that the seen key is equal to k.
61
+ void WaitForStall(int k, bool exact = true) {
62
+ stall_at.store(k);
63
+ while (last_seen.load() < k) {
64
+ std::this_thread::yield();
65
+ }
66
+ if (exact) {
67
+ EXPECT_EQ(k, last_seen.load());
68
+ }
69
+ }
70
+
71
+ // Filter will stall on key >= stall_at. Advance stall_at to unstall.
72
+ mutable std::atomic<int> stall_at{0};
73
+ // Last key the filter was called with.
74
+ mutable std::atomic<int> last_seen{0};
75
+ };
76
+
77
+ // Compaction filter that filter out all keys.
78
+ class FilterAllKeysCompactionFilter : public CompactionFilter {
79
+ public:
80
+ Decision FilterV2(int /*level*/, const Slice& /*key*/, ValueType /*type*/,
81
+ const Slice& /*existing_value*/, std::string* /*new_value*/,
82
+ std::string* /*skip_until*/) const override {
83
+ return Decision::kRemove;
84
+ }
85
+
86
+ const char* Name() const override { return "AllKeysCompactionFilter"; }
87
+ };
88
+
89
+ class LoggingForwardVectorIterator : public InternalIterator {
90
+ public:
91
+ struct Action {
92
+ enum class Type {
93
+ SEEK_TO_FIRST,
94
+ SEEK,
95
+ NEXT,
96
+ };
97
+
98
+ Type type;
99
+ std::string arg;
100
+
101
+ explicit Action(Type _type, std::string _arg = "")
102
+ : type(_type), arg(_arg) {}
103
+
104
+ bool operator==(const Action& rhs) const {
105
+ return std::tie(type, arg) == std::tie(rhs.type, rhs.arg);
106
+ }
107
+ };
108
+
109
+ LoggingForwardVectorIterator(const std::vector<std::string>& keys,
110
+ const std::vector<std::string>& values)
111
+ : keys_(keys), values_(values), current_(keys.size()) {
112
+ assert(keys_.size() == values_.size());
113
+ }
114
+
115
+ bool Valid() const override { return current_ < keys_.size(); }
116
+
117
+ void SeekToFirst() override {
118
+ log.emplace_back(Action::Type::SEEK_TO_FIRST);
119
+ current_ = 0;
120
+ }
121
+ void SeekToLast() override { assert(false); }
122
+
123
+ void Seek(const Slice& target) override {
124
+ log.emplace_back(Action::Type::SEEK, target.ToString());
125
+ current_ = std::lower_bound(keys_.begin(), keys_.end(), target.ToString()) -
126
+ keys_.begin();
127
+ }
128
+
129
+ void SeekForPrev(const Slice& /*target*/) override { assert(false); }
130
+
131
+ void Next() override {
132
+ assert(Valid());
133
+ log.emplace_back(Action::Type::NEXT);
134
+ current_++;
135
+ }
136
+ void Prev() override { assert(false); }
137
+
138
+ Slice key() const override {
139
+ assert(Valid());
140
+ return Slice(keys_[current_]);
141
+ }
142
+ Slice value() const override {
143
+ assert(Valid());
144
+ return Slice(values_[current_]);
145
+ }
146
+
147
+ Status status() const override { return Status::OK(); }
148
+
149
+ std::vector<Action> log;
150
+
151
+ private:
152
+ std::vector<std::string> keys_;
153
+ std::vector<std::string> values_;
154
+ size_t current_;
155
+ };
156
+
157
+ class FakeCompaction : public CompactionIterator::CompactionProxy {
158
+ public:
159
+ int level() const override { return 0; }
160
+
161
+ bool KeyNotExistsBeyondOutputLevel(
162
+ const Slice& /*user_key*/,
163
+ std::vector<size_t>* /*level_ptrs*/) const override {
164
+ return is_bottommost_level || key_not_exists_beyond_output_level;
165
+ }
166
+
167
+ bool bottommost_level() const override { return is_bottommost_level; }
168
+
169
+ int number_levels() const override { return 1; }
170
+
171
+ Slice GetLargestUserKey() const override {
172
+ return "\xff\xff\xff\xff\xff\xff\xff\xff\xff";
173
+ }
174
+
175
+ bool allow_ingest_behind() const override { return is_allow_ingest_behind; }
176
+
177
+ bool preserve_deletes() const override { return false; }
178
+
179
+ bool enable_blob_garbage_collection() const override { return false; }
180
+
181
+ double blob_garbage_collection_age_cutoff() const override { return 0.0; }
182
+
183
+ Version* input_version() const override { return nullptr; }
184
+
185
+ bool key_not_exists_beyond_output_level = false;
186
+
187
+ bool is_bottommost_level = false;
188
+
189
+ bool is_allow_ingest_behind = false;
190
+ };
191
+
192
+ // A simplifed snapshot checker which assumes each snapshot has a global
193
+ // last visible sequence.
194
+ class TestSnapshotChecker : public SnapshotChecker {
195
+ public:
196
+ explicit TestSnapshotChecker(
197
+ SequenceNumber last_committed_sequence,
198
+ const std::unordered_map<SequenceNumber, SequenceNumber>& snapshots = {{}})
199
+ : last_committed_sequence_(last_committed_sequence),
200
+ snapshots_(snapshots) {}
201
+
202
+ SnapshotCheckerResult CheckInSnapshot(
203
+ SequenceNumber seq, SequenceNumber snapshot_seq) const override {
204
+ if (snapshot_seq == kMaxSequenceNumber) {
205
+ return seq <= last_committed_sequence_
206
+ ? SnapshotCheckerResult::kInSnapshot
207
+ : SnapshotCheckerResult::kNotInSnapshot;
208
+ }
209
+ assert(snapshots_.count(snapshot_seq) > 0);
210
+ return seq <= snapshots_.at(snapshot_seq)
211
+ ? SnapshotCheckerResult::kInSnapshot
212
+ : SnapshotCheckerResult::kNotInSnapshot;
213
+ }
214
+
215
+ private:
216
+ SequenceNumber last_committed_sequence_;
217
+ // A map of valid snapshot to last visible sequence to the snapshot.
218
+ std::unordered_map<SequenceNumber, SequenceNumber> snapshots_;
219
+ };
220
+
221
+ // Test param:
222
+ // bool: whether to pass snapshot_checker to compaction iterator.
223
+ class CompactionIteratorTest : public testing::TestWithParam<bool> {
224
+ public:
225
+ CompactionIteratorTest()
226
+ : cmp_(BytewiseComparator()), icmp_(cmp_), snapshots_({}) {}
227
+
228
+ explicit CompactionIteratorTest(const Comparator* ucmp)
229
+ : cmp_(ucmp), icmp_(cmp_), snapshots_({}) {}
230
+
231
+ void InitIterators(
232
+ const std::vector<std::string>& ks, const std::vector<std::string>& vs,
233
+ const std::vector<std::string>& range_del_ks,
234
+ const std::vector<std::string>& range_del_vs,
235
+ SequenceNumber last_sequence,
236
+ SequenceNumber last_committed_sequence = kMaxSequenceNumber,
237
+ MergeOperator* merge_op = nullptr, CompactionFilter* filter = nullptr,
238
+ bool bottommost_level = false,
239
+ SequenceNumber earliest_write_conflict_snapshot = kMaxSequenceNumber,
240
+ bool key_not_exists_beyond_output_level = false,
241
+ const std::string* full_history_ts_low = nullptr) {
242
+ std::unique_ptr<InternalIterator> unfragmented_range_del_iter(
243
+ new test::VectorIterator(range_del_ks, range_del_vs));
244
+ auto tombstone_list = std::make_shared<FragmentedRangeTombstoneList>(
245
+ std::move(unfragmented_range_del_iter), icmp_);
246
+ std::unique_ptr<FragmentedRangeTombstoneIterator> range_del_iter(
247
+ new FragmentedRangeTombstoneIterator(tombstone_list, icmp_,
248
+ kMaxSequenceNumber));
249
+ range_del_agg_.reset(new CompactionRangeDelAggregator(&icmp_, snapshots_));
250
+ range_del_agg_->AddTombstones(std::move(range_del_iter));
251
+
252
+ std::unique_ptr<CompactionIterator::CompactionProxy> compaction;
253
+ if (filter || bottommost_level || key_not_exists_beyond_output_level) {
254
+ compaction_proxy_ = new FakeCompaction();
255
+ compaction_proxy_->is_bottommost_level = bottommost_level;
256
+ compaction_proxy_->is_allow_ingest_behind = AllowIngestBehind();
257
+ compaction_proxy_->key_not_exists_beyond_output_level =
258
+ key_not_exists_beyond_output_level;
259
+ compaction.reset(compaction_proxy_);
260
+ }
261
+ bool use_snapshot_checker = UseSnapshotChecker() || GetParam();
262
+ if (use_snapshot_checker || last_committed_sequence < kMaxSequenceNumber) {
263
+ snapshot_checker_.reset(
264
+ new TestSnapshotChecker(last_committed_sequence, snapshot_map_));
265
+ }
266
+ merge_helper_.reset(
267
+ new MergeHelper(Env::Default(), cmp_, merge_op, filter, nullptr, false,
268
+ 0 /*latest_snapshot*/, snapshot_checker_.get(),
269
+ 0 /*level*/, nullptr /*statistics*/, &shutting_down_));
270
+
271
+ if (c_iter_) {
272
+ // Since iter_ is still used in ~CompactionIterator(), we call
273
+ // ~CompactionIterator() first.
274
+ c_iter_.reset();
275
+ }
276
+ iter_.reset(new LoggingForwardVectorIterator(ks, vs));
277
+ iter_->SeekToFirst();
278
+ c_iter_.reset(new CompactionIterator(
279
+ iter_.get(), cmp_, merge_helper_.get(), last_sequence, &snapshots_,
280
+ earliest_write_conflict_snapshot, snapshot_checker_.get(),
281
+ Env::Default(), false /* report_detailed_time */, false,
282
+ range_del_agg_.get(), nullptr /* blob_file_builder */,
283
+ true /*allow_data_in_errors*/, std::move(compaction), filter,
284
+ &shutting_down_, /*preserve_deletes_seqnum=*/0,
285
+ /*manual_compaction_paused=*/nullptr, /*info_log=*/nullptr,
286
+ full_history_ts_low));
287
+ }
288
+
289
+ void AddSnapshot(SequenceNumber snapshot,
290
+ SequenceNumber last_visible_seq = kMaxSequenceNumber) {
291
+ snapshots_.push_back(snapshot);
292
+ snapshot_map_[snapshot] = last_visible_seq;
293
+ }
294
+
295
+ virtual bool UseSnapshotChecker() const { return false; }
296
+
297
+ virtual bool AllowIngestBehind() const { return false; }
298
+
299
+ void RunTest(
300
+ const std::vector<std::string>& input_keys,
301
+ const std::vector<std::string>& input_values,
302
+ const std::vector<std::string>& expected_keys,
303
+ const std::vector<std::string>& expected_values,
304
+ SequenceNumber last_committed_seq = kMaxSequenceNumber,
305
+ MergeOperator* merge_operator = nullptr,
306
+ CompactionFilter* compaction_filter = nullptr,
307
+ bool bottommost_level = false,
308
+ SequenceNumber earliest_write_conflict_snapshot = kMaxSequenceNumber,
309
+ bool key_not_exists_beyond_output_level = false,
310
+ const std::string* full_history_ts_low = nullptr) {
311
+ InitIterators(input_keys, input_values, {}, {}, kMaxSequenceNumber,
312
+ last_committed_seq, merge_operator, compaction_filter,
313
+ bottommost_level, earliest_write_conflict_snapshot,
314
+ key_not_exists_beyond_output_level, full_history_ts_low);
315
+ c_iter_->SeekToFirst();
316
+ for (size_t i = 0; i < expected_keys.size(); i++) {
317
+ std::string info = "i = " + ToString(i);
318
+ ASSERT_TRUE(c_iter_->Valid()) << info;
319
+ ASSERT_OK(c_iter_->status()) << info;
320
+ ASSERT_EQ(expected_keys[i], c_iter_->key().ToString()) << info;
321
+ ASSERT_EQ(expected_values[i], c_iter_->value().ToString()) << info;
322
+ c_iter_->Next();
323
+ }
324
+ ASSERT_OK(c_iter_->status());
325
+ ASSERT_FALSE(c_iter_->Valid());
326
+ }
327
+
328
+ void ClearSnapshots() {
329
+ snapshots_.clear();
330
+ snapshot_map_.clear();
331
+ }
332
+
333
+ const Comparator* cmp_;
334
+ const InternalKeyComparator icmp_;
335
+ std::vector<SequenceNumber> snapshots_;
336
+ // A map of valid snapshot to last visible sequence to the snapshot.
337
+ std::unordered_map<SequenceNumber, SequenceNumber> snapshot_map_;
338
+ std::unique_ptr<MergeHelper> merge_helper_;
339
+ std::unique_ptr<LoggingForwardVectorIterator> iter_;
340
+ std::unique_ptr<CompactionIterator> c_iter_;
341
+ std::unique_ptr<CompactionRangeDelAggregator> range_del_agg_;
342
+ std::unique_ptr<SnapshotChecker> snapshot_checker_;
343
+ std::atomic<bool> shutting_down_{false};
344
+ FakeCompaction* compaction_proxy_;
345
+ };
346
+
347
+ // It is possible that the output of the compaction iterator is empty even if
348
+ // the input is not.
349
+ TEST_P(CompactionIteratorTest, EmptyResult) {
350
+ InitIterators({test::KeyStr("a", 5, kTypeSingleDeletion),
351
+ test::KeyStr("a", 3, kTypeValue)},
352
+ {"", "val"}, {}, {}, 5);
353
+ c_iter_->SeekToFirst();
354
+ ASSERT_OK(c_iter_->status());
355
+ ASSERT_FALSE(c_iter_->Valid());
356
+ }
357
+
358
+ // If there is a corruption after a single deletion, the corrupted key should
359
+ // be preserved.
360
+ TEST_P(CompactionIteratorTest, CorruptionAfterSingleDeletion) {
361
+ InitIterators({test::KeyStr("a", 5, kTypeSingleDeletion),
362
+ test::KeyStr("a", 3, kTypeValue, true),
363
+ test::KeyStr("b", 10, kTypeValue)},
364
+ {"", "val", "val2"}, {}, {}, 10);
365
+ c_iter_->SeekToFirst();
366
+ ASSERT_TRUE(c_iter_->Valid());
367
+ ASSERT_EQ(test::KeyStr("a", 5, kTypeSingleDeletion),
368
+ c_iter_->key().ToString());
369
+ c_iter_->Next();
370
+ ASSERT_TRUE(c_iter_->Valid());
371
+ ASSERT_EQ(test::KeyStr("a", 3, kTypeValue, true), c_iter_->key().ToString());
372
+ c_iter_->Next();
373
+ ASSERT_TRUE(c_iter_->Valid());
374
+ ASSERT_EQ(test::KeyStr("b", 10, kTypeValue), c_iter_->key().ToString());
375
+ c_iter_->Next();
376
+ ASSERT_OK(c_iter_->status());
377
+ ASSERT_FALSE(c_iter_->Valid());
378
+ }
379
+
380
+ TEST_P(CompactionIteratorTest, SimpleRangeDeletion) {
381
+ InitIterators({test::KeyStr("morning", 5, kTypeValue),
382
+ test::KeyStr("morning", 2, kTypeValue),
383
+ test::KeyStr("night", 3, kTypeValue)},
384
+ {"zao", "zao", "wan"},
385
+ {test::KeyStr("ma", 4, kTypeRangeDeletion)}, {"mz"}, 5);
386
+ c_iter_->SeekToFirst();
387
+ ASSERT_TRUE(c_iter_->Valid());
388
+ ASSERT_EQ(test::KeyStr("morning", 5, kTypeValue), c_iter_->key().ToString());
389
+ c_iter_->Next();
390
+ ASSERT_TRUE(c_iter_->Valid());
391
+ ASSERT_EQ(test::KeyStr("night", 3, kTypeValue), c_iter_->key().ToString());
392
+ c_iter_->Next();
393
+ ASSERT_OK(c_iter_->status());
394
+ ASSERT_FALSE(c_iter_->Valid());
395
+ }
396
+
397
+ TEST_P(CompactionIteratorTest, RangeDeletionWithSnapshots) {
398
+ AddSnapshot(10);
399
+ std::vector<std::string> ks1;
400
+ ks1.push_back(test::KeyStr("ma", 28, kTypeRangeDeletion));
401
+ std::vector<std::string> vs1{"mz"};
402
+ std::vector<std::string> ks2{test::KeyStr("morning", 15, kTypeValue),
403
+ test::KeyStr("morning", 5, kTypeValue),
404
+ test::KeyStr("night", 40, kTypeValue),
405
+ test::KeyStr("night", 20, kTypeValue)};
406
+ std::vector<std::string> vs2{"zao 15", "zao 5", "wan 40", "wan 20"};
407
+ InitIterators(ks2, vs2, ks1, vs1, 40);
408
+ c_iter_->SeekToFirst();
409
+ ASSERT_TRUE(c_iter_->Valid());
410
+ ASSERT_EQ(test::KeyStr("morning", 5, kTypeValue), c_iter_->key().ToString());
411
+ c_iter_->Next();
412
+ ASSERT_TRUE(c_iter_->Valid());
413
+ ASSERT_EQ(test::KeyStr("night", 40, kTypeValue), c_iter_->key().ToString());
414
+ c_iter_->Next();
415
+ ASSERT_OK(c_iter_->status());
416
+ ASSERT_FALSE(c_iter_->Valid());
417
+ }
418
+
419
+ TEST_P(CompactionIteratorTest, CompactionFilterSkipUntil) {
420
+ class Filter : public CompactionFilter {
421
+ Decision FilterV2(int /*level*/, const Slice& key, ValueType t,
422
+ const Slice& existing_value, std::string* /*new_value*/,
423
+ std::string* skip_until) const override {
424
+ std::string k = key.ToString();
425
+ std::string v = existing_value.ToString();
426
+ // See InitIterators() call below for the sequence of keys and their
427
+ // filtering decisions. Here we closely assert that compaction filter is
428
+ // called with the expected keys and only them, and with the right values.
429
+ if (k == "a") {
430
+ EXPECT_EQ(ValueType::kValue, t);
431
+ EXPECT_EQ("av50", v);
432
+ return Decision::kKeep;
433
+ }
434
+ if (k == "b") {
435
+ EXPECT_EQ(ValueType::kValue, t);
436
+ EXPECT_EQ("bv60", v);
437
+ *skip_until = "d+";
438
+ return Decision::kRemoveAndSkipUntil;
439
+ }
440
+ if (k == "e") {
441
+ EXPECT_EQ(ValueType::kMergeOperand, t);
442
+ EXPECT_EQ("em71", v);
443
+ return Decision::kKeep;
444
+ }
445
+ if (k == "f") {
446
+ if (v == "fm65") {
447
+ EXPECT_EQ(ValueType::kMergeOperand, t);
448
+ *skip_until = "f";
449
+ } else {
450
+ EXPECT_EQ("fm30", v);
451
+ EXPECT_EQ(ValueType::kMergeOperand, t);
452
+ *skip_until = "g+";
453
+ }
454
+ return Decision::kRemoveAndSkipUntil;
455
+ }
456
+ if (k == "h") {
457
+ EXPECT_EQ(ValueType::kValue, t);
458
+ EXPECT_EQ("hv91", v);
459
+ return Decision::kKeep;
460
+ }
461
+ if (k == "i") {
462
+ EXPECT_EQ(ValueType::kMergeOperand, t);
463
+ EXPECT_EQ("im95", v);
464
+ *skip_until = "z";
465
+ return Decision::kRemoveAndSkipUntil;
466
+ }
467
+ ADD_FAILURE();
468
+ return Decision::kKeep;
469
+ }
470
+
471
+ const char* Name() const override {
472
+ return "CompactionIteratorTest.CompactionFilterSkipUntil::Filter";
473
+ }
474
+ };
475
+
476
+ NoMergingMergeOp merge_op;
477
+ Filter filter;
478
+ InitIterators(
479
+ {test::KeyStr("a", 50, kTypeValue), // keep
480
+ test::KeyStr("a", 45, kTypeMerge),
481
+ test::KeyStr("b", 60, kTypeValue), // skip to "d+"
482
+ test::KeyStr("b", 40, kTypeValue), test::KeyStr("c", 35, kTypeValue),
483
+ test::KeyStr("d", 70, kTypeMerge),
484
+ test::KeyStr("e", 71, kTypeMerge), // keep
485
+ test::KeyStr("f", 65, kTypeMerge), // skip to "f", aka keep
486
+ test::KeyStr("f", 30, kTypeMerge), // skip to "g+"
487
+ test::KeyStr("f", 25, kTypeValue), test::KeyStr("g", 90, kTypeValue),
488
+ test::KeyStr("h", 91, kTypeValue), // keep
489
+ test::KeyStr("i", 95, kTypeMerge), // skip to "z"
490
+ test::KeyStr("j", 99, kTypeValue)},
491
+ {"av50", "am45", "bv60", "bv40", "cv35", "dm70", "em71", "fm65", "fm30",
492
+ "fv25", "gv90", "hv91", "im95", "jv99"},
493
+ {}, {}, kMaxSequenceNumber, kMaxSequenceNumber, &merge_op, &filter);
494
+
495
+ // Compaction should output just "a", "e" and "h" keys.
496
+ c_iter_->SeekToFirst();
497
+ ASSERT_TRUE(c_iter_->Valid());
498
+ ASSERT_EQ(test::KeyStr("a", 50, kTypeValue), c_iter_->key().ToString());
499
+ ASSERT_EQ("av50", c_iter_->value().ToString());
500
+ c_iter_->Next();
501
+ ASSERT_TRUE(c_iter_->Valid());
502
+ ASSERT_EQ(test::KeyStr("e", 71, kTypeMerge), c_iter_->key().ToString());
503
+ ASSERT_EQ("em71", c_iter_->value().ToString());
504
+ c_iter_->Next();
505
+ ASSERT_TRUE(c_iter_->Valid());
506
+ ASSERT_EQ(test::KeyStr("h", 91, kTypeValue), c_iter_->key().ToString());
507
+ ASSERT_EQ("hv91", c_iter_->value().ToString());
508
+ c_iter_->Next();
509
+ ASSERT_OK(c_iter_->status());
510
+ ASSERT_FALSE(c_iter_->Valid());
511
+
512
+ // Check that the compaction iterator did the correct sequence of calls on
513
+ // the underlying iterator.
514
+ using A = LoggingForwardVectorIterator::Action;
515
+ using T = A::Type;
516
+ std::vector<A> expected_actions = {
517
+ A(T::SEEK_TO_FIRST),
518
+ A(T::NEXT),
519
+ A(T::NEXT),
520
+ A(T::SEEK, test::KeyStr("d+", kMaxSequenceNumber, kValueTypeForSeek)),
521
+ A(T::NEXT),
522
+ A(T::NEXT),
523
+ A(T::SEEK, test::KeyStr("g+", kMaxSequenceNumber, kValueTypeForSeek)),
524
+ A(T::NEXT),
525
+ A(T::SEEK, test::KeyStr("z", kMaxSequenceNumber, kValueTypeForSeek))};
526
+ ASSERT_EQ(expected_actions, iter_->log);
527
+ }
528
+
529
+ TEST_P(CompactionIteratorTest, ShuttingDownInFilter) {
530
+ NoMergingMergeOp merge_op;
531
+ StallingFilter filter;
532
+ InitIterators(
533
+ {test::KeyStr("1", 1, kTypeValue), test::KeyStr("2", 2, kTypeValue),
534
+ test::KeyStr("3", 3, kTypeValue), test::KeyStr("4", 4, kTypeValue)},
535
+ {"v1", "v2", "v3", "v4"}, {}, {}, kMaxSequenceNumber, kMaxSequenceNumber,
536
+ &merge_op, &filter);
537
+ // Don't leave tombstones (kTypeDeletion) for filtered keys.
538
+ compaction_proxy_->key_not_exists_beyond_output_level = true;
539
+
540
+ std::atomic<bool> seek_done{false};
541
+ ROCKSDB_NAMESPACE::port::Thread compaction_thread([&] {
542
+ c_iter_->SeekToFirst();
543
+ EXPECT_FALSE(c_iter_->Valid());
544
+ EXPECT_TRUE(c_iter_->status().IsShutdownInProgress());
545
+ seek_done.store(true);
546
+ });
547
+
548
+ // Let key 1 through.
549
+ filter.WaitForStall(1);
550
+
551
+ // Shutdown during compaction filter call for key 2.
552
+ filter.WaitForStall(2);
553
+ shutting_down_.store(true);
554
+ EXPECT_FALSE(seek_done.load());
555
+
556
+ // Unstall filter and wait for SeekToFirst() to return.
557
+ filter.stall_at.store(3);
558
+ compaction_thread.join();
559
+ assert(seek_done.load());
560
+
561
+ // Check that filter was never called again.
562
+ EXPECT_EQ(2, filter.last_seen.load());
563
+ }
564
+
565
+ // Same as ShuttingDownInFilter, but shutdown happens during filter call for
566
+ // a merge operand, not for a value.
567
+ TEST_P(CompactionIteratorTest, ShuttingDownInMerge) {
568
+ NoMergingMergeOp merge_op;
569
+ StallingFilter filter;
570
+ InitIterators(
571
+ {test::KeyStr("1", 1, kTypeValue), test::KeyStr("2", 2, kTypeMerge),
572
+ test::KeyStr("3", 3, kTypeMerge), test::KeyStr("4", 4, kTypeValue)},
573
+ {"v1", "v2", "v3", "v4"}, {}, {}, kMaxSequenceNumber, kMaxSequenceNumber,
574
+ &merge_op, &filter);
575
+ compaction_proxy_->key_not_exists_beyond_output_level = true;
576
+
577
+ std::atomic<bool> seek_done{false};
578
+ ROCKSDB_NAMESPACE::port::Thread compaction_thread([&] {
579
+ c_iter_->SeekToFirst();
580
+ ASSERT_FALSE(c_iter_->Valid());
581
+ ASSERT_TRUE(c_iter_->status().IsShutdownInProgress());
582
+ seek_done.store(true);
583
+ });
584
+
585
+ // Let key 1 through.
586
+ filter.WaitForStall(1);
587
+
588
+ // Shutdown during compaction filter call for key 2.
589
+ filter.WaitForStall(2);
590
+ shutting_down_.store(true);
591
+ EXPECT_FALSE(seek_done.load());
592
+
593
+ // Unstall filter and wait for SeekToFirst() to return.
594
+ filter.stall_at.store(3);
595
+ compaction_thread.join();
596
+ assert(seek_done.load());
597
+
598
+ // Check that filter was never called again.
599
+ EXPECT_EQ(2, filter.last_seen.load());
600
+ }
601
+
602
+ TEST_P(CompactionIteratorTest, SingleMergeOperand) {
603
+ class Filter : public CompactionFilter {
604
+ Decision FilterV2(int /*level*/, const Slice& key, ValueType t,
605
+ const Slice& existing_value, std::string* /*new_value*/,
606
+ std::string* /*skip_until*/) const override {
607
+ std::string k = key.ToString();
608
+ std::string v = existing_value.ToString();
609
+
610
+ // See InitIterators() call below for the sequence of keys and their
611
+ // filtering decisions. Here we closely assert that compaction filter is
612
+ // called with the expected keys and only them, and with the right values.
613
+ if (k == "a") {
614
+ EXPECT_EQ(ValueType::kMergeOperand, t);
615
+ EXPECT_EQ("av1", v);
616
+ return Decision::kKeep;
617
+ } else if (k == "b") {
618
+ EXPECT_EQ(ValueType::kMergeOperand, t);
619
+ return Decision::kKeep;
620
+ } else if (k == "c") {
621
+ return Decision::kKeep;
622
+ }
623
+
624
+ ADD_FAILURE();
625
+ return Decision::kKeep;
626
+ }
627
+
628
+ const char* Name() const override {
629
+ return "CompactionIteratorTest.SingleMergeOperand::Filter";
630
+ }
631
+ };
632
+
633
+ class SingleMergeOp : public MergeOperator {
634
+ public:
635
+ bool FullMergeV2(const MergeOperationInput& merge_in,
636
+ MergeOperationOutput* merge_out) const override {
637
+ // See InitIterators() call below for why "c" is the only key for which
638
+ // FullMergeV2 should be called.
639
+ EXPECT_EQ("c", merge_in.key.ToString());
640
+
641
+ std::string temp_value;
642
+ if (merge_in.existing_value != nullptr) {
643
+ temp_value = merge_in.existing_value->ToString();
644
+ }
645
+
646
+ for (auto& operand : merge_in.operand_list) {
647
+ temp_value.append(operand.ToString());
648
+ }
649
+ merge_out->new_value = temp_value;
650
+
651
+ return true;
652
+ }
653
+
654
+ bool PartialMergeMulti(const Slice& key,
655
+ const std::deque<Slice>& operand_list,
656
+ std::string* new_value,
657
+ Logger* /*logger*/) const override {
658
+ std::string string_key = key.ToString();
659
+ EXPECT_TRUE(string_key == "a" || string_key == "b");
660
+
661
+ if (string_key == "a") {
662
+ EXPECT_EQ(1, operand_list.size());
663
+ } else if (string_key == "b") {
664
+ EXPECT_EQ(2, operand_list.size());
665
+ }
666
+
667
+ std::string temp_value;
668
+ for (auto& operand : operand_list) {
669
+ temp_value.append(operand.ToString());
670
+ }
671
+ swap(temp_value, *new_value);
672
+
673
+ return true;
674
+ }
675
+
676
+ const char* Name() const override {
677
+ return "CompactionIteratorTest SingleMergeOp";
678
+ }
679
+
680
+ bool AllowSingleOperand() const override { return true; }
681
+ };
682
+
683
+ SingleMergeOp merge_op;
684
+ Filter filter;
685
+ InitIterators(
686
+ // a should invoke PartialMergeMulti with a single merge operand.
687
+ {test::KeyStr("a", 50, kTypeMerge),
688
+ // b should invoke PartialMergeMulti with two operands.
689
+ test::KeyStr("b", 70, kTypeMerge), test::KeyStr("b", 60, kTypeMerge),
690
+ // c should invoke FullMerge due to kTypeValue at the beginning.
691
+ test::KeyStr("c", 90, kTypeMerge), test::KeyStr("c", 80, kTypeValue)},
692
+ {"av1", "bv2", "bv1", "cv2", "cv1"}, {}, {}, kMaxSequenceNumber,
693
+ kMaxSequenceNumber, &merge_op, &filter);
694
+
695
+ c_iter_->SeekToFirst();
696
+ ASSERT_TRUE(c_iter_->Valid());
697
+ ASSERT_EQ(test::KeyStr("a", 50, kTypeMerge), c_iter_->key().ToString());
698
+ ASSERT_EQ("av1", c_iter_->value().ToString());
699
+ c_iter_->Next();
700
+ ASSERT_TRUE(c_iter_->Valid());
701
+ ASSERT_EQ("bv1bv2", c_iter_->value().ToString());
702
+ c_iter_->Next();
703
+ ASSERT_OK(c_iter_->status());
704
+ ASSERT_EQ("cv1cv2", c_iter_->value().ToString());
705
+ }
706
+
707
+ // In bottommost level, values earlier than earliest snapshot can be output
708
+ // with sequence = 0.
709
+ TEST_P(CompactionIteratorTest, ZeroOutSequenceAtBottomLevel) {
710
+ AddSnapshot(1);
711
+ RunTest({test::KeyStr("a", 1, kTypeValue), test::KeyStr("b", 2, kTypeValue)},
712
+ {"v1", "v2"},
713
+ {test::KeyStr("a", 0, kTypeValue), test::KeyStr("b", 2, kTypeValue)},
714
+ {"v1", "v2"}, kMaxSequenceNumber /*last_commited_seq*/,
715
+ nullptr /*merge_operator*/, nullptr /*compaction_filter*/,
716
+ true /*bottommost_level*/);
717
+ }
718
+
719
+ // In bottommost level, deletions earlier than earliest snapshot can be removed
720
+ // permanently.
721
+ TEST_P(CompactionIteratorTest, RemoveDeletionAtBottomLevel) {
722
+ AddSnapshot(1);
723
+ RunTest({test::KeyStr("a", 1, kTypeDeletion),
724
+ test::KeyStr("b", 3, kTypeDeletion),
725
+ test::KeyStr("b", 1, kTypeValue)},
726
+ {"", "", ""},
727
+ {test::KeyStr("b", 3, kTypeDeletion),
728
+ test::KeyStr("b", 0, kTypeValue)},
729
+ {"", ""},
730
+ kMaxSequenceNumber /*last_commited_seq*/, nullptr /*merge_operator*/,
731
+ nullptr /*compaction_filter*/, true /*bottommost_level*/);
732
+ }
733
+
734
+ // In bottommost level, single deletions earlier than earliest snapshot can be
735
+ // removed permanently.
736
+ TEST_P(CompactionIteratorTest, RemoveSingleDeletionAtBottomLevel) {
737
+ AddSnapshot(1);
738
+ RunTest({test::KeyStr("a", 1, kTypeSingleDeletion),
739
+ test::KeyStr("b", 2, kTypeSingleDeletion)},
740
+ {"", ""}, {test::KeyStr("b", 2, kTypeSingleDeletion)}, {""},
741
+ kMaxSequenceNumber /*last_commited_seq*/, nullptr /*merge_operator*/,
742
+ nullptr /*compaction_filter*/, true /*bottommost_level*/);
743
+ }
744
+
745
+ TEST_P(CompactionIteratorTest, ConvertToPutAtBottom) {
746
+ std::shared_ptr<MergeOperator> merge_op =
747
+ MergeOperators::CreateStringAppendOperator();
748
+ RunTest({test::KeyStr("a", 4, kTypeMerge), test::KeyStr("a", 3, kTypeMerge),
749
+ test::KeyStr("a", 2, kTypeMerge), test::KeyStr("b", 1, kTypeValue)},
750
+ {"a4", "a3", "a2", "b1"},
751
+ {test::KeyStr("a", 0, kTypeValue), test::KeyStr("b", 0, kTypeValue)},
752
+ {"a2,a3,a4", "b1"}, kMaxSequenceNumber /*last_committed_seq*/,
753
+ merge_op.get(), nullptr /*compaction_filter*/,
754
+ true /*bottomost_level*/);
755
+ }
756
+
757
+ INSTANTIATE_TEST_CASE_P(CompactionIteratorTestInstance, CompactionIteratorTest,
758
+ testing::Values(true, false));
759
+
760
+ // Tests how CompactionIterator work together with SnapshotChecker.
761
+ class CompactionIteratorWithSnapshotCheckerTest
762
+ : public CompactionIteratorTest {
763
+ public:
764
+ bool UseSnapshotChecker() const override { return true; }
765
+ };
766
+
767
+ // Uncommitted keys (keys with seq > last_committed_seq) should be output as-is
768
+ // while committed version of these keys should get compacted as usual.
769
+
770
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest,
771
+ PreserveUncommittedKeys_Value) {
772
+ RunTest(
773
+ {test::KeyStr("foo", 3, kTypeValue), test::KeyStr("foo", 2, kTypeValue),
774
+ test::KeyStr("foo", 1, kTypeValue)},
775
+ {"v3", "v2", "v1"},
776
+ {test::KeyStr("foo", 3, kTypeValue), test::KeyStr("foo", 2, kTypeValue)},
777
+ {"v3", "v2"}, 2 /*last_committed_seq*/);
778
+ }
779
+
780
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest,
781
+ PreserveUncommittedKeys_Deletion) {
782
+ RunTest({test::KeyStr("foo", 2, kTypeDeletion),
783
+ test::KeyStr("foo", 1, kTypeValue)},
784
+ {"", "v1"},
785
+ {test::KeyStr("foo", 2, kTypeDeletion),
786
+ test::KeyStr("foo", 1, kTypeValue)},
787
+ {"", "v1"}, 1 /*last_committed_seq*/);
788
+ }
789
+
790
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest,
791
+ PreserveUncommittedKeys_Merge) {
792
+ auto merge_op = MergeOperators::CreateStringAppendOperator();
793
+ RunTest(
794
+ {test::KeyStr("foo", 3, kTypeMerge), test::KeyStr("foo", 2, kTypeMerge),
795
+ test::KeyStr("foo", 1, kTypeValue)},
796
+ {"v3", "v2", "v1"},
797
+ {test::KeyStr("foo", 3, kTypeMerge), test::KeyStr("foo", 2, kTypeValue)},
798
+ {"v3", "v1,v2"}, 2 /*last_committed_seq*/, merge_op.get());
799
+ }
800
+
801
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest,
802
+ PreserveUncommittedKeys_SingleDelete) {
803
+ RunTest({test::KeyStr("foo", 2, kTypeSingleDeletion),
804
+ test::KeyStr("foo", 1, kTypeValue)},
805
+ {"", "v1"},
806
+ {test::KeyStr("foo", 2, kTypeSingleDeletion),
807
+ test::KeyStr("foo", 1, kTypeValue)},
808
+ {"", "v1"}, 1 /*last_committed_seq*/);
809
+ }
810
+
811
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest,
812
+ PreserveUncommittedKeys_BlobIndex) {
813
+ RunTest({test::KeyStr("foo", 3, kTypeBlobIndex),
814
+ test::KeyStr("foo", 2, kTypeBlobIndex),
815
+ test::KeyStr("foo", 1, kTypeBlobIndex)},
816
+ {"v3", "v2", "v1"},
817
+ {test::KeyStr("foo", 3, kTypeBlobIndex),
818
+ test::KeyStr("foo", 2, kTypeBlobIndex)},
819
+ {"v3", "v2"}, 2 /*last_committed_seq*/);
820
+ }
821
+
822
+ // Test compaction iterator dedup keys visible to the same snapshot.
823
+
824
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest, DedupSameSnapshot_Value) {
825
+ AddSnapshot(2, 1);
826
+ RunTest(
827
+ {test::KeyStr("foo", 4, kTypeValue), test::KeyStr("foo", 3, kTypeValue),
828
+ test::KeyStr("foo", 2, kTypeValue), test::KeyStr("foo", 1, kTypeValue)},
829
+ {"v4", "v3", "v2", "v1"},
830
+ {test::KeyStr("foo", 4, kTypeValue), test::KeyStr("foo", 3, kTypeValue),
831
+ test::KeyStr("foo", 1, kTypeValue)},
832
+ {"v4", "v3", "v1"}, 3 /*last_committed_seq*/);
833
+ }
834
+
835
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest, DedupSameSnapshot_Deletion) {
836
+ AddSnapshot(2, 1);
837
+ RunTest(
838
+ {test::KeyStr("foo", 4, kTypeValue),
839
+ test::KeyStr("foo", 3, kTypeDeletion),
840
+ test::KeyStr("foo", 2, kTypeValue), test::KeyStr("foo", 1, kTypeValue)},
841
+ {"v4", "", "v2", "v1"},
842
+ {test::KeyStr("foo", 4, kTypeValue),
843
+ test::KeyStr("foo", 3, kTypeDeletion),
844
+ test::KeyStr("foo", 1, kTypeValue)},
845
+ {"v4", "", "v1"}, 3 /*last_committed_seq*/);
846
+ }
847
+
848
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest, DedupSameSnapshot_Merge) {
849
+ AddSnapshot(2, 1);
850
+ AddSnapshot(4, 3);
851
+ auto merge_op = MergeOperators::CreateStringAppendOperator();
852
+ RunTest(
853
+ {test::KeyStr("foo", 5, kTypeMerge), test::KeyStr("foo", 4, kTypeMerge),
854
+ test::KeyStr("foo", 3, kTypeMerge), test::KeyStr("foo", 2, kTypeMerge),
855
+ test::KeyStr("foo", 1, kTypeValue)},
856
+ {"v5", "v4", "v3", "v2", "v1"},
857
+ {test::KeyStr("foo", 5, kTypeMerge), test::KeyStr("foo", 4, kTypeMerge),
858
+ test::KeyStr("foo", 3, kTypeMerge), test::KeyStr("foo", 1, kTypeValue)},
859
+ {"v5", "v4", "v2,v3", "v1"}, 4 /*last_committed_seq*/, merge_op.get());
860
+ }
861
+
862
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest,
863
+ DedupSameSnapshot_SingleDeletion) {
864
+ AddSnapshot(2, 1);
865
+ RunTest(
866
+ {test::KeyStr("foo", 4, kTypeValue),
867
+ test::KeyStr("foo", 3, kTypeSingleDeletion),
868
+ test::KeyStr("foo", 2, kTypeValue), test::KeyStr("foo", 1, kTypeValue)},
869
+ {"v4", "", "v2", "v1"},
870
+ {test::KeyStr("foo", 4, kTypeValue), test::KeyStr("foo", 1, kTypeValue)},
871
+ {"v4", "v1"}, 3 /*last_committed_seq*/);
872
+ }
873
+
874
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest, DedupSameSnapshot_BlobIndex) {
875
+ AddSnapshot(2, 1);
876
+ RunTest({test::KeyStr("foo", 4, kTypeBlobIndex),
877
+ test::KeyStr("foo", 3, kTypeBlobIndex),
878
+ test::KeyStr("foo", 2, kTypeBlobIndex),
879
+ test::KeyStr("foo", 1, kTypeBlobIndex)},
880
+ {"v4", "v3", "v2", "v1"},
881
+ {test::KeyStr("foo", 4, kTypeBlobIndex),
882
+ test::KeyStr("foo", 3, kTypeBlobIndex),
883
+ test::KeyStr("foo", 1, kTypeBlobIndex)},
884
+ {"v4", "v3", "v1"}, 3 /*last_committed_seq*/);
885
+ }
886
+
887
+ // At bottom level, sequence numbers can be zero out, and deletions can be
888
+ // removed, but only when they are visible to earliest snapshot.
889
+
890
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest,
891
+ NotZeroOutSequenceIfNotVisibleToEarliestSnapshot) {
892
+ AddSnapshot(2, 1);
893
+ RunTest({test::KeyStr("a", 1, kTypeValue), test::KeyStr("b", 2, kTypeValue),
894
+ test::KeyStr("c", 3, kTypeValue)},
895
+ {"v1", "v2", "v3"},
896
+ {test::KeyStr("a", 0, kTypeValue), test::KeyStr("b", 2, kTypeValue),
897
+ test::KeyStr("c", 3, kTypeValue)},
898
+ {"v1", "v2", "v3"}, kMaxSequenceNumber /*last_commited_seq*/,
899
+ nullptr /*merge_operator*/, nullptr /*compaction_filter*/,
900
+ true /*bottommost_level*/);
901
+ }
902
+
903
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest,
904
+ NotRemoveDeletionIfNotVisibleToEarliestSnapshot) {
905
+ AddSnapshot(2, 1);
906
+ RunTest(
907
+ {test::KeyStr("a", 1, kTypeDeletion), test::KeyStr("b", 2, kTypeDeletion),
908
+ test::KeyStr("c", 3, kTypeDeletion)},
909
+ {"", "", ""},
910
+ {},
911
+ {"", ""}, kMaxSequenceNumber /*last_commited_seq*/,
912
+ nullptr /*merge_operator*/, nullptr /*compaction_filter*/,
913
+ true /*bottommost_level*/);
914
+ }
915
+
916
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest,
917
+ NotRemoveDeletionIfValuePresentToEarlierSnapshot) {
918
+ AddSnapshot(2,1);
919
+ RunTest(
920
+ {test::KeyStr("a", 4, kTypeDeletion), test::KeyStr("a", 1, kTypeValue),
921
+ test::KeyStr("b", 3, kTypeValue)},
922
+ {"", "", ""},
923
+ {test::KeyStr("a", 4, kTypeDeletion), test::KeyStr("a", 0, kTypeValue),
924
+ test::KeyStr("b", 3, kTypeValue)},
925
+ {"", "", ""}, kMaxSequenceNumber /*last_commited_seq*/,
926
+ nullptr /*merge_operator*/, nullptr /*compaction_filter*/,
927
+ true /*bottommost_level*/);
928
+ }
929
+
930
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest,
931
+ NotRemoveSingleDeletionIfNotVisibleToEarliestSnapshot) {
932
+ AddSnapshot(2, 1);
933
+ RunTest({test::KeyStr("a", 1, kTypeSingleDeletion),
934
+ test::KeyStr("b", 2, kTypeSingleDeletion),
935
+ test::KeyStr("c", 3, kTypeSingleDeletion)},
936
+ {"", "", ""},
937
+ {test::KeyStr("b", 2, kTypeSingleDeletion),
938
+ test::KeyStr("c", 3, kTypeSingleDeletion)},
939
+ {"", ""}, kMaxSequenceNumber /*last_commited_seq*/,
940
+ nullptr /*merge_operator*/, nullptr /*compaction_filter*/,
941
+ true /*bottommost_level*/);
942
+ }
943
+
944
+ // Single delete should not cancel out values that not visible to the
945
+ // same set of snapshots
946
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest,
947
+ SingleDeleteAcrossSnapshotBoundary) {
948
+ AddSnapshot(2, 1);
949
+ RunTest({test::KeyStr("a", 2, kTypeSingleDeletion),
950
+ test::KeyStr("a", 1, kTypeValue)},
951
+ {"", "v1"},
952
+ {test::KeyStr("a", 2, kTypeSingleDeletion),
953
+ test::KeyStr("a", 1, kTypeValue)},
954
+ {"", "v1"}, 2 /*last_committed_seq*/);
955
+ }
956
+
957
+ // Single delete should be kept in case it is not visible to the
958
+ // earliest write conflict snapshot. If a single delete is kept for this reason,
959
+ // corresponding value can be trimmed to save space.
960
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest,
961
+ KeepSingleDeletionForWriteConflictChecking) {
962
+ AddSnapshot(2, 0);
963
+ RunTest({test::KeyStr("a", 2, kTypeSingleDeletion),
964
+ test::KeyStr("a", 1, kTypeValue)},
965
+ {"", "v1"},
966
+ {test::KeyStr("a", 2, kTypeSingleDeletion),
967
+ test::KeyStr("a", 1, kTypeValue)},
968
+ {"", ""}, 2 /*last_committed_seq*/, nullptr /*merge_operator*/,
969
+ nullptr /*compaction_filter*/, false /*bottommost_level*/,
970
+ 2 /*earliest_write_conflict_snapshot*/);
971
+ }
972
+
973
+ // Compaction filter should keep uncommitted key as-is, and
974
+ // * Convert the latest velue to deletion, and/or
975
+ // * if latest value is a merge, apply filter to all suequent merges.
976
+
977
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest, CompactionFilter_Value) {
978
+ std::unique_ptr<CompactionFilter> compaction_filter(
979
+ new FilterAllKeysCompactionFilter());
980
+ RunTest(
981
+ {test::KeyStr("a", 2, kTypeValue), test::KeyStr("a", 1, kTypeValue),
982
+ test::KeyStr("b", 3, kTypeValue), test::KeyStr("c", 1, kTypeValue)},
983
+ {"v2", "v1", "v3", "v4"},
984
+ {test::KeyStr("a", 2, kTypeValue), test::KeyStr("a", 1, kTypeDeletion),
985
+ test::KeyStr("b", 3, kTypeValue), test::KeyStr("c", 1, kTypeDeletion)},
986
+ {"v2", "", "v3", ""}, 1 /*last_committed_seq*/,
987
+ nullptr /*merge_operator*/, compaction_filter.get());
988
+ }
989
+
990
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest, CompactionFilter_Deletion) {
991
+ std::unique_ptr<CompactionFilter> compaction_filter(
992
+ new FilterAllKeysCompactionFilter());
993
+ RunTest(
994
+ {test::KeyStr("a", 2, kTypeDeletion), test::KeyStr("a", 1, kTypeValue)},
995
+ {"", "v1"},
996
+ {test::KeyStr("a", 2, kTypeDeletion),
997
+ test::KeyStr("a", 1, kTypeDeletion)},
998
+ {"", ""}, 1 /*last_committed_seq*/, nullptr /*merge_operator*/,
999
+ compaction_filter.get());
1000
+ }
1001
+
1002
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest,
1003
+ CompactionFilter_PartialMerge) {
1004
+ std::shared_ptr<MergeOperator> merge_op =
1005
+ MergeOperators::CreateStringAppendOperator();
1006
+ std::unique_ptr<CompactionFilter> compaction_filter(
1007
+ new FilterAllKeysCompactionFilter());
1008
+ RunTest({test::KeyStr("a", 3, kTypeMerge), test::KeyStr("a", 2, kTypeMerge),
1009
+ test::KeyStr("a", 1, kTypeMerge)},
1010
+ {"v3", "v2", "v1"}, {test::KeyStr("a", 3, kTypeMerge)}, {"v3"},
1011
+ 2 /*last_committed_seq*/, merge_op.get(), compaction_filter.get());
1012
+ }
1013
+
1014
+ TEST_F(CompactionIteratorWithSnapshotCheckerTest, CompactionFilter_FullMerge) {
1015
+ std::shared_ptr<MergeOperator> merge_op =
1016
+ MergeOperators::CreateStringAppendOperator();
1017
+ std::unique_ptr<CompactionFilter> compaction_filter(
1018
+ new FilterAllKeysCompactionFilter());
1019
+ RunTest(
1020
+ {test::KeyStr("a", 3, kTypeMerge), test::KeyStr("a", 2, kTypeMerge),
1021
+ test::KeyStr("a", 1, kTypeValue)},
1022
+ {"v3", "v2", "v1"},
1023
+ {test::KeyStr("a", 3, kTypeMerge), test::KeyStr("a", 1, kTypeDeletion)},
1024
+ {"v3", ""}, 2 /*last_committed_seq*/, merge_op.get(),
1025
+ compaction_filter.get());
1026
+ }
1027
+
1028
+ // Tests how CompactionIterator work together with AllowIngestBehind.
1029
+ class CompactionIteratorWithAllowIngestBehindTest
1030
+ : public CompactionIteratorTest {
1031
+ public:
1032
+ bool AllowIngestBehind() const override { return true; }
1033
+ };
1034
+
1035
+ // When allow_ingest_behind is set, compaction iterator is not targeting
1036
+ // the bottommost level since there is no guarantee there won't be further
1037
+ // data ingested under the compaction output in future.
1038
+ TEST_P(CompactionIteratorWithAllowIngestBehindTest, NoConvertToPutAtBottom) {
1039
+ std::shared_ptr<MergeOperator> merge_op =
1040
+ MergeOperators::CreateStringAppendOperator();
1041
+ RunTest({test::KeyStr("a", 4, kTypeMerge), test::KeyStr("a", 3, kTypeMerge),
1042
+ test::KeyStr("a", 2, kTypeMerge), test::KeyStr("b", 1, kTypeValue)},
1043
+ {"a4", "a3", "a2", "b1"},
1044
+ {test::KeyStr("a", 4, kTypeMerge), test::KeyStr("b", 1, kTypeValue)},
1045
+ {"a2,a3,a4", "b1"}, kMaxSequenceNumber /*last_committed_seq*/,
1046
+ merge_op.get(), nullptr /*compaction_filter*/,
1047
+ true /*bottomost_level*/);
1048
+ }
1049
+
1050
+ TEST_P(CompactionIteratorWithAllowIngestBehindTest,
1051
+ MergeToPutIfEncounteredPutAtBottom) {
1052
+ std::shared_ptr<MergeOperator> merge_op =
1053
+ MergeOperators::CreateStringAppendOperator();
1054
+ RunTest({test::KeyStr("a", 4, kTypeMerge), test::KeyStr("a", 3, kTypeMerge),
1055
+ test::KeyStr("a", 2, kTypeValue), test::KeyStr("b", 1, kTypeValue)},
1056
+ {"a4", "a3", "a2", "b1"},
1057
+ {test::KeyStr("a", 4, kTypeValue), test::KeyStr("b", 1, kTypeValue)},
1058
+ {"a2,a3,a4", "b1"}, kMaxSequenceNumber /*last_committed_seq*/,
1059
+ merge_op.get(), nullptr /*compaction_filter*/,
1060
+ true /*bottomost_level*/);
1061
+ }
1062
+
1063
+ INSTANTIATE_TEST_CASE_P(CompactionIteratorWithAllowIngestBehindTestInstance,
1064
+ CompactionIteratorWithAllowIngestBehindTest,
1065
+ testing::Values(true, false));
1066
+
1067
+ class CompactionIteratorTsGcTest : public CompactionIteratorTest {
1068
+ public:
1069
+ CompactionIteratorTsGcTest()
1070
+ : CompactionIteratorTest(test::ComparatorWithU64Ts()) {}
1071
+ };
1072
+
1073
+ TEST_P(CompactionIteratorTsGcTest, NoKeyEligibleForGC) {
1074
+ constexpr char user_key[][2] = {{'a', '\0'}, {'b', '\0'}};
1075
+ const std::vector<std::string> input_keys = {
1076
+ test::KeyStr(/*ts=*/103, user_key[0], /*seq=*/4, kTypeValue),
1077
+ test::KeyStr(/*ts=*/102, user_key[0], /*seq=*/3,
1078
+ kTypeDeletionWithTimestamp),
1079
+ test::KeyStr(/*ts=*/104, user_key[1], /*seq=*/5, kTypeValue)};
1080
+ const std::vector<std::string> input_values = {"a3", "", "b2"};
1081
+ std::string full_history_ts_low;
1082
+ // All keys' timestamps are newer than or equal to 102, thus none of them
1083
+ // will be eligible for GC.
1084
+ PutFixed64(&full_history_ts_low, 102);
1085
+ const std::vector<std::string>& expected_keys = input_keys;
1086
+ const std::vector<std::string>& expected_values = input_values;
1087
+ const std::vector<std::pair<bool, bool>> params = {
1088
+ {false, false}, {false, true}, {true, true}};
1089
+ for (const std::pair<bool, bool>& param : params) {
1090
+ const bool bottommost_level = param.first;
1091
+ const bool key_not_exists_beyond_output_level = param.second;
1092
+ RunTest(input_keys, input_values, expected_keys, expected_values,
1093
+ /*last_committed_seq=*/kMaxSequenceNumber,
1094
+ /*merge_operator=*/nullptr, /*compaction_filter=*/nullptr,
1095
+ bottommost_level,
1096
+ /*earliest_write_conflict_snapshot=*/kMaxSequenceNumber,
1097
+ key_not_exists_beyond_output_level, &full_history_ts_low);
1098
+ }
1099
+ }
1100
+
1101
+ TEST_P(CompactionIteratorTsGcTest, AllKeysOlderThanThreshold) {
1102
+ constexpr char user_key[][2] = {{'a', '\0'}, {'b', '\0'}};
1103
+ const std::vector<std::string> input_keys = {
1104
+ test::KeyStr(/*ts=*/103, user_key[0], /*seq=*/4,
1105
+ kTypeDeletionWithTimestamp),
1106
+ test::KeyStr(/*ts=*/102, user_key[0], /*seq=*/3, kTypeValue),
1107
+ test::KeyStr(/*ts=*/101, user_key[0], /*seq=*/2, kTypeValue),
1108
+ test::KeyStr(/*ts=*/104, user_key[1], /*seq=*/5, kTypeValue)};
1109
+ const std::vector<std::string> input_values = {"", "a2", "a1", "b5"};
1110
+ std::string full_history_ts_low;
1111
+ PutFixed64(&full_history_ts_low, std::numeric_limits<uint64_t>::max());
1112
+ {
1113
+ // With a snapshot at seq 3, both the deletion marker and the key at 3 must
1114
+ // be preserved.
1115
+ AddSnapshot(3);
1116
+ const std::vector<std::string> expected_keys = {
1117
+ input_keys[0], input_keys[1], input_keys[3]};
1118
+ const std::vector<std::string> expected_values = {"", "a2", "b5"};
1119
+ RunTest(input_keys, input_values, expected_keys, expected_values,
1120
+ /*last_committed_seq=*/kMaxSequenceNumber,
1121
+ /*merge_operator=*/nullptr, /*compaction_filter=*/nullptr,
1122
+ /*bottommost_level=*/false,
1123
+ /*earliest_write_conflict_snapshot=*/kMaxSequenceNumber,
1124
+ /*key_not_exists_beyond_output_level=*/false, &full_history_ts_low);
1125
+ ClearSnapshots();
1126
+ }
1127
+ {
1128
+ // No snapshot, the deletion marker should be preserved because the user
1129
+ // key may appear beyond output level.
1130
+ const std::vector<std::string> expected_keys = {input_keys[0],
1131
+ input_keys[3]};
1132
+ const std::vector<std::string> expected_values = {"", "b5"};
1133
+ RunTest(input_keys, input_values, expected_keys, expected_values,
1134
+ /*last_committed_seq=*/kMaxSequenceNumber,
1135
+ /*merge_operator=*/nullptr, /*compaction_filter=*/nullptr,
1136
+ /*bottommost_level=*/false,
1137
+ /*earliest_write_conflict_snapshot=*/kMaxSequenceNumber,
1138
+ /*key_not_exists_beyond_output_level=*/false, &full_history_ts_low);
1139
+ }
1140
+ {
1141
+ // No snapshot, the deletion marker can be dropped because the user key
1142
+ // does not appear in higher levels.
1143
+ const std::vector<std::string> expected_keys = {input_keys[3]};
1144
+ const std::vector<std::string> expected_values = {"b5"};
1145
+ RunTest(input_keys, input_values, expected_keys, expected_values,
1146
+ /*last_committed_seq=*/kMaxSequenceNumber,
1147
+ /*merge_operator=*/nullptr, /*compaction_filter=*/nullptr,
1148
+ /*bottommost_level=*/false,
1149
+ /*earliest_write_conflict_snapshot=*/kMaxSequenceNumber,
1150
+ /*key_not_exists_beyond_output_level=*/true, &full_history_ts_low);
1151
+ }
1152
+ }
1153
+
1154
+ TEST_P(CompactionIteratorTsGcTest, NewHidesOldSameSnapshot) {
1155
+ constexpr char user_key[] = "a";
1156
+ const std::vector<std::string> input_keys = {
1157
+ test::KeyStr(/*ts=*/103, user_key, /*seq=*/4, kTypeDeletionWithTimestamp),
1158
+ test::KeyStr(/*ts=*/102, user_key, /*seq=*/3, kTypeValue),
1159
+ test::KeyStr(/*ts=*/101, user_key, /*seq=*/2, kTypeValue),
1160
+ test::KeyStr(/*ts=*/100, user_key, /*seq=*/1, kTypeValue)};
1161
+ const std::vector<std::string> input_values = {"", "a2", "a1", "a0"};
1162
+ {
1163
+ std::string full_history_ts_low;
1164
+ // Keys whose timestamps larger than or equal to 102 will be preserved.
1165
+ PutFixed64(&full_history_ts_low, 102);
1166
+ const std::vector<std::string> expected_keys = {input_keys[0],
1167
+ input_keys[1]};
1168
+ const std::vector<std::string> expected_values = {"", "a2"};
1169
+ RunTest(input_keys, input_values, expected_keys, expected_values,
1170
+ /*last_committed_seq=*/kMaxSequenceNumber,
1171
+ /*merge_operator=*/nullptr, /*compaction_filter=*/nullptr,
1172
+ /*bottommost_level=*/false,
1173
+ /*earliest_write_conflict_snapshot=*/kMaxSequenceNumber,
1174
+ /*key_not_exists_beyond_output_level=*/false, &full_history_ts_low);
1175
+ }
1176
+ }
1177
+
1178
+ TEST_P(CompactionIteratorTsGcTest, DropTombstones) {
1179
+ constexpr char user_key[] = "a";
1180
+ const std::vector<std::string> input_keys = {
1181
+ test::KeyStr(/*ts=*/103, user_key, /*seq=*/4, kTypeDeletionWithTimestamp),
1182
+ test::KeyStr(/*ts=*/102, user_key, /*seq=*/3, kTypeValue),
1183
+ test::KeyStr(/*ts=*/101, user_key, /*seq=*/2, kTypeDeletionWithTimestamp),
1184
+ test::KeyStr(/*ts=*/100, user_key, /*seq=*/1, kTypeValue)};
1185
+ const std::vector<std::string> input_values = {"", "a2", "", "a0"};
1186
+ const std::vector<std::string> expected_keys = {input_keys[0], input_keys[1]};
1187
+ const std::vector<std::string> expected_values = {"", "a2"};
1188
+
1189
+ // Take a snapshot at seq 2.
1190
+ AddSnapshot(2);
1191
+
1192
+ {
1193
+ // Non-bottommost level, but key does not exist beyond output level.
1194
+ std::string full_history_ts_low;
1195
+ PutFixed64(&full_history_ts_low, 102);
1196
+ RunTest(input_keys, input_values, expected_keys, expected_values,
1197
+ /*last_committed_sequence=*/kMaxSequenceNumber,
1198
+ /*merge_op=*/nullptr, /*compaction_filter=*/nullptr,
1199
+ /*bottommost_level=*/false,
1200
+ /*earliest_write_conflict_snapshot=*/kMaxSequenceNumber,
1201
+ /*key_not_exists_beyond_output_level=*/true, &full_history_ts_low);
1202
+ }
1203
+ {
1204
+ // Bottommost level
1205
+ std::string full_history_ts_low;
1206
+ PutFixed64(&full_history_ts_low, 102);
1207
+ RunTest(input_keys, input_values, expected_keys, expected_values,
1208
+ /*last_committed_seq=*/kMaxSequenceNumber,
1209
+ /*merge_operator=*/nullptr, /*compaction_filter=*/nullptr,
1210
+ /*bottommost_level=*/true,
1211
+ /*earliest_write_conflict_snapshot=*/kMaxSequenceNumber,
1212
+ /*key_not_exists_beyond_output_level=*/false, &full_history_ts_low);
1213
+ }
1214
+ }
1215
+
1216
+ TEST_P(CompactionIteratorTsGcTest, RewriteTs) {
1217
+ constexpr char user_key[] = "a";
1218
+ const std::vector<std::string> input_keys = {
1219
+ test::KeyStr(/*ts=*/103, user_key, /*seq=*/4, kTypeDeletionWithTimestamp),
1220
+ test::KeyStr(/*ts=*/102, user_key, /*seq=*/3, kTypeValue),
1221
+ test::KeyStr(/*ts=*/101, user_key, /*seq=*/2, kTypeDeletionWithTimestamp),
1222
+ test::KeyStr(/*ts=*/100, user_key, /*seq=*/1, kTypeValue)};
1223
+ const std::vector<std::string> input_values = {"", "a2", "", "a0"};
1224
+ const std::vector<std::string> expected_keys = {
1225
+ input_keys[0], input_keys[1], input_keys[2],
1226
+ test::KeyStr(/*ts=*/0, user_key, /*seq=*/0, kTypeValue)};
1227
+ const std::vector<std::string> expected_values = {"", "a2", "", "a0"};
1228
+
1229
+ AddSnapshot(1);
1230
+ AddSnapshot(2);
1231
+
1232
+ {
1233
+ // Bottommost level and need to rewrite both ts and seq.
1234
+ std::string full_history_ts_low;
1235
+ PutFixed64(&full_history_ts_low, 102);
1236
+ RunTest(input_keys, input_values, expected_keys, expected_values,
1237
+ /*last_committed_seq=*/kMaxSequenceNumber,
1238
+ /*merge_operator=*/nullptr, /*compaction_filter=*/nullptr,
1239
+ /*bottommost_level=*/true,
1240
+ /*earliest_write_conflict_snapshot=*/kMaxSequenceNumber,
1241
+ /*key_not_exists_beyond_output_level=*/true, &full_history_ts_low);
1242
+ }
1243
+ }
1244
+
1245
+ INSTANTIATE_TEST_CASE_P(CompactionIteratorTsGcTestInstance,
1246
+ CompactionIteratorTsGcTest,
1247
+ testing::Values(true, false));
1248
+
1249
+ } // namespace ROCKSDB_NAMESPACE
1250
+
1251
+ int main(int argc, char** argv) {
1252
+ ::testing::InitGoogleTest(&argc, argv);
1253
+ return RUN_ALL_TESTS();
1254
+ }