@nxtedition/rocksdb 5.2.1 → 5.2.2

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 (1052) hide show
  1. package/binding.cc +322 -1166
  2. package/binding.gyp +1 -1
  3. package/chained-batch.js +37 -23
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +1356 -0
  5. package/deps/rocksdb/rocksdb/COPYING +339 -0
  6. package/deps/rocksdb/rocksdb/LICENSE.Apache +202 -0
  7. package/deps/rocksdb/rocksdb/LICENSE.leveldb +29 -0
  8. package/deps/rocksdb/rocksdb/Makefile +2521 -0
  9. package/deps/rocksdb/rocksdb/TARGETS +2100 -0
  10. package/deps/rocksdb/rocksdb/cache/cache.cc +63 -0
  11. package/deps/rocksdb/rocksdb/cache/cache_bench.cc +381 -0
  12. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +114 -0
  13. package/deps/rocksdb/rocksdb/cache/cache_test.cc +775 -0
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +769 -0
  15. package/deps/rocksdb/rocksdb/cache/clock_cache.h +16 -0
  16. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +574 -0
  17. package/deps/rocksdb/rocksdb/cache/lru_cache.h +339 -0
  18. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +199 -0
  19. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +162 -0
  20. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +111 -0
  21. package/deps/rocksdb/rocksdb/cmake/RocksDBConfig.cmake.in +54 -0
  22. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
  23. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
  24. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
  25. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
  26. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
  27. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
  28. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
  29. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
  30. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +108 -0
  32. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +115 -0
  33. package/deps/rocksdb/rocksdb/db/blob/blob_constants.h +16 -0
  34. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +154 -0
  35. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.h +67 -0
  36. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +206 -0
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +316 -0
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +91 -0
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +660 -0
  40. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +99 -0
  41. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +49 -0
  42. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +268 -0
  43. package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage.cc +134 -0
  44. package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage.h +57 -0
  45. package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage_test.cc +173 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +55 -0
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +164 -0
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +423 -0
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +81 -0
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +771 -0
  51. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +184 -0
  52. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.cc +145 -0
  53. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +148 -0
  54. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +132 -0
  55. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +76 -0
  56. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +168 -0
  57. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +83 -0
  58. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +307 -0
  59. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +464 -0
  60. package/deps/rocksdb/rocksdb/db/builder.cc +358 -0
  61. package/deps/rocksdb/rocksdb/db/builder.h +95 -0
  62. package/deps/rocksdb/rocksdb/db/c.cc +5281 -0
  63. package/deps/rocksdb/rocksdb/db/c_test.c +2883 -0
  64. package/deps/rocksdb/rocksdb/db/column_family.cc +1602 -0
  65. package/deps/rocksdb/rocksdb/db/column_family.h +787 -0
  66. package/deps/rocksdb/rocksdb/db/column_family_test.cc +3427 -0
  67. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +425 -0
  68. package/deps/rocksdb/rocksdb/db/compacted_db_impl.cc +169 -0
  69. package/deps/rocksdb/rocksdb/db/compacted_db_impl.h +118 -0
  70. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +591 -0
  71. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +389 -0
  72. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +37 -0
  73. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +1023 -0
  74. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +353 -0
  75. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +1254 -0
  76. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1917 -0
  77. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +208 -0
  78. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +1037 -0
  79. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +1224 -0
  80. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +1135 -0
  81. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +318 -0
  82. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +255 -0
  83. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +57 -0
  84. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +510 -0
  85. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +33 -0
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +2190 -0
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1103 -0
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +32 -0
  89. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +44 -0
  90. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +660 -0
  91. package/deps/rocksdb/rocksdb/db/convenience.cc +78 -0
  92. package/deps/rocksdb/rocksdb/db/corruption_test.cc +921 -0
  93. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +359 -0
  94. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +3820 -0
  95. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1058 -0
  96. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +2128 -0
  97. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +851 -0
  98. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +6292 -0
  99. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +509 -0
  100. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +130 -0
  101. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +137 -0
  102. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1119 -0
  103. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +5057 -0
  104. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +2274 -0
  105. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +3421 -0
  106. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +298 -0
  107. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +151 -0
  108. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +967 -0
  109. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +1806 -0
  110. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +270 -0
  111. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +146 -0
  112. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +683 -0
  113. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +333 -0
  114. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +2024 -0
  115. package/deps/rocksdb/rocksdb/db/db_impl/db_secondary_test.cc +932 -0
  116. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +137 -0
  117. package/deps/rocksdb/rocksdb/db/db_info_dumper.h +15 -0
  118. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +178 -0
  119. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +592 -0
  120. package/deps/rocksdb/rocksdb/db/db_iter.cc +1493 -0
  121. package/deps/rocksdb/rocksdb/db/db_iter.h +390 -0
  122. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +657 -0
  123. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +3268 -0
  124. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +3197 -0
  125. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +299 -0
  126. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +513 -0
  127. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +329 -0
  128. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +241 -0
  129. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +671 -0
  130. package/deps/rocksdb/rocksdb/db/db_options_test.cc +1022 -0
  131. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +1723 -0
  132. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +1694 -0
  133. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +1261 -0
  134. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +164 -0
  135. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +488 -0
  136. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +567 -0
  137. package/deps/rocksdb/rocksdb/db/db_test.cc +6736 -0
  138. package/deps/rocksdb/rocksdb/db/db_test2.cc +5408 -0
  139. package/deps/rocksdb/rocksdb/db/db_test_util.cc +1633 -0
  140. package/deps/rocksdb/rocksdb/db/db_test_util.h +1194 -0
  141. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +2235 -0
  142. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +1780 -0
  143. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +2520 -0
  144. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +119 -0
  145. package/deps/rocksdb/rocksdb/db/db_write_test.cc +465 -0
  146. package/deps/rocksdb/rocksdb/db/dbformat.cc +222 -0
  147. package/deps/rocksdb/rocksdb/db/dbformat.h +786 -0
  148. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +206 -0
  149. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +580 -0
  150. package/deps/rocksdb/rocksdb/db/error_handler.cc +726 -0
  151. package/deps/rocksdb/rocksdb/db/error_handler.h +117 -0
  152. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +2598 -0
  153. package/deps/rocksdb/rocksdb/db/event_helpers.cc +233 -0
  154. package/deps/rocksdb/rocksdb/db/event_helpers.h +57 -0
  155. package/deps/rocksdb/rocksdb/db/experimental.cc +50 -0
  156. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +1559 -0
  157. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +910 -0
  158. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +195 -0
  159. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +2936 -0
  160. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +556 -0
  161. package/deps/rocksdb/rocksdb/db/file_indexer.cc +216 -0
  162. package/deps/rocksdb/rocksdb/db/file_indexer.h +142 -0
  163. package/deps/rocksdb/rocksdb/db/file_indexer_test.cc +350 -0
  164. package/deps/rocksdb/rocksdb/db/filename_test.cc +179 -0
  165. package/deps/rocksdb/rocksdb/db/flush_job.cc +514 -0
  166. package/deps/rocksdb/rocksdb/db/flush_job.h +169 -0
  167. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +647 -0
  168. package/deps/rocksdb/rocksdb/db/flush_scheduler.cc +86 -0
  169. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +54 -0
  170. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1023 -0
  171. package/deps/rocksdb/rocksdb/db/forward_iterator.h +163 -0
  172. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +377 -0
  173. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +282 -0
  174. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +75 -0
  175. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +632 -0
  176. package/deps/rocksdb/rocksdb/db/internal_stats.cc +1461 -0
  177. package/deps/rocksdb/rocksdb/db/internal_stats.h +712 -0
  178. package/deps/rocksdb/rocksdb/db/job_context.h +226 -0
  179. package/deps/rocksdb/rocksdb/db/listener_test.cc +1118 -0
  180. package/deps/rocksdb/rocksdb/db/log_format.h +48 -0
  181. package/deps/rocksdb/rocksdb/db/log_reader.cc +654 -0
  182. package/deps/rocksdb/rocksdb/db/log_reader.h +192 -0
  183. package/deps/rocksdb/rocksdb/db/log_test.cc +901 -0
  184. package/deps/rocksdb/rocksdb/db/log_writer.cc +164 -0
  185. package/deps/rocksdb/rocksdb/db/log_writer.h +115 -0
  186. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.cc +67 -0
  187. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +63 -0
  188. package/deps/rocksdb/rocksdb/db/lookup_key.h +66 -0
  189. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +54 -0
  190. package/deps/rocksdb/rocksdb/db/malloc_stats.h +24 -0
  191. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +296 -0
  192. package/deps/rocksdb/rocksdb/db/memtable.cc +1169 -0
  193. package/deps/rocksdb/rocksdb/db/memtable.h +554 -0
  194. package/deps/rocksdb/rocksdb/db/memtable_list.cc +888 -0
  195. package/deps/rocksdb/rocksdb/db/memtable_list.h +438 -0
  196. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +935 -0
  197. package/deps/rocksdb/rocksdb/db/merge_context.h +134 -0
  198. package/deps/rocksdb/rocksdb/db/merge_helper.cc +421 -0
  199. package/deps/rocksdb/rocksdb/db/merge_helper.h +197 -0
  200. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +290 -0
  201. package/deps/rocksdb/rocksdb/db/merge_operator.cc +86 -0
  202. package/deps/rocksdb/rocksdb/db/merge_test.cc +608 -0
  203. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +338 -0
  204. package/deps/rocksdb/rocksdb/db/options_file_test.cc +119 -0
  205. package/deps/rocksdb/rocksdb/db/output_validator.cc +30 -0
  206. package/deps/rocksdb/rocksdb/db/output_validator.h +47 -0
  207. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +993 -0
  208. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +113 -0
  209. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +76 -0
  210. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +231 -0
  211. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +87 -0
  212. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1374 -0
  213. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +38 -0
  214. package/deps/rocksdb/rocksdb/db/prefix_test.cc +910 -0
  215. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +489 -0
  216. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +446 -0
  217. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +260 -0
  218. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +709 -0
  219. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +439 -0
  220. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +256 -0
  221. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +552 -0
  222. package/deps/rocksdb/rocksdb/db/read_callback.h +53 -0
  223. package/deps/rocksdb/rocksdb/db/repair.cc +722 -0
  224. package/deps/rocksdb/rocksdb/db/repair_test.cc +390 -0
  225. package/deps/rocksdb/rocksdb/db/snapshot_checker.h +61 -0
  226. package/deps/rocksdb/rocksdb/db/snapshot_impl.cc +26 -0
  227. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +167 -0
  228. package/deps/rocksdb/rocksdb/db/table_cache.cc +704 -0
  229. package/deps/rocksdb/rocksdb/db/table_cache.h +233 -0
  230. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +75 -0
  231. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +107 -0
  232. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +517 -0
  233. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +318 -0
  234. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +128 -0
  235. package/deps/rocksdb/rocksdb/db/trim_history_scheduler.cc +54 -0
  236. package/deps/rocksdb/rocksdb/db/trim_history_scheduler.h +44 -0
  237. package/deps/rocksdb/rocksdb/db/version_builder.cc +1078 -0
  238. package/deps/rocksdb/rocksdb/db/version_builder.h +69 -0
  239. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +1551 -0
  240. package/deps/rocksdb/rocksdb/db/version_edit.cc +955 -0
  241. package/deps/rocksdb/rocksdb/db/version_edit.h +609 -0
  242. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +699 -0
  243. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +252 -0
  244. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +597 -0
  245. package/deps/rocksdb/rocksdb/db/version_set.cc +6333 -0
  246. package/deps/rocksdb/rocksdb/db/version_set.h +1485 -0
  247. package/deps/rocksdb/rocksdb/db/version_set_test.cc +3035 -0
  248. package/deps/rocksdb/rocksdb/db/wal_edit.cc +204 -0
  249. package/deps/rocksdb/rocksdb/db/wal_edit.h +166 -0
  250. package/deps/rocksdb/rocksdb/db/wal_edit_test.cc +214 -0
  251. package/deps/rocksdb/rocksdb/db/wal_manager.cc +517 -0
  252. package/deps/rocksdb/rocksdb/db/wal_manager.h +119 -0
  253. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +340 -0
  254. package/deps/rocksdb/rocksdb/db/write_batch.cc +2174 -0
  255. package/deps/rocksdb/rocksdb/db/write_batch_base.cc +94 -0
  256. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +250 -0
  257. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +907 -0
  258. package/deps/rocksdb/rocksdb/db/write_callback.h +27 -0
  259. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +457 -0
  260. package/deps/rocksdb/rocksdb/db/write_controller.cc +128 -0
  261. package/deps/rocksdb/rocksdb/db/write_controller.h +144 -0
  262. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +135 -0
  263. package/deps/rocksdb/rocksdb/db/write_thread.cc +796 -0
  264. package/deps/rocksdb/rocksdb/db/write_thread.h +433 -0
  265. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +14 -0
  266. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +341 -0
  267. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +520 -0
  268. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +23 -0
  269. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +337 -0
  270. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +554 -0
  271. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +79 -0
  272. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +173 -0
  273. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.h +17 -0
  274. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +38 -0
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +763 -0
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +222 -0
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.cc +27 -0
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +428 -0
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +218 -0
  280. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +64 -0
  281. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +2430 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +237 -0
  283. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +343 -0
  284. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +800 -0
  285. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +920 -0
  286. package/deps/rocksdb/rocksdb/env/env.cc +733 -0
  287. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +352 -0
  288. package/deps/rocksdb/rocksdb/env/env_chroot.cc +346 -0
  289. package/deps/rocksdb/rocksdb/env/env_chroot.h +22 -0
  290. package/deps/rocksdb/rocksdb/env/env_encryption.cc +1148 -0
  291. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +137 -0
  292. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +648 -0
  293. package/deps/rocksdb/rocksdb/env/env_posix.cc +514 -0
  294. package/deps/rocksdb/rocksdb/env/env_test.cc +2230 -0
  295. package/deps/rocksdb/rocksdb/env/file_system.cc +132 -0
  296. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +448 -0
  297. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +415 -0
  298. package/deps/rocksdb/rocksdb/env/fs_posix.cc +1086 -0
  299. package/deps/rocksdb/rocksdb/env/io_posix.cc +1499 -0
  300. package/deps/rocksdb/rocksdb/env/io_posix.h +402 -0
  301. package/deps/rocksdb/rocksdb/env/io_posix_test.cc +140 -0
  302. package/deps/rocksdb/rocksdb/env/mock_env.cc +1066 -0
  303. package/deps/rocksdb/rocksdb/env/mock_env.h +41 -0
  304. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +85 -0
  305. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +402 -0
  306. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +150 -0
  307. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +717 -0
  308. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +156 -0
  309. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +99 -0
  310. package/deps/rocksdb/rocksdb/file/file_util.cc +268 -0
  311. package/deps/rocksdb/rocksdb/file/file_util.h +96 -0
  312. package/deps/rocksdb/rocksdb/file/filename.cc +473 -0
  313. package/deps/rocksdb/rocksdb/file/filename.h +182 -0
  314. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +188 -0
  315. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +315 -0
  316. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +142 -0
  317. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +482 -0
  318. package/deps/rocksdb/rocksdb/file/read_write_util.cc +67 -0
  319. package/deps/rocksdb/rocksdb/file/read_write_util.h +34 -0
  320. package/deps/rocksdb/rocksdb/file/readahead_raf.cc +169 -0
  321. package/deps/rocksdb/rocksdb/file/readahead_raf.h +29 -0
  322. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +237 -0
  323. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +63 -0
  324. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +552 -0
  325. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +203 -0
  326. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +523 -0
  327. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +251 -0
  328. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +386 -0
  329. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +839 -0
  330. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +2218 -0
  331. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +294 -0
  332. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +71 -0
  333. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +214 -0
  334. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +98 -0
  335. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +137 -0
  336. package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +40 -0
  337. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +46 -0
  338. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +359 -0
  339. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +499 -0
  340. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +138 -0
  341. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +1697 -0
  342. package/deps/rocksdb/rocksdb/include/rocksdb/db_bench_tool.h +11 -0
  343. package/deps/rocksdb/rocksdb/include/rocksdb/db_dump_tool.h +45 -0
  344. package/deps/rocksdb/rocksdb/include/rocksdb/db_stress_tool.h +11 -0
  345. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1671 -0
  346. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +405 -0
  347. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +29 -0
  348. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +129 -0
  349. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +1472 -0
  350. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +238 -0
  351. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +61 -0
  352. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +269 -0
  353. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +56 -0
  354. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +128 -0
  355. package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +43 -0
  356. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +556 -0
  357. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +77 -0
  358. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +385 -0
  359. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +257 -0
  360. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +155 -0
  361. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +1702 -0
  362. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +237 -0
  363. package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +35 -0
  364. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +73 -0
  365. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +139 -0
  366. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +10 -0
  367. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +269 -0
  368. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +103 -0
  369. package/deps/rocksdb/rocksdb/include/rocksdb/snapshot.h +48 -0
  370. package/deps/rocksdb/rocksdb/include/rocksdb/sst_dump_tool.h +19 -0
  371. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +136 -0
  372. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +47 -0
  373. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +145 -0
  374. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +135 -0
  375. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +592 -0
  376. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +69 -0
  377. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +608 -0
  378. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +711 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +280 -0
  380. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +188 -0
  381. package/deps/rocksdb/rocksdb/include/rocksdb/threadpool.h +58 -0
  382. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +48 -0
  383. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +121 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +74 -0
  385. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +86 -0
  386. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +535 -0
  387. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +61 -0
  388. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/convenience.h +10 -0
  389. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/db_ttl.h +72 -0
  390. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/debug.h +49 -0
  391. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +175 -0
  392. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +180 -0
  393. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/info_log_finder.h +19 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +288 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +71 -0
  396. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/leveldb_options.h +145 -0
  397. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_custom_library.h +43 -0
  398. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h +55 -0
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +50 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +205 -0
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +100 -0
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +19 -0
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +876 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +128 -0
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +94 -0
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +504 -0
  407. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +95 -0
  408. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +626 -0
  409. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +432 -0
  410. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +92 -0
  411. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +34 -0
  412. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +279 -0
  413. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +16 -0
  414. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +102 -0
  415. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +377 -0
  416. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +127 -0
  417. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +106 -0
  418. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +300 -0
  419. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +165 -0
  420. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +684 -0
  421. package/deps/rocksdb/rocksdb/logging/env_logger.h +165 -0
  422. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +162 -0
  423. package/deps/rocksdb/rocksdb/logging/event_logger.cc +70 -0
  424. package/deps/rocksdb/rocksdb/logging/event_logger.h +203 -0
  425. package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +43 -0
  426. package/deps/rocksdb/rocksdb/logging/log_buffer.cc +92 -0
  427. package/deps/rocksdb/rocksdb/logging/log_buffer.h +56 -0
  428. package/deps/rocksdb/rocksdb/logging/logging.h +68 -0
  429. package/deps/rocksdb/rocksdb/logging/posix_logger.h +185 -0
  430. package/deps/rocksdb/rocksdb/memory/allocator.h +57 -0
  431. package/deps/rocksdb/rocksdb/memory/arena.cc +233 -0
  432. package/deps/rocksdb/rocksdb/memory/arena.h +141 -0
  433. package/deps/rocksdb/rocksdb/memory/arena_test.cc +204 -0
  434. package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +47 -0
  435. package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +218 -0
  436. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +206 -0
  437. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +78 -0
  438. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +33 -0
  439. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +27 -0
  440. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +102 -0
  441. package/deps/rocksdb/rocksdb/memory/memory_allocator.h +38 -0
  442. package/deps/rocksdb/rocksdb/memory/memory_usage.h +25 -0
  443. package/deps/rocksdb/rocksdb/memtable/alloc_tracker.cc +62 -0
  444. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +844 -0
  445. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +49 -0
  446. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +349 -0
  447. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +44 -0
  448. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +997 -0
  449. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +663 -0
  450. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +677 -0
  451. package/deps/rocksdb/rocksdb/memtable/skiplist.h +496 -0
  452. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +388 -0
  453. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +280 -0
  454. package/deps/rocksdb/rocksdb/memtable/stl_wrappers.h +33 -0
  455. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +301 -0
  456. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -0
  457. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +203 -0
  458. package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +23 -0
  459. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +287 -0
  460. package/deps/rocksdb/rocksdb/monitoring/histogram.h +149 -0
  461. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +231 -0
  462. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +200 -0
  463. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +84 -0
  464. package/deps/rocksdb/rocksdb/monitoring/in_memory_stats_history.cc +49 -0
  465. package/deps/rocksdb/rocksdb/monitoring/in_memory_stats_history.h +74 -0
  466. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +71 -0
  467. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +98 -0
  468. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +62 -0
  469. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +60 -0
  470. package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +29 -0
  471. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +566 -0
  472. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +97 -0
  473. package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +28 -0
  474. package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +18 -0
  475. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +79 -0
  476. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +169 -0
  477. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.h +83 -0
  478. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +431 -0
  479. package/deps/rocksdb/rocksdb/monitoring/statistics.h +138 -0
  480. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -0
  481. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +652 -0
  482. package/deps/rocksdb/rocksdb/monitoring/thread_status_impl.cc +163 -0
  483. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +314 -0
  484. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +233 -0
  485. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater_debug.cc +43 -0
  486. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +206 -0
  487. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +134 -0
  488. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +32 -0
  489. package/deps/rocksdb/rocksdb/options/cf_options.cc +1026 -0
  490. package/deps/rocksdb/rocksdb/options/cf_options.h +308 -0
  491. package/deps/rocksdb/rocksdb/options/configurable.cc +681 -0
  492. package/deps/rocksdb/rocksdb/options/configurable_helper.h +251 -0
  493. package/deps/rocksdb/rocksdb/options/configurable_test.cc +757 -0
  494. package/deps/rocksdb/rocksdb/options/configurable_test.h +127 -0
  495. package/deps/rocksdb/rocksdb/options/customizable.cc +77 -0
  496. package/deps/rocksdb/rocksdb/options/customizable_helper.h +216 -0
  497. package/deps/rocksdb/rocksdb/options/customizable_test.cc +625 -0
  498. package/deps/rocksdb/rocksdb/options/db_options.cc +835 -0
  499. package/deps/rocksdb/rocksdb/options/db_options.h +126 -0
  500. package/deps/rocksdb/rocksdb/options/options.cc +664 -0
  501. package/deps/rocksdb/rocksdb/options/options_helper.cc +1391 -0
  502. package/deps/rocksdb/rocksdb/options/options_helper.h +118 -0
  503. package/deps/rocksdb/rocksdb/options/options_parser.cc +721 -0
  504. package/deps/rocksdb/rocksdb/options/options_parser.h +151 -0
  505. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +583 -0
  506. package/deps/rocksdb/rocksdb/options/options_test.cc +3794 -0
  507. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +106 -0
  508. package/deps/rocksdb/rocksdb/port/lang.h +16 -0
  509. package/deps/rocksdb/rocksdb/port/likely.h +18 -0
  510. package/deps/rocksdb/rocksdb/port/malloc.h +17 -0
  511. package/deps/rocksdb/rocksdb/port/port.h +21 -0
  512. package/deps/rocksdb/rocksdb/port/port_dirent.h +44 -0
  513. package/deps/rocksdb/rocksdb/port/port_example.h +101 -0
  514. package/deps/rocksdb/rocksdb/port/port_posix.cc +266 -0
  515. package/deps/rocksdb/rocksdb/port/port_posix.h +223 -0
  516. package/deps/rocksdb/rocksdb/port/stack_trace.cc +179 -0
  517. package/deps/rocksdb/rocksdb/port/stack_trace.h +28 -0
  518. package/deps/rocksdb/rocksdb/port/sys_time.h +47 -0
  519. package/deps/rocksdb/rocksdb/port/util_logger.h +20 -0
  520. package/deps/rocksdb/rocksdb/port/win/env_default.cc +45 -0
  521. package/deps/rocksdb/rocksdb/port/win/env_win.cc +1449 -0
  522. package/deps/rocksdb/rocksdb/port/win/env_win.h +294 -0
  523. package/deps/rocksdb/rocksdb/port/win/io_win.cc +1084 -0
  524. package/deps/rocksdb/rocksdb/port/win/io_win.h +494 -0
  525. package/deps/rocksdb/rocksdb/port/win/port_win.cc +283 -0
  526. package/deps/rocksdb/rocksdb/port/win/port_win.h +411 -0
  527. package/deps/rocksdb/rocksdb/port/win/win_jemalloc.cc +79 -0
  528. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +194 -0
  529. package/deps/rocksdb/rocksdb/port/win/win_logger.h +67 -0
  530. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +183 -0
  531. package/deps/rocksdb/rocksdb/port/win/win_thread.h +122 -0
  532. package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +221 -0
  533. package/deps/rocksdb/rocksdb/port/win/xpress_win.h +26 -0
  534. package/deps/rocksdb/rocksdb/port/xpress.h +17 -0
  535. package/deps/rocksdb/rocksdb/src.mk +631 -0
  536. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +126 -0
  537. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +57 -0
  538. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +73 -0
  539. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.h +48 -0
  540. package/deps/rocksdb/rocksdb/table/block_based/block.cc +1049 -0
  541. package/deps/rocksdb/rocksdb/table/block_based/block.h +720 -0
  542. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +348 -0
  543. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +119 -0
  544. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +434 -0
  545. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1835 -0
  546. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +193 -0
  547. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +839 -0
  548. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +95 -0
  549. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +383 -0
  550. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +251 -0
  551. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3563 -0
  552. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +681 -0
  553. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +190 -0
  554. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +347 -0
  555. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +201 -0
  556. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +78 -0
  557. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +66 -0
  558. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +32 -0
  559. package/deps/rocksdb/rocksdb/table/block_based/block_prefix_index.cc +232 -0
  560. package/deps/rocksdb/rocksdb/table/block_based/block_prefix_index.h +66 -0
  561. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +623 -0
  562. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +30 -0
  563. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +220 -0
  564. package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.cc +59 -0
  565. package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.h +25 -0
  566. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.cc +93 -0
  567. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.h +136 -0
  568. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +717 -0
  569. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +180 -0
  570. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +102 -0
  571. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +55 -0
  572. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +1407 -0
  573. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +168 -0
  574. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +88 -0
  575. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +41 -0
  576. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +344 -0
  577. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +139 -0
  578. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +333 -0
  579. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +147 -0
  580. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.h +49 -0
  581. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +248 -0
  582. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +444 -0
  583. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +54 -0
  584. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +85 -0
  585. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +56 -0
  586. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +22 -0
  587. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +40 -0
  588. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +521 -0
  589. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +144 -0
  590. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +424 -0
  591. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +163 -0
  592. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +142 -0
  593. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +186 -0
  594. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +51 -0
  595. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +64 -0
  596. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +38 -0
  597. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +120 -0
  598. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +59 -0
  599. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +324 -0
  600. package/deps/rocksdb/rocksdb/table/block_fetcher.h +129 -0
  601. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +534 -0
  602. package/deps/rocksdb/rocksdb/table/cleanable_test.cc +277 -0
  603. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +543 -0
  604. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +136 -0
  605. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +663 -0
  606. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +107 -0
  607. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +81 -0
  608. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +404 -0
  609. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +101 -0
  610. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +585 -0
  611. package/deps/rocksdb/rocksdb/table/format.cc +422 -0
  612. package/deps/rocksdb/rocksdb/table/format.h +348 -0
  613. package/deps/rocksdb/rocksdb/table/get_context.cc +408 -0
  614. package/deps/rocksdb/rocksdb/table/get_context.h +212 -0
  615. package/deps/rocksdb/rocksdb/table/internal_iterator.h +205 -0
  616. package/deps/rocksdb/rocksdb/table/iter_heap.h +42 -0
  617. package/deps/rocksdb/rocksdb/table/iterator.cc +210 -0
  618. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +180 -0
  619. package/deps/rocksdb/rocksdb/table/merger_test.cc +180 -0
  620. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +481 -0
  621. package/deps/rocksdb/rocksdb/table/merging_iterator.h +64 -0
  622. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +541 -0
  623. package/deps/rocksdb/rocksdb/table/meta_blocks.h +154 -0
  624. package/deps/rocksdb/rocksdb/table/mock_table.cc +328 -0
  625. package/deps/rocksdb/rocksdb/table/mock_table.h +89 -0
  626. package/deps/rocksdb/rocksdb/table/multiget_context.h +282 -0
  627. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +116 -0
  628. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +44 -0
  629. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +34 -0
  630. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.cc +78 -0
  631. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +135 -0
  632. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +332 -0
  633. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +153 -0
  634. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +263 -0
  635. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +182 -0
  636. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +211 -0
  637. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +249 -0
  638. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +506 -0
  639. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +201 -0
  640. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +781 -0
  641. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +247 -0
  642. package/deps/rocksdb/rocksdb/table/scoped_arena_iterator.h +61 -0
  643. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +502 -0
  644. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +96 -0
  645. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +98 -0
  646. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +228 -0
  647. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +340 -0
  648. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +94 -0
  649. package/deps/rocksdb/rocksdb/table/table_builder.h +203 -0
  650. package/deps/rocksdb/rocksdb/table/table_factory.cc +38 -0
  651. package/deps/rocksdb/rocksdb/table/table_properties.cc +300 -0
  652. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +30 -0
  653. package/deps/rocksdb/rocksdb/table/table_reader.h +147 -0
  654. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +347 -0
  655. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +39 -0
  656. package/deps/rocksdb/rocksdb/table/table_test.cc +4769 -0
  657. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +215 -0
  658. package/deps/rocksdb/rocksdb/table/two_level_iterator.h +43 -0
  659. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +38 -0
  660. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +74 -0
  661. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +93 -0
  662. package/deps/rocksdb/rocksdb/test_util/sync_point.h +161 -0
  663. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +129 -0
  664. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +74 -0
  665. package/deps/rocksdb/rocksdb/test_util/testharness.cc +56 -0
  666. package/deps/rocksdb/rocksdb/test_util/testharness.h +53 -0
  667. package/deps/rocksdb/rocksdb/test_util/testutil.cc +566 -0
  668. package/deps/rocksdb/rocksdb/test_util/testutil.h +887 -0
  669. package/deps/rocksdb/rocksdb/test_util/testutil_test.cc +43 -0
  670. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +388 -0
  671. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +132 -0
  672. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +27 -0
  673. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +45 -0
  674. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +166 -0
  675. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +570 -0
  676. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +92 -0
  677. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +54 -0
  678. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +152 -0
  679. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +59 -0
  680. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +141 -0
  681. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +33 -0
  682. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +74 -0
  683. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +117 -0
  684. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +263 -0
  685. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +96 -0
  686. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +40 -0
  687. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +29 -0
  688. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +144 -0
  689. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +30 -0
  690. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +51 -0
  691. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +28 -0
  692. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +10 -0
  693. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +26 -0
  694. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +138 -0
  695. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +23 -0
  696. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +57 -0
  697. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +260 -0
  698. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +52 -0
  699. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +328 -0
  700. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +1703 -0
  701. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +16 -0
  702. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +304 -0
  703. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +39 -0
  704. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +26 -0
  705. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +318 -0
  706. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.cpp +12 -0
  707. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +57 -0
  708. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +219 -0
  709. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +207 -0
  710. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +164 -0
  711. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +57 -0
  712. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +77 -0
  713. package/deps/rocksdb/rocksdb/third-party/gcc/ppc-asm.h +390 -0
  714. package/deps/rocksdb/rocksdb/thirdparty.inc +268 -0
  715. package/deps/rocksdb/rocksdb/tools/CMakeLists.txt +30 -0
  716. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +110 -0
  717. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/__init__.py +2 -0
  718. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +2000 -0
  719. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.sh +156 -0
  720. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim_test.py +734 -0
  721. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +2307 -0
  722. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +395 -0
  723. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +721 -0
  724. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +719 -0
  725. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_tool.cc +25 -0
  726. package/deps/rocksdb/rocksdb/tools/db_bench.cc +21 -0
  727. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +7416 -0
  728. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +328 -0
  729. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +130 -0
  730. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +297 -0
  731. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +259 -0
  732. package/deps/rocksdb/rocksdb/tools/dump/rocksdb_dump.cc +63 -0
  733. package/deps/rocksdb/rocksdb/tools/dump/rocksdb_undump.cc +62 -0
  734. package/deps/rocksdb/rocksdb/tools/io_tracer_parser.cc +25 -0
  735. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +187 -0
  736. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +120 -0
  737. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.h +40 -0
  738. package/deps/rocksdb/rocksdb/tools/ldb.cc +21 -0
  739. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +3609 -0
  740. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +665 -0
  741. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +746 -0
  742. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +159 -0
  743. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +221 -0
  744. package/deps/rocksdb/rocksdb/tools/sst_dump.cc +20 -0
  745. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +427 -0
  746. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +541 -0
  747. package/deps/rocksdb/rocksdb/tools/trace_analyzer.cc +25 -0
  748. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +752 -0
  749. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +2001 -0
  750. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +292 -0
  751. package/deps/rocksdb/rocksdb/tools/write_stress.cc +305 -0
  752. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +496 -0
  753. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +294 -0
  754. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +379 -0
  755. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +229 -0
  756. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +174 -0
  757. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +215 -0
  758. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +491 -0
  759. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +195 -0
  760. package/deps/rocksdb/rocksdb/util/aligned_buffer.h +255 -0
  761. package/deps/rocksdb/rocksdb/util/autovector.h +367 -0
  762. package/deps/rocksdb/rocksdb/util/autovector_test.cc +330 -0
  763. package/deps/rocksdb/rocksdb/util/bloom_impl.h +485 -0
  764. package/deps/rocksdb/rocksdb/util/bloom_test.cc +1191 -0
  765. package/deps/rocksdb/rocksdb/util/build_version.cc.in +5 -0
  766. package/deps/rocksdb/rocksdb/util/build_version.h +15 -0
  767. package/deps/rocksdb/rocksdb/util/cast_util.h +20 -0
  768. package/deps/rocksdb/rocksdb/util/channel.h +67 -0
  769. package/deps/rocksdb/rocksdb/util/coding.cc +89 -0
  770. package/deps/rocksdb/rocksdb/util/coding.h +419 -0
  771. package/deps/rocksdb/rocksdb/util/coding_lean.h +101 -0
  772. package/deps/rocksdb/rocksdb/util/coding_test.cc +217 -0
  773. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +92 -0
  774. package/deps/rocksdb/rocksdb/util/comparator.cc +219 -0
  775. package/deps/rocksdb/rocksdb/util/compression.h +1529 -0
  776. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +108 -0
  777. package/deps/rocksdb/rocksdb/util/compression_context_cache.h +47 -0
  778. package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.cc +67 -0
  779. package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.h +67 -0
  780. package/deps/rocksdb/rocksdb/util/core_local.h +83 -0
  781. package/deps/rocksdb/rocksdb/util/crc32c.cc +1283 -0
  782. package/deps/rocksdb/rocksdb/util/crc32c.h +51 -0
  783. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +169 -0
  784. package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +50 -0
  785. package/deps/rocksdb/rocksdb/util/crc32c_ppc.c +94 -0
  786. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +19 -0
  787. package/deps/rocksdb/rocksdb/util/crc32c_ppc_asm.S +756 -0
  788. package/deps/rocksdb/rocksdb/util/crc32c_ppc_constants.h +900 -0
  789. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +180 -0
  790. package/deps/rocksdb/rocksdb/util/defer.h +52 -0
  791. package/deps/rocksdb/rocksdb/util/defer_test.cc +39 -0
  792. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +68 -0
  793. package/deps/rocksdb/rocksdb/util/dynamic_bloom.cc +70 -0
  794. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +214 -0
  795. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +323 -0
  796. package/deps/rocksdb/rocksdb/util/fastrange.h +112 -0
  797. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +136 -0
  798. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +98 -0
  799. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +449 -0
  800. package/deps/rocksdb/rocksdb/util/filelock_test.cc +152 -0
  801. package/deps/rocksdb/rocksdb/util/filter_bench.cc +781 -0
  802. package/deps/rocksdb/rocksdb/util/gflags_compat.h +20 -0
  803. package/deps/rocksdb/rocksdb/util/hash.cc +83 -0
  804. package/deps/rocksdb/rocksdb/util/hash.h +107 -0
  805. package/deps/rocksdb/rocksdb/util/hash_map.h +67 -0
  806. package/deps/rocksdb/rocksdb/util/hash_test.cc +593 -0
  807. package/deps/rocksdb/rocksdb/util/heap.h +166 -0
  808. package/deps/rocksdb/rocksdb/util/heap_test.cc +139 -0
  809. package/deps/rocksdb/rocksdb/util/kv_map.h +33 -0
  810. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +86 -0
  811. package/deps/rocksdb/rocksdb/util/math.h +186 -0
  812. package/deps/rocksdb/rocksdb/util/math128.h +298 -0
  813. package/deps/rocksdb/rocksdb/util/murmurhash.cc +191 -0
  814. package/deps/rocksdb/rocksdb/util/murmurhash.h +42 -0
  815. package/deps/rocksdb/rocksdb/util/mutexlock.h +186 -0
  816. package/deps/rocksdb/rocksdb/util/ppc-opcode.h +27 -0
  817. package/deps/rocksdb/rocksdb/util/random.cc +56 -0
  818. package/deps/rocksdb/rocksdb/util/random.h +186 -0
  819. package/deps/rocksdb/rocksdb/util/random_test.cc +105 -0
  820. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +340 -0
  821. package/deps/rocksdb/rocksdb/util/rate_limiter.h +113 -0
  822. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +251 -0
  823. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +151 -0
  824. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +107 -0
  825. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +1201 -0
  826. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +1062 -0
  827. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +931 -0
  828. package/deps/rocksdb/rocksdb/util/set_comparator.h +22 -0
  829. package/deps/rocksdb/rocksdb/util/slice.cc +243 -0
  830. package/deps/rocksdb/rocksdb/util/slice_test.cc +163 -0
  831. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +153 -0
  832. package/deps/rocksdb/rocksdb/util/status.cc +149 -0
  833. package/deps/rocksdb/rocksdb/util/stderr_logger.h +31 -0
  834. package/deps/rocksdb/rocksdb/util/stop_watch.h +118 -0
  835. package/deps/rocksdb/rocksdb/util/string_util.cc +422 -0
  836. package/deps/rocksdb/rocksdb/util/string_util.h +144 -0
  837. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +354 -0
  838. package/deps/rocksdb/rocksdb/util/thread_local.cc +554 -0
  839. package/deps/rocksdb/rocksdb/util/thread_local.h +101 -0
  840. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +583 -0
  841. package/deps/rocksdb/rocksdb/util/thread_operation.h +121 -0
  842. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +506 -0
  843. package/deps/rocksdb/rocksdb/util/threadpool_imp.h +112 -0
  844. package/deps/rocksdb/rocksdb/util/timer.h +331 -0
  845. package/deps/rocksdb/rocksdb/util/timer_queue.h +230 -0
  846. package/deps/rocksdb/rocksdb/util/timer_queue_test.cc +72 -0
  847. package/deps/rocksdb/rocksdb/util/timer_test.cc +399 -0
  848. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +80 -0
  849. package/deps/rocksdb/rocksdb/util/vector_iterator.h +101 -0
  850. package/deps/rocksdb/rocksdb/util/work_queue.h +148 -0
  851. package/deps/rocksdb/rocksdb/util/work_queue_test.cc +268 -0
  852. package/deps/rocksdb/rocksdb/util/xxh3p.h +1392 -0
  853. package/deps/rocksdb/rocksdb/util/xxhash.cc +1158 -0
  854. package/deps/rocksdb/rocksdb/util/xxhash.h +598 -0
  855. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +2354 -0
  856. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db_test.cc +2955 -0
  857. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +488 -0
  858. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +199 -0
  859. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +112 -0
  860. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +266 -0
  861. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +52 -0
  862. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +2167 -0
  863. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +500 -0
  864. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +113 -0
  865. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +147 -0
  866. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +66 -0
  867. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +2386 -0
  868. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +281 -0
  869. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.h +58 -0
  870. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +314 -0
  871. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +244 -0
  872. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +47 -0
  873. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +42 -0
  874. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +375 -0
  875. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +327 -0
  876. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +114 -0
  877. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +187 -0
  878. package/deps/rocksdb/rocksdb/utilities/cassandra/format.cc +390 -0
  879. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +184 -0
  880. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +67 -0
  881. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +44 -0
  882. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +75 -0
  883. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +72 -0
  884. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +43 -0
  885. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +588 -0
  886. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +82 -0
  887. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +821 -0
  888. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +37 -0
  889. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +29 -0
  890. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +27 -0
  891. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +25 -0
  892. package/deps/rocksdb/rocksdb/utilities/debug.cc +82 -0
  893. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +1497 -0
  894. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +1146 -0
  895. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +262 -0
  896. package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +223 -0
  897. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +145 -0
  898. package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +44 -0
  899. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +490 -0
  900. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +242 -0
  901. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +581 -0
  902. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +437 -0
  903. package/deps/rocksdb/rocksdb/utilities/leveldb_options/leveldb_options.cc +56 -0
  904. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +275 -0
  905. package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +52 -0
  906. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.cc +59 -0
  907. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +39 -0
  908. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +77 -0
  909. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +83 -0
  910. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +97 -0
  911. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +38 -0
  912. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +59 -0
  913. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +31 -0
  914. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +117 -0
  915. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +49 -0
  916. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +598 -0
  917. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +69 -0
  918. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +55 -0
  919. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +87 -0
  920. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +174 -0
  921. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +168 -0
  922. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +431 -0
  923. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +159 -0
  924. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +655 -0
  925. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +425 -0
  926. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +156 -0
  927. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +609 -0
  928. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +296 -0
  929. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file_buffer.h +127 -0
  930. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +86 -0
  931. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +125 -0
  932. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +238 -0
  933. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_bench.cc +308 -0
  934. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +168 -0
  935. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +160 -0
  936. package/deps/rocksdb/rocksdb/utilities/persistent_cache/lrulist.h +174 -0
  937. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +360 -0
  938. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +456 -0
  939. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.h +286 -0
  940. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +167 -0
  941. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +339 -0
  942. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_util.h +67 -0
  943. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +140 -0
  944. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +142 -0
  945. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +285 -0
  946. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.h +231 -0
  947. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +494 -0
  948. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +356 -0
  949. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +224 -0
  950. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +122 -0
  951. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +72 -0
  952. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +244 -0
  953. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +125 -0
  954. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +48 -0
  955. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.cc +29 -0
  956. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.h +82 -0
  957. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_tracker.h +209 -0
  958. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +720 -0
  959. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +223 -0
  960. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +181 -0
  961. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +319 -0
  962. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +270 -0
  963. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.h +99 -0
  964. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_lock_manager.h +30 -0
  965. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +306 -0
  966. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/COPYING.AGPLv3 +661 -0
  967. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/COPYING.APACHEv2 +174 -0
  968. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/COPYING.GPLv2 +339 -0
  969. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +76 -0
  970. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/ft/comparator.h +138 -0
  971. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/ft/ft-status.h +102 -0
  972. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/concurrent_tree.cc +139 -0
  973. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/concurrent_tree.h +174 -0
  974. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/keyrange.cc +222 -0
  975. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/keyrange.h +141 -0
  976. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc +525 -0
  977. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.h +253 -0
  978. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +1007 -0
  979. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +560 -0
  980. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/manager.cc +527 -0
  981. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/range_buffer.cc +265 -0
  982. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/range_buffer.h +178 -0
  983. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/treenode.cc +520 -0
  984. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/treenode.h +302 -0
  985. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/txnid_set.cc +120 -0
  986. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/txnid_set.h +92 -0
  987. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/wfg.cc +213 -0
  988. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/wfg.h +124 -0
  989. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/memory.h +215 -0
  990. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_assert_subst.h +39 -0
  991. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_atomic.h +130 -0
  992. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +82 -0
  993. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_instrumentation.h +286 -0
  994. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_portability.h +87 -0
  995. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_pthread.h +520 -0
  996. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_race_tools.h +179 -0
  997. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +172 -0
  998. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/txn_subst.h +27 -0
  999. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/standalone_port.cc +132 -0
  1000. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +153 -0
  1001. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.h +98 -0
  1002. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/growable_array.h +144 -0
  1003. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/memarena.cc +201 -0
  1004. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/memarena.h +141 -0
  1005. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/omt.h +794 -0
  1006. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/omt_impl.h +1295 -0
  1007. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/partitioned_counter.h +165 -0
  1008. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/status.h +76 -0
  1009. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +479 -0
  1010. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +130 -0
  1011. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.cc +156 -0
  1012. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.h +146 -0
  1013. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +196 -0
  1014. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +101 -0
  1015. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +111 -0
  1016. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +87 -0
  1017. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1418 -0
  1018. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +752 -0
  1019. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +232 -0
  1020. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +628 -0
  1021. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +228 -0
  1022. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +49 -0
  1023. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +678 -0
  1024. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +373 -0
  1025. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +135 -0
  1026. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.h +26 -0
  1027. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +6350 -0
  1028. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +522 -0
  1029. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +188 -0
  1030. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +80 -0
  1031. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3531 -0
  1032. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +483 -0
  1033. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +119 -0
  1034. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +999 -0
  1035. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +1109 -0
  1036. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +786 -0
  1037. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +1039 -0
  1038. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +341 -0
  1039. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +470 -0
  1040. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +108 -0
  1041. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +332 -0
  1042. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +353 -0
  1043. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +703 -0
  1044. package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +99 -0
  1045. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +617 -0
  1046. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +345 -0
  1047. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +569 -0
  1048. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1867 -0
  1049. package/iterator.js +39 -34
  1050. package/leveldown.js +33 -84
  1051. package/package-lock.json +23687 -0
  1052. package/package.json +4 -4
package/binding.cc CHANGED
@@ -1,4 +1,4 @@
1
- #define NAPI_VERSION 3
1
+ #define NAPI_VERSION 8
2
2
 
3
3
  #include <napi-macros.h>
4
4
  #include <node_api.h>
@@ -16,7 +16,8 @@
16
16
 
17
17
  namespace leveldb = rocksdb;
18
18
 
19
- #include <map>
19
+ #include <set>
20
+ #include <optional>
20
21
  #include <vector>
21
22
 
22
23
  class NullLogger : public rocksdb::Logger {
@@ -26,255 +27,162 @@ public:
26
27
  virtual size_t GetLogFileSize() const override { return 0; }
27
28
  };
28
29
 
29
- /**
30
- * Forward declarations.
31
- */
32
30
  struct Database;
33
31
  struct Iterator;
34
- static void iterator_end_do (napi_env env, Iterator* iterator, napi_value cb);
35
-
36
- /**
37
- * Macros.
38
- */
32
+ static void iterator_do_close (napi_env env, Iterator* iterator, napi_value cb);
39
33
 
40
34
  #define NAPI_DB_CONTEXT() \
41
- Database* database = NULL; \
35
+ Database* database = nullptr; \
42
36
  NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&database));
43
37
 
44
38
  #define NAPI_ITERATOR_CONTEXT() \
45
- Iterator* iterator = NULL; \
39
+ Iterator* iterator = nullptr; \
46
40
  NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&iterator));
47
41
 
48
42
  #define NAPI_BATCH_CONTEXT() \
49
- Batch* batch = NULL; \
43
+ leveldb::WriteBatch* batch = nullptr; \
50
44
  NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&batch));
51
45
 
52
- #define NAPI_RETURN_UNDEFINED() \
53
- return 0;
54
-
55
- #define NAPI_UTF8_NEW(name, val) \
56
- size_t name##_size = 0; \
57
- NAPI_STATUS_THROWS(napi_get_value_string_utf8(env, val, NULL, 0, &name##_size)) \
58
- char* name = new char[name##_size + 1]; \
59
- NAPI_STATUS_THROWS(napi_get_value_string_utf8(env, val, name, name##_size + 1, &name##_size)) \
60
- name[name##_size] = '\0';
61
-
62
- #define NAPI_ARGV_UTF8_NEW(name, i) \
63
- NAPI_UTF8_NEW(name, argv[i])
64
-
65
- #define LD_STRING_OR_BUFFER_TO_COPY(env, from, to) \
66
- char* to##Ch_ = 0; \
67
- size_t to##Sz_ = 0; \
68
- if (IsString(env, from)) { \
69
- napi_get_value_string_utf8(env, from, NULL, 0, &to##Sz_); \
70
- to##Ch_ = new char[to##Sz_ + 1]; \
71
- napi_get_value_string_utf8(env, from, to##Ch_, to##Sz_ + 1, &to##Sz_); \
72
- to##Ch_[to##Sz_] = '\0'; \
73
- } else if (IsBuffer(env, from)) { \
74
- char* buf = 0; \
75
- napi_get_buffer_info(env, from, (void **)&buf, &to##Sz_); \
76
- to##Ch_ = new char[to##Sz_]; \
77
- memcpy(to##Ch_, buf, to##Sz_); \
78
- }
79
-
80
- /*********************************************************************
81
- * Helpers.
82
- ********************************************************************/
83
-
84
- /**
85
- * Returns true if 'value' is a string.
86
- */
87
46
  static bool IsString (napi_env env, napi_value value) {
88
47
  napi_valuetype type;
89
48
  napi_typeof(env, value, &type);
90
49
  return type == napi_string;
91
50
  }
92
51
 
93
- /**
94
- * Returns true if 'value' is a buffer.
95
- */
96
52
  static bool IsBuffer (napi_env env, napi_value value) {
97
53
  bool isBuffer;
98
54
  napi_is_buffer(env, value, &isBuffer);
99
55
  return isBuffer;
100
56
  }
101
57
 
102
- /**
103
- * Returns true if 'value' is an object.
104
- */
105
58
  static bool IsObject (napi_env env, napi_value value) {
106
59
  napi_valuetype type;
107
60
  napi_typeof(env, value, &type);
108
61
  return type == napi_object;
109
62
  }
110
63
 
111
- /**
112
- * Create an error object.
113
- */
114
- static napi_value CreateError (napi_env env, const char* str) {
64
+ static napi_value CreateError (napi_env env, const std::string& str) {
115
65
  napi_value msg;
116
- napi_create_string_utf8(env, str, strlen(str), &msg);
66
+ napi_create_string_utf8(env, str.c_str(), str.size(), &msg);
117
67
  napi_value error;
118
- napi_create_error(env, NULL, msg, &error);
68
+ napi_create_error(env, nullptr, msg, &error);
119
69
  return error;
120
70
  }
121
71
 
122
- /**
123
- * Returns true if 'obj' has a property 'key'.
124
- */
125
72
  static bool HasProperty (napi_env env, napi_value obj, const char* key) {
126
73
  bool has = false;
127
74
  napi_has_named_property(env, obj, key, &has);
128
75
  return has;
129
76
  }
130
77
 
131
- /**
132
- * Returns a property in napi_value form.
133
- */
134
78
  static napi_value GetProperty (napi_env env, napi_value obj, const char* key) {
135
79
  napi_value value;
136
80
  napi_get_named_property(env, obj, key, &value);
137
81
  return value;
138
82
  }
139
83
 
140
- /**
141
- * Returns a boolean property 'key' from 'obj'.
142
- * Returns 'DEFAULT' if the property doesn't exist.
143
- */
144
84
  static bool BooleanProperty (napi_env env, napi_value obj, const char* key,
145
- bool DEFAULT) {
85
+ bool defaultValue) {
146
86
  if (HasProperty(env, obj, key)) {
147
- napi_value value = GetProperty(env, obj, key);
87
+ const auto value = GetProperty(env, obj, key);
148
88
  bool result;
149
89
  napi_get_value_bool(env, value, &result);
150
90
  return result;
151
91
  }
152
92
 
153
- return DEFAULT;
93
+ return defaultValue;
154
94
  }
155
95
 
156
- /**
157
- * Returns a uint32 property 'key' from 'obj'.
158
- * Returns 'DEFAULT' if the property doesn't exist.
159
- */
160
96
  static uint32_t Uint32Property (napi_env env, napi_value obj, const char* key,
161
- uint32_t DEFAULT) {
97
+ uint32_t defaultValue) {
162
98
  if (HasProperty(env, obj, key)) {
163
- napi_value value = GetProperty(env, obj, key);
99
+ const auto value = GetProperty(env, obj, key);
164
100
  uint32_t result;
165
101
  napi_get_value_uint32(env, value, &result);
166
102
  return result;
167
103
  }
168
104
 
169
- return DEFAULT;
105
+ return defaultValue;
170
106
  }
171
107
 
172
- /**
173
- * Returns a int32 property 'key' from 'obj'.
174
- * Returns 'DEFAULT' if the property doesn't exist.
175
- */
176
108
  static int Int32Property (napi_env env, napi_value obj, const char* key,
177
- int DEFAULT) {
109
+ int defaultValue) {
178
110
  if (HasProperty(env, obj, key)) {
179
- napi_value value = GetProperty(env, obj, key);
111
+ const auto value = GetProperty(env, obj, key);
180
112
  int result;
181
113
  napi_get_value_int32(env, value, &result);
182
114
  return result;
183
115
  }
184
116
 
185
- return DEFAULT;
117
+ return defaultValue;
118
+ }
119
+
120
+ static std::string ToString (napi_env env, napi_value from) {
121
+ if (IsString(env, from)) {
122
+ size_t length = 0;
123
+ napi_get_value_string_utf8(env, from, nullptr, 0, &length);
124
+ std::string value(length, '\0');
125
+ napi_get_value_string_utf8( env, from, &value[0], value.length() + 1, &length);
126
+ return value;
127
+ } else if (IsBuffer(env, from)) {
128
+ char* buf = nullptr;
129
+ size_t length = 0;
130
+ napi_get_buffer_info(env, from, reinterpret_cast<void **>(&buf), &length);
131
+ return std::string(buf, length);
132
+ }
133
+
134
+ return {};
186
135
  }
187
136
 
188
- /**
189
- * Returns a string property 'key' from 'obj'.
190
- * Returns empty string if the property doesn't exist.
191
- */
192
137
  static std::string StringProperty (napi_env env, napi_value obj, const char* key) {
193
138
  if (HasProperty(env, obj, key)) {
194
139
  napi_value value = GetProperty(env, obj, key);
195
140
  if (IsString(env, value)) {
196
- size_t size = 0;
197
- napi_get_value_string_utf8(env, value, NULL, 0, &size);
198
-
199
- char* buf = new char[size + 1];
200
- napi_get_value_string_utf8(env, value, buf, size + 1, &size);
201
- buf[size] = '\0';
202
-
203
- std::string result = buf;
204
- delete [] buf;
205
- return result;
141
+ return ToString(env, value);
206
142
  }
207
143
  }
208
144
 
209
145
  return "";
210
146
  }
211
147
 
212
- static void DisposeSliceBuffer (leveldb::Slice slice) {
213
- if (!slice.empty()) delete [] slice.data();
214
- }
215
-
216
- /**
217
- * Convert a napi_value to a leveldb::Slice.
218
- */
219
- static leveldb::Slice ToSlice (napi_env env, napi_value from) {
220
- LD_STRING_OR_BUFFER_TO_COPY(env, from, to);
221
- return leveldb::Slice(toCh_, toSz_);
222
- }
223
-
224
- /**
225
- * Returns length of string or buffer
226
- */
227
148
  static size_t StringOrBufferLength (napi_env env, napi_value value) {
228
149
  size_t size = 0;
229
150
 
230
151
  if (IsString(env, value)) {
231
- napi_get_value_string_utf8(env, value, NULL, 0, &size);
152
+ napi_get_value_string_utf8(env, value, nullptr, 0, &size);
232
153
  } else if (IsBuffer(env, value)) {
233
- char* buf;
154
+ char* buf = nullptr;
234
155
  napi_get_buffer_info(env, value, (void **)&buf, &size);
235
156
  }
236
157
 
237
158
  return size;
238
159
  }
239
160
 
240
- /**
241
- * Takes a Buffer or string property 'name' from 'opts'.
242
- * Returns null if the property does not exist or is zero-length.
243
- */
244
- static std::string* RangeOption (napi_env env, napi_value opts, const char* name) {
161
+ static std::optional<std::string> RangeOption (napi_env env, napi_value opts, const char* name) {
245
162
  if (HasProperty(env, opts, name)) {
246
- napi_value value = GetProperty(env, opts, name);
163
+ const auto value = GetProperty(env, opts, name);
247
164
 
248
165
  if (StringOrBufferLength(env, value) > 0) {
249
- LD_STRING_OR_BUFFER_TO_COPY(env, value, to);
250
- std::string* result = new std::string(toCh_, toSz_);
251
- delete [] toCh_;
252
- return result;
166
+ return ToString(env, value);
253
167
  }
254
168
  }
255
169
 
256
- return NULL;
170
+ return {};
257
171
  }
258
172
 
259
- /**
260
- * Converts an array containing Buffer or string keys to a vector.
261
- * Empty elements are skipped.
262
- */
263
- static std::vector<std::string>* KeyArray (napi_env env, napi_value arr) {
173
+ static std::vector<std::string> KeyArray (napi_env env, napi_value arr) {
264
174
  uint32_t length;
265
- std::vector<std::string>* result = new std::vector<std::string>();
175
+ std::vector<std::string> result;
266
176
 
267
177
  if (napi_get_array_length(env, arr, &length) == napi_ok) {
268
- result->reserve(length);
178
+ result.reserve(length);
269
179
 
270
180
  for (uint32_t i = 0; i < length; i++) {
271
181
  napi_value element;
272
182
 
273
183
  if (napi_get_element(env, arr, i, &element) == napi_ok &&
274
184
  StringOrBufferLength(env, element) > 0) {
275
- LD_STRING_OR_BUFFER_TO_COPY(env, element, to);
276
- result->emplace_back(toCh_, toSz_);
277
- delete [] toCh_;
185
+ result.push_back(ToString(env, element));
278
186
  }
279
187
  }
280
188
  }
@@ -282,75 +190,24 @@ static std::vector<std::string>* KeyArray (napi_env env, napi_value arr) {
282
190
  return result;
283
191
  }
284
192
 
285
- /**
286
- * Calls a function.
287
- */
288
193
  static napi_status CallFunction (napi_env env,
289
194
  napi_value callback,
290
195
  const int argc,
291
196
  napi_value* argv) {
292
197
  napi_value global;
293
198
  napi_get_global(env, &global);
294
- return napi_call_function(env, global, callback, argc, argv, NULL);
199
+ return napi_call_function(env, global, callback, argc, argv, nullptr);
295
200
  }
296
201
 
297
- /**
298
- * Whether to yield entries, keys or values.
299
- */
300
- enum Mode {
301
- entries,
302
- keys,
303
- values
304
- };
305
-
306
- /**
307
- * Helper struct for caching and converting a key-value pair to napi_values.
308
- */
309
- struct Entry {
310
- Entry (const leveldb::Slice* key, const leveldb::Slice* value) {
311
- key_ = key != NULL ? new std::string(key->data(), key->size()) : NULL;
312
- value_ = value != NULL ? new std::string(value->data(), value->size()) : NULL;
313
- }
314
-
315
- ~Entry () {
316
- if (key_ != NULL) delete key_;
317
- if (value_ != NULL) delete value_;
202
+ void Convert (napi_env env, const std::optional<std::string>& s, bool asBuffer, napi_value& result) {
203
+ if (!s) {
204
+ napi_get_undefined(env, &result);
205
+ } else if (asBuffer) {
206
+ napi_create_buffer_copy(env, s->size(), s->data(), nullptr, &result);
207
+ } else {
208
+ napi_create_string_utf8(env, s->data(), s->size(), &result);
318
209
  }
319
-
320
- // Not used yet.
321
- void ConvertXX (napi_env env, Mode mode, bool keyAsBuffer, bool valueAsBuffer, napi_value* result) {
322
- if (mode == Mode::entries) {
323
- napi_create_array_with_length(env, 2, result);
324
-
325
- napi_value valueElement;
326
- napi_value keyElement;
327
-
328
- Convert(env, key_, keyAsBuffer, &keyElement);
329
- Convert(env, value_, valueAsBuffer, &valueElement);
330
-
331
- napi_set_element(env, *result, 0, keyElement);
332
- napi_set_element(env, *result, 1, valueElement);
333
- } else if (mode == Mode::keys) {
334
- Convert(env, key_, keyAsBuffer, result);
335
- } else {
336
- Convert(env, value_, valueAsBuffer, result);
337
- }
338
- }
339
-
340
- static void Convert (napi_env env, const std::string* s, bool asBuffer, napi_value* result) {
341
- if (s == NULL) {
342
- napi_get_undefined(env, result);
343
- } else if (asBuffer) {
344
- napi_create_buffer_copy(env, s->size(), s->data(), NULL, result);
345
- } else {
346
- napi_create_string_utf8(env, s->data(), s->size(), result);
347
- }
348
- }
349
-
350
- private:
351
- std::string* key_;
352
- std::string* value_;
353
- };
210
+ }
354
211
 
355
212
  /**
356
213
  * Base worker class. Handles the async work. Derived classes can override the
@@ -367,7 +224,7 @@ struct BaseWorker {
367
224
  Database* database,
368
225
  napi_value callback,
369
226
  const char* resourceName)
370
- : database_(database), errMsg_(NULL) {
227
+ : database_(database) {
371
228
  NAPI_STATUS_THROWS_VOID(napi_create_reference(env, callback, 1, &callbackRef_));
372
229
  napi_value asyncResourceName;
373
230
  NAPI_STATUS_THROWS_VOID(napi_create_string_utf8(env, resourceName,
@@ -380,38 +237,24 @@ struct BaseWorker {
380
237
  this, &asyncWork_));
381
238
  }
382
239
 
383
- virtual ~BaseWorker () {
384
- delete [] errMsg_;
385
- }
240
+ virtual ~BaseWorker () {}
386
241
 
387
242
  static void Execute (napi_env env, void* data) {
388
- BaseWorker* self = (BaseWorker*)data;
243
+ auto self = reinterpret_cast<BaseWorker*>(data);
389
244
 
390
245
  // Don't pass env to DoExecute() because use of Node-API
391
246
  // methods should generally be avoided in async work.
392
247
  self->DoExecute();
393
248
  }
394
249
 
395
- bool SetStatus (leveldb::Status status) {
250
+ void SetStatus (const leveldb::Status& status) {
396
251
  status_ = status;
397
- if (!status.ok()) {
398
- SetErrorMessage(status.ToString().c_str());
399
- return false;
400
- }
401
- return true;
402
- }
403
-
404
- void SetErrorMessage(const char *msg) {
405
- delete [] errMsg_;
406
- size_t size = strlen(msg) + 1;
407
- errMsg_ = new char[size];
408
- memcpy(errMsg_, msg, size);
409
252
  }
410
253
 
411
254
  virtual void DoExecute () = 0;
412
255
 
413
256
  static void Complete (napi_env env, napi_status status, void* data) {
414
- BaseWorker* self = (BaseWorker*)data;
257
+ auto self = reinterpret_cast<BaseWorker*>(data);
415
258
 
416
259
  self->DoComplete(env);
417
260
  self->DoFinally(env);
@@ -435,7 +278,7 @@ struct BaseWorker {
435
278
  }
436
279
 
437
280
  virtual void HandleErrorCallback (napi_env env, napi_value callback) {
438
- napi_value argv = CreateError(env, errMsg_);
281
+ auto argv = CreateError(env, status_.ToString());
439
282
  CallFunction(env, callback, 1, &argv);
440
283
  }
441
284
 
@@ -456,7 +299,6 @@ private:
456
299
  napi_ref callbackRef_;
457
300
  napi_async_work asyncWork_;
458
301
  leveldb::Status status_;
459
- char *errMsg_;
460
302
  };
461
303
 
462
304
  /**
@@ -464,48 +306,44 @@ private:
464
306
  */
465
307
  struct Database {
466
308
  Database ()
467
- : db_(NULL),
468
- currentIteratorId_(0),
469
- pendingCloseWorker_(NULL),
470
- ref_(NULL),
309
+ : pendingCloseWorker_(nullptr),
310
+ ref_(nullptr),
471
311
  priorityWork_(0) {}
472
312
 
473
- ~Database () {
474
- if (db_ != NULL) {
475
- delete db_;
476
- db_ = NULL;
477
- }
478
- }
479
-
480
313
  leveldb::Status Open (const leveldb::Options& options,
481
- bool readOnly,
314
+ const bool readOnly,
482
315
  const char* location) {
483
316
  if (readOnly) {
484
- return rocksdb::DB::OpenForReadOnly(options, location, &db_);
317
+ leveldb::DB* db = nullptr;
318
+ const auto status = rocksdb::DB::OpenForReadOnly(options, location, &db);
319
+ db_.reset(db);
320
+ return status;
485
321
  } else {
486
- return leveldb::DB::Open(options, location, &db_);
322
+ leveldb::DB* db = nullptr;
323
+ const auto status = leveldb::DB::Open(options, location, &db);
324
+ db_.reset(db);
325
+ return status;
487
326
  }
488
327
  }
489
328
 
490
329
  void CloseDatabase () {
491
- delete db_;
492
- db_ = NULL;
330
+ db_.reset();
493
331
  }
494
332
 
495
333
  leveldb::Status Put (const leveldb::WriteOptions& options,
496
- leveldb::Slice key,
497
- leveldb::Slice value) {
334
+ const std::string& key,
335
+ const std::string& value) {
498
336
  return db_->Put(options, key, value);
499
337
  }
500
338
 
501
339
  leveldb::Status Get (const leveldb::ReadOptions& options,
502
- leveldb::Slice key,
340
+ const std::string& key,
503
341
  std::string& value) {
504
342
  return db_->Get(options, key, &value);
505
343
  }
506
344
 
507
345
  leveldb::Status Del (const leveldb::WriteOptions& options,
508
- leveldb::Slice key) {
346
+ const std::string& key) {
509
347
  return db_->Delete(options, key);
510
348
  }
511
349
 
@@ -514,41 +352,29 @@ struct Database {
514
352
  return db_->Write(options, batch);
515
353
  }
516
354
 
517
- uint64_t ApproximateSize (const leveldb::Range* range) {
518
- uint64_t size = 0;
519
- db_->GetApproximateSizes(range, 1, &size);
520
- return size;
521
- }
522
-
523
- void CompactRange (const leveldb::Slice* start,
524
- const leveldb::Slice* end) {
525
- rocksdb::CompactRangeOptions options;
526
- db_->CompactRange(options, start, end);
527
- }
528
-
529
- void GetProperty (const leveldb::Slice& property, std::string* value) {
530
- db_->GetProperty(property, value);
355
+ void GetProperty (const std::string& property, std::string& value) {
356
+ db_->GetProperty(property, &value);
531
357
  }
532
358
 
533
359
  const leveldb::Snapshot* NewSnapshot () {
534
360
  return db_->GetSnapshot();
535
361
  }
536
362
 
537
- leveldb::Iterator* NewIterator (leveldb::ReadOptions* options) {
538
- return db_->NewIterator(*options);
363
+ leveldb::Iterator* NewIterator (const leveldb::ReadOptions& options) {
364
+ return db_->NewIterator(options);
539
365
  }
540
366
 
541
367
  void ReleaseSnapshot (const leveldb::Snapshot* snapshot) {
542
368
  return db_->ReleaseSnapshot(snapshot);
543
369
  }
544
370
 
545
- void AttachIterator (napi_env env, uint32_t id, Iterator* iterator) {
546
- iterators_[id] = iterator;
371
+ void AttachIterator (napi_env env, Iterator* iterator) {
372
+ iterators_.insert(iterator);
547
373
  IncrementPriorityWork(env);
548
374
  }
549
375
 
550
- void DetachIterator (napi_env env, uint32_t id) {
551
- iterators_.erase(id);
376
+ void DetachIterator (napi_env env, Iterator* iterator) {
377
+ iterators_.erase(iterator);
552
378
  DecrementPriorityWork(env);
553
379
  }
554
380
 
@@ -559,9 +385,9 @@ struct Database {
559
385
  void DecrementPriorityWork (napi_env env) {
560
386
  napi_reference_unref(env, ref_, &priorityWork_);
561
387
 
562
- if (priorityWork_ == 0 && pendingCloseWorker_ != NULL) {
388
+ if (priorityWork_ == 0 && pendingCloseWorker_) {
563
389
  pendingCloseWorker_->Queue(env);
564
- pendingCloseWorker_ = NULL;
390
+ pendingCloseWorker_ = nullptr;
565
391
  }
566
392
  }
567
393
 
@@ -569,10 +395,9 @@ struct Database {
569
395
  return priorityWork_ > 0;
570
396
  }
571
397
 
572
- leveldb::DB* db_;
573
- uint32_t currentIteratorId_;
574
- BaseWorker *pendingCloseWorker_;
575
- std::map< uint32_t, Iterator * > iterators_;
398
+ std::unique_ptr<leveldb::DB> db_;
399
+ BaseWorker* pendingCloseWorker_;
400
+ std::set<Iterator*> iterators_;
576
401
  napi_ref ref_;
577
402
 
578
403
  private:
@@ -596,20 +421,24 @@ struct PriorityWorker : public BaseWorker {
596
421
  }
597
422
  };
598
423
 
599
- /**
600
- * Owns a leveldb iterator.
601
- */
602
424
  struct BaseIterator {
603
425
  BaseIterator(Database* database,
604
426
  const bool reverse,
605
- std::string* lt,
606
- std::string* lte,
607
- std::string* gt,
608
- std::string* gte,
427
+ const std::optional<std::string>& lt,
428
+ const std::optional<std::string>& lte,
429
+ const std::optional<std::string>& gt,
430
+ const std::optional<std::string>& gte,
609
431
  const int limit,
610
432
  const bool fillCache)
611
433
  : database_(database),
612
- hasEnded_(false),
434
+ snapshot_(database->NewSnapshot()),
435
+ dbIterator_(database->NewIterator([&]{
436
+ leveldb::ReadOptions options;
437
+ options.fill_cache = fillCache;
438
+ options.verify_checksums = false;
439
+ options.snapshot = snapshot_;
440
+ return options;
441
+ }())),
613
442
  didSeek_(false),
614
443
  reverse_(reverse),
615
444
  lt_(lt),
@@ -618,22 +447,10 @@ struct BaseIterator {
618
447
  gte_(gte),
619
448
  limit_(limit),
620
449
  count_(0) {
621
- options_ = new leveldb::ReadOptions();
622
- options_->fill_cache = fillCache;
623
- options_->verify_checksums = false;
624
- options_->snapshot = database->NewSnapshot();
625
- dbIterator_ = database_->NewIterator(options_);
626
450
  }
627
451
 
628
452
  virtual ~BaseIterator () {
629
- assert(hasEnded_);
630
-
631
- if (lt_ != NULL) delete lt_;
632
- if (gt_ != NULL) delete gt_;
633
- if (lte_ != NULL) delete lte_;
634
- if (gte_ != NULL) delete gte_;
635
-
636
- delete options_;
453
+ assert(!dbIterator_);
637
454
  }
638
455
 
639
456
  bool DidSeek () const {
@@ -646,15 +463,15 @@ struct BaseIterator {
646
463
  void SeekToRange () {
647
464
  didSeek_ = true;
648
465
 
649
- if (!reverse_ && gte_ != NULL) {
466
+ if (!reverse_ && gte_) {
650
467
  dbIterator_->Seek(*gte_);
651
- } else if (!reverse_ && gt_ != NULL) {
468
+ } else if (!reverse_ && gt_) {
652
469
  dbIterator_->Seek(*gt_);
653
470
 
654
471
  if (dbIterator_->Valid() && dbIterator_->key().compare(*gt_) == 0) {
655
472
  dbIterator_->Next();
656
473
  }
657
- } else if (reverse_ && lte_ != NULL) {
474
+ } else if (reverse_ && lte_) {
658
475
  dbIterator_->Seek(*lte_);
659
476
 
660
477
  if (!dbIterator_->Valid()) {
@@ -662,7 +479,7 @@ struct BaseIterator {
662
479
  } else if (dbIterator_->key().compare(*lte_) > 0) {
663
480
  dbIterator_->Prev();
664
481
  }
665
- } else if (reverse_ && lt_ != NULL) {
482
+ } else if (reverse_ && lt_) {
666
483
  dbIterator_->Seek(*lt_);
667
484
 
668
485
  if (!dbIterator_->Valid()) {
@@ -680,7 +497,7 @@ struct BaseIterator {
680
497
  /**
681
498
  * Seek manually (during iteration).
682
499
  */
683
- void Seek (leveldb::Slice& target) {
500
+ void Seek (const std::string& target) {
684
501
  didSeek_ = true;
685
502
 
686
503
  if (OutOfRange(target)) {
@@ -690,14 +507,14 @@ struct BaseIterator {
690
507
  dbIterator_->Seek(target);
691
508
 
692
509
  if (dbIterator_->Valid()) {
693
- int cmp = dbIterator_->key().compare(target);
510
+ const auto cmp = dbIterator_->key().compare(target);
694
511
  if (reverse_ ? cmp > 0 : cmp < 0) {
695
512
  Next();
696
513
  }
697
514
  } else {
698
515
  SeekToFirst();
699
516
  if (dbIterator_->Valid()) {
700
- int cmp = dbIterator_->key().compare(target);
517
+ const auto cmp = dbIterator_->key().compare(target);
701
518
  if (reverse_ ? cmp > 0 : cmp < 0) {
702
519
  SeekToEnd();
703
520
  }
@@ -705,12 +522,11 @@ struct BaseIterator {
705
522
  }
706
523
  }
707
524
 
708
- void End () {
709
- if (!hasEnded_) {
710
- hasEnded_ = true;
525
+ void Close () {
526
+ if (dbIterator_) {
711
527
  delete dbIterator_;
712
- dbIterator_ = NULL;
713
- database_->ReleaseSnapshot(options_->snapshot);
528
+ dbIterator_ = nullptr;
529
+ database_->ReleaseSnapshot(snapshot_);
714
530
  }
715
531
  }
716
532
 
@@ -755,54 +571,42 @@ struct BaseIterator {
755
571
  }
756
572
 
757
573
  bool OutOfRange (const leveldb::Slice& target) const {
758
- // TODO: benchmark to see if this is worth it
759
- // if (upperBoundOnly && !reverse_) {
760
- // return ((lt_ != NULL && target.compare(*lt_) >= 0) ||
761
- // (lte_ != NULL && target.compare(*lte_) > 0));
762
- // }
763
-
764
- return ((lt_ != NULL && target.compare(*lt_) >= 0) ||
765
- (lte_ != NULL && target.compare(*lte_) > 0) ||
766
- (gt_ != NULL && target.compare(*gt_) <= 0) ||
767
- (gte_ != NULL && target.compare(*gte_) < 0));
574
+ return ((lt_ && target.compare(*lt_) >= 0) ||
575
+ (lte_ && target.compare(*lte_) > 0) ||
576
+ (gt_ && target.compare(*gt_) <= 0) ||
577
+ (gte_ && target.compare(*gte_) < 0));
768
578
  }
769
579
 
770
580
  Database* database_;
771
- bool hasEnded_;
772
581
 
773
582
  private:
583
+ const leveldb::Snapshot* snapshot_;
774
584
  leveldb::Iterator* dbIterator_;
775
585
  bool didSeek_;
776
586
  const bool reverse_;
777
- std::string* lt_;
778
- std::string* lte_;
779
- std::string* gt_;
780
- std::string* gte_;
587
+ const std::optional<std::string> lt_;
588
+ const std::optional<std::string> lte_;
589
+ const std::optional<std::string> gt_;
590
+ const std::optional<std::string> gte_;
781
591
  const int limit_;
782
592
  int count_;
783
- leveldb::ReadOptions* options_;
784
593
  };
785
594
 
786
- /**
787
- * Extends BaseIterator for reading it from JS land.
788
- */
789
595
  struct Iterator final : public BaseIterator {
790
596
  Iterator (Database* database,
791
- const uint32_t id,
792
597
  const bool reverse,
793
598
  const bool keys,
794
599
  const bool values,
795
600
  const int limit,
796
- std::string* lt,
797
- std::string* lte,
798
- std::string* gt,
799
- std::string* gte,
601
+ const std::optional<std::string>& lt,
602
+ const std::optional<std::string>& lte,
603
+ const std::optional<std::string>& gt,
604
+ const std::optional<std::string>& gte,
800
605
  const bool fillCache,
801
606
  const bool keyAsBuffer,
802
607
  const bool valueAsBuffer,
803
608
  const uint32_t highWaterMark)
804
609
  : BaseIterator(database, reverse, lt, lte, gt, gte, limit, fillCache),
805
- id_(id),
806
610
  keys_(keys),
807
611
  values_(values),
808
612
  keyAsBuffer_(keyAsBuffer),
@@ -810,21 +614,19 @@ struct Iterator final : public BaseIterator {
810
614
  highWaterMark_(highWaterMark),
811
615
  landed_(false),
812
616
  nexting_(false),
813
- isEnding_(false),
814
- endWorker_(NULL),
815
- ref_(NULL) {
617
+ isClosing_(false),
618
+ closeWorker_(nullptr),
619
+ ref_(nullptr) {
816
620
  }
817
621
 
818
- ~Iterator () {}
819
-
820
622
  void Attach (napi_env env, napi_value context) {
821
623
  napi_create_reference(env, context, 1, &ref_);
822
- database_->AttachIterator(env, id_, this);
624
+ database_->AttachIterator(env, this);
823
625
  }
824
626
 
825
627
  void Detach (napi_env env) {
826
- database_->DetachIterator(env, id_);
827
- if (ref_ != NULL) napi_delete_reference(env, ref_);
628
+ database_->DetachIterator(env, this);
629
+ if (ref_) napi_delete_reference(env, ref_);
828
630
  }
829
631
 
830
632
  bool ReadMany (uint32_t size) {
@@ -836,7 +638,7 @@ struct Iterator final : public BaseIterator {
836
638
  if (!Valid() || !Increment()) break;
837
639
 
838
640
  if (keys_) {
839
- leveldb::Slice slice = CurrentKey();
641
+ const auto& slice = CurrentKey();
840
642
  cache_.emplace_back(slice.data(), slice.size());
841
643
  bytesRead += slice.size();
842
644
  } else {
@@ -844,7 +646,7 @@ struct Iterator final : public BaseIterator {
844
646
  }
845
647
 
846
648
  if (values_) {
847
- leveldb::Slice slice = CurrentValue();
649
+ const auto& slice = CurrentValue();
848
650
  cache_.emplace_back(slice.data(), slice.size());
849
651
  bytesRead += slice.size();
850
652
  } else {
@@ -864,7 +666,6 @@ struct Iterator final : public BaseIterator {
864
666
  return false;
865
667
  }
866
668
 
867
- const uint32_t id_;
868
669
  const bool keys_;
869
670
  const bool values_;
870
671
  const bool keyAsBuffer_;
@@ -872,8 +673,8 @@ struct Iterator final : public BaseIterator {
872
673
  const uint32_t highWaterMark_;
873
674
  bool landed_;
874
675
  bool nexting_;
875
- bool isEnding_;
876
- BaseWorker* endWorker_;
676
+ bool isClosing_;
677
+ BaseWorker* closeWorker_;
877
678
  std::vector<std::string> cache_;
878
679
 
879
680
  private:
@@ -894,35 +695,26 @@ static void env_cleanup_hook (void* arg) {
894
695
  // from an environment being torn down (like the main process or a worker thread)
895
696
  // where it's our responsibility to clean up. Note also, the following code must
896
697
  // be a safe noop if called before db_open() or after db_close().
897
- if (database && database->db_ != NULL) {
898
- std::map<uint32_t, Iterator*> iterators = database->iterators_;
899
- std::map<uint32_t, Iterator*>::iterator it;
900
-
698
+ if (database && database->db_) {
901
699
  // TODO: does not do `napi_delete_reference(env, iterator->ref_)`. Problem?
902
- for (it = iterators.begin(); it != iterators.end(); ++it) {
903
- it->second->End();
700
+ for (auto it = database->iterators_.begin(); it != database->iterators_.end(); ++it) {
701
+ (*it)->Close();
904
702
  }
905
703
 
906
- // Having ended the iterators (and released snapshots) we can safely close.
704
+ // Having closed the iterators (and released snapshots) we can safely close.
907
705
  database->CloseDatabase();
908
706
  }
909
707
  }
910
708
 
911
- /**
912
- * Runs when a Database is garbage collected.
913
- */
914
709
  static void FinalizeDatabase (napi_env env, void* data, void* hint) {
915
710
  if (data) {
916
711
  Database* database = (Database*)data;
917
712
  napi_remove_env_cleanup_hook(env, env_cleanup_hook, database);
918
- if (database->ref_ != NULL) napi_delete_reference(env, database->ref_);
713
+ if (database->ref_) napi_delete_reference(env, database->ref_);
919
714
  delete database;
920
715
  }
921
716
  }
922
717
 
923
- /**
924
- * Returns a context object for a database.
925
- */
926
718
  NAPI_METHOD(db_init) {
927
719
  Database* database = new Database();
928
720
  napi_add_env_cleanup_hook(env, env_cleanup_hook, database);
@@ -930,7 +722,7 @@ NAPI_METHOD(db_init) {
930
722
  napi_value result;
931
723
  NAPI_STATUS_THROWS(napi_create_external(env, database,
932
724
  FinalizeDatabase,
933
- NULL, &result));
725
+ nullptr, &result));
934
726
 
935
727
  // Reference counter to prevent GC of database while priority workers are active
936
728
  NAPI_STATUS_THROWS(napi_create_reference(env, result, 0, &database->ref_));
@@ -972,7 +764,7 @@ struct OpenWorker final : public BaseWorker {
972
764
  options_.paranoid_checks = false;
973
765
 
974
766
  if (infoLogLevel.size() > 0) {
975
- rocksdb::InfoLogLevel lvl;
767
+ rocksdb::InfoLogLevel lvl = {};
976
768
 
977
769
  if (infoLogLevel == "debug") lvl = rocksdb::InfoLogLevel::DEBUG_LEVEL;
978
770
  else if (infoLogLevel == "info") lvl = rocksdb::InfoLogLevel::INFO_LEVEL;
@@ -980,7 +772,7 @@ struct OpenWorker final : public BaseWorker {
980
772
  else if (infoLogLevel == "error") lvl = rocksdb::InfoLogLevel::ERROR_LEVEL;
981
773
  else if (infoLogLevel == "fatal") lvl = rocksdb::InfoLogLevel::FATAL_LEVEL;
982
774
  else if (infoLogLevel == "header") lvl = rocksdb::InfoLogLevel::HEADER_LEVEL;
983
- else napi_throw_error(env, NULL, "invalid log level");
775
+ else napi_throw_error(env, nullptr, "invalid log level");
984
776
 
985
777
  options_.info_log_level = lvl;
986
778
  } else {
@@ -1007,65 +799,55 @@ struct OpenWorker final : public BaseWorker {
1007
799
  );
1008
800
  }
1009
801
 
1010
- ~OpenWorker () {}
1011
-
1012
802
  void DoExecute () override {
1013
803
  SetStatus(database_->Open(options_, readOnly_, location_.c_str()));
1014
804
  }
1015
805
 
1016
806
  leveldb::Options options_;
1017
- bool readOnly_;
1018
- std::string location_;
807
+ const bool readOnly_;
808
+ const std::string location_;
1019
809
  };
1020
810
 
1021
- /**
1022
- * Open a database.
1023
- */
1024
811
  NAPI_METHOD(db_open) {
1025
812
  NAPI_ARGV(4);
1026
813
  NAPI_DB_CONTEXT();
1027
- NAPI_ARGV_UTF8_NEW(location, 1);
1028
814
 
1029
- napi_value options = argv[2];
1030
- const bool createIfMissing = BooleanProperty(env, options, "createIfMissing", true);
1031
- const bool errorIfExists = BooleanProperty(env, options, "errorIfExists", false);
1032
- const bool compression = BooleanProperty(env, options, "compression", true);
1033
- bool readOnly = BooleanProperty(env, options, "readOnly", false);
815
+ const auto location = ToString(env, argv[1]);
816
+ const auto options = argv[2];
817
+ const auto createIfMissing = BooleanProperty(env, options, "createIfMissing", true);
818
+ const auto errorIfExists = BooleanProperty(env, options, "errorIfExists", false);
819
+ const auto compression = BooleanProperty(env, options, "compression", true);
820
+ const auto readOnly = BooleanProperty(env, options, "readOnly", false);
1034
821
 
1035
- const std::string infoLogLevel = StringProperty(env, options, "infoLogLevel");
822
+ const auto infoLogLevel = StringProperty(env, options, "infoLogLevel");
1036
823
 
1037
- const uint32_t cacheSize = Uint32Property(env, options, "cacheSize", 8 << 20);
1038
- const uint32_t writeBufferSize = Uint32Property(env, options , "writeBufferSize" , 4 << 20);
1039
- const uint32_t blockSize = Uint32Property(env, options, "blockSize", 4096);
1040
- const uint32_t maxOpenFiles = Uint32Property(env, options, "maxOpenFiles", 1000);
1041
- const uint32_t blockRestartInterval = Uint32Property(env, options,
824
+ const auto cacheSize = Uint32Property(env, options, "cacheSize", 8 << 20);
825
+ const auto writeBufferSize = Uint32Property(env, options , "writeBufferSize" , 4 << 20);
826
+ const auto blockSize = Uint32Property(env, options, "blockSize", 4096);
827
+ const auto maxOpenFiles = Uint32Property(env, options, "maxOpenFiles", 1000);
828
+ const auto blockRestartInterval = Uint32Property(env, options,
1042
829
  "blockRestartInterval", 16);
1043
- const uint32_t maxFileSize = Uint32Property(env, options, "maxFileSize", 2 << 20);
1044
-
1045
- napi_value callback = argv[3];
1046
- OpenWorker* worker = new OpenWorker(env, database, callback, location,
1047
- createIfMissing, errorIfExists,
1048
- compression, writeBufferSize, blockSize,
1049
- maxOpenFiles, blockRestartInterval,
1050
- maxFileSize, cacheSize,
1051
- infoLogLevel, readOnly);
830
+ const auto maxFileSize = Uint32Property(env, options, "maxFileSize", 2 << 20);
831
+
832
+ const auto callback = argv[3];
833
+
834
+ auto worker = new OpenWorker(env, database, callback, location,
835
+ createIfMissing, errorIfExists,
836
+ compression, writeBufferSize, blockSize,
837
+ maxOpenFiles, blockRestartInterval,
838
+ maxFileSize, cacheSize,
839
+ infoLogLevel, readOnly);
1052
840
  worker->Queue(env);
1053
- delete [] location;
1054
841
 
1055
- NAPI_RETURN_UNDEFINED();
842
+ return 0;
1056
843
  }
1057
844
 
1058
- /**
1059
- * Worker class for closing a database
1060
- */
1061
845
  struct CloseWorker final : public BaseWorker {
1062
846
  CloseWorker (napi_env env,
1063
847
  Database* database,
1064
848
  napi_value callback)
1065
849
  : BaseWorker(env, database, callback, "leveldown.db.close") {}
1066
850
 
1067
- ~CloseWorker () {}
1068
-
1069
851
  void DoExecute () override {
1070
852
  database_->CloseDatabase();
1071
853
  }
@@ -1075,197 +857,84 @@ napi_value noop_callback (napi_env env, napi_callback_info info) {
1075
857
  return 0;
1076
858
  }
1077
859
 
1078
- /**
1079
- * Close a database.
1080
- */
1081
860
  NAPI_METHOD(db_close) {
1082
861
  NAPI_ARGV(2);
1083
862
  NAPI_DB_CONTEXT();
1084
863
 
1085
- napi_value callback = argv[1];
1086
- CloseWorker* worker = new CloseWorker(env, database, callback);
1087
-
1088
- if (!database->HasPriorityWork()) {
1089
- worker->Queue(env);
1090
- NAPI_RETURN_UNDEFINED();
1091
- }
1092
-
1093
- database->pendingCloseWorker_ = worker;
864
+ const auto callback = argv[1];
1094
865
 
1095
866
  napi_value noop;
1096
- napi_create_function(env, NULL, 0, noop_callback, NULL, &noop);
1097
-
1098
- std::map<uint32_t, Iterator*> iterators = database->iterators_;
1099
- std::map<uint32_t, Iterator*>::iterator it;
867
+ napi_create_function(env, nullptr, 0, noop_callback, nullptr, &noop);
1100
868
 
1101
- for (it = iterators.begin(); it != iterators.end(); ++it) {
1102
- iterator_end_do(env, it->second, noop);
869
+ for (auto it = database->iterators_.begin(); it != database->iterators_.end(); ++it) {
870
+ iterator_do_close(env, *it, noop);
1103
871
  }
872
+
873
+ auto worker = new CloseWorker(env, database, callback);
1104
874
 
1105
- NAPI_RETURN_UNDEFINED();
1106
- }
1107
-
1108
- /**
1109
- * Worker class for putting key/value to the database
1110
- */
1111
- struct PutWorker final : public PriorityWorker {
1112
- PutWorker (napi_env env,
1113
- Database* database,
1114
- napi_value callback,
1115
- leveldb::Slice key,
1116
- leveldb::Slice value,
1117
- bool sync)
1118
- : PriorityWorker(env, database, callback, "leveldown.db.put"),
1119
- key_(key), value_(value) {
1120
- options_.sync = sync;
1121
- }
1122
-
1123
- ~PutWorker () {
1124
- DisposeSliceBuffer(key_);
1125
- DisposeSliceBuffer(value_);
1126
- }
1127
-
1128
- void DoExecute () override {
1129
- SetStatus(database_->Put(options_, key_, value_));
1130
- }
1131
-
1132
- leveldb::WriteOptions options_;
1133
- leveldb::Slice key_;
1134
- leveldb::Slice value_;
1135
- };
1136
-
1137
- /**
1138
- * Puts a key and a value to a database.
1139
- */
1140
- NAPI_METHOD(db_put) {
1141
- NAPI_ARGV(5);
1142
- NAPI_DB_CONTEXT();
1143
-
1144
- leveldb::Slice key = ToSlice(env, argv[1]);
1145
- leveldb::Slice value = ToSlice(env, argv[2]);
1146
- bool sync = BooleanProperty(env, argv[3], "sync", false);
1147
- napi_value callback = argv[4];
1148
-
1149
- PutWorker* worker = new PutWorker(env, database, callback, key, value, sync);
1150
- worker->Queue(env);
1151
-
1152
- NAPI_RETURN_UNDEFINED();
1153
- }
1154
-
1155
- /**
1156
- * Worker class for getting a value from a database.
1157
- */
1158
- struct GetWorker final : public PriorityWorker {
1159
- GetWorker (napi_env env,
1160
- Database* database,
1161
- napi_value callback,
1162
- leveldb::Slice key,
1163
- const bool asBuffer,
1164
- const bool fillCache)
1165
- : PriorityWorker(env, database, callback, "leveldown.db.get"),
1166
- key_(key),
1167
- asBuffer_(asBuffer) {
1168
- options_.fill_cache = fillCache;
1169
- }
1170
-
1171
- ~GetWorker () {
1172
- DisposeSliceBuffer(key_);
1173
- }
1174
-
1175
- void DoExecute () override {
1176
- SetStatus(database_->Get(options_, key_, value_));
1177
- }
1178
-
1179
- void HandleOKCallback (napi_env env, napi_value callback) override {
1180
- napi_value argv[2];
1181
- napi_get_null(env, &argv[0]);
1182
- Entry::Convert(env, &value_, asBuffer_, &argv[1]);
1183
- CallFunction(env, callback, 2, argv);
875
+ if (!database->HasPriorityWork()) {
876
+ worker->Queue(env);
877
+ } else {
878
+ database->pendingCloseWorker_ = worker;
1184
879
  }
1185
880
 
1186
- private:
1187
- leveldb::ReadOptions options_;
1188
- leveldb::Slice key_;
1189
- std::string value_;
1190
- const bool asBuffer_;
1191
- };
1192
-
1193
- /**
1194
- * Gets a value from a database.
1195
- */
1196
- NAPI_METHOD(db_get) {
1197
- NAPI_ARGV(4);
1198
- NAPI_DB_CONTEXT();
1199
-
1200
- leveldb::Slice key = ToSlice(env, argv[1]);
1201
- napi_value options = argv[2];
1202
- const bool asBuffer = BooleanProperty(env, options, "asBuffer", true);
1203
- const bool fillCache = BooleanProperty(env, options, "fillCache", true);
1204
- napi_value callback = argv[3];
1205
-
1206
- GetWorker* worker = new GetWorker(env, database, callback, key, asBuffer,
1207
- fillCache);
1208
- worker->Queue(env);
1209
-
1210
- NAPI_RETURN_UNDEFINED();
881
+ return 0;
1211
882
  }
1212
883
 
1213
- /**
1214
- * Worker class for getting many values.
1215
- */
1216
884
  struct GetManyWorker final : public PriorityWorker {
1217
885
  GetManyWorker (napi_env env,
1218
886
  Database* database,
1219
- const std::vector<std::string>* keys,
887
+ const std::vector<std::string>& keys,
1220
888
  napi_value callback,
1221
889
  const bool valueAsBuffer,
1222
890
  const bool fillCache)
1223
891
  : PriorityWorker(env, database, callback, "leveldown.get.many"),
1224
- keys_(keys), valueAsBuffer_(valueAsBuffer) {
1225
- options_.fill_cache = fillCache;
1226
- options_.snapshot = database->NewSnapshot();
1227
- }
892
+ keys_(keys), valueAsBuffer_(valueAsBuffer), fillCache_(fillCache),
893
+ snapshot_(database->NewSnapshot()) {
894
+ }
1228
895
 
1229
- ~GetManyWorker() {
1230
- delete keys_;
896
+ ~GetManyWorker () {
897
+ if (snapshot_) {
898
+ database_->ReleaseSnapshot(snapshot_);
899
+ snapshot_ = nullptr;
900
+ }
1231
901
  }
1232
902
 
1233
903
  void DoExecute () override {
1234
- cache_.reserve(keys_->size());
904
+ cache_.reserve(keys_.size());
1235
905
 
1236
- for (const std::string& key: *keys_) {
1237
- std::string* value = new std::string();
1238
- leveldb::Status status = database_->Get(options_, key, *value);
906
+ leveldb::ReadOptions options;
907
+ options.snapshot = snapshot_;
908
+ options.fill_cache = fillCache_;
909
+
910
+ for (const auto& key: keys_) {
911
+ std::string value;
912
+ const auto status = database_->Get(options, key, value);
1239
913
 
1240
914
  if (status.ok()) {
1241
- cache_.push_back(value);
915
+ cache_.push_back(std::move(value));
1242
916
  } else if (status.IsNotFound()) {
1243
- delete value;
1244
- cache_.push_back(NULL);
917
+ cache_.push_back({});
1245
918
  } else {
1246
- delete value;
1247
- for (const std::string* value: cache_) {
1248
- if (value != NULL) delete value;
1249
- }
1250
919
  SetStatus(status);
1251
920
  break;
1252
921
  }
1253
922
  }
1254
923
 
1255
- database_->ReleaseSnapshot(options_.snapshot);
924
+ database_->ReleaseSnapshot(snapshot_);
925
+ snapshot_ = nullptr;
1256
926
  }
1257
927
 
1258
928
  void HandleOKCallback (napi_env env, napi_value callback) override {
1259
- size_t size = cache_.size();
929
+ const auto size = cache_.size();
930
+
1260
931
  napi_value array;
1261
932
  napi_create_array_with_length(env, size, &array);
1262
933
 
1263
934
  for (size_t idx = 0; idx < size; idx++) {
1264
- std::string* value = cache_[idx];
1265
935
  napi_value element;
1266
- Entry::Convert(env, value, valueAsBuffer_, &element);
936
+ Convert(env, cache_[idx], valueAsBuffer_, element);
1267
937
  napi_set_element(env, array, static_cast<uint32_t>(idx), element);
1268
- if (value != NULL) delete value;
1269
938
  }
1270
939
 
1271
940
  napi_value argv[2];
@@ -1275,441 +944,94 @@ struct GetManyWorker final : public PriorityWorker {
1275
944
  }
1276
945
 
1277
946
  private:
1278
- leveldb::ReadOptions options_;
1279
- const std::vector<std::string>* keys_;
947
+ const std::vector<std::string> keys_;
1280
948
  const bool valueAsBuffer_;
1281
- std::vector<std::string*> cache_;
949
+ std::vector<std::optional<std::string>> cache_;
950
+ const bool fillCache_;
951
+ const leveldb::Snapshot* snapshot_;
1282
952
  };
1283
953
 
1284
- /**
1285
- * Gets many values from a database.
1286
- */
1287
954
  NAPI_METHOD(db_get_many) {
1288
955
  NAPI_ARGV(4);
1289
956
  NAPI_DB_CONTEXT();
1290
957
 
1291
- const std::vector<std::string>* keys = KeyArray(env, argv[1]);
1292
- napi_value options = argv[2];
958
+ const auto keys = KeyArray(env, argv[1]);
959
+ const auto options = argv[2];
1293
960
  const bool asBuffer = BooleanProperty(env, options, "asBuffer", true);
1294
961
  const bool fillCache = BooleanProperty(env, options, "fillCache", true);
1295
- napi_value callback = argv[3];
1296
-
1297
- GetManyWorker* worker = new GetManyWorker(
1298
- env, database, keys, callback, asBuffer, fillCache
1299
- );
1300
-
1301
- worker->Queue(env);
1302
- NAPI_RETURN_UNDEFINED();
1303
- }
1304
-
1305
- /**
1306
- * Worker class for deleting a value from a database.
1307
- */
1308
- struct DelWorker final : public PriorityWorker {
1309
- DelWorker (napi_env env,
1310
- Database* database,
1311
- napi_value callback,
1312
- leveldb::Slice key,
1313
- bool sync)
1314
- : PriorityWorker(env, database, callback, "leveldown.db.del"),
1315
- key_(key) {
1316
- options_.sync = sync;
1317
- }
1318
-
1319
- ~DelWorker () {
1320
- DisposeSliceBuffer(key_);
1321
- }
1322
-
1323
- void DoExecute () override {
1324
- SetStatus(database_->Del(options_, key_));
1325
- }
1326
-
1327
- leveldb::WriteOptions options_;
1328
- leveldb::Slice key_;
1329
- };
1330
-
1331
- /**
1332
- * Delete a value from a database.
1333
- */
1334
- NAPI_METHOD(db_del) {
1335
- NAPI_ARGV(4);
1336
- NAPI_DB_CONTEXT();
962
+ const auto callback = argv[3];
1337
963
 
1338
- leveldb::Slice key = ToSlice(env, argv[1]);
1339
- bool sync = BooleanProperty(env, argv[2], "sync", false);
1340
- napi_value callback = argv[3];
1341
-
1342
- DelWorker* worker = new DelWorker(env, database, callback, key, sync);
964
+ auto worker = new GetManyWorker(env, database, keys, callback, asBuffer, fillCache);
1343
965
  worker->Queue(env);
1344
966
 
1345
- NAPI_RETURN_UNDEFINED();
1346
- }
1347
-
1348
- /**
1349
- * Worker class for deleting a range from a database.
1350
- */
1351
- struct ClearWorker final : public PriorityWorker {
1352
- ClearWorker (napi_env env,
1353
- Database* database,
1354
- napi_value callback,
1355
- const bool reverse,
1356
- const int limit,
1357
- std::string* lt,
1358
- std::string* lte,
1359
- std::string* gt,
1360
- std::string* gte)
1361
- : PriorityWorker(env, database, callback, "leveldown.db.clear") {
1362
- iterator_ = new BaseIterator(database, reverse, lt, lte, gt, gte, limit, false);
1363
- writeOptions_ = new leveldb::WriteOptions();
1364
- writeOptions_->sync = false;
1365
- }
1366
-
1367
- ~ClearWorker () {
1368
- delete iterator_;
1369
- delete writeOptions_;
1370
- }
1371
-
1372
- void DoExecute () override {
1373
- iterator_->SeekToRange();
1374
-
1375
- // TODO: add option
1376
- uint32_t hwm = 16 * 1024;
1377
- leveldb::WriteBatch batch;
1378
-
1379
- while (true) {
1380
- size_t bytesRead = 0;
1381
-
1382
- while (bytesRead <= hwm && iterator_->Valid() && iterator_->Increment()) {
1383
- leveldb::Slice key = iterator_->CurrentKey();
1384
- batch.Delete(key);
1385
- bytesRead += key.size();
1386
- iterator_->Next();
1387
- }
1388
-
1389
- if (!SetStatus(iterator_->Status()) || bytesRead == 0) {
1390
- break;
1391
- }
1392
-
1393
- if (!SetStatus(database_->WriteBatch(*writeOptions_, &batch))) {
1394
- break;
1395
- }
1396
-
1397
- batch.Clear();
1398
- }
1399
-
1400
- iterator_->End();
1401
- }
1402
-
1403
- private:
1404
- BaseIterator* iterator_;
1405
- leveldb::WriteOptions* writeOptions_;
1406
- };
1407
-
1408
- /**
1409
- * Delete a range from a database.
1410
- */
1411
- NAPI_METHOD(db_clear) {
1412
- NAPI_ARGV(3);
1413
- NAPI_DB_CONTEXT();
1414
-
1415
- napi_value options = argv[1];
1416
- napi_value callback = argv[2];
1417
-
1418
- const bool reverse = BooleanProperty(env, options, "reverse", false);
1419
- const int limit = Int32Property(env, options, "limit", -1);
1420
-
1421
- std::string* lt = RangeOption(env, options, "lt");
1422
- std::string* lte = RangeOption(env, options, "lte");
1423
- std::string* gt = RangeOption(env, options, "gt");
1424
- std::string* gte = RangeOption(env, options, "gte");
1425
-
1426
- ClearWorker* worker = new ClearWorker(env, database, callback, reverse, limit, lt, lte, gt, gte);
1427
- worker->Queue(env);
1428
-
1429
- NAPI_RETURN_UNDEFINED();
1430
- }
1431
-
1432
- /**
1433
- * Worker class for calculating the size of a range.
1434
- */
1435
- struct ApproximateSizeWorker final : public PriorityWorker {
1436
- ApproximateSizeWorker (napi_env env,
1437
- Database* database,
1438
- napi_value callback,
1439
- leveldb::Slice start,
1440
- leveldb::Slice end)
1441
- : PriorityWorker(env, database, callback, "leveldown.db.approximate_size"),
1442
- start_(start), end_(end) {}
1443
-
1444
- ~ApproximateSizeWorker () {
1445
- DisposeSliceBuffer(start_);
1446
- DisposeSliceBuffer(end_);
1447
- }
1448
-
1449
- void DoExecute () override {
1450
- leveldb::Range range(start_, end_);
1451
- size_ = database_->ApproximateSize(&range);
1452
- }
1453
-
1454
- void HandleOKCallback (napi_env env, napi_value callback) override {
1455
- napi_value argv[2];
1456
- napi_get_null(env, &argv[0]);
1457
- napi_create_int64(env, (uint64_t)size_, &argv[1]);
1458
- CallFunction(env, callback, 2, argv);
1459
- }
1460
-
1461
- leveldb::Slice start_;
1462
- leveldb::Slice end_;
1463
- uint64_t size_;
1464
- };
1465
-
1466
- /**
1467
- * Calculates the approximate size of a range in a database.
1468
- */
1469
- NAPI_METHOD(db_approximate_size) {
1470
- NAPI_ARGV(4);
1471
- NAPI_DB_CONTEXT();
1472
-
1473
- leveldb::Slice start = ToSlice(env, argv[1]);
1474
- leveldb::Slice end = ToSlice(env, argv[2]);
1475
-
1476
- napi_value callback = argv[3];
1477
-
1478
- ApproximateSizeWorker* worker = new ApproximateSizeWorker(env, database,
1479
- callback, start,
1480
- end);
1481
- worker->Queue(env);
1482
-
1483
- NAPI_RETURN_UNDEFINED();
1484
- }
1485
-
1486
- /**
1487
- * Worker class for compacting a range in a database.
1488
- */
1489
- struct CompactRangeWorker final : public PriorityWorker {
1490
- CompactRangeWorker (napi_env env,
1491
- Database* database,
1492
- napi_value callback,
1493
- leveldb::Slice start,
1494
- leveldb::Slice end)
1495
- : PriorityWorker(env, database, callback, "leveldown.db.compact_range"),
1496
- start_(start), end_(end) {}
1497
-
1498
- ~CompactRangeWorker () {
1499
- DisposeSliceBuffer(start_);
1500
- DisposeSliceBuffer(end_);
1501
- }
1502
-
1503
- void DoExecute () override {
1504
- database_->CompactRange(&start_, &end_);
1505
- }
1506
-
1507
- leveldb::Slice start_;
1508
- leveldb::Slice end_;
1509
- };
1510
-
1511
- /**
1512
- * Compacts a range in a database.
1513
- */
1514
- NAPI_METHOD(db_compact_range) {
1515
- NAPI_ARGV(4);
1516
- NAPI_DB_CONTEXT();
1517
-
1518
- leveldb::Slice start = ToSlice(env, argv[1]);
1519
- leveldb::Slice end = ToSlice(env, argv[2]);
1520
- napi_value callback = argv[3];
1521
-
1522
- CompactRangeWorker* worker = new CompactRangeWorker(env, database, callback,
1523
- start, end);
1524
- worker->Queue(env);
1525
-
1526
- NAPI_RETURN_UNDEFINED();
1527
- }
1528
-
1529
- /**
1530
- * Get a property from a database.
1531
- */
1532
- NAPI_METHOD(db_get_property) {
1533
- NAPI_ARGV(2);
1534
- NAPI_DB_CONTEXT();
1535
-
1536
- leveldb::Slice property = ToSlice(env, argv[1]);
1537
-
1538
- std::string value;
1539
- database->GetProperty(property, &value);
1540
-
1541
- napi_value result;
1542
- napi_create_string_utf8(env, value.data(), value.size(), &result);
1543
-
1544
- DisposeSliceBuffer(property);
1545
-
1546
- return result;
1547
- }
1548
-
1549
- /**
1550
- * Worker class for destroying a database.
1551
- */
1552
- struct DestroyWorker final : public BaseWorker {
1553
- DestroyWorker (napi_env env,
1554
- const std::string& location,
1555
- napi_value callback)
1556
- : BaseWorker(env, NULL, callback, "leveldown.destroy_db"),
1557
- location_(location) {}
1558
-
1559
- ~DestroyWorker () {}
1560
-
1561
- void DoExecute () override {
1562
- leveldb::Options options;
1563
-
1564
- // TODO: support overriding infoLogLevel the same as db.open(options)
1565
- options.info_log_level = rocksdb::InfoLogLevel::HEADER_LEVEL;
1566
- options.info_log.reset(new NullLogger());
1567
-
1568
- SetStatus(leveldb::DestroyDB(location_, options));
1569
- }
1570
-
1571
- std::string location_;
1572
- };
1573
-
1574
- /**
1575
- * Destroys a database.
1576
- */
1577
- NAPI_METHOD(destroy_db) {
1578
- NAPI_ARGV(2);
1579
- NAPI_ARGV_UTF8_NEW(location, 0);
1580
- napi_value callback = argv[1];
1581
-
1582
- DestroyWorker* worker = new DestroyWorker(env, location, callback);
1583
- worker->Queue(env);
1584
-
1585
- delete [] location;
1586
-
1587
- NAPI_RETURN_UNDEFINED();
1588
- }
1589
-
1590
- /**
1591
- * Worker class for repairing a database.
1592
- */
1593
- struct RepairWorker final : public BaseWorker {
1594
- RepairWorker (napi_env env,
1595
- const std::string& location,
1596
- napi_value callback)
1597
- : BaseWorker(env, NULL, callback, "leveldown.repair_db"),
1598
- location_(location) {}
1599
-
1600
- ~RepairWorker () {}
1601
-
1602
- void DoExecute () override {
1603
- leveldb::Options options;
1604
-
1605
- // TODO: support overriding infoLogLevel the same as db.open(options)
1606
- options.info_log_level = rocksdb::InfoLogLevel::HEADER_LEVEL;
1607
- options.info_log.reset(new NullLogger());
1608
-
1609
- SetStatus(leveldb::RepairDB(location_, options));
1610
- }
1611
-
1612
- std::string location_;
1613
- };
1614
-
1615
- /**
1616
- * Repairs a database.
1617
- */
1618
- NAPI_METHOD(repair_db) {
1619
- NAPI_ARGV(2);
1620
- NAPI_ARGV_UTF8_NEW(location, 0);
1621
- napi_value callback = argv[1];
1622
-
1623
- RepairWorker* worker = new RepairWorker(env, location, callback);
1624
- worker->Queue(env);
1625
-
1626
- delete [] location;
1627
-
1628
- NAPI_RETURN_UNDEFINED();
967
+ return 0;
1629
968
  }
1630
969
 
1631
- /**
1632
- * Runs when an Iterator is garbage collected.
1633
- */
1634
970
  static void FinalizeIterator (napi_env env, void* data, void* hint) {
1635
971
  if (data) {
1636
- delete (Iterator*)data;
972
+ delete reinterpret_cast<Iterator*>(data);
1637
973
  }
1638
974
  }
1639
975
 
1640
- /**
1641
- * Create an iterator.
1642
- */
1643
976
  NAPI_METHOD(iterator_init) {
1644
977
  NAPI_ARGV(2);
1645
978
  NAPI_DB_CONTEXT();
1646
979
 
1647
- napi_value options = argv[1];
1648
- const bool reverse = BooleanProperty(env, options, "reverse", false);
1649
- const bool keys = BooleanProperty(env, options, "keys", true);
1650
- const bool values = BooleanProperty(env, options, "values", true);
1651
- const bool fillCache = BooleanProperty(env, options, "fillCache", false);
1652
- const bool keyAsBuffer = BooleanProperty(env, options, "keyAsBuffer", true);
1653
- const bool valueAsBuffer = BooleanProperty(env, options, "valueAsBuffer", true);
1654
- const int limit = Int32Property(env, options, "limit", -1);
1655
- const uint32_t highWaterMark = Uint32Property(env, options, "highWaterMark",
1656
- 16 * 1024);
1657
-
1658
- std::string* lt = RangeOption(env, options, "lt");
1659
- std::string* lte = RangeOption(env, options, "lte");
1660
- std::string* gt = RangeOption(env, options, "gt");
1661
- std::string* gte = RangeOption(env, options, "gte");
1662
-
1663
- const uint32_t id = database->currentIteratorId_++;
1664
- Iterator* iterator = new Iterator(database, id, reverse, keys,
1665
- values, limit, lt, lte, gt, gte, fillCache,
1666
- keyAsBuffer, valueAsBuffer, highWaterMark);
980
+ const auto options = argv[1];
981
+ const auto reverse = BooleanProperty(env, options, "reverse", false);
982
+ const auto keys = BooleanProperty(env, options, "keys", true);
983
+ const auto values = BooleanProperty(env, options, "values", true);
984
+ const auto fillCache = BooleanProperty(env, options, "fillCache", false);
985
+ const auto keyAsBuffer = BooleanProperty(env, options, "keyAsBuffer", true);
986
+ const auto valueAsBuffer = BooleanProperty(env, options, "valueAsBuffer", true);
987
+ const auto limit = Int32Property(env, options, "limit", -1);
988
+ const auto highWaterMark = Uint32Property(env, options, "highWaterMark", 16 * 1024);
989
+
990
+ const auto lt = RangeOption(env, options, "lt");
991
+ const auto lte = RangeOption(env, options, "lte");
992
+ const auto gt = RangeOption(env, options, "gt");
993
+ const auto gte = RangeOption(env, options, "gte");
994
+
995
+ auto iterator = new Iterator(database, reverse, keys,
996
+ values, limit, lt, lte, gt, gte, fillCache,
997
+ keyAsBuffer, valueAsBuffer, highWaterMark);
1667
998
  napi_value result;
1668
999
 
1669
1000
  NAPI_STATUS_THROWS(napi_create_external(env, iterator,
1670
1001
  FinalizeIterator,
1671
- NULL, &result));
1002
+ nullptr, &result));
1672
1003
 
1673
- // Prevent GC of JS object before the iterator is ended (explicitly or on
1674
- // db close) and keep track of non-ended iterators to end them on db close.
1004
+ // Prevent GC of JS object before the iterator is closed (explicitly or on
1005
+ // db close) and keep track of non-closed iterators to end them on db close.
1675
1006
  iterator->Attach(env, result);
1676
1007
 
1677
1008
  return result;
1678
1009
  }
1679
1010
 
1680
- /**
1681
- * Seeks an iterator.
1682
- */
1683
1011
  NAPI_METHOD(iterator_seek) {
1684
1012
  NAPI_ARGV(2);
1685
1013
  NAPI_ITERATOR_CONTEXT();
1686
1014
 
1687
- if (iterator->isEnding_ || iterator->hasEnded_) {
1688
- napi_throw_error(env, NULL, "iterator has ended");
1015
+ if (iterator->isClosing_) {
1016
+ napi_throw_error(env, nullptr, "iterator has closed");
1689
1017
  }
1690
1018
 
1691
- leveldb::Slice target = ToSlice(env, argv[1]);
1019
+ const auto target = ToString(env, argv[1]);
1692
1020
  iterator->landed_ = false;
1693
1021
  iterator->Seek(target);
1694
1022
 
1695
- DisposeSliceBuffer(target);
1696
- NAPI_RETURN_UNDEFINED();
1023
+ return 0;
1697
1024
  }
1698
1025
 
1699
- /**
1700
- * Worker class for ending an iterator
1701
- */
1702
- struct EndWorker final : public BaseWorker {
1703
- EndWorker (napi_env env,
1704
- Iterator* iterator,
1705
- napi_value callback)
1026
+ struct CloseIteratorWorker final : public BaseWorker {
1027
+ CloseIteratorWorker (napi_env env,
1028
+ Iterator* iterator,
1029
+ napi_value callback)
1706
1030
  : BaseWorker(env, iterator->database_, callback, "leveldown.iterator.end"),
1707
1031
  iterator_(iterator) {}
1708
1032
 
1709
- ~EndWorker () {}
1710
-
1711
1033
  void DoExecute () override {
1712
- iterator_->End();
1034
+ iterator_->Close();
1713
1035
  }
1714
1036
 
1715
1037
  void DoFinally (napi_env env) override {
@@ -1722,46 +1044,39 @@ private:
1722
1044
  };
1723
1045
 
1724
1046
  /**
1725
- * Called by NAPI_METHOD(iterator_end) and also when closing
1047
+ * Called by NAPI_METHOD(iterator_) and also when closing
1726
1048
  * open iterators during NAPI_METHOD(db_close).
1727
1049
  */
1728
- static void iterator_end_do (napi_env env, Iterator* iterator, napi_value cb) {
1729
- if (!iterator->isEnding_ && !iterator->hasEnded_) {
1730
- EndWorker* worker = new EndWorker(env, iterator, cb);
1731
- iterator->isEnding_ = true;
1050
+ static void iterator_do_close (napi_env env, Iterator* iterator, napi_value cb) {
1051
+ if (!iterator->isClosing_) {
1052
+ auto worker = new CloseIteratorWorker(env, iterator, cb);
1053
+ iterator->isClosing_ = true;
1732
1054
 
1733
1055
  if (iterator->nexting_) {
1734
- iterator->endWorker_ = worker;
1056
+ iterator->closeWorker_ = worker;
1735
1057
  } else {
1736
1058
  worker->Queue(env);
1737
1059
  }
1738
1060
  }
1739
1061
  }
1740
1062
 
1741
- /**
1742
- * Ends an iterator.
1743
- */
1744
- NAPI_METHOD(iterator_end) {
1063
+ NAPI_METHOD(iterator_close) {
1745
1064
  NAPI_ARGV(2);
1746
1065
  NAPI_ITERATOR_CONTEXT();
1747
1066
 
1748
- iterator_end_do(env, iterator, argv[1]);
1067
+ iterator_do_close(env, iterator, argv[1]);
1749
1068
 
1750
- NAPI_RETURN_UNDEFINED();
1069
+ return 0;
1751
1070
  }
1752
1071
 
1753
- /**
1754
- * Worker class for nexting an iterator.
1755
- */
1756
1072
  struct NextWorker final : public BaseWorker {
1757
1073
  NextWorker (napi_env env,
1758
1074
  Iterator* iterator,
1075
+ uint32_t size,
1759
1076
  napi_value callback)
1760
1077
  : BaseWorker(env, iterator->database_, callback,
1761
1078
  "leveldown.iterator.next"),
1762
- iterator_(iterator), ok_() {}
1763
-
1764
- ~NextWorker () {}
1079
+ iterator_(iterator), size_(size), ok_() {}
1765
1080
 
1766
1081
  void DoExecute () override {
1767
1082
  if (!iterator_->DidSeek()) {
@@ -1770,7 +1085,7 @@ struct NextWorker final : public BaseWorker {
1770
1085
 
1771
1086
  // Limit the size of the cache to prevent starving the event loop
1772
1087
  // in JS-land while we're recursively calling process.nextTick().
1773
- ok_ = iterator_->ReadMany(1000);
1088
+ ok_ = iterator_->ReadMany(size_);
1774
1089
 
1775
1090
  if (!ok_) {
1776
1091
  SetStatus(iterator_->Status());
@@ -1778,28 +1093,26 @@ struct NextWorker final : public BaseWorker {
1778
1093
  }
1779
1094
 
1780
1095
  void HandleOKCallback (napi_env env, napi_value callback) override {
1781
- size_t arraySize = iterator_->cache_.size();
1782
- napi_value jsArray;
1783
- napi_create_array_with_length(env, arraySize, &jsArray);
1096
+ const auto size = iterator_->cache_.size();
1097
+ napi_value result;
1098
+ napi_create_array_with_length(env, size, &result);
1784
1099
 
1785
1100
  for (size_t idx = 0; idx < iterator_->cache_.size(); idx += 2) {
1786
- std::string key = iterator_->cache_[idx];
1787
- std::string value = iterator_->cache_[idx + 1];
1788
-
1789
- napi_value returnKey;
1790
- napi_value returnValue;
1101
+ napi_value key;
1102
+ napi_value val;
1791
1103
 
1792
- Entry::Convert(env, &key, iterator_->keyAsBuffer_, &returnKey);
1793
- Entry::Convert(env, &value, iterator_->valueAsBuffer_, &returnValue);
1104
+ Convert(env, iterator_->cache_[idx + 0], iterator_->keyAsBuffer_, key);
1105
+ Convert(env, iterator_->cache_[idx + 1], iterator_->valueAsBuffer_, val);
1794
1106
 
1795
- // put the key & value in a descending order, so that they can be .pop:ed in javascript-land
1796
- napi_set_element(env, jsArray, static_cast<int>(arraySize - idx - 1), returnKey);
1797
- napi_set_element(env, jsArray, static_cast<int>(arraySize - idx - 2), returnValue);
1107
+ napi_set_element(env, result, static_cast<int>(size - idx - 1), key);
1108
+ napi_set_element(env, result, static_cast<int>(size - idx - 2), val);
1798
1109
  }
1799
1110
 
1111
+ iterator_->cache_.clear();
1112
+
1800
1113
  napi_value argv[3];
1801
1114
  napi_get_null(env, &argv[0]);
1802
- argv[1] = jsArray;
1115
+ argv[1] = result;
1803
1116
  napi_get_boolean(env, !ok_, &argv[2]);
1804
1117
  CallFunction(env, callback, 3, argv);
1805
1118
  }
@@ -1808,9 +1121,9 @@ struct NextWorker final : public BaseWorker {
1808
1121
  // clean up & handle the next/end state
1809
1122
  iterator_->nexting_ = false;
1810
1123
 
1811
- if (iterator_->endWorker_ != NULL) {
1812
- iterator_->endWorker_->Queue(env);
1813
- iterator_->endWorker_ = NULL;
1124
+ if (iterator_->closeWorker_) {
1125
+ iterator_->closeWorker_->Queue(env);
1126
+ iterator_->closeWorker_ = nullptr;
1814
1127
  }
1815
1128
 
1816
1129
  BaseWorker::DoFinally(env);
@@ -1818,300 +1131,143 @@ struct NextWorker final : public BaseWorker {
1818
1131
 
1819
1132
  private:
1820
1133
  Iterator* iterator_;
1134
+ uint32_t size_;
1821
1135
  bool ok_;
1822
1136
  };
1823
1137
 
1824
- /**
1825
- * Moves an iterator to next element.
1826
- */
1827
- NAPI_METHOD(iterator_next) {
1828
- NAPI_ARGV(2);
1138
+ NAPI_METHOD(iterator_nextv) {
1139
+ NAPI_ARGV(3);
1829
1140
  NAPI_ITERATOR_CONTEXT();
1830
1141
 
1831
- napi_value callback = argv[1];
1142
+ uint32_t size;
1143
+ NAPI_STATUS_THROWS(napi_get_value_uint32(env, argv[1], &size));
1144
+ if (size == 0) size = 1;
1145
+
1146
+ const auto callback = argv[2];
1832
1147
 
1833
- if (iterator->isEnding_ || iterator->hasEnded_) {
1834
- napi_value argv = CreateError(env, "iterator has ended");
1148
+ if (iterator->isClosing_) {
1149
+ auto argv = CreateError(env, "iterator has closed");
1835
1150
  CallFunction(env, callback, 1, &argv);
1836
1151
 
1837
- NAPI_RETURN_UNDEFINED();
1152
+ return 0;
1838
1153
  }
1839
1154
 
1840
- NextWorker* worker = new NextWorker(env, iterator, callback);
1155
+ auto worker = new NextWorker(env, iterator, size, callback);
1841
1156
  iterator->nexting_ = true;
1842
1157
  worker->Queue(env);
1843
1158
 
1844
- NAPI_RETURN_UNDEFINED();
1845
- }
1846
-
1847
- /**
1848
- * Worker class for batch write operation.
1849
- */
1850
- struct BatchWorker final : public PriorityWorker {
1851
- BatchWorker (napi_env env,
1852
- Database* database,
1853
- napi_value callback,
1854
- leveldb::WriteBatch* batch,
1855
- const bool sync,
1856
- const bool hasData)
1857
- : PriorityWorker(env, database, callback, "leveldown.batch.do"),
1858
- batch_(batch), hasData_(hasData) {
1859
- options_.sync = sync;
1860
- }
1861
-
1862
- ~BatchWorker () {
1863
- delete batch_;
1864
- }
1865
-
1866
- void DoExecute () override {
1867
- if (hasData_) {
1868
- SetStatus(database_->WriteBatch(options_, batch_));
1869
- }
1870
- }
1871
-
1872
- private:
1873
- leveldb::WriteOptions options_;
1874
- leveldb::WriteBatch* batch_;
1875
- const bool hasData_;
1876
- };
1877
-
1878
- /**
1879
- * Does a batch write operation on a database.
1880
- */
1881
- NAPI_METHOD(batch_do) {
1882
- NAPI_ARGV(4);
1883
- NAPI_DB_CONTEXT();
1884
-
1885
- napi_value array = argv[1];
1886
- const bool sync = BooleanProperty(env, argv[2], "sync", false);
1887
- napi_value callback = argv[3];
1888
-
1889
- uint32_t length;
1890
- napi_get_array_length(env, array, &length);
1891
-
1892
- leveldb::WriteBatch* batch = new leveldb::WriteBatch();
1893
- bool hasData = false;
1894
-
1895
- for (uint32_t i = 0; i < length; i++) {
1896
- napi_value element;
1897
- napi_get_element(env, array, i, &element);
1898
-
1899
- if (!IsObject(env, element)) continue;
1900
-
1901
- std::string type = StringProperty(env, element, "type");
1902
-
1903
- if (type == "del") {
1904
- if (!HasProperty(env, element, "key")) continue;
1905
- leveldb::Slice key = ToSlice(env, GetProperty(env, element, "key"));
1906
-
1907
- batch->Delete(key);
1908
- if (!hasData) hasData = true;
1909
-
1910
- DisposeSliceBuffer(key);
1911
- } else if (type == "put") {
1912
- if (!HasProperty(env, element, "key")) continue;
1913
- if (!HasProperty(env, element, "value")) continue;
1914
-
1915
- leveldb::Slice key = ToSlice(env, GetProperty(env, element, "key"));
1916
- leveldb::Slice value = ToSlice(env, GetProperty(env, element, "value"));
1917
-
1918
- batch->Put(key, value);
1919
- if (!hasData) hasData = true;
1920
-
1921
- DisposeSliceBuffer(key);
1922
- DisposeSliceBuffer(value);
1923
- }
1924
- }
1925
-
1926
- BatchWorker* worker = new BatchWorker(env, database, callback, batch, sync, hasData);
1927
- worker->Queue(env);
1928
-
1929
- NAPI_RETURN_UNDEFINED();
1159
+ return 0;
1930
1160
  }
1931
1161
 
1932
- /**
1933
- * Owns a WriteBatch.
1934
- */
1935
- struct Batch {
1936
- Batch (Database* database)
1937
- : database_(database),
1938
- batch_(new leveldb::WriteBatch()),
1939
- hasData_(false) {}
1940
-
1941
- ~Batch () {
1942
- delete batch_;
1943
- }
1944
-
1945
- void Put (leveldb::Slice key, leveldb::Slice value) {
1946
- batch_->Put(key, value);
1947
- hasData_ = true;
1948
- }
1949
-
1950
- void Del (leveldb::Slice key) {
1951
- batch_->Delete(key);
1952
- hasData_ = true;
1953
- }
1954
-
1955
- void Clear () {
1956
- batch_->Clear();
1957
- hasData_ = false;
1958
- }
1959
-
1960
- leveldb::Status Write (bool sync) {
1961
- leveldb::WriteOptions options;
1962
- options.sync = sync;
1963
- return database_->WriteBatch(options, batch_);
1964
- }
1965
-
1966
- Database* database_;
1967
- leveldb::WriteBatch* batch_;
1968
- bool hasData_;
1969
- };
1970
-
1971
- /**
1972
- * Runs when a Batch is garbage collected.
1973
- */
1974
1162
  static void FinalizeBatch (napi_env env, void* data, void* hint) {
1975
1163
  if (data) {
1976
- delete (Batch*)data;
1164
+ delete reinterpret_cast<leveldb::WriteBatch*>(data);
1977
1165
  }
1978
1166
  }
1979
1167
 
1980
- /**
1981
- * Return a batch object.
1982
- */
1983
1168
  NAPI_METHOD(batch_init) {
1984
1169
  NAPI_ARGV(1);
1985
1170
  NAPI_DB_CONTEXT();
1986
1171
 
1987
- Batch* batch = new Batch(database);
1172
+ auto batch = new leveldb::WriteBatch();
1988
1173
 
1989
1174
  napi_value result;
1990
1175
  NAPI_STATUS_THROWS(napi_create_external(env, batch,
1991
1176
  FinalizeBatch,
1992
- NULL, &result));
1177
+ nullptr, &result));
1993
1178
  return result;
1994
1179
  }
1995
1180
 
1996
- /**
1997
- * Adds a put instruction to a batch object.
1998
- */
1999
1181
  NAPI_METHOD(batch_put) {
2000
1182
  NAPI_ARGV(3);
2001
1183
  NAPI_BATCH_CONTEXT();
2002
1184
 
2003
- leveldb::Slice key = ToSlice(env, argv[1]);
2004
- leveldb::Slice value = ToSlice(env, argv[2]);
1185
+ const auto key = ToString(env, argv[1]);
1186
+ const auto value = ToString(env, argv[2]);
1187
+
2005
1188
  batch->Put(key, value);
2006
- DisposeSliceBuffer(key);
2007
- DisposeSliceBuffer(value);
2008
1189
 
2009
- NAPI_RETURN_UNDEFINED();
1190
+ return 0;
2010
1191
  }
2011
1192
 
2012
- /**
2013
- * Adds a delete instruction to a batch object.
2014
- */
2015
1193
  NAPI_METHOD(batch_del) {
2016
1194
  NAPI_ARGV(2);
2017
1195
  NAPI_BATCH_CONTEXT();
2018
1196
 
2019
- leveldb::Slice key = ToSlice(env, argv[1]);
2020
- batch->Del(key);
2021
- DisposeSliceBuffer(key);
1197
+ const auto key = ToString(env, argv[1]);
1198
+
1199
+ batch->Delete(key);
2022
1200
 
2023
- NAPI_RETURN_UNDEFINED();
1201
+ return 0;
2024
1202
  }
2025
1203
 
2026
- /**
2027
- * Clears a batch object.
2028
- */
2029
1204
  NAPI_METHOD(batch_clear) {
2030
1205
  NAPI_ARGV(1);
2031
1206
  NAPI_BATCH_CONTEXT();
2032
1207
 
2033
1208
  batch->Clear();
2034
1209
 
2035
- NAPI_RETURN_UNDEFINED();
1210
+ return 0;
2036
1211
  }
2037
1212
 
2038
- /**
2039
- * Worker class for batch write operation.
2040
- */
2041
1213
  struct BatchWriteWorker final : public PriorityWorker {
2042
1214
  BatchWriteWorker (napi_env env,
2043
- napi_value context,
2044
- Batch* batch,
1215
+ Database* database,
1216
+ napi_value batch,
2045
1217
  napi_value callback,
2046
1218
  const bool sync)
2047
- : PriorityWorker(env, batch->database_, callback, "leveldown.batch.write"),
2048
- batch_(batch),
1219
+ : PriorityWorker(env, database, callback, "leveldown.batch.write"),
2049
1220
  sync_(sync) {
2050
- // Prevent GC of batch object before we execute
2051
- NAPI_STATUS_THROWS_VOID(napi_create_reference(env, context, 1, &contextRef_));
2052
- }
2053
1221
 
2054
- ~BatchWriteWorker () {}
1222
+ NAPI_STATUS_THROWS_VOID(napi_get_value_external(env, batch, reinterpret_cast<void**>(&batch_)));
1223
+
1224
+ // Prevent GC of batch object before we execute
1225
+ NAPI_STATUS_THROWS_VOID(napi_create_reference(env, batch, 1, &batchRef_));
1226
+ }
2055
1227
 
2056
1228
  void DoExecute () override {
2057
- if (batch_->hasData_) {
2058
- SetStatus(batch_->Write(sync_));
2059
- }
1229
+ leveldb::WriteOptions options;
1230
+ options.sync = sync_;
1231
+ SetStatus(database_->WriteBatch(options, batch_));
2060
1232
  }
2061
1233
 
2062
1234
  void DoFinally (napi_env env) override {
2063
- napi_delete_reference(env, contextRef_);
1235
+ napi_delete_reference(env, batchRef_);
2064
1236
  PriorityWorker::DoFinally(env);
2065
1237
  }
2066
1238
 
2067
1239
  private:
2068
- Batch* batch_;
1240
+ leveldb::WriteBatch* batch_;
2069
1241
  const bool sync_;
2070
- napi_ref contextRef_;
1242
+ napi_ref batchRef_;
2071
1243
  };
2072
1244
 
2073
- /**
2074
- * Writes a batch object.
2075
- */
2076
1245
  NAPI_METHOD(batch_write) {
2077
- NAPI_ARGV(3);
2078
- NAPI_BATCH_CONTEXT();
1246
+ NAPI_ARGV(4);
1247
+ NAPI_DB_CONTEXT();
2079
1248
 
2080
- napi_value options = argv[1];
2081
- const bool sync = BooleanProperty(env, options, "sync", false);
2082
- napi_value callback = argv[2];
1249
+ const auto batch = argv[1];
1250
+ const auto options = argv[2];
1251
+ const auto sync = BooleanProperty(env, options, "sync", false);
1252
+ const auto callback = argv[3];
2083
1253
 
2084
- BatchWriteWorker* worker = new BatchWriteWorker(env, argv[0], batch, callback, sync);
1254
+ auto worker = new BatchWriteWorker(env, database, batch, callback, sync);
2085
1255
  worker->Queue(env);
2086
1256
 
2087
- NAPI_RETURN_UNDEFINED();
1257
+ return 0;
2088
1258
  }
2089
1259
 
2090
- /**
2091
- * All exported functions.
2092
- */
2093
1260
  NAPI_INIT() {
2094
1261
  NAPI_EXPORT_FUNCTION(db_init);
2095
1262
  NAPI_EXPORT_FUNCTION(db_open);
2096
1263
  NAPI_EXPORT_FUNCTION(db_close);
2097
- NAPI_EXPORT_FUNCTION(db_put);
2098
- NAPI_EXPORT_FUNCTION(db_get);
2099
1264
  NAPI_EXPORT_FUNCTION(db_get_many);
2100
- NAPI_EXPORT_FUNCTION(db_del);
2101
- NAPI_EXPORT_FUNCTION(db_clear);
2102
- NAPI_EXPORT_FUNCTION(db_approximate_size);
2103
- NAPI_EXPORT_FUNCTION(db_compact_range);
2104
- NAPI_EXPORT_FUNCTION(db_get_property);
2105
-
2106
- NAPI_EXPORT_FUNCTION(destroy_db);
2107
- NAPI_EXPORT_FUNCTION(repair_db);
2108
1265
 
2109
1266
  NAPI_EXPORT_FUNCTION(iterator_init);
2110
1267
  NAPI_EXPORT_FUNCTION(iterator_seek);
2111
- NAPI_EXPORT_FUNCTION(iterator_end);
2112
- NAPI_EXPORT_FUNCTION(iterator_next);
1268
+ NAPI_EXPORT_FUNCTION(iterator_close);
1269
+ NAPI_EXPORT_FUNCTION(iterator_nextv);
2113
1270
 
2114
- NAPI_EXPORT_FUNCTION(batch_do);
2115
1271
  NAPI_EXPORT_FUNCTION(batch_init);
2116
1272
  NAPI_EXPORT_FUNCTION(batch_put);
2117
1273
  NAPI_EXPORT_FUNCTION(batch_del);