@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,1201 @@
1
+ // Copyright (c) Facebook, Inc. and its affiliates. 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
+ #pragma once
7
+
8
+ #include <array>
9
+ #include <memory>
10
+
11
+ #include "util/math128.h"
12
+
13
+ namespace ROCKSDB_NAMESPACE {
14
+
15
+ namespace ribbon {
16
+
17
+ // RIBBON PHSF & RIBBON Filter (Rapid Incremental Boolean Banding ON-the-fly)
18
+ //
19
+ // ribbon_alg.h: generic versions of core algorithms.
20
+ //
21
+ // Ribbon is a Perfect Hash Static Function construction useful as a compact
22
+ // static Bloom filter alternative. It combines (a) a boolean (GF(2)) linear
23
+ // system construction that approximates a Band Matrix with hashing,
24
+ // (b) an incremental, on-the-fly Gaussian Elimination algorithm that is
25
+ // remarkably efficient and adaptable at constructing an upper-triangular
26
+ // band matrix from a set of band-approximating inputs from (a), and
27
+ // (c) a storage layout that is fast and adaptable as a filter.
28
+ //
29
+ // Footnotes: (a) "Efficient Gauss Elimination for Near-Quadratic Matrices
30
+ // with One Short Random Block per Row, with Applications" by Stefan
31
+ // Walzer and Martin Dietzfelbinger ("DW paper")
32
+ // (b) developed by Peter C. Dillinger, though not the first on-the-fly
33
+ // GE algorithm. See "On the fly Gaussian Elimination for LT codes" by
34
+ // Bioglio, Grangetto, Gaeta, and Sereno.
35
+ // (c) see "interleaved" solution storage below.
36
+ //
37
+ // See ribbon_impl.h for high-level behavioral summary. This file focuses
38
+ // on the core design details.
39
+ //
40
+ // ######################################################################
41
+ // ################# PHSF -> static filter reduction ####################
42
+ //
43
+ // A Perfect Hash Static Function is a data structure representing a
44
+ // map from anything hashable (a "key") to values of some fixed size.
45
+ // Crucially, it is allowed to return garbage values for anything not in
46
+ // the original set of map keys, and it is a "static" structure: entries
47
+ // cannot be added or deleted after construction. PHSFs representing n
48
+ // mappings to b-bit values (assume uniformly distributed) require at least
49
+ // n * b bits to represent, or at least b bits per entry. We typically
50
+ // describe the compactness of a PHSF by typical bits per entry as some
51
+ // function of b. For example, the MWHC construction (k=3 "peeling")
52
+ // requires about 1.0222*b and a variant called Xor+ requires about
53
+ // 1.08*b + 0.5 bits per entry.
54
+ //
55
+ // With more hashing, a PHSF can over-approximate a set as a Bloom filter
56
+ // does, with no FN queries and predictable false positive (FP) query
57
+ // rate. Instead of the user providing a value to map each input key to,
58
+ // a hash function provides the value. Keys in the original set will
59
+ // return a positive membership query because the underlying PHSF returns
60
+ // the same value as hashing the key. When a key is not in the original set,
61
+ // the PHSF returns a "garbage" value, which is only equal to the key's
62
+ // hash with (false positive) probability 1 in 2^b.
63
+ //
64
+ // For a matching false positive rate, standard Bloom filters require
65
+ // 1.44*b bits per entry. Cache-local Bloom filters (like bloom_impl.h)
66
+ // require a bit more, around 1.5*b bits per entry. Thus, a Bloom
67
+ // alternative could save up to or nearly 1/3rd of memory and storage
68
+ // that RocksDB uses for SST (static) Bloom filters. (Memtable Bloom filter
69
+ // is dynamic.)
70
+ //
71
+ // Recommended reading:
72
+ // "Xor Filters: Faster and Smaller Than Bloom and Cuckoo Filters"
73
+ // by Graf and Lemire
74
+ // First three sections of "Fast Scalable Construction of (Minimal
75
+ // Perfect Hash) Functions" by Genuzio, Ottaviano, and Vigna
76
+ //
77
+ // ######################################################################
78
+ // ################## PHSF vs. hash table vs. Bloom #####################
79
+ //
80
+ // You can think of traditional hash tables and related filter variants
81
+ // such as Cuckoo filters as utilizing an "OR" construction: a hash
82
+ // function associates a key with some slots and the data is returned if
83
+ // the data is found in any one of those slots. The collision resolution
84
+ // is visible in the final data structure and requires extra information.
85
+ // For example, Cuckoo filter uses roughly 1.05b + 2 bits per entry, and
86
+ // Golomb-Rice code (aka "GCS") as little as b + 1.5. When the data
87
+ // structure associates each input key with data in one slot, the
88
+ // structure implicitly constructs a (near-)minimal (near-)perfect hash
89
+ // (MPH) of the keys, which requires at least 1.44 bits per key to
90
+ // represent. This is why approaches with visible collision resolution
91
+ // have a fixed + 1.5 or more in storage overhead per entry, often in
92
+ // addition to an overhead multiplier on b.
93
+ //
94
+ // By contrast Bloom filters utilize an "AND" construction: a query only
95
+ // returns true if all bit positions associated with a key are set to 1.
96
+ // There is no collision resolution, so Bloom filters do not suffer a
97
+ // fixed bits per entry overhead like the above structures.
98
+ //
99
+ // PHSFs typically use a bitwise XOR construction: the data you want is
100
+ // not in a single slot, but in a linear combination of several slots.
101
+ // For static data, this gives the best of "AND" and "OR" constructions:
102
+ // avoids the +1.44 or more fixed overhead by not approximating a MPH and
103
+ // can do much better than Bloom's 1.44 factor on b with collision
104
+ // resolution, which here is done ahead of time and invisible at query
105
+ // time.
106
+ //
107
+ // ######################################################################
108
+ // ######################## PHSF construction ###########################
109
+ //
110
+ // For a typical PHSF, construction is solving a linear system of
111
+ // equations, typically in GF(2), which is to say that values are boolean
112
+ // and XOR serves both as addition and subtraction. We can use matrices to
113
+ // represent the problem:
114
+ //
115
+ // C * S = R
116
+ // (n x m) (m x b) (n x b)
117
+ // where C = coefficients, S = solution, R = results
118
+ // and solving for S given C and R.
119
+ //
120
+ // Note that C and R each have n rows, one for each input entry for the
121
+ // PHSF. A row in C is given by a hash function on the PHSF input key,
122
+ // and the corresponding row in R is the b-bit value to associate with
123
+ // that input key. (In a filter, rows of R are given by another hash
124
+ // function on the input key.)
125
+ //
126
+ // On solving, the matrix S (solution) is the final PHSF data, as it
127
+ // maps any row from the original C to its corresponding desired result
128
+ // in R. We just have to hash our query inputs and compute a linear
129
+ // combination of rows in S.
130
+ //
131
+ // In theory, we could chose m = n and let a hash function associate
132
+ // each input key with random rows in C. A solution exists with high
133
+ // probability, and uses essentially minimum space, b bits per entry
134
+ // (because we set m = n) but this has terrible scaling, something
135
+ // like O(n^2) space and O(n^3) time during construction (Gaussian
136
+ // elimination) and O(n) query time. But computational efficiency is
137
+ // key, and the core of this is avoiding scanning all of S to answer
138
+ // each query.
139
+ //
140
+ // The traditional approach (MWHC, aka Xor filter) starts with setting
141
+ // only some small fixed number of columns (typically k=3) to 1 for each
142
+ // row of C, with remaining entries implicitly 0. This is implemented as
143
+ // three hash functions over [0,m), and S can be implemented as a vector
144
+ // vector of b-bit values. Now, a query only involves looking up k rows
145
+ // (values) in S and computing their bitwise XOR. Additionally, this
146
+ // construction can use a linear time algorithm called "peeling" for
147
+ // finding a solution in many cases of one existing, but peeling
148
+ // generally requires a larger space overhead factor in the solution
149
+ // (m/n) than is required with Gaussian elimination.
150
+ //
151
+ // Recommended reading:
152
+ // "Peeling Close to the Orientability Threshold – Spatial Coupling in
153
+ // Hashing-Based Data Structures" by Stefan Walzer
154
+ //
155
+ // ######################################################################
156
+ // ##################### Ribbon PHSF construction #######################
157
+ //
158
+ // Ribbon constructs coefficient rows essentially the same as in the
159
+ // Walzer/Dietzfelbinger paper cited above: for some chosen fixed width
160
+ // r (kCoeffBits in code), each key is hashed to a starting column in
161
+ // [0, m - r] (GetStart() in code) and an r-bit sequence of boolean
162
+ // coefficients (GetCoeffRow() in code). If you sort the rows by start,
163
+ // the C matrix would look something like this:
164
+ //
165
+ // [####00000000000000000000]
166
+ // [####00000000000000000000]
167
+ // [000####00000000000000000]
168
+ // [0000####0000000000000000]
169
+ // [0000000####0000000000000]
170
+ // [000000000####00000000000]
171
+ // [000000000####00000000000]
172
+ // [0000000000000####0000000]
173
+ // [0000000000000000####0000]
174
+ // [00000000000000000####000]
175
+ // [00000000000000000000####]
176
+ //
177
+ // where each # could be a 0 or 1, chosen uniformly by a hash function.
178
+ // (Except we typically set the start column value to 1.) This scheme
179
+ // uses hashing to approximate a band matrix, and it has a solution iff
180
+ // it reduces to an upper-triangular boolean r-band matrix, like this:
181
+ //
182
+ // [1###00000000000000000000]
183
+ // [01##00000000000000000000]
184
+ // [000000000000000000000000]
185
+ // [0001###00000000000000000]
186
+ // [000000000000000000000000]
187
+ // [000001##0000000000000000]
188
+ // [000000000000000000000000]
189
+ // [00000001###0000000000000]
190
+ // [000000001###000000000000]
191
+ // [0000000001##000000000000]
192
+ // ...
193
+ // [00000000000000000000001#]
194
+ // [000000000000000000000001]
195
+ //
196
+ // where we have expanded to an m x m matrix by filling with rows of
197
+ // all zeros as needed. As in Gaussian elimination, this form is ready for
198
+ // generating a solution through back-substitution.
199
+ //
200
+ // The awesome thing about the Ribbon construction (from the DW paper) is
201
+ // how row reductions keep each row representable as a start column and
202
+ // r coefficients, because row reductions are only needed when two rows
203
+ // have the same number of leading zero columns. Thus, the combination
204
+ // of those rows, the bitwise XOR of the r-bit coefficient rows, cancels
205
+ // out the leading 1s, so starts (at least) one column later and only
206
+ // needs (at most) r - 1 coefficients.
207
+ //
208
+ // ######################################################################
209
+ // ###################### Ribbon PHSF scalability #######################
210
+ //
211
+ // Although more practical detail is in ribbon_impl.h, it's worth
212
+ // understanding some of the overall benefits and limitations of the
213
+ // Ribbon PHSFs.
214
+ //
215
+ // High-end scalability is a primary issue for Ribbon PHSFs, because in
216
+ // a single Ribbon linear system with fixed r and fixed m/n ratio, the
217
+ // solution probability approaches zero as n approaches infinity.
218
+ // For a given n, solution probability improves with larger r and larger
219
+ // m/n.
220
+ //
221
+ // By contrast, peeling-based PHSFs have somewhat worse storage ratio
222
+ // or solution probability for small n (less than ~1000). This is
223
+ // especially true with spatial-coupling, where benefits are only
224
+ // notable for n on the order of 100k or 1m or more.
225
+ //
226
+ // To make best use of current hardware, r=128 seems to be closest to
227
+ // a "generally good" choice for Ribbon, at least in RocksDB where SST
228
+ // Bloom filters typically hold around 10-100k keys, and almost always
229
+ // less than 10m keys. r=128 ribbon has a high chance of encoding success
230
+ // (with first hash seed) when storage overhead is around 5% (m/n ~ 1.05)
231
+ // for roughly 10k - 10m keys in a single linear system. r=64 only scales
232
+ // up to about 10k keys with the same storage overhead. Construction and
233
+ // access times for r=128 are similar to r=64. r=128 tracks nearly
234
+ // twice as much data during construction, but in most cases we expect
235
+ // the scalability benefits of r=128 vs. r=64 to make it preferred.
236
+ //
237
+ // A natural approach to scaling Ribbon beyond ~10m keys is splitting
238
+ // (or "sharding") the inputs into multiple linear systems with their
239
+ // own hash seeds. This can also help to control peak memory consumption.
240
+ // TODO: much more to come
241
+ //
242
+ // ######################################################################
243
+ // #################### Ribbon on-the-fly banding #######################
244
+ //
245
+ // "Banding" is what we call the process of reducing the inputs to an
246
+ // upper-triangular r-band matrix ready for finishing a solution with
247
+ // back-substitution. Although the DW paper presents an algorithm for
248
+ // this ("SGauss"), the awesome properties of their construction enable
249
+ // an even simpler, faster, and more backtrackable algorithm. In simplest
250
+ // terms, the SGauss algorithm requires sorting the inputs by start
251
+ // columns, but it's possible to make Gaussian elimination resemble hash
252
+ // table insertion!
253
+ //
254
+ // The enhanced algorithm is based on these observations:
255
+ // - When processing a coefficient row with first 1 in column j,
256
+ // - If it's the first at column j to be processed, it can be part of
257
+ // the banding at row j. (And that decision never overwritten, with
258
+ // no loss of generality!)
259
+ // - Else, it can be combined with existing row j and re-processed,
260
+ // which will look for a later "empty" row or reach "no solution".
261
+ //
262
+ // We call our banding algorithm "incremental" and "on-the-fly" because
263
+ // (like hash table insertion) we are "finished" after each input
264
+ // processed, with respect to all inputs processed so far. Although the
265
+ // band matrix is an intermediate step to the solution structure, we have
266
+ // eliminated intermediate steps and unnecessary data tracking for
267
+ // banding.
268
+ //
269
+ // Building on "incremental" and "on-the-fly", the banding algorithm is
270
+ // easily backtrackable because no (non-empty) rows are overwritten in
271
+ // the banding. Thus, if we want to "try" adding an additional set of
272
+ // inputs to the banding, we only have to record which rows were written
273
+ // in order to efficiently backtrack to our state before considering
274
+ // the additional set. (TODO: how this can mitigate scalability and
275
+ // reach sub-1% overheads)
276
+ //
277
+ // Like in a linear-probed hash table, as the occupancy approaches and
278
+ // surpasses 90-95%, collision resolution dominates the construction
279
+ // time. (Ribbon doesn't usually pay at query time; see solution
280
+ // storage below.) This means that we can speed up construction time
281
+ // by using a higher m/n ratio, up to negative returns around 1.2.
282
+ // At m/n ~= 1.2, which still saves memory substantially vs. Bloom
283
+ // filter's 1.5, construction speed (including back-substitution) is not
284
+ // far from sorting speed, but still a few times slower than cache-local
285
+ // Bloom construction speed.
286
+ //
287
+ // Back-substitution from an upper-triangular boolean band matrix is
288
+ // especially fast and easy. All the memory accesses are sequential or at
289
+ // least local, no random. If the number of result bits (b) is a
290
+ // compile-time constant, the back-substitution state can even be tracked
291
+ // in CPU registers. Regardless of the solution representation, we prefer
292
+ // column-major representation for tracking back-substitution state, as
293
+ // r (the band width) will typically be much larger than b (result bits
294
+ // or columns), so better to handle r-bit values b times (per solution
295
+ // row) than b-bit values r times.
296
+ //
297
+ // ######################################################################
298
+ // ##################### Ribbon solution storage ########################
299
+ //
300
+ // Row-major layout is typical for boolean (bit) matrices, including for
301
+ // MWHC (Xor) filters where a query combines k b-bit values, and k is
302
+ // typically smaller than b. Even for k=4 and b=2, at least k=4 random
303
+ // look-ups are required regardless of layout.
304
+ //
305
+ // Ribbon PHSFs are quite different, however, because
306
+ // (a) all of the solution rows relevant to a query are within a single
307
+ // range of r rows, and
308
+ // (b) the number of solution rows involved (r/2 on average, or r if
309
+ // avoiding conditional accesses) is typically much greater than
310
+ // b, the number of solution columns.
311
+ //
312
+ // Row-major for Ribbon PHSFs therefore tends to incur undue CPU overhead
313
+ // by processing (up to) r entries of b bits each, where b is typically
314
+ // less than 10 for filter applications.
315
+ //
316
+ // Column-major layout has poor locality because of accessing up to b
317
+ // memory locations in different pages (and obviously cache lines). Note
318
+ // that negative filter queries do not typically need to access all
319
+ // solution columns, as they can return when a mismatch is found in any
320
+ // result/solution column. This optimization doesn't always pay off on
321
+ // recent hardware, where the penalty for unpredictable conditional
322
+ // branching can exceed the penalty for unnecessary work, but the
323
+ // optimization is essentially unavailable with row-major layout.
324
+ //
325
+ // The best compromise seems to be interleaving column-major on the small
326
+ // scale with row-major on the large scale. For example, let a solution
327
+ // "block" be r rows column-major encoded as b r-bit values in sequence.
328
+ // Each query accesses (up to) 2 adjacent blocks, which will typically
329
+ // span 1-3 cache lines in adjacent memory. We get very close to the same
330
+ // locality as row-major, but with much faster reconstruction of each
331
+ // result column, at least for filter applications where b is relatively
332
+ // small and negative queries can return early.
333
+ //
334
+ // ######################################################################
335
+ // ###################### Fractional result bits ########################
336
+ //
337
+ // Bloom filters have great flexibility that alternatives mostly do not
338
+ // have. One of those flexibilities is in utilizing any ratio of data
339
+ // structure bits per key. With a typical memory allocator like jemalloc,
340
+ // this flexibility can save roughly 10% of the filters' footprint in
341
+ // DRAM by rounding up and down filter sizes to minimize memory internal
342
+ // fragmentation (see optimize_filters_for_memory RocksDB option).
343
+ //
344
+ // At first glance, PHSFs only offer a whole number of bits per "slot"
345
+ // (m rather than number of keys n), but coefficient locality in the
346
+ // Ribbon construction makes fractional bits/key quite possible and
347
+ // attractive for filter applications. This works by a prefix of the
348
+ // structure using b-1 solution columns and the rest using b solution
349
+ // columns. See InterleavedSolutionStorage below for more detail.
350
+ //
351
+ // Because false positive rates are non-linear in bits/key, this approach
352
+ // is not quite optimal in terms of information theory. In common cases,
353
+ // we see additional space overhead up to about 1.5% vs. theoretical
354
+ // optimal to achieve the same FP rate. We consider this a quite acceptable
355
+ // overhead for very efficiently utilizing space that might otherwise be
356
+ // wasted.
357
+ //
358
+ // This property of Ribbon even makes it "elastic." A Ribbon filter and
359
+ // its small metadata for answering queries can be adapted into another
360
+ // Ribbon filter filling any smaller multiple of r bits (plus small
361
+ // metadata), with a correspondingly higher FP rate. None of the data
362
+ // thrown away during construction needs to be recalled for this reduction.
363
+ // Similarly a single Ribbon construction can be separated (by solution
364
+ // column) into two or more structures (or "layers" or "levels") with
365
+ // independent filtering ability (no FP correlation, just as solution or
366
+ // result columns in a single structure) despite being constructed as part
367
+ // of a single linear system. (TODO: implement)
368
+ // See also "ElasticBF: Fine-grained and Elastic Bloom Filter Towards
369
+ // Efficient Read for LSM-tree-based KV Stores."
370
+ //
371
+
372
+ // ######################################################################
373
+ // ################### CODE: Ribbon core algorithms #####################
374
+ // ######################################################################
375
+ //
376
+ // These algorithms are templatized for genericity but near-maximum
377
+ // performance in a given application. The template parameters
378
+ // adhere to informal class/struct type concepts outlined below. (This
379
+ // code is written for C++11 so does not use formal C++ concepts.)
380
+
381
+ // Rough architecture for these algorithms:
382
+ //
383
+ // +-----------+ +---+ +-----------------+
384
+ // | AddInputs | --> | H | --> | BandingStorage |
385
+ // +-----------+ | a | +-----------------+
386
+ // | s | |
387
+ // | h | Back substitution
388
+ // | e | V
389
+ // +-----------+ | r | +-----------------+
390
+ // | Query Key | --> | | >+< | SolutionStorage |
391
+ // +-----------+ +---+ | +-----------------+
392
+ // V
393
+ // Query result
394
+
395
+ // Common to other concepts
396
+ // concept RibbonTypes {
397
+ // // An unsigned integer type for an r-bit subsequence of coefficients.
398
+ // // r (or kCoeffBits) is taken to be sizeof(CoeffRow) * 8, as it would
399
+ // // generally only hurt scalability to leave bits of CoeffRow unused.
400
+ // typename CoeffRow;
401
+ // // An unsigned integer type big enough to hold a result row (b bits,
402
+ // // or number of solution/result columns).
403
+ // // In many applications, especially filters, the number of result
404
+ // // columns is decided at run time, so ResultRow simply needs to be
405
+ // // big enough for the largest number of columns allowed.
406
+ // typename ResultRow;
407
+ // // An unsigned integer type sufficient for representing the number of
408
+ // // rows in the solution structure, and at least the arithmetic
409
+ // // promotion size (usually 32 bits). uint32_t recommended because a
410
+ // // single Ribbon construction doesn't really scale to billions of
411
+ // // entries.
412
+ // typename Index;
413
+ // };
414
+
415
+ // ######################################################################
416
+ // ######################## Hashers and Banding #########################
417
+
418
+ // Hasher concepts abstract out hashing details.
419
+
420
+ // concept PhsfQueryHasher extends RibbonTypes {
421
+ // // Type for a lookup key, which is hashable.
422
+ // typename Key;
423
+ //
424
+ // // Type for hashed summary of a Key. uint64_t is recommended.
425
+ // typename Hash;
426
+ //
427
+ // // Compute a hash value summarizing a Key
428
+ // Hash GetHash(const Key &) const;
429
+ //
430
+ // // Given a hash value and a number of columns that can start an
431
+ // // r-sequence of coefficients (== m - r + 1), return the start
432
+ // // column to associate with that hash value. (Starts can be chosen
433
+ // // uniformly or "smash" extra entries into the beginning and end for
434
+ // // better utilization at those extremes of the structure. Details in
435
+ // // ribbon.impl.h)
436
+ // Index GetStart(Hash, Index num_starts) const;
437
+ //
438
+ // // Given a hash value, return the r-bit sequence of coefficients to
439
+ // // associate with it. It's generally OK if
440
+ // // sizeof(CoeffRow) > sizeof(Hash)
441
+ // // as long as the hash itself is not too prone to collisions for the
442
+ // // applications and the CoeffRow is generated uniformly from
443
+ // // available hash data, but relatively independent of the start.
444
+ // //
445
+ // // Must be non-zero, because that's required for a solution to exist
446
+ // // when mapping to non-zero result row. (Note: BandingAdd could be
447
+ // // modified to allow 0 coeff row if that only occurs with 0 result
448
+ // // row, which really only makes sense for filter implementation,
449
+ // // where both values are hash-derived. Or BandingAdd could reject 0
450
+ // // coeff row, forcing next seed, but that has potential problems with
451
+ // // generality/scalability.)
452
+ // CoeffRow GetCoeffRow(Hash) const;
453
+ // };
454
+
455
+ // concept FilterQueryHasher extends PhsfQueryHasher {
456
+ // // For building or querying a filter, this returns the expected
457
+ // // result row associated with a hashed input. For general PHSF,
458
+ // // this must return 0.
459
+ // //
460
+ // // Although not strictly required, there's a slightly better chance of
461
+ // // solver success if result row is masked down here to only the bits
462
+ // // actually needed.
463
+ // ResultRow GetResultRowFromHash(Hash) const;
464
+ // }
465
+
466
+ // concept BandingHasher extends FilterQueryHasher {
467
+ // // For a filter, this will generally be the same as Key.
468
+ // // For a general PHSF, it must either
469
+ // // (a) include a key and a result it maps to (e.g. in a std::pair), or
470
+ // // (b) GetResultRowFromInput looks up the result somewhere rather than
471
+ // // extracting it.
472
+ // typename AddInput;
473
+ //
474
+ // // Instead of requiring a way to extract a Key from an
475
+ // // AddInput, we require getting the hash of the Key part
476
+ // // of an AddInput, which is trivial if AddInput == Key.
477
+ // Hash GetHash(const AddInput &) const;
478
+ //
479
+ // // For building a non-filter PHSF, this extracts or looks up the result
480
+ // // row to associate with an input. For filter PHSF, this must return 0.
481
+ // ResultRow GetResultRowFromInput(const AddInput &) const;
482
+ //
483
+ // // Whether the solver can assume the lowest bit of GetCoeffRow is
484
+ // // always 1. When true, it should improve solver efficiency slightly.
485
+ // static bool kFirstCoeffAlwaysOne;
486
+ // }
487
+
488
+ // Abstract storage for the the result of "banding" the inputs (Gaussian
489
+ // elimination to an upper-triangular boolean band matrix). Because the
490
+ // banding is an incremental / on-the-fly algorithm, this also represents
491
+ // all the intermediate state between input entries.
492
+ //
493
+ // concept BandingStorage extends RibbonTypes {
494
+ // // Tells the banding algorithm to prefetch memory associated with
495
+ // // the next input before processing the current input. Generally
496
+ // // recommended iff the BandingStorage doesn't easily fit in CPU
497
+ // // cache.
498
+ // bool UsePrefetch() const;
499
+ //
500
+ // // Prefetches (e.g. __builtin_prefetch) memory associated with a
501
+ // // slot index i.
502
+ // void Prefetch(Index i) const;
503
+ //
504
+ // // Returns a pointer to CoeffRow for slot index i.
505
+ // CoeffRow* CoeffRowPtr(Index i);
506
+ //
507
+ // // Returns a pointer to ResultRow for slot index i. (Gaussian row
508
+ // // operations involve both side of the equation.)
509
+ // ResultRow* ResultRowPtr(Index i);
510
+ //
511
+ // // Returns the number of columns that can start an r-sequence of
512
+ // // coefficients, which is the number of slots minus r (kCoeffBits)
513
+ // // plus one. (m - r + 1)
514
+ // Index GetNumStarts() const;
515
+ // };
516
+
517
+ // Optional storage for backtracking data in banding a set of input
518
+ // entries. It exposes an array structure which will generally be
519
+ // used as a stack. It must be able to accommodate as many entries
520
+ // as are passed in as inputs to `BandingAddRange`.
521
+ //
522
+ // concept BacktrackStorage extends RibbonTypes {
523
+ // // If false, backtracking support will be disabled in the algorithm.
524
+ // // This should preferably be an inline compile-time constant function.
525
+ // bool UseBacktrack() const;
526
+ //
527
+ // // Records `to_save` as the `i`th backtrack entry
528
+ // void BacktrackPut(Index i, Index to_save);
529
+ //
530
+ // // Recalls the `i`th backtrack entry
531
+ // Index BacktrackGet(Index i) const;
532
+ // }
533
+
534
+ // Adds a single entry to BandingStorage (and optionally, BacktrackStorage),
535
+ // returning true if successful or false if solution is impossible with
536
+ // current hasher (and presumably its seed) and number of "slots" (solution
537
+ // or banding rows). (A solution is impossible when there is a linear
538
+ // dependence among the inputs that doesn't "cancel out".)
539
+ //
540
+ // Pre- and post-condition: the BandingStorage represents a band matrix
541
+ // ready for back substitution (row echelon form except for zero rows),
542
+ // augmented with result values such that back substitution would give a
543
+ // solution satisfying all the cr@start -> rr entries added.
544
+ template <bool kFirstCoeffAlwaysOne, typename BandingStorage,
545
+ typename BacktrackStorage>
546
+ bool BandingAdd(BandingStorage *bs, typename BandingStorage::Index start,
547
+ typename BandingStorage::ResultRow rr,
548
+ typename BandingStorage::CoeffRow cr, BacktrackStorage *bts,
549
+ typename BandingStorage::Index *backtrack_pos) {
550
+ using CoeffRow = typename BandingStorage::CoeffRow;
551
+ using Index = typename BandingStorage::Index;
552
+
553
+ Index i = start;
554
+
555
+ if (!kFirstCoeffAlwaysOne) {
556
+ // Requires/asserts that cr != 0
557
+ int tz = CountTrailingZeroBits(cr);
558
+ i += static_cast<Index>(tz);
559
+ cr >>= tz;
560
+ }
561
+
562
+ for (;;) {
563
+ assert((cr & 1) == 1);
564
+ CoeffRow other = *(bs->CoeffRowPtr(i));
565
+ if (other == 0) {
566
+ *(bs->CoeffRowPtr(i)) = cr;
567
+ *(bs->ResultRowPtr(i)) = rr;
568
+ bts->BacktrackPut(*backtrack_pos, i);
569
+ ++*backtrack_pos;
570
+ return true;
571
+ }
572
+ assert((other & 1) == 1);
573
+ // Gaussian row reduction
574
+ cr ^= other;
575
+ rr ^= *(bs->ResultRowPtr(i));
576
+ if (cr == 0) {
577
+ // Inconsistency or (less likely) redundancy
578
+ break;
579
+ }
580
+ // Find relative offset of next non-zero coefficient.
581
+ int tz = CountTrailingZeroBits(cr);
582
+ i += static_cast<Index>(tz);
583
+ cr >>= tz;
584
+ }
585
+
586
+ // Failed, unless result row == 0 because e.g. a duplicate input or a
587
+ // stock hash collision, with same result row. (For filter, stock hash
588
+ // collision implies same result row.) Or we could have a full equation
589
+ // equal to sum of other equations, which is very possible with
590
+ // small range of values for result row.
591
+ return rr == 0;
592
+ }
593
+
594
+ // Adds a range of entries to BandingStorage returning true if successful
595
+ // or false if solution is impossible with current hasher (and presumably
596
+ // its seed) and number of "slots" (solution or banding rows). (A solution
597
+ // is impossible when there is a linear dependence among the inputs that
598
+ // doesn't "cancel out".) Here "InputIterator" is an iterator over AddInputs.
599
+ //
600
+ // If UseBacktrack in the BacktrackStorage, this function call rolls back
601
+ // to prior state on failure. If !UseBacktrack, some subset of the entries
602
+ // will have been added to the BandingStorage, so best considered to be in
603
+ // an indeterminate state.
604
+ //
605
+ template <typename BandingStorage, typename BacktrackStorage,
606
+ typename BandingHasher, typename InputIterator>
607
+ bool BandingAddRange(BandingStorage *bs, BacktrackStorage *bts,
608
+ const BandingHasher &bh, InputIterator begin,
609
+ InputIterator end) {
610
+ using CoeffRow = typename BandingStorage::CoeffRow;
611
+ using Index = typename BandingStorage::Index;
612
+ using ResultRow = typename BandingStorage::ResultRow;
613
+ using Hash = typename BandingHasher::Hash;
614
+
615
+ static_assert(IsUnsignedUpTo128<CoeffRow>::value, "must be unsigned");
616
+ static_assert(IsUnsignedUpTo128<Index>::value, "must be unsigned");
617
+ static_assert(IsUnsignedUpTo128<ResultRow>::value, "must be unsigned");
618
+
619
+ constexpr bool kFCA1 = BandingHasher::kFirstCoeffAlwaysOne;
620
+
621
+ if (begin == end) {
622
+ // trivial
623
+ return true;
624
+ }
625
+
626
+ const Index num_starts = bs->GetNumStarts();
627
+
628
+ InputIterator cur = begin;
629
+ Index backtrack_pos = 0;
630
+ if (!bs->UsePrefetch()) {
631
+ // Simple version, no prefetch
632
+ for (;;) {
633
+ Hash h = bh.GetHash(*cur);
634
+ Index start = bh.GetStart(h, num_starts);
635
+ ResultRow rr =
636
+ bh.GetResultRowFromInput(*cur) | bh.GetResultRowFromHash(h);
637
+ CoeffRow cr = bh.GetCoeffRow(h);
638
+
639
+ if (!BandingAdd<kFCA1>(bs, start, rr, cr, bts, &backtrack_pos)) {
640
+ break;
641
+ }
642
+ if ((++cur) == end) {
643
+ return true;
644
+ }
645
+ }
646
+ } else {
647
+ // Pipelined w/prefetch
648
+ // Prime the pipeline
649
+ Hash h = bh.GetHash(*cur);
650
+ Index start = bh.GetStart(h, num_starts);
651
+ ResultRow rr = bh.GetResultRowFromInput(*cur);
652
+ bs->Prefetch(start);
653
+
654
+ // Pipeline
655
+ for (;;) {
656
+ rr |= bh.GetResultRowFromHash(h);
657
+ CoeffRow cr = bh.GetCoeffRow(h);
658
+ if ((++cur) == end) {
659
+ if (!BandingAdd<kFCA1>(bs, start, rr, cr, bts, &backtrack_pos)) {
660
+ break;
661
+ }
662
+ return true;
663
+ }
664
+ Hash next_h = bh.GetHash(*cur);
665
+ Index next_start = bh.GetStart(next_h, num_starts);
666
+ ResultRow next_rr = bh.GetResultRowFromInput(*cur);
667
+ bs->Prefetch(next_start);
668
+ if (!BandingAdd<kFCA1>(bs, start, rr, cr, bts, &backtrack_pos)) {
669
+ break;
670
+ }
671
+ h = next_h;
672
+ start = next_start;
673
+ rr = next_rr;
674
+ }
675
+ }
676
+ // failed; backtrack (if implemented)
677
+ if (bts->UseBacktrack()) {
678
+ while (backtrack_pos > 0) {
679
+ --backtrack_pos;
680
+ Index i = bts->BacktrackGet(backtrack_pos);
681
+ *(bs->CoeffRowPtr(i)) = 0;
682
+ // Not strictly required, but is required for good FP rate on
683
+ // inputs that might have been backtracked out. (We don't want
684
+ // anything we've backtracked on to leak into final result, as
685
+ // that might not be "harmless".)
686
+ *(bs->ResultRowPtr(i)) = 0;
687
+ }
688
+ }
689
+ return false;
690
+ }
691
+
692
+ // Adds a range of entries to BandingStorage returning true if successful
693
+ // or false if solution is impossible with current hasher (and presumably
694
+ // its seed) and number of "slots" (solution or banding rows). (A solution
695
+ // is impossible when there is a linear dependence among the inputs that
696
+ // doesn't "cancel out".) Here "InputIterator" is an iterator over AddInputs.
697
+ //
698
+ // On failure, some subset of the entries will have been added to the
699
+ // BandingStorage, so best considered to be in an indeterminate state.
700
+ //
701
+ template <typename BandingStorage, typename BandingHasher,
702
+ typename InputIterator>
703
+ bool BandingAddRange(BandingStorage *bs, const BandingHasher &bh,
704
+ InputIterator begin, InputIterator end) {
705
+ using Index = typename BandingStorage::Index;
706
+ struct NoopBacktrackStorage {
707
+ bool UseBacktrack() { return false; }
708
+ void BacktrackPut(Index, Index) {}
709
+ Index BacktrackGet(Index) {
710
+ assert(false);
711
+ return 0;
712
+ }
713
+ } nbts;
714
+ return BandingAddRange(bs, &nbts, bh, begin, end);
715
+ }
716
+
717
+ // ######################################################################
718
+ // ######################### Solution Storage ###########################
719
+
720
+ // Back-substitution and query algorithms unfortunately depend on some
721
+ // details of data layout in the final data structure ("solution"). Thus,
722
+ // there is no common SolutionStorage covering all the reasonable
723
+ // possibilities.
724
+
725
+ // ###################### SimpleSolutionStorage #########################
726
+
727
+ // SimpleSolutionStorage is for a row-major storage, typically with no
728
+ // unused bits in each ResultRow. This is mostly for demonstration
729
+ // purposes as the simplest solution storage scheme. It is relatively slow
730
+ // for filter queries.
731
+
732
+ // concept SimpleSolutionStorage extends RibbonTypes {
733
+ // // This is called at the beginning of back-substitution for the
734
+ // // solution storage to do any remaining configuration before data
735
+ // // is stored to it. If configuration is previously finalized, this
736
+ // // could be a simple assertion or even no-op. Ribbon algorithms
737
+ // // only call this from back-substitution, and only once per call,
738
+ // // before other functions here.
739
+ // void PrepareForNumStarts(Index num_starts) const;
740
+ // // Must return num_starts passed to PrepareForNumStarts, or the most
741
+ // // recent call to PrepareForNumStarts if this storage object can be
742
+ // // reused. Note that num_starts == num_slots - kCoeffBits + 1 because
743
+ // // there must be a run of kCoeffBits slots starting from each start.
744
+ // Index GetNumStarts() const;
745
+ // // Load the solution row (type ResultRow) for a slot
746
+ // ResultRow Load(Index slot_num) const;
747
+ // // Store the solution row (type ResultRow) for a slot
748
+ // void Store(Index slot_num, ResultRow data);
749
+ // };
750
+
751
+ // Back-substitution for generating a solution from BandingStorage to
752
+ // SimpleSolutionStorage.
753
+ template <typename SimpleSolutionStorage, typename BandingStorage>
754
+ void SimpleBackSubst(SimpleSolutionStorage *sss, const BandingStorage &bs) {
755
+ using CoeffRow = typename BandingStorage::CoeffRow;
756
+ using Index = typename BandingStorage::Index;
757
+ using ResultRow = typename BandingStorage::ResultRow;
758
+
759
+ static_assert(sizeof(Index) == sizeof(typename SimpleSolutionStorage::Index),
760
+ "must be same");
761
+ static_assert(
762
+ sizeof(CoeffRow) == sizeof(typename SimpleSolutionStorage::CoeffRow),
763
+ "must be same");
764
+ static_assert(
765
+ sizeof(ResultRow) == sizeof(typename SimpleSolutionStorage::ResultRow),
766
+ "must be same");
767
+
768
+ constexpr auto kCoeffBits = static_cast<Index>(sizeof(CoeffRow) * 8U);
769
+ constexpr auto kResultBits = static_cast<Index>(sizeof(ResultRow) * 8U);
770
+
771
+ // A column-major buffer of the solution matrix, containing enough
772
+ // recently-computed solution data to compute the next solution row
773
+ // (based also on banding data).
774
+ std::array<CoeffRow, kResultBits> state;
775
+ state.fill(0);
776
+
777
+ const Index num_starts = bs.GetNumStarts();
778
+ sss->PrepareForNumStarts(num_starts);
779
+ const Index num_slots = num_starts + kCoeffBits - 1;
780
+
781
+ for (Index i = num_slots; i > 0;) {
782
+ --i;
783
+ CoeffRow cr = *const_cast<BandingStorage &>(bs).CoeffRowPtr(i);
784
+ ResultRow rr = *const_cast<BandingStorage &>(bs).ResultRowPtr(i);
785
+ // solution row
786
+ ResultRow sr = 0;
787
+ for (Index j = 0; j < kResultBits; ++j) {
788
+ // Compute next solution bit at row i, column j (see derivation below)
789
+ CoeffRow tmp = state[j] << 1;
790
+ bool bit = (BitParity(tmp & cr) ^ ((rr >> j) & 1)) != 0;
791
+ tmp |= bit ? CoeffRow{1} : CoeffRow{0};
792
+
793
+ // Now tmp is solution at column j from row i for next kCoeffBits
794
+ // more rows. Thus, for valid solution, the dot product of the
795
+ // solution column with the coefficient row has to equal the result
796
+ // at that column,
797
+ // BitParity(tmp & cr) == ((rr >> j) & 1)
798
+
799
+ // Update state.
800
+ state[j] = tmp;
801
+ // add to solution row
802
+ sr |= (bit ? ResultRow{1} : ResultRow{0}) << j;
803
+ }
804
+ sss->Store(i, sr);
805
+ }
806
+ }
807
+
808
+ // Common functionality for querying a key (already hashed) in
809
+ // SimpleSolutionStorage.
810
+ template <typename SimpleSolutionStorage>
811
+ typename SimpleSolutionStorage::ResultRow SimpleQueryHelper(
812
+ typename SimpleSolutionStorage::Index start_slot,
813
+ typename SimpleSolutionStorage::CoeffRow cr,
814
+ const SimpleSolutionStorage &sss) {
815
+ using CoeffRow = typename SimpleSolutionStorage::CoeffRow;
816
+ using ResultRow = typename SimpleSolutionStorage::ResultRow;
817
+
818
+ constexpr unsigned kCoeffBits = static_cast<unsigned>(sizeof(CoeffRow) * 8U);
819
+
820
+ ResultRow result = 0;
821
+ for (unsigned i = 0; i < kCoeffBits; ++i) {
822
+ // Bit masking whole value is generally faster here than 'if'
823
+ result ^= sss.Load(start_slot + i) &
824
+ (ResultRow{0} - (static_cast<ResultRow>(cr >> i) & ResultRow{1}));
825
+ }
826
+ return result;
827
+ }
828
+
829
+ // General PHSF query a key from SimpleSolutionStorage.
830
+ template <typename SimpleSolutionStorage, typename PhsfQueryHasher>
831
+ typename SimpleSolutionStorage::ResultRow SimplePhsfQuery(
832
+ const typename PhsfQueryHasher::Key &key, const PhsfQueryHasher &hasher,
833
+ const SimpleSolutionStorage &sss) {
834
+ const typename PhsfQueryHasher::Hash hash = hasher.GetHash(key);
835
+
836
+ static_assert(sizeof(typename SimpleSolutionStorage::Index) ==
837
+ sizeof(typename PhsfQueryHasher::Index),
838
+ "must be same");
839
+ static_assert(sizeof(typename SimpleSolutionStorage::CoeffRow) ==
840
+ sizeof(typename PhsfQueryHasher::CoeffRow),
841
+ "must be same");
842
+
843
+ return SimpleQueryHelper(hasher.GetStart(hash, sss.GetNumStarts()),
844
+ hasher.GetCoeffRow(hash), sss);
845
+ }
846
+
847
+ // Filter query a key from SimpleSolutionStorage.
848
+ template <typename SimpleSolutionStorage, typename FilterQueryHasher>
849
+ bool SimpleFilterQuery(const typename FilterQueryHasher::Key &key,
850
+ const FilterQueryHasher &hasher,
851
+ const SimpleSolutionStorage &sss) {
852
+ const typename FilterQueryHasher::Hash hash = hasher.GetHash(key);
853
+ const typename SimpleSolutionStorage::ResultRow expected =
854
+ hasher.GetResultRowFromHash(hash);
855
+
856
+ static_assert(sizeof(typename SimpleSolutionStorage::Index) ==
857
+ sizeof(typename FilterQueryHasher::Index),
858
+ "must be same");
859
+ static_assert(sizeof(typename SimpleSolutionStorage::CoeffRow) ==
860
+ sizeof(typename FilterQueryHasher::CoeffRow),
861
+ "must be same");
862
+ static_assert(sizeof(typename SimpleSolutionStorage::ResultRow) ==
863
+ sizeof(typename FilterQueryHasher::ResultRow),
864
+ "must be same");
865
+
866
+ return expected ==
867
+ SimpleQueryHelper(hasher.GetStart(hash, sss.GetNumStarts()),
868
+ hasher.GetCoeffRow(hash), sss);
869
+ }
870
+
871
+ // #################### InterleavedSolutionStorage ######################
872
+
873
+ // InterleavedSolutionStorage is row-major at a high level, for good
874
+ // locality, and column-major at a low level, for CPU efficiency
875
+ // especially in filter queries or relatively small number of result bits
876
+ // (== solution columns). The storage is a sequence of "blocks" where a
877
+ // block has one CoeffRow-sized segment for each solution column. Each
878
+ // query spans at most two blocks; the starting solution row is typically
879
+ // in the row-logical middle of a block and spans to the middle of the
880
+ // next block. (See diagram below.)
881
+ //
882
+ // InterleavedSolutionStorage supports choosing b (number of result or
883
+ // solution columns) at run time, and even supports mixing b and b-1 solution
884
+ // columns in a single linear system solution, for filters that can
885
+ // effectively utilize any size space (multiple of CoeffRow) for minimizing
886
+ // FP rate for any number of added keys. To simplify query implementation
887
+ // (with lower-index columns first), the b-bit portion comes after the b-1
888
+ // portion of the structure.
889
+ //
890
+ // Diagram (=== marks logical block boundary; b=4; ### is data used by a
891
+ // query crossing the b-1 to b boundary, each Segment has type CoeffRow):
892
+ // ...
893
+ // +======================+
894
+ // | S e g m e n t col=0 |
895
+ // +----------------------+
896
+ // | S e g m e n t col=1 |
897
+ // +----------------------+
898
+ // | S e g m e n t col=2 |
899
+ // +======================+
900
+ // | S e g m e n #########|
901
+ // +----------------------+
902
+ // | S e g m e n #########|
903
+ // +----------------------+
904
+ // | S e g m e n #########|
905
+ // +======================+ Result/solution columns: above = 3, below = 4
906
+ // |#############t col=0 |
907
+ // +----------------------+
908
+ // |#############t col=1 |
909
+ // +----------------------+
910
+ // |#############t col=2 |
911
+ // +----------------------+
912
+ // | S e g m e n t col=3 |
913
+ // +======================+
914
+ // | S e g m e n t col=0 |
915
+ // +----------------------+
916
+ // | S e g m e n t col=1 |
917
+ // +----------------------+
918
+ // | S e g m e n t col=2 |
919
+ // +----------------------+
920
+ // | S e g m e n t col=3 |
921
+ // +======================+
922
+ // ...
923
+ //
924
+ // InterleavedSolutionStorage will be adapted by the algorithms from
925
+ // simple array-like segment storage. That array-like storage is templatized
926
+ // in part so that an implementation may choose to handle byte ordering
927
+ // at access time.
928
+ //
929
+ // concept InterleavedSolutionStorage extends RibbonTypes {
930
+ // // This is called at the beginning of back-substitution for the
931
+ // // solution storage to do any remaining configuration before data
932
+ // // is stored to it. If configuration is previously finalized, this
933
+ // // could be a simple assertion or even no-op. Ribbon algorithms
934
+ // // only call this from back-substitution, and only once per call,
935
+ // // before other functions here.
936
+ // void PrepareForNumStarts(Index num_starts) const;
937
+ // // Must return num_starts passed to PrepareForNumStarts, or the most
938
+ // // recent call to PrepareForNumStarts if this storage object can be
939
+ // // reused. Note that num_starts == num_slots - kCoeffBits + 1 because
940
+ // // there must be a run of kCoeffBits slots starting from each start.
941
+ // Index GetNumStarts() const;
942
+ // // The larger number of solution columns used (called "b" above).
943
+ // Index GetUpperNumColumns() const;
944
+ // // If returns > 0, then block numbers below that use
945
+ // // GetUpperNumColumns() - 1 columns per solution row, and the rest
946
+ // // use GetUpperNumColumns(). A block represents kCoeffBits "slots",
947
+ // // where all but the last kCoeffBits - 1 slots are also starts. And
948
+ // // a block contains a segment for each solution column.
949
+ // // An implementation may only support uniform columns per solution
950
+ // // row and return constant 0 here.
951
+ // Index GetUpperStartBlock() const;
952
+ //
953
+ // // ### "Array of segments" portion of API ###
954
+ // // The number of values of type CoeffRow used in this solution
955
+ // // representation. (This value can be inferred from the previous
956
+ // // three functions, but is expected at least for sanity / assertion
957
+ // // checking.)
958
+ // Index GetNumSegments() const;
959
+ // // Load an entry from the logical array of segments
960
+ // CoeffRow LoadSegment(Index segment_num) const;
961
+ // // Store an entry to the logical array of segments
962
+ // void StoreSegment(Index segment_num, CoeffRow data);
963
+ // };
964
+
965
+ // A helper for InterleavedBackSubst.
966
+ template <typename BandingStorage>
967
+ inline void BackSubstBlock(typename BandingStorage::CoeffRow *state,
968
+ typename BandingStorage::Index num_columns,
969
+ const BandingStorage &bs,
970
+ typename BandingStorage::Index start_slot) {
971
+ using CoeffRow = typename BandingStorage::CoeffRow;
972
+ using Index = typename BandingStorage::Index;
973
+ using ResultRow = typename BandingStorage::ResultRow;
974
+
975
+ constexpr auto kCoeffBits = static_cast<Index>(sizeof(CoeffRow) * 8U);
976
+
977
+ for (Index i = start_slot + kCoeffBits; i > start_slot;) {
978
+ --i;
979
+ CoeffRow cr = *const_cast<BandingStorage &>(bs).CoeffRowPtr(i);
980
+ ResultRow rr = *const_cast<BandingStorage &>(bs).ResultRowPtr(i);
981
+ for (Index j = 0; j < num_columns; ++j) {
982
+ // Compute next solution bit at row i, column j (see derivation below)
983
+ CoeffRow tmp = state[j] << 1;
984
+ int bit = BitParity(tmp & cr) ^ ((rr >> j) & 1);
985
+ tmp |= static_cast<CoeffRow>(bit);
986
+
987
+ // Now tmp is solution at column j from row i for next kCoeffBits
988
+ // more rows. Thus, for valid solution, the dot product of the
989
+ // solution column with the coefficient row has to equal the result
990
+ // at that column,
991
+ // BitParity(tmp & cr) == ((rr >> j) & 1)
992
+
993
+ // Update state.
994
+ state[j] = tmp;
995
+ }
996
+ }
997
+ }
998
+
999
+ // Back-substitution for generating a solution from BandingStorage to
1000
+ // InterleavedSolutionStorage.
1001
+ template <typename InterleavedSolutionStorage, typename BandingStorage>
1002
+ void InterleavedBackSubst(InterleavedSolutionStorage *iss,
1003
+ const BandingStorage &bs) {
1004
+ using CoeffRow = typename BandingStorage::CoeffRow;
1005
+ using Index = typename BandingStorage::Index;
1006
+
1007
+ static_assert(
1008
+ sizeof(Index) == sizeof(typename InterleavedSolutionStorage::Index),
1009
+ "must be same");
1010
+ static_assert(
1011
+ sizeof(CoeffRow) == sizeof(typename InterleavedSolutionStorage::CoeffRow),
1012
+ "must be same");
1013
+
1014
+ constexpr auto kCoeffBits = static_cast<Index>(sizeof(CoeffRow) * 8U);
1015
+
1016
+ const Index num_starts = bs.GetNumStarts();
1017
+ // Although it might be nice to have a filter that returns "always false"
1018
+ // when no key is added, we aren't specifically supporting that here
1019
+ // because it would require another condition branch in the query.
1020
+ assert(num_starts > 0);
1021
+ iss->PrepareForNumStarts(num_starts);
1022
+
1023
+ const Index num_slots = num_starts + kCoeffBits - 1;
1024
+ assert(num_slots % kCoeffBits == 0);
1025
+ const Index num_blocks = num_slots / kCoeffBits;
1026
+ const Index num_segments = iss->GetNumSegments();
1027
+
1028
+ // For now upper, then lower
1029
+ Index num_columns = iss->GetUpperNumColumns();
1030
+ const Index upper_start_block = iss->GetUpperStartBlock();
1031
+
1032
+ if (num_columns == 0) {
1033
+ // Nothing to do, presumably because there's not enough space for even
1034
+ // a single segment.
1035
+ assert(num_segments == 0);
1036
+ // When num_columns == 0, a Ribbon filter query will always return true,
1037
+ // or a PHSF query always 0.
1038
+ return;
1039
+ }
1040
+
1041
+ // We should be utilizing all available segments
1042
+ assert(num_segments == (upper_start_block * (num_columns - 1)) +
1043
+ ((num_blocks - upper_start_block) * num_columns));
1044
+
1045
+ // TODO: consider fixed-column specializations with stack-allocated state
1046
+
1047
+ // A column-major buffer of the solution matrix, containing enough
1048
+ // recently-computed solution data to compute the next solution row
1049
+ // (based also on banding data).
1050
+ std::unique_ptr<CoeffRow[]> state{new CoeffRow[num_columns]()};
1051
+
1052
+ Index block = num_blocks;
1053
+ Index segment = num_segments;
1054
+ while (block > upper_start_block) {
1055
+ --block;
1056
+ BackSubstBlock(state.get(), num_columns, bs, block * kCoeffBits);
1057
+ segment -= num_columns;
1058
+ for (Index i = 0; i < num_columns; ++i) {
1059
+ iss->StoreSegment(segment + i, state[i]);
1060
+ }
1061
+ }
1062
+ // Now (if applicable), region using lower number of columns
1063
+ // (This should be optimized away if GetUpperStartBlock() returns
1064
+ // constant 0.)
1065
+ --num_columns;
1066
+ while (block > 0) {
1067
+ --block;
1068
+ BackSubstBlock(state.get(), num_columns, bs, block * kCoeffBits);
1069
+ segment -= num_columns;
1070
+ for (Index i = 0; i < num_columns; ++i) {
1071
+ iss->StoreSegment(segment + i, state[i]);
1072
+ }
1073
+ }
1074
+ // Verify everything processed
1075
+ assert(block == 0);
1076
+ assert(segment == 0);
1077
+ }
1078
+
1079
+ // General PHSF query a key from InterleavedSolutionStorage.
1080
+ template <typename InterleavedSolutionStorage, typename PhsfQueryHasher>
1081
+ typename InterleavedSolutionStorage::ResultRow InterleavedPhsfQuery(
1082
+ const typename PhsfQueryHasher::Key &key, const PhsfQueryHasher &hasher,
1083
+ const InterleavedSolutionStorage &iss) {
1084
+ using Hash = typename PhsfQueryHasher::Hash;
1085
+
1086
+ using CoeffRow = typename InterleavedSolutionStorage::CoeffRow;
1087
+ using Index = typename InterleavedSolutionStorage::Index;
1088
+ using ResultRow = typename InterleavedSolutionStorage::ResultRow;
1089
+
1090
+ static_assert(sizeof(Index) == sizeof(typename PhsfQueryHasher::Index),
1091
+ "must be same");
1092
+ static_assert(sizeof(CoeffRow) == sizeof(typename PhsfQueryHasher::CoeffRow),
1093
+ "must be same");
1094
+
1095
+ constexpr auto kCoeffBits = static_cast<Index>(sizeof(CoeffRow) * 8U);
1096
+
1097
+ const Hash hash = hasher.GetHash(key);
1098
+ const Index start_slot = hasher.GetStart(hash, iss.GetNumStarts());
1099
+
1100
+ const Index upper_start_block = iss.GetUpperStartBlock();
1101
+ Index num_columns = iss.GetUpperNumColumns();
1102
+ Index start_block_num = start_slot / kCoeffBits;
1103
+ Index segment = start_block_num * num_columns -
1104
+ std::min(start_block_num, upper_start_block);
1105
+ // Change to lower num columns if applicable.
1106
+ // (This should not compile to a conditional branch.)
1107
+ num_columns -= (start_block_num < upper_start_block) ? 1 : 0;
1108
+
1109
+ const CoeffRow cr = hasher.GetCoeffRow(hash);
1110
+ Index start_bit = start_slot % kCoeffBits;
1111
+
1112
+ ResultRow sr = 0;
1113
+ const CoeffRow cr_left = cr << start_bit;
1114
+ for (Index i = 0; i < num_columns; ++i) {
1115
+ sr ^= BitParity(iss.LoadSegment(segment + i) & cr_left) << i;
1116
+ }
1117
+
1118
+ if (start_bit > 0) {
1119
+ segment += num_columns;
1120
+ const CoeffRow cr_right = cr >> (kCoeffBits - start_bit);
1121
+ for (Index i = 0; i < num_columns; ++i) {
1122
+ sr ^= BitParity(iss.LoadSegment(segment + i) & cr_right) << i;
1123
+ }
1124
+ }
1125
+
1126
+ return sr;
1127
+ }
1128
+
1129
+ // Filter query a key from InterleavedFilterQuery.
1130
+ template <typename InterleavedSolutionStorage, typename FilterQueryHasher>
1131
+ bool InterleavedFilterQuery(const typename FilterQueryHasher::Key &key,
1132
+ const FilterQueryHasher &hasher,
1133
+ const InterleavedSolutionStorage &iss) {
1134
+ // BEGIN mostly copied from InterleavedPhsfQuery
1135
+ using Hash = typename FilterQueryHasher::Hash;
1136
+
1137
+ using CoeffRow = typename InterleavedSolutionStorage::CoeffRow;
1138
+ using Index = typename InterleavedSolutionStorage::Index;
1139
+ using ResultRow = typename InterleavedSolutionStorage::ResultRow;
1140
+
1141
+ static_assert(sizeof(Index) == sizeof(typename FilterQueryHasher::Index),
1142
+ "must be same");
1143
+ static_assert(
1144
+ sizeof(CoeffRow) == sizeof(typename FilterQueryHasher::CoeffRow),
1145
+ "must be same");
1146
+ static_assert(
1147
+ sizeof(ResultRow) == sizeof(typename FilterQueryHasher::ResultRow),
1148
+ "must be same");
1149
+
1150
+ constexpr auto kCoeffBits = static_cast<Index>(sizeof(CoeffRow) * 8U);
1151
+
1152
+ const Hash hash = hasher.GetHash(key);
1153
+ const Index start_slot = hasher.GetStart(hash, iss.GetNumStarts());
1154
+
1155
+ const Index upper_start_block = iss.GetUpperStartBlock();
1156
+ Index num_columns = iss.GetUpperNumColumns();
1157
+ Index start_block_num = start_slot / kCoeffBits;
1158
+ Index segment = start_block_num * num_columns -
1159
+ std::min(start_block_num, upper_start_block);
1160
+ // Change to lower num columns if applicable.
1161
+ // (This should not compile to a conditional branch.)
1162
+ num_columns -= (start_block_num < upper_start_block) ? 1 : 0;
1163
+
1164
+ const CoeffRow cr = hasher.GetCoeffRow(hash);
1165
+ Index start_bit = start_slot % kCoeffBits;
1166
+ // END mostly copied from InterleavedPhsfQuery.
1167
+
1168
+ const ResultRow expected = hasher.GetResultRowFromHash(hash);
1169
+
1170
+ // TODO: consider optimizations such as
1171
+ // * mask fetched values and shift cr, rather than shifting fetched values
1172
+ // * get rid of start_bit == 0 condition with careful fetching & shifting
1173
+ if (start_bit == 0) {
1174
+ for (Index i = 0; i < num_columns; ++i) {
1175
+ if (BitParity(iss.LoadSegment(segment + i) & cr) !=
1176
+ (static_cast<int>(expected >> i) & 1)) {
1177
+ return false;
1178
+ }
1179
+ }
1180
+ } else {
1181
+ for (Index i = 0; i < num_columns; ++i) {
1182
+ CoeffRow soln_col =
1183
+ (iss.LoadSegment(segment + i) >> static_cast<unsigned>(start_bit)) |
1184
+ (iss.LoadSegment(segment + num_columns + i)
1185
+ << static_cast<unsigned>(kCoeffBits - start_bit));
1186
+ if (BitParity(soln_col & cr) != (static_cast<int>(expected >> i) & 1)) {
1187
+ return false;
1188
+ }
1189
+ }
1190
+ }
1191
+ // otherwise, all match
1192
+ return true;
1193
+ }
1194
+
1195
+ // TODO: refactor Interleaved*Query so that queries can be "prepared" by
1196
+ // prefetching memory, to hide memory latency for multiple queries in a
1197
+ // single thread.
1198
+
1199
+ } // namespace ribbon
1200
+
1201
+ } // namespace ROCKSDB_NAMESPACE