@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,1493 @@
1
+ // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2
+ // This source code is licensed under both the GPLv2 (found in the
3
+ // COPYING file in the root directory) and Apache 2.0 License
4
+ // (found in the LICENSE.Apache file in the root directory).
5
+ //
6
+ // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
7
+ // Use of this source code is governed by a BSD-style license that can be
8
+ // found in the LICENSE file. See the AUTHORS file for names of contributors.
9
+
10
+ #include "db/db_iter.h"
11
+ #include <string>
12
+ #include <iostream>
13
+ #include <limits>
14
+
15
+ #include "db/dbformat.h"
16
+ #include "db/merge_context.h"
17
+ #include "db/merge_helper.h"
18
+ #include "db/pinned_iterators_manager.h"
19
+ #include "file/filename.h"
20
+ #include "logging/logging.h"
21
+ #include "memory/arena.h"
22
+ #include "monitoring/perf_context_imp.h"
23
+ #include "rocksdb/env.h"
24
+ #include "rocksdb/iterator.h"
25
+ #include "rocksdb/merge_operator.h"
26
+ #include "rocksdb/options.h"
27
+ #include "table/internal_iterator.h"
28
+ #include "table/iterator_wrapper.h"
29
+ #include "trace_replay/trace_replay.h"
30
+ #include "util/mutexlock.h"
31
+ #include "util/string_util.h"
32
+ #include "util/user_comparator_wrapper.h"
33
+
34
+ namespace ROCKSDB_NAMESPACE {
35
+
36
+ DBIter::DBIter(Env* _env, const ReadOptions& read_options,
37
+ const ImmutableCFOptions& cf_options,
38
+ const MutableCFOptions& mutable_cf_options,
39
+ const Comparator* cmp, InternalIterator* iter,
40
+ const Version* version, SequenceNumber s, bool arena_mode,
41
+ uint64_t max_sequential_skip_in_iterations,
42
+ ReadCallback* read_callback, DBImpl* db_impl,
43
+ ColumnFamilyData* cfd, bool expose_blob_index)
44
+ : prefix_extractor_(mutable_cf_options.prefix_extractor.get()),
45
+ env_(_env),
46
+ logger_(cf_options.info_log),
47
+ user_comparator_(cmp),
48
+ merge_operator_(cf_options.merge_operator),
49
+ iter_(iter),
50
+ version_(version),
51
+ read_callback_(read_callback),
52
+ sequence_(s),
53
+ statistics_(cf_options.statistics),
54
+ max_skip_(max_sequential_skip_in_iterations),
55
+ max_skippable_internal_keys_(read_options.max_skippable_internal_keys),
56
+ num_internal_keys_skipped_(0),
57
+ iterate_lower_bound_(read_options.iterate_lower_bound),
58
+ iterate_upper_bound_(read_options.iterate_upper_bound),
59
+ direction_(kForward),
60
+ valid_(false),
61
+ current_entry_is_merged_(false),
62
+ is_key_seqnum_zero_(false),
63
+ prefix_same_as_start_(mutable_cf_options.prefix_extractor
64
+ ? read_options.prefix_same_as_start
65
+ : false),
66
+ pin_thru_lifetime_(read_options.pin_data),
67
+ expect_total_order_inner_iter_(prefix_extractor_ == nullptr ||
68
+ read_options.total_order_seek ||
69
+ read_options.auto_prefix_mode),
70
+ read_tier_(read_options.read_tier),
71
+ verify_checksums_(read_options.verify_checksums),
72
+ expose_blob_index_(expose_blob_index),
73
+ is_blob_(false),
74
+ arena_mode_(arena_mode),
75
+ range_del_agg_(&cf_options.internal_comparator, s),
76
+ db_impl_(db_impl),
77
+ cfd_(cfd),
78
+ start_seqnum_(read_options.iter_start_seqnum),
79
+ timestamp_ub_(read_options.timestamp),
80
+ timestamp_lb_(read_options.iter_start_ts),
81
+ timestamp_size_(timestamp_ub_ ? timestamp_ub_->size() : 0) {
82
+ RecordTick(statistics_, NO_ITERATOR_CREATED);
83
+ if (pin_thru_lifetime_) {
84
+ pinned_iters_mgr_.StartPinning();
85
+ }
86
+ if (iter_.iter()) {
87
+ iter_.iter()->SetPinnedItersMgr(&pinned_iters_mgr_);
88
+ }
89
+ assert(timestamp_size_ == user_comparator_.timestamp_size());
90
+ }
91
+
92
+ Status DBIter::GetProperty(std::string prop_name, std::string* prop) {
93
+ if (prop == nullptr) {
94
+ return Status::InvalidArgument("prop is nullptr");
95
+ }
96
+ if (prop_name == "rocksdb.iterator.super-version-number") {
97
+ // First try to pass the value returned from inner iterator.
98
+ return iter_.iter()->GetProperty(prop_name, prop);
99
+ } else if (prop_name == "rocksdb.iterator.is-key-pinned") {
100
+ if (valid_) {
101
+ *prop = (pin_thru_lifetime_ && saved_key_.IsKeyPinned()) ? "1" : "0";
102
+ } else {
103
+ *prop = "Iterator is not valid.";
104
+ }
105
+ return Status::OK();
106
+ } else if (prop_name == "rocksdb.iterator.internal-key") {
107
+ *prop = saved_key_.GetUserKey().ToString();
108
+ return Status::OK();
109
+ }
110
+ return Status::InvalidArgument("Unidentified property.");
111
+ }
112
+
113
+ bool DBIter::ParseKey(ParsedInternalKey* ikey) {
114
+ Status s =
115
+ ParseInternalKey(iter_.key(), ikey, false /* log_err_key */); // TODO
116
+ if (!s.ok()) {
117
+ status_ = Status::Corruption("In DBIter: ", s.getState());
118
+ valid_ = false;
119
+ ROCKS_LOG_ERROR(logger_, "In DBIter: %s", status_.getState());
120
+ return false;
121
+ } else {
122
+ return true;
123
+ }
124
+ }
125
+
126
+ void DBIter::Next() {
127
+ assert(valid_);
128
+ assert(status_.ok());
129
+
130
+ PERF_CPU_TIMER_GUARD(iter_next_cpu_nanos, env_);
131
+ // Release temporarily pinned blocks from last operation
132
+ ReleaseTempPinnedData();
133
+ local_stats_.skip_count_ += num_internal_keys_skipped_;
134
+ local_stats_.skip_count_--;
135
+ num_internal_keys_skipped_ = 0;
136
+ bool ok = true;
137
+ if (direction_ == kReverse) {
138
+ is_key_seqnum_zero_ = false;
139
+ if (!ReverseToForward()) {
140
+ ok = false;
141
+ }
142
+ } else if (!current_entry_is_merged_) {
143
+ // If the current value is not a merge, the iter position is the
144
+ // current key, which is already returned. We can safely issue a
145
+ // Next() without checking the current key.
146
+ // If the current key is a merge, very likely iter already points
147
+ // to the next internal position.
148
+ assert(iter_.Valid());
149
+ iter_.Next();
150
+ PERF_COUNTER_ADD(internal_key_skipped_count, 1);
151
+ }
152
+
153
+ local_stats_.next_count_++;
154
+ if (ok && iter_.Valid()) {
155
+ if (prefix_same_as_start_) {
156
+ assert(prefix_extractor_ != nullptr);
157
+ const Slice prefix = prefix_.GetUserKey();
158
+ FindNextUserEntry(true /* skipping the current user key */, &prefix);
159
+ } else {
160
+ FindNextUserEntry(true /* skipping the current user key */, nullptr);
161
+ }
162
+ } else {
163
+ is_key_seqnum_zero_ = false;
164
+ valid_ = false;
165
+ }
166
+ if (statistics_ != nullptr && valid_) {
167
+ local_stats_.next_found_count_++;
168
+ local_stats_.bytes_read_ += (key().size() + value().size());
169
+ }
170
+ }
171
+
172
+ bool DBIter::SetBlobValueIfNeeded(const Slice& user_key,
173
+ const Slice& blob_index) {
174
+ assert(!is_blob_);
175
+
176
+ if (expose_blob_index_) { // Stacked BlobDB implementation
177
+ is_blob_ = true;
178
+ return true;
179
+ }
180
+
181
+ if (!version_) {
182
+ status_ = Status::Corruption("Encountered unexpected blob index.");
183
+ valid_ = false;
184
+ return false;
185
+ }
186
+
187
+ // TODO: consider moving ReadOptions from ArenaWrappedDBIter to DBIter to
188
+ // avoid having to copy options back and forth.
189
+ ReadOptions read_options;
190
+ read_options.read_tier = read_tier_;
191
+ read_options.verify_checksums = verify_checksums_;
192
+
193
+ const Status s =
194
+ version_->GetBlob(read_options, user_key, blob_index, &blob_value_);
195
+
196
+ if (!s.ok()) {
197
+ status_ = s;
198
+ valid_ = false;
199
+ return false;
200
+ }
201
+
202
+ is_blob_ = true;
203
+ return true;
204
+ }
205
+
206
+ // PRE: saved_key_ has the current user key if skipping_saved_key
207
+ // POST: saved_key_ should have the next user key if valid_,
208
+ // if the current entry is a result of merge
209
+ // current_entry_is_merged_ => true
210
+ // saved_value_ => the merged value
211
+ //
212
+ // NOTE: In between, saved_key_ can point to a user key that has
213
+ // a delete marker or a sequence number higher than sequence_
214
+ // saved_key_ MUST have a proper user_key before calling this function
215
+ //
216
+ // The prefix parameter, if not null, indicates that we need to iterate
217
+ // within the prefix, and the iterator needs to be made invalid, if no
218
+ // more entry for the prefix can be found.
219
+ bool DBIter::FindNextUserEntry(bool skipping_saved_key, const Slice* prefix) {
220
+ PERF_TIMER_GUARD(find_next_user_entry_time);
221
+ return FindNextUserEntryInternal(skipping_saved_key, prefix);
222
+ }
223
+
224
+ // Actual implementation of DBIter::FindNextUserEntry()
225
+ bool DBIter::FindNextUserEntryInternal(bool skipping_saved_key,
226
+ const Slice* prefix) {
227
+ // Loop until we hit an acceptable entry to yield
228
+ assert(iter_.Valid());
229
+ assert(status_.ok());
230
+ assert(direction_ == kForward);
231
+ current_entry_is_merged_ = false;
232
+
233
+ // How many times in a row we have skipped an entry with user key less than
234
+ // or equal to saved_key_. We could skip these entries either because
235
+ // sequence numbers were too high or because skipping_saved_key = true.
236
+ // What saved_key_ contains throughout this method:
237
+ // - if skipping_saved_key : saved_key_ contains the key that we need
238
+ // to skip, and we haven't seen any keys greater
239
+ // than that,
240
+ // - if num_skipped > 0 : saved_key_ contains the key that we have skipped
241
+ // num_skipped times, and we haven't seen any keys
242
+ // greater than that,
243
+ // - none of the above : saved_key_ can contain anything, it doesn't
244
+ // matter.
245
+ uint64_t num_skipped = 0;
246
+ // For write unprepared, the target sequence number in reseek could be larger
247
+ // than the snapshot, and thus needs to be skipped again. This could result in
248
+ // an infinite loop of reseeks. To avoid that, we limit the number of reseeks
249
+ // to one.
250
+ bool reseek_done = false;
251
+
252
+ is_blob_ = false;
253
+
254
+ do {
255
+ // Will update is_key_seqnum_zero_ as soon as we parsed the current key
256
+ // but we need to save the previous value to be used in the loop.
257
+ bool is_prev_key_seqnum_zero = is_key_seqnum_zero_;
258
+ if (!ParseKey(&ikey_)) {
259
+ is_key_seqnum_zero_ = false;
260
+ return false;
261
+ }
262
+ Slice user_key_without_ts =
263
+ StripTimestampFromUserKey(ikey_.user_key, timestamp_size_);
264
+
265
+ is_key_seqnum_zero_ = (ikey_.sequence == 0);
266
+
267
+ assert(iterate_upper_bound_ == nullptr ||
268
+ iter_.UpperBoundCheckResult() != IterBoundCheck::kInbound ||
269
+ user_comparator_.CompareWithoutTimestamp(
270
+ user_key_without_ts, /*a_has_ts=*/false, *iterate_upper_bound_,
271
+ /*b_has_ts=*/false) < 0);
272
+ if (iterate_upper_bound_ != nullptr &&
273
+ iter_.UpperBoundCheckResult() != IterBoundCheck::kInbound &&
274
+ user_comparator_.CompareWithoutTimestamp(
275
+ user_key_without_ts, /*a_has_ts=*/false, *iterate_upper_bound_,
276
+ /*b_has_ts=*/false) >= 0) {
277
+ break;
278
+ }
279
+
280
+ assert(prefix == nullptr || prefix_extractor_ != nullptr);
281
+ if (prefix != nullptr &&
282
+ prefix_extractor_->Transform(user_key_without_ts).compare(*prefix) !=
283
+ 0) {
284
+ assert(prefix_same_as_start_);
285
+ break;
286
+ }
287
+
288
+ if (TooManyInternalKeysSkipped()) {
289
+ return false;
290
+ }
291
+
292
+ assert(ikey_.user_key.size() >= timestamp_size_);
293
+ Slice ts = timestamp_size_ > 0 ? ExtractTimestampFromUserKey(
294
+ ikey_.user_key, timestamp_size_)
295
+ : Slice();
296
+ bool more_recent = false;
297
+ if (IsVisible(ikey_.sequence, ts, &more_recent)) {
298
+ // If the previous entry is of seqnum 0, the current entry will not
299
+ // possibly be skipped. This condition can potentially be relaxed to
300
+ // prev_key.seq <= ikey_.sequence. We are cautious because it will be more
301
+ // prone to bugs causing the same user key with the same sequence number.
302
+ // Note that with current timestamp implementation, the same user key can
303
+ // have different timestamps and zero sequence number on the bottommost
304
+ // level. This may change in the future.
305
+ if ((!is_prev_key_seqnum_zero || timestamp_size_ > 0) &&
306
+ skipping_saved_key &&
307
+ CompareKeyForSkip(ikey_.user_key, saved_key_.GetUserKey()) <= 0) {
308
+ num_skipped++; // skip this entry
309
+ PERF_COUNTER_ADD(internal_key_skipped_count, 1);
310
+ } else {
311
+ assert(!skipping_saved_key ||
312
+ CompareKeyForSkip(ikey_.user_key, saved_key_.GetUserKey()) > 0);
313
+ if (!iter_.PrepareValue()) {
314
+ assert(!iter_.status().ok());
315
+ valid_ = false;
316
+ return false;
317
+ }
318
+ num_skipped = 0;
319
+ reseek_done = false;
320
+ switch (ikey_.type) {
321
+ case kTypeDeletion:
322
+ case kTypeDeletionWithTimestamp:
323
+ case kTypeSingleDeletion:
324
+ // Arrange to skip all upcoming entries for this key since
325
+ // they are hidden by this deletion.
326
+ // if iterartor specified start_seqnum we
327
+ // 1) return internal key, including the type
328
+ // 2) return ikey only if ikey.seqnum >= start_seqnum_
329
+ // note that if deletion seqnum is < start_seqnum_ we
330
+ // just skip it like in normal iterator.
331
+ if (start_seqnum_ > 0) {
332
+ if (ikey_.sequence >= start_seqnum_) {
333
+ saved_key_.SetInternalKey(ikey_);
334
+ valid_ = true;
335
+ return true;
336
+ } else {
337
+ saved_key_.SetUserKey(
338
+ ikey_.user_key,
339
+ !pin_thru_lifetime_ ||
340
+ !iter_.iter()->IsKeyPinned() /* copy */);
341
+ skipping_saved_key = true;
342
+ PERF_COUNTER_ADD(internal_delete_skipped_count, 1);
343
+ }
344
+ } else if (timestamp_lb_) {
345
+ saved_key_.SetInternalKey(ikey_);
346
+ valid_ = true;
347
+ return true;
348
+ } else {
349
+ saved_key_.SetUserKey(
350
+ ikey_.user_key, !pin_thru_lifetime_ ||
351
+ !iter_.iter()->IsKeyPinned() /* copy */);
352
+ skipping_saved_key = true;
353
+ PERF_COUNTER_ADD(internal_delete_skipped_count, 1);
354
+ }
355
+ break;
356
+ case kTypeValue:
357
+ case kTypeBlobIndex:
358
+ if (start_seqnum_ > 0) {
359
+ if (ikey_.sequence >= start_seqnum_) {
360
+ saved_key_.SetInternalKey(ikey_);
361
+
362
+ if (ikey_.type == kTypeBlobIndex) {
363
+ if (!SetBlobValueIfNeeded(ikey_.user_key, iter_.value())) {
364
+ return false;
365
+ }
366
+ }
367
+
368
+ valid_ = true;
369
+ return true;
370
+ } else {
371
+ // this key and all previous versions shouldn't be included,
372
+ // skipping_saved_key
373
+ saved_key_.SetUserKey(
374
+ ikey_.user_key,
375
+ !pin_thru_lifetime_ ||
376
+ !iter_.iter()->IsKeyPinned() /* copy */);
377
+ skipping_saved_key = true;
378
+ }
379
+ } else if (timestamp_lb_) {
380
+ saved_key_.SetInternalKey(ikey_);
381
+
382
+ if (ikey_.type == kTypeBlobIndex) {
383
+ if (!SetBlobValueIfNeeded(ikey_.user_key, iter_.value())) {
384
+ return false;
385
+ }
386
+ }
387
+
388
+ valid_ = true;
389
+ return true;
390
+ } else {
391
+ saved_key_.SetUserKey(
392
+ ikey_.user_key, !pin_thru_lifetime_ ||
393
+ !iter_.iter()->IsKeyPinned() /* copy */);
394
+ if (range_del_agg_.ShouldDelete(
395
+ ikey_, RangeDelPositioningMode::kForwardTraversal)) {
396
+ // Arrange to skip all upcoming entries for this key since
397
+ // they are hidden by this deletion.
398
+ skipping_saved_key = true;
399
+ num_skipped = 0;
400
+ reseek_done = false;
401
+ PERF_COUNTER_ADD(internal_delete_skipped_count, 1);
402
+ } else {
403
+ if (ikey_.type == kTypeBlobIndex) {
404
+ if (!SetBlobValueIfNeeded(ikey_.user_key, iter_.value())) {
405
+ return false;
406
+ }
407
+ }
408
+
409
+ valid_ = true;
410
+ return true;
411
+ }
412
+ }
413
+ break;
414
+ case kTypeMerge:
415
+ saved_key_.SetUserKey(
416
+ ikey_.user_key,
417
+ !pin_thru_lifetime_ || !iter_.iter()->IsKeyPinned() /* copy */);
418
+ if (range_del_agg_.ShouldDelete(
419
+ ikey_, RangeDelPositioningMode::kForwardTraversal)) {
420
+ // Arrange to skip all upcoming entries for this key since
421
+ // they are hidden by this deletion.
422
+ skipping_saved_key = true;
423
+ num_skipped = 0;
424
+ reseek_done = false;
425
+ PERF_COUNTER_ADD(internal_delete_skipped_count, 1);
426
+ } else {
427
+ // By now, we are sure the current ikey is going to yield a
428
+ // value
429
+ current_entry_is_merged_ = true;
430
+ valid_ = true;
431
+ return MergeValuesNewToOld(); // Go to a different state machine
432
+ }
433
+ break;
434
+ default:
435
+ valid_ = false;
436
+ status_ = Status::Corruption(
437
+ "Unknown value type: " +
438
+ std::to_string(static_cast<unsigned int>(ikey_.type)));
439
+ return false;
440
+ }
441
+ }
442
+ } else {
443
+ if (more_recent) {
444
+ PERF_COUNTER_ADD(internal_recent_skipped_count, 1);
445
+ }
446
+
447
+ // This key was inserted after our snapshot was taken or skipped by
448
+ // timestamp range. If this happens too many times in a row for the same
449
+ // user key, we want to seek to the target sequence number.
450
+ int cmp = user_comparator_.CompareWithoutTimestamp(
451
+ ikey_.user_key, saved_key_.GetUserKey());
452
+ if (cmp == 0 || (skipping_saved_key && cmp < 0)) {
453
+ num_skipped++;
454
+ } else {
455
+ saved_key_.SetUserKey(
456
+ ikey_.user_key,
457
+ !iter_.iter()->IsKeyPinned() || !pin_thru_lifetime_ /* copy */);
458
+ skipping_saved_key = false;
459
+ num_skipped = 0;
460
+ reseek_done = false;
461
+ }
462
+ }
463
+
464
+ // If we have sequentially iterated via numerous equal keys, then it's
465
+ // better to seek so that we can avoid too many key comparisons.
466
+ //
467
+ // To avoid infinite loops, do not reseek if we have already attempted to
468
+ // reseek previously.
469
+ //
470
+ // TODO(lth): If we reseek to sequence number greater than ikey_.sequence,
471
+ // then it does not make sense to reseek as we would actually land further
472
+ // away from the desired key. There is opportunity for optimization here.
473
+ if (num_skipped > max_skip_ && !reseek_done) {
474
+ is_key_seqnum_zero_ = false;
475
+ num_skipped = 0;
476
+ reseek_done = true;
477
+ std::string last_key;
478
+ if (skipping_saved_key) {
479
+ // We're looking for the next user-key but all we see are the same
480
+ // user-key with decreasing sequence numbers. Fast forward to
481
+ // sequence number 0 and type deletion (the smallest type).
482
+ if (timestamp_size_ == 0) {
483
+ AppendInternalKey(
484
+ &last_key,
485
+ ParsedInternalKey(saved_key_.GetUserKey(), 0, kTypeDeletion));
486
+ } else {
487
+ const std::string kTsMin(timestamp_size_, static_cast<char>(0));
488
+ AppendInternalKeyWithDifferentTimestamp(
489
+ &last_key,
490
+ ParsedInternalKey(saved_key_.GetUserKey(), 0, kTypeDeletion),
491
+ kTsMin);
492
+ }
493
+ // Don't set skipping_saved_key = false because we may still see more
494
+ // user-keys equal to saved_key_.
495
+ } else {
496
+ // We saw multiple entries with this user key and sequence numbers
497
+ // higher than sequence_. Fast forward to sequence_.
498
+ // Note that this only covers a case when a higher key was overwritten
499
+ // many times since our snapshot was taken, not the case when a lot of
500
+ // different keys were inserted after our snapshot was taken.
501
+ if (timestamp_size_ == 0) {
502
+ AppendInternalKey(
503
+ &last_key, ParsedInternalKey(saved_key_.GetUserKey(), sequence_,
504
+ kValueTypeForSeek));
505
+ } else {
506
+ AppendInternalKeyWithDifferentTimestamp(
507
+ &last_key,
508
+ ParsedInternalKey(saved_key_.GetUserKey(), sequence_,
509
+ kValueTypeForSeek),
510
+ *timestamp_ub_);
511
+ }
512
+ }
513
+ iter_.Seek(last_key);
514
+ RecordTick(statistics_, NUMBER_OF_RESEEKS_IN_ITERATION);
515
+ } else {
516
+ iter_.Next();
517
+ }
518
+ } while (iter_.Valid());
519
+
520
+ valid_ = false;
521
+ return iter_.status().ok();
522
+ }
523
+
524
+ // Merge values of the same user key starting from the current iter_ position
525
+ // Scan from the newer entries to older entries.
526
+ // PRE: iter_.key() points to the first merge type entry
527
+ // saved_key_ stores the user key
528
+ // iter_.PrepareValue() has been called
529
+ // POST: saved_value_ has the merged value for the user key
530
+ // iter_ points to the next entry (or invalid)
531
+ bool DBIter::MergeValuesNewToOld() {
532
+ if (!merge_operator_) {
533
+ ROCKS_LOG_ERROR(logger_, "Options::merge_operator is null.");
534
+ status_ = Status::InvalidArgument("merge_operator_ must be set.");
535
+ valid_ = false;
536
+ return false;
537
+ }
538
+
539
+ // Temporarily pin the blocks that hold merge operands
540
+ TempPinData();
541
+ merge_context_.Clear();
542
+ // Start the merge process by pushing the first operand
543
+ merge_context_.PushOperand(
544
+ iter_.value(), iter_.iter()->IsValuePinned() /* operand_pinned */);
545
+ TEST_SYNC_POINT("DBIter::MergeValuesNewToOld:PushedFirstOperand");
546
+
547
+ ParsedInternalKey ikey;
548
+ for (iter_.Next(); iter_.Valid(); iter_.Next()) {
549
+ TEST_SYNC_POINT("DBIter::MergeValuesNewToOld:SteppedToNextOperand");
550
+ if (!ParseKey(&ikey)) {
551
+ return false;
552
+ }
553
+
554
+ if (!user_comparator_.Equal(ikey.user_key, saved_key_.GetUserKey())) {
555
+ // hit the next user key, stop right here
556
+ break;
557
+ }
558
+ if (kTypeDeletion == ikey.type || kTypeSingleDeletion == ikey.type ||
559
+ range_del_agg_.ShouldDelete(
560
+ ikey, RangeDelPositioningMode::kForwardTraversal)) {
561
+ // hit a delete with the same user key, stop right here
562
+ // iter_ is positioned after delete
563
+ iter_.Next();
564
+ break;
565
+ }
566
+ if (!iter_.PrepareValue()) {
567
+ valid_ = false;
568
+ return false;
569
+ }
570
+
571
+ if (kTypeValue == ikey.type) {
572
+ // hit a put, merge the put value with operands and store the
573
+ // final result in saved_value_. We are done!
574
+ const Slice val = iter_.value();
575
+ Status s = MergeHelper::TimedFullMerge(
576
+ merge_operator_, ikey.user_key, &val, merge_context_.GetOperands(),
577
+ &saved_value_, logger_, statistics_, env_, &pinned_value_, true);
578
+ if (!s.ok()) {
579
+ valid_ = false;
580
+ status_ = s;
581
+ return false;
582
+ }
583
+ // iter_ is positioned after put
584
+ iter_.Next();
585
+ if (!iter_.status().ok()) {
586
+ valid_ = false;
587
+ return false;
588
+ }
589
+ return true;
590
+ } else if (kTypeMerge == ikey.type) {
591
+ // hit a merge, add the value as an operand and run associative merge.
592
+ // when complete, add result to operands and continue.
593
+ merge_context_.PushOperand(
594
+ iter_.value(), iter_.iter()->IsValuePinned() /* operand_pinned */);
595
+ PERF_COUNTER_ADD(internal_merge_count, 1);
596
+ } else if (kTypeBlobIndex == ikey.type) {
597
+ status_ = Status::NotSupported("BlobDB does not support merge operator.");
598
+ valid_ = false;
599
+ return false;
600
+ } else {
601
+ valid_ = false;
602
+ status_ = Status::Corruption(
603
+ "Unrecognized value type: " +
604
+ std::to_string(static_cast<unsigned int>(ikey.type)));
605
+ return false;
606
+ }
607
+ }
608
+
609
+ if (!iter_.status().ok()) {
610
+ valid_ = false;
611
+ return false;
612
+ }
613
+
614
+ // we either exhausted all internal keys under this user key, or hit
615
+ // a deletion marker.
616
+ // feed null as the existing value to the merge operator, such that
617
+ // client can differentiate this scenario and do things accordingly.
618
+ Status s = MergeHelper::TimedFullMerge(
619
+ merge_operator_, saved_key_.GetUserKey(), nullptr,
620
+ merge_context_.GetOperands(), &saved_value_, logger_, statistics_, env_,
621
+ &pinned_value_, true);
622
+ if (!s.ok()) {
623
+ valid_ = false;
624
+ status_ = s;
625
+ return false;
626
+ }
627
+
628
+ assert(status_.ok());
629
+ return true;
630
+ }
631
+
632
+ void DBIter::Prev() {
633
+ if (timestamp_size_ > 0) {
634
+ valid_ = false;
635
+ status_ = Status::NotSupported(
636
+ "SeekToLast/SeekForPrev/Prev currently not supported with timestamp.");
637
+ return;
638
+ }
639
+
640
+ assert(valid_);
641
+ assert(status_.ok());
642
+
643
+ PERF_CPU_TIMER_GUARD(iter_prev_cpu_nanos, env_);
644
+ ReleaseTempPinnedData();
645
+ ResetInternalKeysSkippedCounter();
646
+ bool ok = true;
647
+ if (direction_ == kForward) {
648
+ if (!ReverseToBackward()) {
649
+ ok = false;
650
+ }
651
+ }
652
+ if (ok) {
653
+ Slice prefix;
654
+ if (prefix_same_as_start_) {
655
+ assert(prefix_extractor_ != nullptr);
656
+ prefix = prefix_.GetUserKey();
657
+ }
658
+ PrevInternal(prefix_same_as_start_ ? &prefix : nullptr);
659
+ }
660
+
661
+ if (statistics_ != nullptr) {
662
+ local_stats_.prev_count_++;
663
+ if (valid_) {
664
+ local_stats_.prev_found_count_++;
665
+ local_stats_.bytes_read_ += (key().size() + value().size());
666
+ }
667
+ }
668
+ }
669
+
670
+ bool DBIter::ReverseToForward() {
671
+ assert(iter_.status().ok());
672
+
673
+ // When moving backwards, iter_ is positioned on _previous_ key, which may
674
+ // not exist or may have different prefix than the current key().
675
+ // If that's the case, seek iter_ to current key.
676
+ if (!expect_total_order_inner_iter() || !iter_.Valid()) {
677
+ IterKey last_key;
678
+ last_key.SetInternalKey(ParsedInternalKey(
679
+ saved_key_.GetUserKey(), kMaxSequenceNumber, kValueTypeForSeek));
680
+ iter_.Seek(last_key.GetInternalKey());
681
+ }
682
+
683
+ direction_ = kForward;
684
+ // Skip keys less than the current key() (a.k.a. saved_key_).
685
+ while (iter_.Valid()) {
686
+ ParsedInternalKey ikey;
687
+ if (!ParseKey(&ikey)) {
688
+ return false;
689
+ }
690
+ if (user_comparator_.Compare(ikey.user_key, saved_key_.GetUserKey()) >= 0) {
691
+ return true;
692
+ }
693
+ iter_.Next();
694
+ }
695
+
696
+ if (!iter_.status().ok()) {
697
+ valid_ = false;
698
+ return false;
699
+ }
700
+
701
+ return true;
702
+ }
703
+
704
+ // Move iter_ to the key before saved_key_.
705
+ bool DBIter::ReverseToBackward() {
706
+ assert(iter_.status().ok());
707
+
708
+ // When current_entry_is_merged_ is true, iter_ may be positioned on the next
709
+ // key, which may not exist or may have prefix different from current.
710
+ // If that's the case, seek to saved_key_.
711
+ if (current_entry_is_merged_ &&
712
+ (!expect_total_order_inner_iter() || !iter_.Valid())) {
713
+ IterKey last_key;
714
+ // Using kMaxSequenceNumber and kValueTypeForSeek
715
+ // (not kValueTypeForSeekForPrev) to seek to a key strictly smaller
716
+ // than saved_key_.
717
+ last_key.SetInternalKey(ParsedInternalKey(
718
+ saved_key_.GetUserKey(), kMaxSequenceNumber, kValueTypeForSeek));
719
+ if (!expect_total_order_inner_iter()) {
720
+ iter_.SeekForPrev(last_key.GetInternalKey());
721
+ } else {
722
+ // Some iterators may not support SeekForPrev(), so we avoid using it
723
+ // when prefix seek mode is disabled. This is somewhat expensive
724
+ // (an extra Prev(), as well as an extra change of direction of iter_),
725
+ // so we may need to reconsider it later.
726
+ iter_.Seek(last_key.GetInternalKey());
727
+ if (!iter_.Valid() && iter_.status().ok()) {
728
+ iter_.SeekToLast();
729
+ }
730
+ }
731
+ }
732
+
733
+ direction_ = kReverse;
734
+ return FindUserKeyBeforeSavedKey();
735
+ }
736
+
737
+ void DBIter::PrevInternal(const Slice* prefix) {
738
+ while (iter_.Valid()) {
739
+ saved_key_.SetUserKey(
740
+ ExtractUserKey(iter_.key()),
741
+ !iter_.iter()->IsKeyPinned() || !pin_thru_lifetime_ /* copy */);
742
+
743
+ assert(prefix == nullptr || prefix_extractor_ != nullptr);
744
+ if (prefix != nullptr &&
745
+ prefix_extractor_
746
+ ->Transform(StripTimestampFromUserKey(saved_key_.GetUserKey(),
747
+ timestamp_size_))
748
+ .compare(*prefix) != 0) {
749
+ assert(prefix_same_as_start_);
750
+ // Current key does not have the same prefix as start
751
+ valid_ = false;
752
+ return;
753
+ }
754
+
755
+ assert(iterate_lower_bound_ == nullptr || iter_.MayBeOutOfLowerBound() ||
756
+ user_comparator_.Compare(saved_key_.GetUserKey(),
757
+ *iterate_lower_bound_) >= 0);
758
+ if (iterate_lower_bound_ != nullptr && iter_.MayBeOutOfLowerBound() &&
759
+ user_comparator_.Compare(saved_key_.GetUserKey(),
760
+ *iterate_lower_bound_) < 0) {
761
+ // We've iterated earlier than the user-specified lower bound.
762
+ valid_ = false;
763
+ return;
764
+ }
765
+
766
+ if (!FindValueForCurrentKey()) { // assigns valid_
767
+ return;
768
+ }
769
+
770
+ // Whether or not we found a value for current key, we need iter_ to end up
771
+ // on a smaller key.
772
+ if (!FindUserKeyBeforeSavedKey()) {
773
+ return;
774
+ }
775
+
776
+ if (valid_) {
777
+ // Found the value.
778
+ return;
779
+ }
780
+
781
+ if (TooManyInternalKeysSkipped(false)) {
782
+ return;
783
+ }
784
+ }
785
+
786
+ // We haven't found any key - iterator is not valid
787
+ valid_ = false;
788
+ }
789
+
790
+ // Used for backwards iteration.
791
+ // Looks at the entries with user key saved_key_ and finds the most up-to-date
792
+ // value for it, or executes a merge, or determines that the value was deleted.
793
+ // Sets valid_ to true if the value is found and is ready to be presented to
794
+ // the user through value().
795
+ // Sets valid_ to false if the value was deleted, and we should try another key.
796
+ // Returns false if an error occurred, and !status().ok() and !valid_.
797
+ //
798
+ // PRE: iter_ is positioned on the last entry with user key equal to saved_key_.
799
+ // POST: iter_ is positioned on one of the entries equal to saved_key_, or on
800
+ // the entry just before them, or on the entry just after them.
801
+ bool DBIter::FindValueForCurrentKey() {
802
+ assert(iter_.Valid());
803
+ merge_context_.Clear();
804
+ current_entry_is_merged_ = false;
805
+ // last entry before merge (could be kTypeDeletion, kTypeSingleDeletion or
806
+ // kTypeValue)
807
+ ValueType last_not_merge_type = kTypeDeletion;
808
+ ValueType last_key_entry_type = kTypeDeletion;
809
+
810
+ // Temporarily pin blocks that hold (merge operands / the value)
811
+ ReleaseTempPinnedData();
812
+ TempPinData();
813
+ size_t num_skipped = 0;
814
+ while (iter_.Valid()) {
815
+ ParsedInternalKey ikey;
816
+ if (!ParseKey(&ikey)) {
817
+ return false;
818
+ }
819
+
820
+ assert(ikey.user_key.size() >= timestamp_size_);
821
+ Slice ts;
822
+ if (timestamp_size_ > 0) {
823
+ ts = Slice(ikey.user_key.data() + ikey.user_key.size() - timestamp_size_,
824
+ timestamp_size_);
825
+ }
826
+ if (!IsVisible(ikey.sequence, ts) ||
827
+ !user_comparator_.Equal(ikey.user_key, saved_key_.GetUserKey())) {
828
+ break;
829
+ }
830
+ if (TooManyInternalKeysSkipped()) {
831
+ return false;
832
+ }
833
+
834
+ // This user key has lots of entries.
835
+ // We're going from old to new, and it's taking too long. Let's do a Seek()
836
+ // and go from new to old. This helps when a key was overwritten many times.
837
+ if (num_skipped >= max_skip_) {
838
+ return FindValueForCurrentKeyUsingSeek();
839
+ }
840
+
841
+ if (!iter_.PrepareValue()) {
842
+ valid_ = false;
843
+ return false;
844
+ }
845
+
846
+ last_key_entry_type = ikey.type;
847
+ switch (last_key_entry_type) {
848
+ case kTypeValue:
849
+ case kTypeBlobIndex:
850
+ if (range_del_agg_.ShouldDelete(
851
+ ikey, RangeDelPositioningMode::kBackwardTraversal)) {
852
+ last_key_entry_type = kTypeRangeDeletion;
853
+ PERF_COUNTER_ADD(internal_delete_skipped_count, 1);
854
+ } else if (iter_.iter()->IsValuePinned()) {
855
+ pinned_value_ = iter_.value();
856
+ } else {
857
+ valid_ = false;
858
+ status_ = Status::NotSupported(
859
+ "Backward iteration not supported if underlying iterator's value "
860
+ "cannot be pinned.");
861
+ }
862
+ merge_context_.Clear();
863
+ last_not_merge_type = last_key_entry_type;
864
+ if (!status_.ok()) {
865
+ return false;
866
+ }
867
+ break;
868
+ case kTypeDeletion:
869
+ case kTypeSingleDeletion:
870
+ merge_context_.Clear();
871
+ last_not_merge_type = last_key_entry_type;
872
+ PERF_COUNTER_ADD(internal_delete_skipped_count, 1);
873
+ break;
874
+ case kTypeMerge:
875
+ if (range_del_agg_.ShouldDelete(
876
+ ikey, RangeDelPositioningMode::kBackwardTraversal)) {
877
+ merge_context_.Clear();
878
+ last_key_entry_type = kTypeRangeDeletion;
879
+ last_not_merge_type = last_key_entry_type;
880
+ PERF_COUNTER_ADD(internal_delete_skipped_count, 1);
881
+ } else {
882
+ assert(merge_operator_ != nullptr);
883
+ merge_context_.PushOperandBack(
884
+ iter_.value(),
885
+ iter_.iter()->IsValuePinned() /* operand_pinned */);
886
+ PERF_COUNTER_ADD(internal_merge_count, 1);
887
+ }
888
+ break;
889
+ default:
890
+ valid_ = false;
891
+ status_ = Status::Corruption(
892
+ "Unknown value type: " +
893
+ std::to_string(static_cast<unsigned int>(last_key_entry_type)));
894
+ return false;
895
+ }
896
+
897
+ PERF_COUNTER_ADD(internal_key_skipped_count, 1);
898
+ iter_.Prev();
899
+ ++num_skipped;
900
+ }
901
+
902
+ if (!iter_.status().ok()) {
903
+ valid_ = false;
904
+ return false;
905
+ }
906
+
907
+ Status s;
908
+ s.PermitUncheckedError();
909
+ is_blob_ = false;
910
+ switch (last_key_entry_type) {
911
+ case kTypeDeletion:
912
+ case kTypeSingleDeletion:
913
+ case kTypeRangeDeletion:
914
+ valid_ = false;
915
+ return true;
916
+ case kTypeMerge:
917
+ current_entry_is_merged_ = true;
918
+ if (last_not_merge_type == kTypeDeletion ||
919
+ last_not_merge_type == kTypeSingleDeletion ||
920
+ last_not_merge_type == kTypeRangeDeletion) {
921
+ s = MergeHelper::TimedFullMerge(
922
+ merge_operator_, saved_key_.GetUserKey(), nullptr,
923
+ merge_context_.GetOperands(), &saved_value_, logger_, statistics_,
924
+ env_, &pinned_value_, true);
925
+ } else if (last_not_merge_type == kTypeBlobIndex) {
926
+ status_ =
927
+ Status::NotSupported("BlobDB does not support merge operator.");
928
+ valid_ = false;
929
+ return false;
930
+ } else {
931
+ assert(last_not_merge_type == kTypeValue);
932
+ s = MergeHelper::TimedFullMerge(
933
+ merge_operator_, saved_key_.GetUserKey(), &pinned_value_,
934
+ merge_context_.GetOperands(), &saved_value_, logger_, statistics_,
935
+ env_, &pinned_value_, true);
936
+ }
937
+ break;
938
+ case kTypeValue:
939
+ // do nothing - we've already has value in pinned_value_
940
+ break;
941
+ case kTypeBlobIndex:
942
+ if (!SetBlobValueIfNeeded(saved_key_.GetUserKey(), pinned_value_)) {
943
+ return false;
944
+ }
945
+
946
+ break;
947
+ default:
948
+ valid_ = false;
949
+ status_ = Status::Corruption(
950
+ "Unknown value type: " +
951
+ std::to_string(static_cast<unsigned int>(last_key_entry_type)));
952
+ return false;
953
+ }
954
+ if (!s.ok()) {
955
+ valid_ = false;
956
+ status_ = s;
957
+ return false;
958
+ }
959
+ valid_ = true;
960
+ return true;
961
+ }
962
+
963
+ // This function is used in FindValueForCurrentKey.
964
+ // We use Seek() function instead of Prev() to find necessary value
965
+ // TODO: This is very similar to FindNextUserEntry() and MergeValuesNewToOld().
966
+ // Would be nice to reuse some code.
967
+ bool DBIter::FindValueForCurrentKeyUsingSeek() {
968
+ // FindValueForCurrentKey will enable pinning before calling
969
+ // FindValueForCurrentKeyUsingSeek()
970
+ assert(pinned_iters_mgr_.PinningEnabled());
971
+ std::string last_key;
972
+ AppendInternalKey(&last_key, ParsedInternalKey(saved_key_.GetUserKey(),
973
+ sequence_, kValueTypeForSeek));
974
+ iter_.Seek(last_key);
975
+ RecordTick(statistics_, NUMBER_OF_RESEEKS_IN_ITERATION);
976
+
977
+ // In case read_callback presents, the value we seek to may not be visible.
978
+ // Find the next value that's visible.
979
+ ParsedInternalKey ikey;
980
+ is_blob_ = false;
981
+ while (true) {
982
+ if (!iter_.Valid()) {
983
+ valid_ = false;
984
+ return iter_.status().ok();
985
+ }
986
+
987
+ if (!ParseKey(&ikey)) {
988
+ return false;
989
+ }
990
+ assert(ikey.user_key.size() >= timestamp_size_);
991
+ Slice ts;
992
+ if (timestamp_size_ > 0) {
993
+ ts = Slice(ikey.user_key.data() + ikey.user_key.size() - timestamp_size_,
994
+ timestamp_size_);
995
+ }
996
+
997
+ if (!user_comparator_.Equal(ikey.user_key, saved_key_.GetUserKey())) {
998
+ // No visible values for this key, even though FindValueForCurrentKey()
999
+ // has seen some. This is possible if we're using a tailing iterator, and
1000
+ // the entries were discarded in a compaction.
1001
+ valid_ = false;
1002
+ return true;
1003
+ }
1004
+
1005
+ if (IsVisible(ikey.sequence, ts)) {
1006
+ break;
1007
+ }
1008
+
1009
+ iter_.Next();
1010
+ }
1011
+
1012
+ if (ikey.type == kTypeDeletion || ikey.type == kTypeSingleDeletion ||
1013
+ range_del_agg_.ShouldDelete(
1014
+ ikey, RangeDelPositioningMode::kBackwardTraversal)) {
1015
+ valid_ = false;
1016
+ return true;
1017
+ }
1018
+ if (!iter_.PrepareValue()) {
1019
+ valid_ = false;
1020
+ return false;
1021
+ }
1022
+ if (ikey.type == kTypeValue || ikey.type == kTypeBlobIndex) {
1023
+ assert(iter_.iter()->IsValuePinned());
1024
+ pinned_value_ = iter_.value();
1025
+ if (ikey.type == kTypeBlobIndex) {
1026
+ if (!SetBlobValueIfNeeded(ikey.user_key, pinned_value_)) {
1027
+ return false;
1028
+ }
1029
+ }
1030
+
1031
+ valid_ = true;
1032
+ return true;
1033
+ }
1034
+
1035
+ // kTypeMerge. We need to collect all kTypeMerge values and save them
1036
+ // in operands
1037
+ assert(ikey.type == kTypeMerge);
1038
+ current_entry_is_merged_ = true;
1039
+ merge_context_.Clear();
1040
+ merge_context_.PushOperand(
1041
+ iter_.value(), iter_.iter()->IsValuePinned() /* operand_pinned */);
1042
+ while (true) {
1043
+ iter_.Next();
1044
+
1045
+ if (!iter_.Valid()) {
1046
+ if (!iter_.status().ok()) {
1047
+ valid_ = false;
1048
+ return false;
1049
+ }
1050
+ break;
1051
+ }
1052
+ if (!ParseKey(&ikey)) {
1053
+ return false;
1054
+ }
1055
+ if (!user_comparator_.Equal(ikey.user_key, saved_key_.GetUserKey())) {
1056
+ break;
1057
+ }
1058
+ if (ikey.type == kTypeDeletion || ikey.type == kTypeSingleDeletion ||
1059
+ range_del_agg_.ShouldDelete(
1060
+ ikey, RangeDelPositioningMode::kForwardTraversal)) {
1061
+ break;
1062
+ }
1063
+ if (!iter_.PrepareValue()) {
1064
+ valid_ = false;
1065
+ return false;
1066
+ }
1067
+
1068
+ if (ikey.type == kTypeValue) {
1069
+ const Slice val = iter_.value();
1070
+ Status s = MergeHelper::TimedFullMerge(
1071
+ merge_operator_, saved_key_.GetUserKey(), &val,
1072
+ merge_context_.GetOperands(), &saved_value_, logger_, statistics_,
1073
+ env_, &pinned_value_, true);
1074
+ if (!s.ok()) {
1075
+ valid_ = false;
1076
+ status_ = s;
1077
+ return false;
1078
+ }
1079
+ valid_ = true;
1080
+ return true;
1081
+ } else if (ikey.type == kTypeMerge) {
1082
+ merge_context_.PushOperand(
1083
+ iter_.value(), iter_.iter()->IsValuePinned() /* operand_pinned */);
1084
+ PERF_COUNTER_ADD(internal_merge_count, 1);
1085
+ } else if (ikey.type == kTypeBlobIndex) {
1086
+ status_ = Status::NotSupported("BlobDB does not support merge operator.");
1087
+ valid_ = false;
1088
+ return false;
1089
+ } else {
1090
+ valid_ = false;
1091
+ status_ = Status::Corruption(
1092
+ "Unknown value type: " +
1093
+ std::to_string(static_cast<unsigned int>(ikey.type)));
1094
+ return false;
1095
+ }
1096
+ }
1097
+
1098
+ Status s = MergeHelper::TimedFullMerge(
1099
+ merge_operator_, saved_key_.GetUserKey(), nullptr,
1100
+ merge_context_.GetOperands(), &saved_value_, logger_, statistics_, env_,
1101
+ &pinned_value_, true);
1102
+ if (!s.ok()) {
1103
+ valid_ = false;
1104
+ status_ = s;
1105
+ return false;
1106
+ }
1107
+
1108
+ // Make sure we leave iter_ in a good state. If it's valid and we don't care
1109
+ // about prefixes, that's already good enough. Otherwise it needs to be
1110
+ // seeked to the current key.
1111
+ if (!expect_total_order_inner_iter() || !iter_.Valid()) {
1112
+ if (!expect_total_order_inner_iter()) {
1113
+ iter_.SeekForPrev(last_key);
1114
+ } else {
1115
+ iter_.Seek(last_key);
1116
+ if (!iter_.Valid() && iter_.status().ok()) {
1117
+ iter_.SeekToLast();
1118
+ }
1119
+ }
1120
+ RecordTick(statistics_, NUMBER_OF_RESEEKS_IN_ITERATION);
1121
+ }
1122
+
1123
+ valid_ = true;
1124
+ return true;
1125
+ }
1126
+
1127
+ // Move backwards until the key smaller than saved_key_.
1128
+ // Changes valid_ only if return value is false.
1129
+ bool DBIter::FindUserKeyBeforeSavedKey() {
1130
+ assert(status_.ok());
1131
+ size_t num_skipped = 0;
1132
+ while (iter_.Valid()) {
1133
+ ParsedInternalKey ikey;
1134
+ if (!ParseKey(&ikey)) {
1135
+ return false;
1136
+ }
1137
+
1138
+ if (user_comparator_.Compare(ikey.user_key, saved_key_.GetUserKey()) < 0) {
1139
+ return true;
1140
+ }
1141
+
1142
+ if (TooManyInternalKeysSkipped()) {
1143
+ return false;
1144
+ }
1145
+
1146
+ assert(ikey.sequence != kMaxSequenceNumber);
1147
+ assert(ikey.user_key.size() >= timestamp_size_);
1148
+ Slice ts;
1149
+ if (timestamp_size_ > 0) {
1150
+ ts = Slice(ikey.user_key.data() + ikey.user_key.size() - timestamp_size_,
1151
+ timestamp_size_);
1152
+ }
1153
+ if (!IsVisible(ikey.sequence, ts)) {
1154
+ PERF_COUNTER_ADD(internal_recent_skipped_count, 1);
1155
+ } else {
1156
+ PERF_COUNTER_ADD(internal_key_skipped_count, 1);
1157
+ }
1158
+
1159
+ if (num_skipped >= max_skip_) {
1160
+ num_skipped = 0;
1161
+ IterKey last_key;
1162
+ last_key.SetInternalKey(ParsedInternalKey(
1163
+ saved_key_.GetUserKey(), kMaxSequenceNumber, kValueTypeForSeek));
1164
+ // It would be more efficient to use SeekForPrev() here, but some
1165
+ // iterators may not support it.
1166
+ iter_.Seek(last_key.GetInternalKey());
1167
+ RecordTick(statistics_, NUMBER_OF_RESEEKS_IN_ITERATION);
1168
+ if (!iter_.Valid()) {
1169
+ break;
1170
+ }
1171
+ } else {
1172
+ ++num_skipped;
1173
+ }
1174
+
1175
+ iter_.Prev();
1176
+ }
1177
+
1178
+ if (!iter_.status().ok()) {
1179
+ valid_ = false;
1180
+ return false;
1181
+ }
1182
+
1183
+ return true;
1184
+ }
1185
+
1186
+ bool DBIter::TooManyInternalKeysSkipped(bool increment) {
1187
+ if ((max_skippable_internal_keys_ > 0) &&
1188
+ (num_internal_keys_skipped_ > max_skippable_internal_keys_)) {
1189
+ valid_ = false;
1190
+ status_ = Status::Incomplete("Too many internal keys skipped.");
1191
+ return true;
1192
+ } else if (increment) {
1193
+ num_internal_keys_skipped_++;
1194
+ }
1195
+ return false;
1196
+ }
1197
+
1198
+ bool DBIter::IsVisible(SequenceNumber sequence, const Slice& ts,
1199
+ bool* more_recent) {
1200
+ // Remember that comparator orders preceding timestamp as larger.
1201
+ // TODO(yanqin): support timestamp in read_callback_.
1202
+ bool visible_by_seq = (read_callback_ == nullptr)
1203
+ ? sequence <= sequence_
1204
+ : read_callback_->IsVisible(sequence);
1205
+
1206
+ bool visible_by_ts =
1207
+ (timestamp_ub_ == nullptr ||
1208
+ user_comparator_.CompareTimestamp(ts, *timestamp_ub_) <= 0) &&
1209
+ (timestamp_lb_ == nullptr ||
1210
+ user_comparator_.CompareTimestamp(ts, *timestamp_lb_) >= 0);
1211
+
1212
+ if (more_recent) {
1213
+ *more_recent = !visible_by_seq;
1214
+ }
1215
+ return visible_by_seq && visible_by_ts;
1216
+ }
1217
+
1218
+ void DBIter::SetSavedKeyToSeekTarget(const Slice& target) {
1219
+ is_key_seqnum_zero_ = false;
1220
+ SequenceNumber seq = sequence_;
1221
+ saved_key_.Clear();
1222
+ saved_key_.SetInternalKey(target, seq, kValueTypeForSeek, timestamp_ub_);
1223
+
1224
+ if (iterate_lower_bound_ != nullptr &&
1225
+ user_comparator_.CompareWithoutTimestamp(
1226
+ saved_key_.GetUserKey(), /*a_has_ts=*/true, *iterate_lower_bound_,
1227
+ /*b_has_ts=*/false) < 0) {
1228
+ // Seek key is smaller than the lower bound.
1229
+ saved_key_.Clear();
1230
+ saved_key_.SetInternalKey(*iterate_lower_bound_, seq, kValueTypeForSeek,
1231
+ timestamp_ub_);
1232
+ }
1233
+ }
1234
+
1235
+ void DBIter::SetSavedKeyToSeekForPrevTarget(const Slice& target) {
1236
+ is_key_seqnum_zero_ = false;
1237
+ saved_key_.Clear();
1238
+ // now saved_key is used to store internal key.
1239
+ saved_key_.SetInternalKey(target, 0 /* sequence_number */,
1240
+ kValueTypeForSeekForPrev);
1241
+
1242
+ if (iterate_upper_bound_ != nullptr &&
1243
+ user_comparator_.Compare(saved_key_.GetUserKey(),
1244
+ *iterate_upper_bound_) >= 0) {
1245
+ saved_key_.Clear();
1246
+ saved_key_.SetInternalKey(*iterate_upper_bound_, kMaxSequenceNumber);
1247
+ }
1248
+ }
1249
+
1250
+ void DBIter::Seek(const Slice& target) {
1251
+ PERF_CPU_TIMER_GUARD(iter_seek_cpu_nanos, env_);
1252
+ StopWatch sw(env_, statistics_, DB_SEEK);
1253
+
1254
+ #ifndef ROCKSDB_LITE
1255
+ if (db_impl_ != nullptr && cfd_ != nullptr) {
1256
+ // TODO: What do we do if this returns an error?
1257
+ db_impl_->TraceIteratorSeek(cfd_->GetID(), target).PermitUncheckedError();
1258
+ }
1259
+ #endif // ROCKSDB_LITE
1260
+
1261
+ status_ = Status::OK();
1262
+ ReleaseTempPinnedData();
1263
+ ResetInternalKeysSkippedCounter();
1264
+
1265
+ // Seek the inner iterator based on the target key.
1266
+ {
1267
+ PERF_TIMER_GUARD(seek_internal_seek_time);
1268
+
1269
+ SetSavedKeyToSeekTarget(target);
1270
+ iter_.Seek(saved_key_.GetInternalKey());
1271
+
1272
+ range_del_agg_.InvalidateRangeDelMapPositions();
1273
+ RecordTick(statistics_, NUMBER_DB_SEEK);
1274
+ }
1275
+ if (!iter_.Valid()) {
1276
+ valid_ = false;
1277
+ return;
1278
+ }
1279
+ direction_ = kForward;
1280
+
1281
+ // Now the inner iterator is placed to the target position. From there,
1282
+ // we need to find out the next key that is visible to the user.
1283
+ ClearSavedValue();
1284
+ if (prefix_same_as_start_) {
1285
+ // The case where the iterator needs to be invalidated if it has exausted
1286
+ // keys within the same prefix of the seek key.
1287
+ assert(prefix_extractor_ != nullptr);
1288
+ Slice target_prefix = prefix_extractor_->Transform(target);
1289
+ FindNextUserEntry(false /* not skipping saved_key */,
1290
+ &target_prefix /* prefix */);
1291
+ if (valid_) {
1292
+ // Remember the prefix of the seek key for the future Next() call to
1293
+ // check.
1294
+ prefix_.SetUserKey(target_prefix);
1295
+ }
1296
+ } else {
1297
+ FindNextUserEntry(false /* not skipping saved_key */, nullptr);
1298
+ }
1299
+ if (!valid_) {
1300
+ return;
1301
+ }
1302
+
1303
+ // Updating stats and perf context counters.
1304
+ if (statistics_ != nullptr) {
1305
+ // Decrement since we don't want to count this key as skipped
1306
+ RecordTick(statistics_, NUMBER_DB_SEEK_FOUND);
1307
+ RecordTick(statistics_, ITER_BYTES_READ, key().size() + value().size());
1308
+ }
1309
+ PERF_COUNTER_ADD(iter_read_bytes, key().size() + value().size());
1310
+ }
1311
+
1312
+ void DBIter::SeekForPrev(const Slice& target) {
1313
+ PERF_CPU_TIMER_GUARD(iter_seek_cpu_nanos, env_);
1314
+ StopWatch sw(env_, statistics_, DB_SEEK);
1315
+
1316
+ #ifndef ROCKSDB_LITE
1317
+ if (db_impl_ != nullptr && cfd_ != nullptr) {
1318
+ // TODO: What do we do if this returns an error?
1319
+ db_impl_->TraceIteratorSeekForPrev(cfd_->GetID(), target)
1320
+ .PermitUncheckedError();
1321
+ }
1322
+ #endif // ROCKSDB_LITE
1323
+
1324
+ if (timestamp_size_ > 0) {
1325
+ valid_ = false;
1326
+ status_ = Status::NotSupported(
1327
+ "SeekToLast/SeekForPrev/Prev currently not supported with timestamp.");
1328
+ return;
1329
+ }
1330
+
1331
+ status_ = Status::OK();
1332
+ ReleaseTempPinnedData();
1333
+ ResetInternalKeysSkippedCounter();
1334
+
1335
+ // Seek the inner iterator based on the target key.
1336
+ {
1337
+ PERF_TIMER_GUARD(seek_internal_seek_time);
1338
+ SetSavedKeyToSeekForPrevTarget(target);
1339
+ iter_.SeekForPrev(saved_key_.GetInternalKey());
1340
+ range_del_agg_.InvalidateRangeDelMapPositions();
1341
+ RecordTick(statistics_, NUMBER_DB_SEEK);
1342
+ }
1343
+ if (!iter_.Valid()) {
1344
+ valid_ = false;
1345
+ return;
1346
+ }
1347
+ direction_ = kReverse;
1348
+
1349
+ // Now the inner iterator is placed to the target position. From there,
1350
+ // we need to find out the first key that is visible to the user in the
1351
+ // backward direction.
1352
+ ClearSavedValue();
1353
+ if (prefix_same_as_start_) {
1354
+ // The case where the iterator needs to be invalidated if it has exausted
1355
+ // keys within the same prefix of the seek key.
1356
+ assert(prefix_extractor_ != nullptr);
1357
+ Slice target_prefix = prefix_extractor_->Transform(target);
1358
+ PrevInternal(&target_prefix);
1359
+ if (valid_) {
1360
+ // Remember the prefix of the seek key for the future Prev() call to
1361
+ // check.
1362
+ prefix_.SetUserKey(target_prefix);
1363
+ }
1364
+ } else {
1365
+ PrevInternal(nullptr);
1366
+ }
1367
+
1368
+ // Report stats and perf context.
1369
+ if (statistics_ != nullptr && valid_) {
1370
+ RecordTick(statistics_, NUMBER_DB_SEEK_FOUND);
1371
+ RecordTick(statistics_, ITER_BYTES_READ, key().size() + value().size());
1372
+ PERF_COUNTER_ADD(iter_read_bytes, key().size() + value().size());
1373
+ }
1374
+ }
1375
+
1376
+ void DBIter::SeekToFirst() {
1377
+ if (iterate_lower_bound_ != nullptr) {
1378
+ Seek(*iterate_lower_bound_);
1379
+ return;
1380
+ }
1381
+ PERF_CPU_TIMER_GUARD(iter_seek_cpu_nanos, env_);
1382
+ // Don't use iter_::Seek() if we set a prefix extractor
1383
+ // because prefix seek will be used.
1384
+ if (!expect_total_order_inner_iter()) {
1385
+ max_skip_ = std::numeric_limits<uint64_t>::max();
1386
+ }
1387
+ status_ = Status::OK();
1388
+ direction_ = kForward;
1389
+ ReleaseTempPinnedData();
1390
+ ResetInternalKeysSkippedCounter();
1391
+ ClearSavedValue();
1392
+ is_key_seqnum_zero_ = false;
1393
+
1394
+ {
1395
+ PERF_TIMER_GUARD(seek_internal_seek_time);
1396
+ iter_.SeekToFirst();
1397
+ range_del_agg_.InvalidateRangeDelMapPositions();
1398
+ }
1399
+
1400
+ RecordTick(statistics_, NUMBER_DB_SEEK);
1401
+ if (iter_.Valid()) {
1402
+ saved_key_.SetUserKey(
1403
+ ExtractUserKey(iter_.key()),
1404
+ !iter_.iter()->IsKeyPinned() || !pin_thru_lifetime_ /* copy */);
1405
+ FindNextUserEntry(false /* not skipping saved_key */,
1406
+ nullptr /* no prefix check */);
1407
+ if (statistics_ != nullptr) {
1408
+ if (valid_) {
1409
+ RecordTick(statistics_, NUMBER_DB_SEEK_FOUND);
1410
+ RecordTick(statistics_, ITER_BYTES_READ, key().size() + value().size());
1411
+ PERF_COUNTER_ADD(iter_read_bytes, key().size() + value().size());
1412
+ }
1413
+ }
1414
+ } else {
1415
+ valid_ = false;
1416
+ }
1417
+ if (valid_ && prefix_same_as_start_) {
1418
+ assert(prefix_extractor_ != nullptr);
1419
+ prefix_.SetUserKey(prefix_extractor_->Transform(
1420
+ StripTimestampFromUserKey(saved_key_.GetUserKey(), timestamp_size_)));
1421
+ }
1422
+ }
1423
+
1424
+ void DBIter::SeekToLast() {
1425
+ if (timestamp_size_ > 0) {
1426
+ valid_ = false;
1427
+ status_ = Status::NotSupported(
1428
+ "SeekToLast/SeekForPrev/Prev currently not supported with timestamp.");
1429
+ return;
1430
+ }
1431
+
1432
+ if (iterate_upper_bound_ != nullptr) {
1433
+ // Seek to last key strictly less than ReadOptions.iterate_upper_bound.
1434
+ SeekForPrev(*iterate_upper_bound_);
1435
+ if (Valid() && user_comparator_.Equal(*iterate_upper_bound_, key())) {
1436
+ ReleaseTempPinnedData();
1437
+ PrevInternal(nullptr);
1438
+ }
1439
+ return;
1440
+ }
1441
+
1442
+ PERF_CPU_TIMER_GUARD(iter_seek_cpu_nanos, env_);
1443
+ // Don't use iter_::Seek() if we set a prefix extractor
1444
+ // because prefix seek will be used.
1445
+ if (!expect_total_order_inner_iter()) {
1446
+ max_skip_ = std::numeric_limits<uint64_t>::max();
1447
+ }
1448
+ status_ = Status::OK();
1449
+ direction_ = kReverse;
1450
+ ReleaseTempPinnedData();
1451
+ ResetInternalKeysSkippedCounter();
1452
+ ClearSavedValue();
1453
+ is_key_seqnum_zero_ = false;
1454
+
1455
+ {
1456
+ PERF_TIMER_GUARD(seek_internal_seek_time);
1457
+ iter_.SeekToLast();
1458
+ range_del_agg_.InvalidateRangeDelMapPositions();
1459
+ }
1460
+ PrevInternal(nullptr);
1461
+ if (statistics_ != nullptr) {
1462
+ RecordTick(statistics_, NUMBER_DB_SEEK);
1463
+ if (valid_) {
1464
+ RecordTick(statistics_, NUMBER_DB_SEEK_FOUND);
1465
+ RecordTick(statistics_, ITER_BYTES_READ, key().size() + value().size());
1466
+ PERF_COUNTER_ADD(iter_read_bytes, key().size() + value().size());
1467
+ }
1468
+ }
1469
+ if (valid_ && prefix_same_as_start_) {
1470
+ assert(prefix_extractor_ != nullptr);
1471
+ prefix_.SetUserKey(prefix_extractor_->Transform(
1472
+ StripTimestampFromUserKey(saved_key_.GetUserKey(), timestamp_size_)));
1473
+ }
1474
+ }
1475
+
1476
+ Iterator* NewDBIterator(Env* env, const ReadOptions& read_options,
1477
+ const ImmutableCFOptions& cf_options,
1478
+ const MutableCFOptions& mutable_cf_options,
1479
+ const Comparator* user_key_comparator,
1480
+ InternalIterator* internal_iter, const Version* version,
1481
+ const SequenceNumber& sequence,
1482
+ uint64_t max_sequential_skip_in_iterations,
1483
+ ReadCallback* read_callback, DBImpl* db_impl,
1484
+ ColumnFamilyData* cfd, bool expose_blob_index) {
1485
+ DBIter* db_iter =
1486
+ new DBIter(env, read_options, cf_options, mutable_cf_options,
1487
+ user_key_comparator, internal_iter, version, sequence, false,
1488
+ max_sequential_skip_in_iterations, read_callback, db_impl, cfd,
1489
+ expose_blob_index);
1490
+ return db_iter;
1491
+ }
1492
+
1493
+ } // namespace ROCKSDB_NAMESPACE