@nxtedition/rocksdb 5.2.16 → 5.2.26

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 (910) hide show
  1. package/binding.cc +306 -403
  2. package/binding.gyp +78 -69
  3. package/deps/rocksdb/build_version.cc +70 -4
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
  5. package/deps/rocksdb/rocksdb/Makefile +459 -469
  6. package/deps/rocksdb/rocksdb/README.md +4 -4
  7. package/deps/rocksdb/rocksdb/TARGETS +5244 -1500
  8. package/deps/rocksdb/rocksdb/cache/cache.cc +12 -3
  9. package/deps/rocksdb/rocksdb/cache/cache_bench.cc +7 -368
  10. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +924 -0
  11. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +128 -0
  12. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +103 -0
  13. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +183 -0
  14. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +11 -0
  15. package/deps/rocksdb/rocksdb/cache/cache_key.cc +344 -0
  16. package/deps/rocksdb/rocksdb/cache/cache_key.h +132 -0
  17. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +183 -0
  18. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +288 -0
  19. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +468 -0
  20. package/deps/rocksdb/rocksdb/cache/cache_test.cc +85 -8
  21. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +121 -51
  22. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +171 -0
  23. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +86 -0
  24. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +607 -0
  25. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +381 -154
  26. package/deps/rocksdb/rocksdb/cache/lru_cache.h +176 -33
  27. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1659 -3
  28. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +94 -23
  29. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +49 -28
  30. package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
  32. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
  33. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
  34. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
  35. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
  36. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
  40. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
  41. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
  42. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
  43. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
  44. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
  45. package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
  51. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
  52. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
  53. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
  54. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
  55. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
  56. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
  57. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
  58. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
  59. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
  60. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
  61. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
  62. package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
  63. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
  64. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
  65. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
  66. package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
  67. package/deps/rocksdb/rocksdb/db/builder.h +16 -37
  68. package/deps/rocksdb/rocksdb/db/c.cc +413 -208
  69. package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
  70. package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
  71. package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
  72. package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
  73. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
  74. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
  75. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
  76. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
  77. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
  78. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
  79. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
  80. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
  81. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
  82. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
  83. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
  84. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  85. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
  96. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
  97. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
  98. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  99. package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
  100. package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
  101. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
  102. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
  103. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
  104. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
  105. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
  106. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
  107. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
  108. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
  110. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
  111. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
  112. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
  113. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
  114. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
  115. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
  116. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
  117. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
  118. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
  119. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
  120. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
  121. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
  122. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
  124. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
  125. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
  126. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
  127. package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
  128. package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
  129. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
  130. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
  131. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
  132. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
  133. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
  134. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
  135. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
  136. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
  137. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
  138. package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
  139. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
  140. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
  141. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
  142. package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
  143. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
  144. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
  145. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
  146. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
  147. package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
  148. package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
  149. package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
  150. package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
  151. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
  152. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
  153. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
  154. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
  155. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
  156. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
  157. package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
  158. package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
  159. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
  160. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
  161. package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
  162. package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
  163. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
  164. package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
  165. package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
  166. package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
  167. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
  168. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
  169. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
  170. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
  171. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
  172. package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
  173. package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
  174. package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
  175. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
  176. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
  177. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
  178. package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
  179. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
  180. package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
  181. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
  182. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
  183. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
  184. package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
  185. package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
  186. package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
  187. package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
  188. package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
  189. package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
  190. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
  191. package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
  192. package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
  193. package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
  194. package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
  195. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
  196. package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
  197. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
  198. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
  199. package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
  200. package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
  201. package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
  202. package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
  203. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
  204. package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
  205. package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
  206. package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
  207. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
  208. package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
  209. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
  210. package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
  211. package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
  212. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
  213. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
  214. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
  215. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
  216. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
  217. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
  218. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
  219. package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
  220. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
  221. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
  222. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
  223. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
  224. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
  225. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
  226. package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
  227. package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
  228. package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
  229. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
  230. package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
  231. package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
  232. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
  233. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
  234. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
  235. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
  236. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
  237. package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
  238. package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
  239. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
  240. package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
  241. package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
  242. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
  243. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
  244. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
  245. package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
  246. package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
  247. package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
  248. package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
  249. package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
  250. package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
  251. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
  252. package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
  253. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
  254. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
  255. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
  256. package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
  257. package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
  258. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
  259. package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
  260. package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
  261. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
  262. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
  263. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
  264. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
  265. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
  266. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
  267. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
  268. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
  269. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
  270. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
  271. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
  272. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
  273. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
  274. package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
  280. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
  281. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
  283. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
  284. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
  285. package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
  286. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
  287. package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
  288. package/deps/rocksdb/rocksdb/env/env.cc +632 -42
  289. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
  290. package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
  291. package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
  292. package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
  293. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
  294. package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
  295. package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
  296. package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
  297. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
  298. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
  299. package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
  300. package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
  301. package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
  302. package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
  303. package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
  304. package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
  305. package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
  306. package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
  307. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
  308. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
  309. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
  310. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
  311. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
  312. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
  313. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
  314. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
  315. package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
  316. package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
  317. package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
  318. package/deps/rocksdb/rocksdb/file/filename.h +13 -8
  319. package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
  320. package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
  321. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
  322. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
  323. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
  324. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
  325. package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
  326. package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
  327. package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
  328. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
  329. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
  330. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
  331. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
  332. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
  333. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
  334. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
  335. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
  336. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
  337. package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
  338. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
  339. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
  340. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
  341. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
  342. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
  343. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
  344. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
  345. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
  346. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
  347. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
  348. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
  349. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
  350. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
  351. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
  352. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
  353. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
  354. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
  355. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
  356. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
  357. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
  358. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
  359. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
  360. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
  361. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
  362. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
  363. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
  364. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
  365. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
  366. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
  367. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
  368. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
  369. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
  370. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
  371. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
  372. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
  373. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
  374. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
  375. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
  376. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
  377. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
  378. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
  380. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
  381. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
  382. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
  383. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
  385. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
  386. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
  387. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
  388. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
  389. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
  390. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
  391. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
  392. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
  393. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
  396. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
  397. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
  398. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
  407. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
  408. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
  409. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
  410. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
  411. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
  412. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
  413. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
  414. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
  415. package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
  416. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
  417. package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
  418. package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
  419. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  420. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
  421. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
  422. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
  423. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
  424. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
  425. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
  426. package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
  427. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
  428. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
  429. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
  430. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
  431. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
  432. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  433. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
  434. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
  435. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
  436. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
  437. package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
  438. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  439. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
  440. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
  441. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
  442. package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
  443. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
  444. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
  445. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
  446. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
  447. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
  448. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
  449. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
  450. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
  451. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
  452. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
  453. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
  454. package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
  455. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
  456. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
  457. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
  458. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
  459. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
  460. package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
  461. package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
  462. package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
  463. package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
  464. package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
  465. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
  466. package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
  467. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
  468. package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
  469. package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
  470. package/deps/rocksdb/rocksdb/options/options.cc +49 -17
  471. package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
  472. package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
  473. package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
  474. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
  475. package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
  476. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  477. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
  478. package/deps/rocksdb/rocksdb/port/lang.h +52 -0
  479. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  480. package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
  481. package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
  482. package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
  483. package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
  484. package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
  485. package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
  486. package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
  487. package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
  488. package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
  489. package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
  490. package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
  491. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
  492. package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
  493. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
  494. package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
  495. package/deps/rocksdb/rocksdb/python.mk +9 -0
  496. package/deps/rocksdb/rocksdb/src.mk +82 -34
  497. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
  498. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
  499. package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
  500. package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
  501. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
  502. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
  503. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
  504. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
  505. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
  506. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
  507. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
  508. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
  509. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
  510. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
  511. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
  512. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
  513. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
  514. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
  515. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
  516. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
  517. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
  518. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
  519. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
  520. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
  521. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
  522. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
  523. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
  524. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
  525. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
  526. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
  527. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
  528. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
  529. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
  530. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
  531. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
  532. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  533. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  534. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  535. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
  536. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
  537. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
  538. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
  539. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
  540. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
  541. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
  542. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
  543. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
  544. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
  545. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
  546. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
  547. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
  548. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
  549. package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
  550. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
  551. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
  552. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
  553. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
  554. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
  555. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
  556. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
  557. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
  558. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
  559. package/deps/rocksdb/rocksdb/table/format.cc +258 -104
  560. package/deps/rocksdb/rocksdb/table/format.h +120 -109
  561. package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
  562. package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
  563. package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
  564. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  565. package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
  566. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
  567. package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
  568. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
  569. package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
  570. package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
  571. package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
  572. package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
  573. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
  574. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
  575. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
  576. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
  577. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
  578. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
  579. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
  580. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
  581. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
  582. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
  583. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
  584. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
  585. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
  586. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
  587. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
  588. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
  589. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
  590. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
  591. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
  592. package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
  593. package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
  594. package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
  595. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
  596. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
  597. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
  598. package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
  599. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
  600. package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
  601. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
  602. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
  603. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
  604. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
  605. package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
  606. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
  607. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
  608. package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
  609. package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
  610. package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
  611. package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
  612. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
  613. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
  614. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
  615. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  616. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
  617. package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
  618. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
  619. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
  620. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
  621. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
  622. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
  623. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
  624. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
  625. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
  626. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
  627. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  628. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
  629. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
  630. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
  631. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
  632. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
  633. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
  634. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
  635. package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
  636. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
  637. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
  638. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
  639. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
  640. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
  641. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
  642. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
  643. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
  644. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
  645. package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
  646. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
  647. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
  648. package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
  649. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
  650. package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
  651. package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
  652. package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
  653. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  654. package/deps/rocksdb/rocksdb/util/channel.h +2 -0
  655. package/deps/rocksdb/rocksdb/util/coding.h +1 -33
  656. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
  657. package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
  658. package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
  659. package/deps/rocksdb/rocksdb/util/compression.h +212 -7
  660. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
  661. package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
  662. package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
  663. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
  664. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
  665. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
  666. package/deps/rocksdb/rocksdb/util/defer.h +30 -1
  667. package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
  668. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
  669. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
  670. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
  671. package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
  672. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
  673. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
  674. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
  675. package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
  676. package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
  677. package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
  678. package/deps/rocksdb/rocksdb/util/hash.h +31 -1
  679. package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
  680. package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
  681. package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
  682. package/deps/rocksdb/rocksdb/util/heap.h +6 -1
  683. package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
  684. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
  685. package/deps/rocksdb/rocksdb/util/math.h +74 -7
  686. package/deps/rocksdb/rocksdb/util/math128.h +13 -1
  687. package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
  688. package/deps/rocksdb/rocksdb/util/random.cc +9 -0
  689. package/deps/rocksdb/rocksdb/util/random.h +6 -0
  690. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
  691. package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
  692. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
  693. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
  694. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
  695. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
  696. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
  697. package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
  698. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
  699. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
  700. package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
  701. package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
  702. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
  703. package/deps/rocksdb/rocksdb/util/status.cc +32 -29
  704. package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
  705. package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
  706. package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
  707. package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
  708. package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
  709. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
  710. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
  711. package/deps/rocksdb/rocksdb/util/timer.h +55 -46
  712. package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
  713. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
  714. package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
  715. package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
  716. package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
  717. package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
  718. package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
  719. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
  720. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
  721. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
  722. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
  723. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
  724. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
  725. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
  726. package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
  727. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
  728. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
  729. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
  730. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
  731. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
  732. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
  733. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
  734. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
  735. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
  736. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
  737. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
  738. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
  739. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
  740. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
  741. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
  742. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
  743. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
  744. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
  745. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
  746. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
  747. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
  748. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
  749. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
  750. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
  751. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
  752. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
  753. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
  754. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
  755. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
  756. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
  757. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
  758. package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
  759. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
  760. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
  761. package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
  762. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
  763. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
  764. package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
  765. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
  766. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
  767. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
  768. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
  769. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
  770. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
  771. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
  772. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
  773. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
  774. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
  775. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
  776. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
  777. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
  778. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
  779. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
  780. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
  781. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
  782. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
  783. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
  784. package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
  785. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
  786. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
  787. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
  788. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
  789. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
  790. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
  791. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
  792. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
  793. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
  794. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
  795. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
  796. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
  797. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
  798. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
  799. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  800. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
  801. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
  802. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
  803. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
  804. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
  805. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
  806. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
  807. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
  808. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
  809. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
  810. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
  811. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
  812. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
  813. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  814. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
  815. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
  816. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
  817. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
  818. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
  819. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
  820. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
  821. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
  822. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
  823. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
  824. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
  825. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
  826. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
  827. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
  828. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
  829. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
  830. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
  831. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
  832. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
  833. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
  834. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
  835. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
  836. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
  837. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
  838. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
  839. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
  840. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
  841. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
  842. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
  843. package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
  844. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
  845. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
  846. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
  847. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
  848. package/deps/rocksdb/rocksdb.gyp +425 -443
  849. package/deps/snappy/snappy.gyp +4 -1
  850. package/package.json +8 -8
  851. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  852. package/prebuilds/darwin-x86/node.napi.node +0 -0
  853. package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
  854. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
  855. package/deps/rocksdb/rocksdb/hdfs/README +0 -23
  856. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
  857. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
  858. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
  859. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
  860. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
  861. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
  862. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
  863. package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
  864. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
  865. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
  866. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
  867. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
  868. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
  869. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
  870. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
  871. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
  872. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
  873. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
  874. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
  875. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
  876. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
  877. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
  878. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
  879. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
  880. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
  881. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
  882. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
  883. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
  884. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
  885. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
  886. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
  887. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
  888. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
  889. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
  890. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
  891. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
  892. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
  893. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
  894. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
  895. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
  896. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
  897. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
  898. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
  899. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
  900. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
  901. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
  902. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
  903. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
  904. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
  905. package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
  906. package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
  907. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
  908. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
  909. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
  910. package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
package/binding.cc CHANGED
@@ -30,7 +30,6 @@ public:
30
30
 
31
31
  struct Database;
32
32
  struct Iterator;
33
- static void iterator_do_close (napi_env env, Iterator* iterator, napi_value cb);
34
33
 
35
34
  #define NAPI_DB_CONTEXT() \
36
35
  Database* database = nullptr; \
@@ -41,7 +40,7 @@ static void iterator_do_close (napi_env env, Iterator* iterator, napi_value cb);
41
40
  NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&iterator));
42
41
 
43
42
  #define NAPI_BATCH_CONTEXT() \
44
- leveldb::WriteBatch* batch = nullptr; \
43
+ rocksdb::WriteBatch* batch = nullptr; \
45
44
  NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&batch));
46
45
 
47
46
  static bool IsString (napi_env env, napi_value value) {
@@ -92,8 +91,7 @@ static napi_value GetProperty (napi_env env, napi_value obj, const std::string&
92
91
  return value;
93
92
  }
94
93
 
95
- static bool BooleanProperty (napi_env env, napi_value obj, const std::string& key,
96
- bool defaultValue) {
94
+ static bool BooleanProperty (napi_env env, napi_value obj, const std::string& key, bool defaultValue) {
97
95
  if (HasProperty(env, obj, key.data())) {
98
96
  const auto value = GetProperty(env, obj, key.data());
99
97
  bool result;
@@ -117,8 +115,7 @@ static bool EncodingIsBuffer (napi_env env, napi_value obj, const std::string& o
117
115
  return false;
118
116
  }
119
117
 
120
- static uint32_t Uint32Property (napi_env env, napi_value obj, const std::string& key,
121
- uint32_t defaultValue) {
118
+ static uint32_t Uint32Property (napi_env env, napi_value obj, const std::string& key, uint32_t defaultValue) {
122
119
  if (HasProperty(env, obj, key.data())) {
123
120
  const auto value = GetProperty(env, obj, key.data());
124
121
  uint32_t result;
@@ -129,8 +126,7 @@ static uint32_t Uint32Property (napi_env env, napi_value obj, const std::string&
129
126
  return defaultValue;
130
127
  }
131
128
 
132
- static int Int32Property (napi_env env, napi_value obj, const std::string& key,
133
- int defaultValue) {
129
+ static int Int32Property (napi_env env, napi_value obj, const std::string& key, int defaultValue) {
134
130
  if (HasProperty(env, obj, key.data())) {
135
131
  const auto value = GetProperty(env, obj, key.data());
136
132
  int result;
@@ -158,7 +154,7 @@ static std::string ToString (napi_env env, napi_value from, const std::string& d
158
154
  return defaultValue;
159
155
  }
160
156
 
161
- static std::string StringProperty (napi_env env, napi_value obj, const std::string& key) {
157
+ static std::string StringProperty (napi_env env, napi_value obj, const std::string& key, const std::string& defaultValue = "") {
162
158
  if (HasProperty(env, obj, key)) {
163
159
  napi_value value = GetProperty(env, obj, key);
164
160
  if (IsString(env, value)) {
@@ -166,7 +162,7 @@ static std::string StringProperty (napi_env env, napi_value obj, const std::stri
166
162
  }
167
163
  }
168
164
 
169
- return "";
165
+ return defaultValue;
170
166
  }
171
167
 
172
168
  static size_t StringOrBufferLength (napi_env env, napi_value value) {
@@ -211,10 +207,7 @@ static std::vector<std::string> KeyArray (napi_env env, napi_value arr) {
211
207
  return result;
212
208
  }
213
209
 
214
- static napi_status CallFunction (napi_env env,
215
- napi_value callback,
216
- const int argc,
217
- napi_value* argv) {
210
+ static napi_status CallFunction (napi_env env, napi_value callback, const int argc, napi_value* argv) {
218
211
  napi_value global;
219
212
  napi_get_global(env, &global);
220
213
  return napi_call_function(env, global, callback, argc, argv, nullptr);
@@ -233,72 +226,60 @@ void Convert (napi_env env, const T& s, bool asBuffer, napi_value& result) {
233
226
  * Base worker class. Handles the async work. Derived classes can override the
234
227
  * following virtual methods (listed in the order in which they're called):
235
228
  *
236
- * - DoExecute (abstract, worker pool thread): main work
237
- * - HandleOKCallback (main thread): call JS callback on success
238
- * - HandleErrorCallback (main thread): call JS callback on error
239
- * - DoFinally (main thread): do cleanup regardless of success
229
+ * - Execute (abstract, worker pool thread): main work
230
+ * - Then (main thread): call JS callback on success
231
+ * - Catch (main thread): call JS callback on error
232
+ * - Finally (main thread): do cleanup regardless of success
240
233
  */
241
234
  struct BaseWorker {
242
- // Note: storing env is discouraged as we'd end up using it in unsafe places.
243
235
  BaseWorker (napi_env env,
244
236
  Database* database,
245
237
  napi_value callback,
246
- const char* resourceName)
238
+ const std::string& resourceName)
247
239
  : database_(database) {
248
240
  NAPI_STATUS_THROWS_VOID(napi_create_reference(env, callback, 1, &callbackRef_));
249
241
  napi_value asyncResourceName;
250
- NAPI_STATUS_THROWS_VOID(napi_create_string_utf8(env, resourceName,
251
- NAPI_AUTO_LENGTH,
252
- &asyncResourceName));
242
+ NAPI_STATUS_THROWS_VOID(napi_create_string_utf8(env, resourceName.data(),
243
+ NAPI_AUTO_LENGTH,
244
+ &asyncResourceName));
253
245
  NAPI_STATUS_THROWS_VOID(napi_create_async_work(env, callback,
254
- asyncResourceName,
255
- BaseWorker::Execute,
256
- BaseWorker::Complete,
257
- this, &asyncWork_));
246
+ asyncResourceName,
247
+ BaseWorker::Execute,
248
+ BaseWorker::Complete,
249
+ this, &asyncWork_));
258
250
  }
259
251
 
260
252
  virtual ~BaseWorker () {}
261
253
 
262
254
  static void Execute (napi_env env, void* data) {
263
255
  auto self = reinterpret_cast<BaseWorker*>(data);
264
-
265
- // Don't pass env to DoExecute() because use of Node-API
266
- // methods should generally be avoided in async work.
267
- self->DoExecute();
256
+ self->status_ = self->Execute();
268
257
  }
269
258
 
270
- bool SetStatus (const leveldb::Status& status) {
271
- status_ = status;
272
- return status.ok();
273
- }
274
-
275
- virtual void DoExecute () = 0;
276
-
277
259
  static void Complete (napi_env env, napi_status status, void* data) {
278
260
  auto self = reinterpret_cast<BaseWorker*>(data);
279
261
 
280
- self->DoComplete(env);
281
- self->DoFinally(env);
282
- }
283
-
284
- void DoComplete (napi_env env) {
285
262
  napi_value callback;
286
- napi_get_reference_value(env, callbackRef_, &callback);
263
+ napi_get_reference_value(env, self->callbackRef_, &callback);
287
264
 
288
- if (status_.ok()) {
289
- HandleOKCallback(env, callback);
265
+ if (self->status_.ok()) {
266
+ self->Then(env, callback);
290
267
  } else {
291
- HandleErrorCallback(env, callback);
268
+ self->Catch(env, callback);
292
269
  }
270
+
271
+ self->Finally(env);
293
272
  }
294
273
 
295
- virtual void HandleOKCallback (napi_env env, napi_value callback) {
274
+ virtual rocksdb::Status Execute () = 0;
275
+
276
+ virtual void Then (napi_env env, napi_value callback) {
296
277
  napi_value argv;
297
278
  napi_get_null(env, &argv);
298
279
  CallFunction(env, callback, 1, &argv);
299
280
  }
300
281
 
301
- virtual void HandleErrorCallback (napi_env env, napi_value callback) {
282
+ virtual void Catch (napi_env env, napi_value callback) {
302
283
  napi_value argv;
303
284
 
304
285
  const auto msg = status_.ToString();
@@ -324,7 +305,7 @@ struct BaseWorker {
324
305
  CallFunction(env, callback, 1, &argv);
325
306
  }
326
307
 
327
- virtual void DoFinally (napi_env env) {
308
+ virtual void Finally (napi_env env) {
328
309
  napi_delete_reference(env, callbackRef_);
329
310
  napi_delete_async_work(env, asyncWork_);
330
311
 
@@ -340,29 +321,21 @@ struct BaseWorker {
340
321
  private:
341
322
  napi_ref callbackRef_;
342
323
  napi_async_work asyncWork_;
343
- leveldb::Status status_;
324
+ rocksdb::Status status_;
344
325
  };
345
326
 
346
- /**
347
- * Owns the LevelDB storage, cache, filter policy and iterators.
348
- */
349
327
  struct Database {
350
- Database ()
351
- : pendingCloseWorker_(nullptr),
352
- ref_(nullptr),
353
- priorityWork_(0) {}
354
-
355
- leveldb::Status Open (const leveldb::Options& options,
328
+ rocksdb::Status Open (const rocksdb::Options& options,
356
329
  const bool readOnly,
357
330
  const char* location) {
358
331
  if (readOnly) {
359
- leveldb::DB* db = nullptr;
332
+ rocksdb::DB* db = nullptr;
360
333
  const auto status = rocksdb::DB::OpenForReadOnly(options, location, &db);
361
334
  db_.reset(db);
362
335
  return status;
363
336
  } else {
364
- leveldb::DB* db = nullptr;
365
- const auto status = leveldb::DB::Open(options, location, &db);
337
+ rocksdb::DB* db = nullptr;
338
+ const auto status = rocksdb::DB::Open(options, location, &db);
366
339
  db_.reset(db);
367
340
  return status;
368
341
  }
@@ -372,36 +345,36 @@ struct Database {
372
345
  db_.reset();
373
346
  }
374
347
 
375
- leveldb::Status Put (const leveldb::WriteOptions& options,
348
+ rocksdb::Status Put (const rocksdb::WriteOptions& options,
376
349
  const std::string& key,
377
350
  const std::string& value) {
378
351
  return db_->Put(options, db_->DefaultColumnFamily(), key, value);
379
352
  }
380
353
 
381
- leveldb::Status Get (const leveldb::ReadOptions& options,
354
+ rocksdb::Status Get (const rocksdb::ReadOptions& options,
382
355
  const std::string& key,
383
356
  rocksdb::PinnableSlice& value) {
384
357
  return db_->Get(options, db_->DefaultColumnFamily(), key, &value);
385
358
  }
386
359
 
387
- leveldb::Status Del (const leveldb::WriteOptions& options,
360
+ rocksdb::Status Del (const rocksdb::WriteOptions& options,
388
361
  const std::string& key) {
389
362
  return db_->Delete(options, db_->DefaultColumnFamily(), key);
390
363
  }
391
364
 
392
- leveldb::Status WriteBatch (const leveldb::WriteOptions& options,
393
- leveldb::WriteBatch* batch) {
365
+ rocksdb::Status WriteBatch (const rocksdb::WriteOptions& options,
366
+ rocksdb::WriteBatch* batch) {
394
367
  return db_->Write(options, batch);
395
368
  }
396
369
 
397
- uint64_t ApproximateSize (const leveldb::Range* range) {
370
+ uint64_t ApproximateSize (const rocksdb::Range* range) {
398
371
  uint64_t size = 0;
399
372
  db_->GetApproximateSizes(range, 1, &size);
400
373
  return size;
401
374
  }
402
375
 
403
- void CompactRange (const leveldb::Slice* start,
404
- const leveldb::Slice* end) {
376
+ void CompactRange (const rocksdb::Slice* start,
377
+ const rocksdb::Slice* end) {
405
378
  rocksdb::CompactRangeOptions options;
406
379
  db_->CompactRange(options, start, end);
407
380
  }
@@ -410,15 +383,15 @@ struct Database {
410
383
  db_->GetProperty(property, &value);
411
384
  }
412
385
 
413
- const leveldb::Snapshot* NewSnapshot () {
386
+ const rocksdb::Snapshot* NewSnapshot () {
414
387
  return db_->GetSnapshot();
415
388
  }
416
389
 
417
- leveldb::Iterator* NewIterator (const leveldb::ReadOptions& options) {
390
+ rocksdb::Iterator* NewIterator (const rocksdb::ReadOptions& options) {
418
391
  return db_->NewIterator(options);
419
392
  }
420
393
 
421
- void ReleaseSnapshot (const leveldb::Snapshot* snapshot) {
394
+ void ReleaseSnapshot (const rocksdb::Snapshot* snapshot) {
422
395
  return db_->ReleaseSnapshot(snapshot);
423
396
  }
424
397
 
@@ -433,11 +406,11 @@ struct Database {
433
406
  }
434
407
 
435
408
  void IncrementPriorityWork (napi_env env) {
436
- napi_reference_ref(env, ref_, &priorityWork_);
409
+ napi_reference_ref(env, prioritRef_, &priorityWork_);
437
410
  }
438
411
 
439
412
  void DecrementPriorityWork (napi_env env) {
440
- napi_reference_unref(env, ref_, &priorityWork_);
413
+ napi_reference_unref(env, prioritRef_, &priorityWork_);
441
414
 
442
415
  if (priorityWork_ == 0 && pendingCloseWorker_) {
443
416
  pendingCloseWorker_->Queue(env);
@@ -449,13 +422,13 @@ struct Database {
449
422
  return priorityWork_ > 0;
450
423
  }
451
424
 
452
- std::unique_ptr<leveldb::DB> db_;
425
+ std::unique_ptr<rocksdb::DB> db_;
453
426
  BaseWorker* pendingCloseWorker_;
454
427
  std::set<Iterator*> iterators_;
455
- napi_ref ref_;
428
+ napi_ref prioritRef_;
456
429
 
457
430
  private:
458
- uint32_t priorityWork_;
431
+ uint32_t priorityWork_ = 0;
459
432
  };
460
433
 
461
434
  /**
@@ -464,14 +437,14 @@ private:
464
437
  struct PriorityWorker : public BaseWorker {
465
438
  PriorityWorker (napi_env env, Database* database, napi_value callback, const char* resourceName)
466
439
  : BaseWorker(env, database, callback, resourceName) {
467
- database_->IncrementPriorityWork(env);
440
+ database_->IncrementPriorityWork(env);
468
441
  }
469
442
 
470
443
  virtual ~PriorityWorker () {}
471
444
 
472
- void DoFinally (napi_env env) override {
445
+ void Finally (napi_env env) override {
473
446
  database_->DecrementPriorityWork(env);
474
- BaseWorker::DoFinally(env);
447
+ BaseWorker::Finally(env);
475
448
  }
476
449
  };
477
450
 
@@ -485,77 +458,63 @@ struct BaseIterator {
485
458
  const int limit,
486
459
  const bool fillCache)
487
460
  : database_(database),
488
- snapshot_(database->NewSnapshot()),
489
- dbIterator_(database->NewIterator([&]{
490
- leveldb::ReadOptions options;
491
- options.fill_cache = fillCache;
492
- options.verify_checksums = false;
493
- options.snapshot = snapshot_;
494
- return options;
495
- }())),
496
- didSeek_(false),
497
- reverse_(reverse),
498
461
  lt_(lt),
499
462
  lte_(lte),
500
463
  gt_(gt),
501
464
  gte_(gte),
502
- limit_(limit),
503
- count_(0) {
465
+ snapshot_(database->NewSnapshot(), [this](const rocksdb::Snapshot* ptr) {
466
+ database_->ReleaseSnapshot(ptr);
467
+ }),
468
+ iterator_(database->NewIterator([&]{
469
+ rocksdb::ReadOptions options;
470
+ if (lt_ && !lte_) {
471
+ upper_bound_ = rocksdb::Slice(lt_->data(), lt_->size());
472
+ options.iterate_upper_bound = &upper_bound_;
473
+ }
474
+ if (gte_) {
475
+ lower_bound_ = rocksdb::Slice(gte_->data(), gte_->size());
476
+ options.iterate_lower_bound = &lower_bound_;
477
+ }
478
+ options.fill_cache = fillCache;
479
+ options.snapshot = snapshot_.get();
480
+ return options;
481
+ }())),
482
+ reverse_(reverse),
483
+ limit_(limit) {
504
484
  }
505
485
 
506
486
  virtual ~BaseIterator () {
507
- assert(!dbIterator_);
508
-
509
- delete lt_;
510
- delete lte_;
511
- delete gt_;
512
- delete gte_;
487
+ assert(!iterator_);
513
488
  }
514
489
 
515
490
  bool DidSeek () const {
516
491
  return didSeek_;
517
492
  }
518
493
 
519
- /**
520
- * Seek to the first relevant key based on range options.
521
- */
522
494
  void SeekToRange () {
523
495
  didSeek_ = true;
524
496
 
525
- if (!reverse_ && gte_) {
526
- dbIterator_->Seek(*gte_);
527
- } else if (!reverse_ && gt_) {
528
- dbIterator_->Seek(*gt_);
497
+ if (!reverse_ && gt_ && !gte_) {
498
+ iterator_->Seek(*gt_);
529
499
 
530
- if (dbIterator_->Valid() && dbIterator_->key().compare(*gt_) == 0) {
531
- dbIterator_->Next();
500
+ if (iterator_->Valid() && iterator_->key().compare(*gt_) == 0) {
501
+ iterator_->Next();
532
502
  }
533
503
  } else if (reverse_ && lte_) {
534
- dbIterator_->Seek(*lte_);
504
+ iterator_->Seek(*lte_);
535
505
 
536
- if (!dbIterator_->Valid()) {
537
- dbIterator_->SeekToLast();
538
- } else if (dbIterator_->key().compare(*lte_) > 0) {
539
- dbIterator_->Prev();
540
- }
541
- } else if (reverse_ && lt_) {
542
- dbIterator_->Seek(*lt_);
543
-
544
- if (!dbIterator_->Valid()) {
545
- dbIterator_->SeekToLast();
546
- } else if (dbIterator_->key().compare(*lt_) >= 0) {
547
- dbIterator_->Prev();
506
+ if (!iterator_->Valid()) {
507
+ iterator_->SeekToLast();
508
+ } else if (iterator_->key().compare(*lte_) > 0) {
509
+ iterator_->Prev();
548
510
  }
549
511
  } else if (reverse_) {
550
- dbIterator_->SeekToLast();
512
+ iterator_->SeekToLast();
551
513
  } else {
552
- dbIterator_->SeekToFirst();
514
+ iterator_->SeekToFirst();
553
515
  }
554
516
  }
555
517
 
556
- /**
557
- * Seek manually (during iteration).
558
- */
559
518
  void Seek (const std::string& target) {
560
519
  didSeek_ = true;
561
520
 
@@ -563,17 +522,17 @@ struct BaseIterator {
563
522
  return SeekToEnd();
564
523
  }
565
524
 
566
- dbIterator_->Seek(target);
525
+ iterator_->Seek(target);
567
526
 
568
- if (dbIterator_->Valid()) {
569
- const auto cmp = dbIterator_->key().compare(target);
527
+ if (iterator_->Valid()) {
528
+ const auto cmp = iterator_->key().compare(target);
570
529
  if (reverse_ ? cmp > 0 : cmp < 0) {
571
530
  Next();
572
531
  }
573
532
  } else {
574
533
  SeekToFirst();
575
- if (dbIterator_->Valid()) {
576
- const auto cmp = dbIterator_->key().compare(target);
534
+ if (iterator_->Valid()) {
535
+ const auto cmp = iterator_->key().compare(target);
577
536
  if (reverse_ ? cmp > 0 : cmp < 0) {
578
537
  SeekToEnd();
579
538
  }
@@ -582,15 +541,24 @@ struct BaseIterator {
582
541
  }
583
542
 
584
543
  void Close () {
585
- if (dbIterator_) {
586
- delete dbIterator_;
587
- dbIterator_ = nullptr;
588
- database_->ReleaseSnapshot(snapshot_);
589
- }
544
+ snapshot_.reset();
545
+ iterator_.reset();
590
546
  }
591
547
 
592
548
  bool Valid () const {
593
- return dbIterator_->Valid() && !OutOfRange(dbIterator_->key());
549
+ if (!iterator_->Valid()) {
550
+ return false;
551
+ }
552
+
553
+ if (lte_ && iterator_->key().compare(*lte_) > 0) {
554
+ return false;
555
+ }
556
+
557
+ if (!gte_ && gt_ && iterator_->key().compare(*gt_) <= 0) {
558
+ return false;
559
+ }
560
+
561
+ return true;
594
562
  }
595
563
 
596
564
  bool Increment () {
@@ -598,18 +566,18 @@ struct BaseIterator {
598
566
  }
599
567
 
600
568
  void Next () {
601
- if (reverse_) dbIterator_->Prev();
602
- else dbIterator_->Next();
569
+ if (reverse_) iterator_->Prev();
570
+ else iterator_->Next();
603
571
  }
604
572
 
605
573
  void SeekToFirst () {
606
- if (reverse_) dbIterator_->SeekToLast();
607
- else dbIterator_->SeekToFirst();
574
+ if (reverse_) iterator_->SeekToLast();
575
+ else iterator_->SeekToFirst();
608
576
  }
609
577
 
610
578
  void SeekToLast () {
611
- if (reverse_) dbIterator_->SeekToFirst();
612
- else dbIterator_->SeekToLast();
579
+ if (reverse_) iterator_->SeekToFirst();
580
+ else iterator_->SeekToLast();
613
581
  }
614
582
 
615
583
  void SeekToEnd () {
@@ -617,19 +585,19 @@ struct BaseIterator {
617
585
  Next();
618
586
  }
619
587
 
620
- leveldb::Slice CurrentKey () const {
621
- return dbIterator_->key();
588
+ rocksdb::Slice CurrentKey () const {
589
+ return iterator_->key();
622
590
  }
623
591
 
624
- leveldb::Slice CurrentValue () const {
625
- return dbIterator_->value();
592
+ rocksdb::Slice CurrentValue () const {
593
+ return iterator_->value();
626
594
  }
627
595
 
628
- leveldb::Status Status () const {
629
- return dbIterator_->status();
596
+ rocksdb::Status Status () const {
597
+ return iterator_->status();
630
598
  }
631
599
 
632
- bool OutOfRange (const leveldb::Slice& target) const {
600
+ bool OutOfRange (const rocksdb::Slice& target) const {
633
601
  if (lte_) {
634
602
  if (target.compare(*lte_) > 0) return true;
635
603
  } else if (lt_) {
@@ -648,16 +616,18 @@ struct BaseIterator {
648
616
  Database* database_;
649
617
 
650
618
  private:
651
- const leveldb::Snapshot* snapshot_;
652
- leveldb::Iterator* dbIterator_;
653
- bool didSeek_;
619
+ const std::unique_ptr<const std::string> lt_;
620
+ const std::unique_ptr<const std::string> lte_;
621
+ const std::unique_ptr<const std::string> gt_;
622
+ const std::unique_ptr<const std::string> gte_;
623
+ rocksdb::Slice lower_bound_;
624
+ rocksdb::Slice upper_bound_;
625
+ std::shared_ptr<const rocksdb::Snapshot> snapshot_;
626
+ std::unique_ptr<rocksdb::Iterator> iterator_;
627
+ bool didSeek_ = false;
654
628
  const bool reverse_;
655
- const std::string* lt_;
656
- const std::string* lte_;
657
- const std::string* gt_;
658
- const std::string* gte_;
659
629
  const int limit_;
660
- int count_;
630
+ int count_ = 0;
661
631
  };
662
632
 
663
633
  struct Iterator final : public BaseIterator {
@@ -681,9 +651,6 @@ struct Iterator final : public BaseIterator {
681
651
  valueAsBuffer_(valueAsBuffer),
682
652
  highWaterMarkBytes_(highWaterMarkBytes),
683
653
  first_(true),
684
- nexting_(false),
685
- isClosing_(false),
686
- closeWorker_(nullptr),
687
654
  ref_(nullptr) {
688
655
  }
689
656
 
@@ -697,53 +664,12 @@ struct Iterator final : public BaseIterator {
697
664
  if (ref_) napi_delete_reference(env, ref_);
698
665
  }
699
666
 
700
- bool ReadMany (uint32_t size) {
701
- cache_.clear();
702
- cache_.reserve(size * 2);
703
- size_t bytesRead = 0;
704
-
705
- while (true) {
706
- if (!first_) Next();
707
- else first_ = false;
708
-
709
- if (!Valid() || !Increment()) break;
710
-
711
- if (keys_ && values_) {
712
- auto k = CurrentKey();
713
- auto v = CurrentValue();
714
- cache_.emplace_back(k.data(), k.size());
715
- cache_.emplace_back(v.data(), v.size());
716
- bytesRead += k.size() + v.size();
717
- } else if (keys_) {
718
- auto k = CurrentKey();
719
- cache_.emplace_back(k.data(), k.size());
720
- cache_.push_back({});
721
- bytesRead += k.size();
722
- } else if (values_) {
723
- auto v = CurrentValue();
724
- cache_.push_back({});
725
- cache_.emplace_back(v.data(), v.size());
726
- bytesRead += v.size();
727
- }
728
-
729
- if (bytesRead > highWaterMarkBytes_ || cache_.size() / 2 >= size) {
730
- return true;
731
- }
732
- }
733
-
734
- return false;
735
- }
736
-
737
667
  const bool keys_;
738
668
  const bool values_;
739
669
  const bool keyAsBuffer_;
740
670
  const bool valueAsBuffer_;
741
671
  const uint32_t highWaterMarkBytes_;
742
672
  bool first_;
743
- bool nexting_;
744
- bool isClosing_;
745
- BaseWorker* closeWorker_;
746
- std::vector<std::string> cache_;
747
673
 
748
674
  private:
749
675
  napi_ref ref_;
@@ -755,7 +681,7 @@ private:
755
681
  * the guarantee that no db operations will be in-flight at this time.
756
682
  */
757
683
  static void env_cleanup_hook (void* arg) {
758
- Database* database = reinterpret_cast<Database*>(arg);
684
+ auto database = reinterpret_cast<Database*>(arg);
759
685
 
760
686
  // Do everything that db_close() does but synchronously. We're expecting that GC
761
687
  // did not (yet) collect the database because that would be a user mistake (not
@@ -776,15 +702,15 @@ static void env_cleanup_hook (void* arg) {
776
702
 
777
703
  static void FinalizeDatabase (napi_env env, void* data, void* hint) {
778
704
  if (data) {
779
- Database* database = (Database*)data;
705
+ auto database = reinterpret_cast<Database*>(data);
780
706
  napi_remove_env_cleanup_hook(env, env_cleanup_hook, database);
781
- if (database->ref_) napi_delete_reference(env, database->ref_);
707
+ if (database->prioritRef_) napi_delete_reference(env, database->prioritRef_);
782
708
  delete database;
783
709
  }
784
710
  }
785
711
 
786
712
  NAPI_METHOD(db_init) {
787
- Database* database = new Database();
713
+ auto database = new Database();
788
714
  napi_add_env_cleanup_hook(env, env_cleanup_hook, database);
789
715
 
790
716
  napi_value result;
@@ -792,17 +718,12 @@ NAPI_METHOD(db_init) {
792
718
  FinalizeDatabase,
793
719
  nullptr, &result));
794
720
 
795
- // Reference counter to prevent GC of database while priority workers are active
796
- NAPI_STATUS_THROWS(napi_create_reference(env, result, 0, &database->ref_));
721
+ NAPI_STATUS_THROWS(napi_create_reference(env, result, 0, &database->prioritRef_));
797
722
 
798
723
  return result;
799
724
  }
800
725
 
801
- /**
802
- * Worker class for opening a database.
803
- * TODO: shouldn't this be a PriorityWorker?
804
- */
805
- struct OpenWorker final : public BaseWorker {
726
+ struct OpenWorker final : public PriorityWorker {
806
727
  OpenWorker (napi_env env,
807
728
  Database* database,
808
729
  napi_value callback,
@@ -818,18 +739,18 @@ struct OpenWorker final : public BaseWorker {
818
739
  const uint32_t cacheSize,
819
740
  const std::string& infoLogLevel,
820
741
  const bool readOnly)
821
- : BaseWorker(env, database, callback, "leveldown.db.open"),
742
+ : PriorityWorker(env, database, callback, "leveldown.db.open"),
822
743
  readOnly_(readOnly),
823
744
  location_(location) {
824
745
  options_.create_if_missing = createIfMissing;
825
746
  options_.error_if_exists = errorIfExists;
826
747
  options_.compression = compression
827
- ? leveldb::kSnappyCompression
828
- : leveldb::kNoCompression;
748
+ ? rocksdb::kSnappyCompression
749
+ : rocksdb::kNoCompression;
829
750
  options_.write_buffer_size = writeBufferSize;
830
751
  options_.max_open_files = maxOpenFiles;
831
752
  options_.max_log_file_size = maxFileSize;
832
- options_.paranoid_checks = false;
753
+ options_.use_adaptive_mutex = true;
833
754
 
834
755
  if (infoLogLevel.size() > 0) {
835
756
  rocksdb::InfoLogLevel lvl = {};
@@ -861,17 +782,19 @@ struct OpenWorker final : public BaseWorker {
861
782
  tableOptions.block_size = blockSize;
862
783
  tableOptions.block_restart_interval = blockRestartInterval;
863
784
  tableOptions.filter_policy.reset(rocksdb::NewBloomFilterPolicy(10));
785
+ tableOptions.format_version = 5;
786
+ tableOptions.checksum = rocksdb::kxxHash64;
864
787
 
865
788
  options_.table_factory.reset(
866
789
  rocksdb::NewBlockBasedTableFactory(tableOptions)
867
790
  );
868
791
  }
869
792
 
870
- void DoExecute () override {
871
- SetStatus(database_->Open(options_, readOnly_, location_.c_str()));
793
+ rocksdb::Status Execute () override {
794
+ return database_->Open(options_, readOnly_, location_.c_str());
872
795
  }
873
796
 
874
- leveldb::Options options_;
797
+ rocksdb::Options options_;
875
798
  const bool readOnly_;
876
799
  const std::string location_;
877
800
  };
@@ -916,8 +839,9 @@ struct CloseWorker final : public BaseWorker {
916
839
  napi_value callback)
917
840
  : BaseWorker(env, database, callback, "leveldown.db.close") {}
918
841
 
919
- void DoExecute () override {
842
+ rocksdb::Status Execute () override {
920
843
  database_->CloseDatabase();
844
+ return rocksdb::Status::OK();
921
845
  }
922
846
  };
923
847
 
@@ -931,13 +855,6 @@ NAPI_METHOD(db_close) {
931
855
 
932
856
  const auto callback = argv[1];
933
857
 
934
- napi_value noop;
935
- napi_create_function(env, nullptr, 0, noop_callback, nullptr, &noop);
936
-
937
- for (auto it : database->iterators_) {
938
- iterator_do_close(env, it, noop);
939
- }
940
-
941
858
  auto worker = new CloseWorker(env, database, callback);
942
859
 
943
860
  if (!database->HasPriorityWork()) {
@@ -960,10 +877,10 @@ struct PutWorker final : public PriorityWorker {
960
877
  key_(key), value_(value), sync_(sync) {
961
878
  }
962
879
 
963
- void DoExecute () override {
964
- leveldb::WriteOptions options;
880
+ rocksdb::Status Execute () override {
881
+ rocksdb::WriteOptions options;
965
882
  options.sync = sync_;
966
- SetStatus(database_->Put(options, key_, value_));
883
+ return database_->Put(options, key_, value_);
967
884
  }
968
885
 
969
886
  const std::string key_;
@@ -997,13 +914,13 @@ struct GetWorker final : public PriorityWorker {
997
914
  key_(key), asBuffer_(asBuffer), fillCache_(fillCache) {
998
915
  }
999
916
 
1000
- void DoExecute () override {
1001
- leveldb::ReadOptions options;
917
+ rocksdb::Status Execute () override {
918
+ rocksdb::ReadOptions options;
1002
919
  options.fill_cache = fillCache_;
1003
- SetStatus(database_->Get(options, key_, value_));
920
+ return database_->Get(options, key_, value_);
1004
921
  }
1005
922
 
1006
- void HandleOKCallback (napi_env env, napi_value callback) override {
923
+ void Then (napi_env env, napi_value callback) override {
1007
924
  napi_value argv[2];
1008
925
  napi_get_null(env, &argv[0]);
1009
926
  Convert(env, std::move(value_), asBuffer_, argv[1]);
@@ -1052,44 +969,39 @@ struct GetManyWorker final : public PriorityWorker {
1052
969
  }
1053
970
  }
1054
971
 
1055
- void DoExecute () override {
1056
- cache_.reserve(keys_.size());
1057
-
1058
- leveldb::ReadOptions options;
972
+ rocksdb::Status Execute () override {
973
+ rocksdb::ReadOptions options;
1059
974
  options.snapshot = snapshot_;
1060
975
  options.fill_cache = fillCache_;
1061
976
 
1062
- rocksdb::PinnableSlice value;
977
+ status_ = database_->db_->MultiGet(
978
+ options,
979
+ std::vector<rocksdb::Slice>(keys_.begin(), keys_.end()),
980
+ &values_
981
+ );
1063
982
 
1064
- for (const auto& key: keys_) {
1065
- const auto status = database_->Get(options, key, value);
983
+ database_->ReleaseSnapshot(snapshot_);
984
+ snapshot_ = nullptr;
1066
985
 
1067
- if (status.ok()) {
1068
- cache_.emplace_back(std::move(value));
1069
- } else if (status.IsNotFound()) {
1070
- cache_.emplace_back(nullptr);
1071
- } else {
1072
- SetStatus(status);
1073
- break;
986
+ for (auto status : status_) {
987
+ if (!status.ok() && !status.IsNotFound()) {
988
+ return status;
1074
989
  }
1075
-
1076
- value.Reset();
1077
990
  }
1078
991
 
1079
- database_->ReleaseSnapshot(snapshot_);
1080
- snapshot_ = nullptr;
992
+ return rocksdb::Status::OK();
1081
993
  }
1082
994
 
1083
- void HandleOKCallback (napi_env env, napi_value callback) override {
1084
- const auto size = cache_.size();
995
+ void Then (napi_env env, napi_value callback) override {
996
+ const auto size = values_.size();
1085
997
 
1086
998
  napi_value array;
1087
999
  napi_create_array_with_length(env, size, &array);
1088
1000
 
1089
1001
  for (size_t idx = 0; idx < size; idx++) {
1090
1002
  napi_value element;
1091
- if (cache_[idx].GetSelf() != nullptr) {
1092
- Convert(env, cache_[idx], valueAsBuffer_, element);
1003
+ if (status_[idx].ok()) {
1004
+ Convert(env, values_[idx], valueAsBuffer_, element);
1093
1005
  } else {
1094
1006
  napi_get_undefined(env, &element);
1095
1007
  }
@@ -1104,10 +1016,11 @@ struct GetManyWorker final : public PriorityWorker {
1104
1016
 
1105
1017
  private:
1106
1018
  const std::vector<std::string> keys_;
1019
+ std::vector<std::string> values_;
1020
+ std::vector<rocksdb::Status> status_;
1107
1021
  const bool valueAsBuffer_;
1108
- std::vector<rocksdb::PinnableSlice> cache_;
1109
1022
  const bool fillCache_;
1110
- const leveldb::Snapshot* snapshot_;
1023
+ const rocksdb::Snapshot* snapshot_;
1111
1024
  };
1112
1025
 
1113
1026
  NAPI_METHOD(db_get_many) {
@@ -1136,10 +1049,10 @@ struct DelWorker final : public PriorityWorker {
1136
1049
  key_(key), sync_(sync) {
1137
1050
  }
1138
1051
 
1139
- void DoExecute () override {
1140
- leveldb::WriteOptions options;
1052
+ rocksdb::Status Execute () override {
1053
+ rocksdb::WriteOptions options;
1141
1054
  options.sync = sync_;
1142
- SetStatus(database_->Del(options, key_));
1055
+ return database_->Del(options, key_);
1143
1056
  }
1144
1057
 
1145
1058
  const std::string key_;
@@ -1174,16 +1087,16 @@ struct ClearWorker final : public PriorityWorker {
1174
1087
  iterator_(database, reverse, lt, lte, gt, gte, limit, false) {
1175
1088
  }
1176
1089
 
1177
- void DoExecute () override {
1090
+ rocksdb::Status Execute () override {
1178
1091
  iterator_.SeekToRange();
1179
1092
 
1180
1093
  // TODO: add option
1181
1094
  const uint32_t hwm = 16 * 1024;
1182
- leveldb::WriteBatch batch;
1183
-
1184
- leveldb::WriteOptions options;
1185
- options.sync = false;
1186
1095
 
1096
+ rocksdb::WriteBatch batch;
1097
+ rocksdb::WriteOptions options;
1098
+ rocksdb::Status status;
1099
+
1187
1100
  while (true) {
1188
1101
  size_t bytesRead = 0;
1189
1102
 
@@ -1194,11 +1107,13 @@ struct ClearWorker final : public PriorityWorker {
1194
1107
  iterator_.Next();
1195
1108
  }
1196
1109
 
1197
- if (!SetStatus(iterator_.Status()) || bytesRead == 0) {
1110
+ status = iterator_.Status();
1111
+ if (!status.ok() || bytesRead == 0) {
1198
1112
  break;
1199
1113
  }
1200
1114
 
1201
- if (!SetStatus(database_->WriteBatch(options, &batch))) {
1115
+ status = database_->WriteBatch(options, &batch);
1116
+ if (!status.ok()) {
1202
1117
  break;
1203
1118
  }
1204
1119
 
@@ -1206,6 +1121,8 @@ struct ClearWorker final : public PriorityWorker {
1206
1121
  }
1207
1122
 
1208
1123
  iterator_.Close();
1124
+
1125
+ return status;
1209
1126
  }
1210
1127
 
1211
1128
  private:
@@ -1242,12 +1159,13 @@ struct ApproximateSizeWorker final : public PriorityWorker {
1242
1159
  : PriorityWorker(env, database, callback, "rocks_level.db.approximate_size"),
1243
1160
  start_(start), end_(end) {}
1244
1161
 
1245
- void DoExecute () override {
1246
- leveldb::Range range(start_, end_);
1162
+ rocksdb::Status Execute () override {
1163
+ rocksdb::Range range(start_, end_);
1247
1164
  size_ = database_->ApproximateSize(&range);
1165
+ return rocksdb::Status::OK();
1248
1166
  }
1249
1167
 
1250
- void HandleOKCallback (napi_env env, napi_value callback) override {
1168
+ void Then (napi_env env, napi_value callback) override {
1251
1169
  napi_value argv[2];
1252
1170
  napi_get_null(env, &argv[0]);
1253
1171
  napi_create_int64(env, size_, &argv[1]);
@@ -1282,10 +1200,11 @@ struct CompactRangeWorker final : public PriorityWorker {
1282
1200
  : PriorityWorker(env, database, callback, "rocks_level.db.compact_range"),
1283
1201
  start_(start), end_(end) {}
1284
1202
 
1285
- void DoExecute () override {
1286
- leveldb::Slice start = start_;
1287
- leveldb::Slice end = end_;
1203
+ rocksdb::Status Execute () override {
1204
+ rocksdb::Slice start = start_;
1205
+ rocksdb::Slice end = end_;
1288
1206
  database_->CompactRange(&start, &end);
1207
+ return rocksdb::Status::OK();
1289
1208
  }
1290
1209
 
1291
1210
  const std::string start_;
@@ -1330,9 +1249,9 @@ struct DestroyWorker final : public BaseWorker {
1330
1249
 
1331
1250
  ~DestroyWorker () {}
1332
1251
 
1333
- void DoExecute () override {
1334
- leveldb::Options options;
1335
- SetStatus(leveldb::DestroyDB(location_, options));
1252
+ rocksdb::Status Execute () override {
1253
+ rocksdb::Options options;
1254
+ return rocksdb::DestroyDB(location_, options);
1336
1255
  }
1337
1256
 
1338
1257
  const std::string location_;
@@ -1357,9 +1276,9 @@ struct RepairWorker final : public BaseWorker {
1357
1276
  : BaseWorker(env, nullptr, callback, "rocks_level.repair_db"),
1358
1277
  location_(location) {}
1359
1278
 
1360
- void DoExecute () override {
1361
- leveldb::Options options;
1362
- SetStatus(leveldb::RepairDB(location_, options));
1279
+ rocksdb::Status Execute () override {
1280
+ rocksdb::Options options;
1281
+ return rocksdb::RepairDB(location_, options);
1363
1282
  }
1364
1283
 
1365
1284
  const std::string location_;
@@ -1422,10 +1341,6 @@ NAPI_METHOD(iterator_seek) {
1422
1341
  NAPI_ARGV(2);
1423
1342
  NAPI_ITERATOR_CONTEXT();
1424
1343
 
1425
- if (iterator->isClosing_) {
1426
- napi_throw_error(env, nullptr, "iterator has closed");
1427
- }
1428
-
1429
1344
  const auto target = ToString(env, argv[1]);
1430
1345
  iterator->first_ = true;
1431
1346
  iterator->Seek(target);
@@ -1440,41 +1355,28 @@ struct CloseIteratorWorker final : public BaseWorker {
1440
1355
  : BaseWorker(env, iterator->database_, callback, "leveldown.iterator.end"),
1441
1356
  iterator_(iterator) {}
1442
1357
 
1443
- void DoExecute () override {
1358
+ rocksdb::Status Execute () override {
1444
1359
  iterator_->Close();
1360
+ return rocksdb::Status::OK();
1445
1361
  }
1446
1362
 
1447
- void DoFinally (napi_env env) override {
1363
+ void Finally (napi_env env) override {
1448
1364
  iterator_->Detach(env);
1449
- BaseWorker::DoFinally(env);
1365
+ BaseWorker::Finally(env);
1450
1366
  }
1451
1367
 
1452
1368
  private:
1453
1369
  Iterator* iterator_;
1454
1370
  };
1455
1371
 
1456
- /**
1457
- * Called by NAPI_METHOD(iterator_) and also when closing
1458
- * open iterators during NAPI_METHOD(db_close).
1459
- */
1460
- static void iterator_do_close (napi_env env, Iterator* iterator, napi_value cb) {
1461
- if (!iterator->isClosing_) {
1462
- auto worker = new CloseIteratorWorker(env, iterator, cb);
1463
- iterator->isClosing_ = true;
1464
-
1465
- if (iterator->nexting_) {
1466
- iterator->closeWorker_ = worker;
1467
- } else {
1468
- worker->Queue(env);
1469
- }
1470
- }
1471
- }
1472
-
1473
1372
  NAPI_METHOD(iterator_close) {
1474
1373
  NAPI_ARGV(2);
1475
1374
  NAPI_ITERATOR_CONTEXT();
1476
1375
 
1477
- iterator_do_close(env, iterator, argv[1]);
1376
+ const auto callback = argv[1];
1377
+
1378
+ auto worker = new CloseIteratorWorker(env, iterator, callback);
1379
+ worker->Queue(env);
1478
1380
 
1479
1381
  return 0;
1480
1382
  }
@@ -1486,63 +1388,83 @@ struct NextWorker final : public BaseWorker {
1486
1388
  napi_value callback)
1487
1389
  : BaseWorker(env, iterator->database_, callback,
1488
1390
  "leveldown.iterator.next"),
1489
- iterator_(iterator), size_(size), ok_() {}
1391
+ iterator_(iterator), size_(size) {}
1490
1392
 
1491
- void DoExecute () override {
1393
+ rocksdb::Status Execute () override {
1492
1394
  if (!iterator_->DidSeek()) {
1493
1395
  iterator_->SeekToRange();
1494
1396
  }
1495
1397
 
1496
1398
  // Limit the size of the cache to prevent starving the event loop
1497
1399
  // in JS-land while we're recursively calling process.nextTick().
1498
- ok_ = iterator_->ReadMany(size_);
1499
1400
 
1500
- if (!ok_) {
1501
- SetStatus(iterator_->Status());
1401
+ finished_ = false;
1402
+ cache_.reserve(size_ * 2);
1403
+ size_t bytesRead = 0;
1404
+
1405
+ while (true) {
1406
+ if (!iterator_->first_) iterator_->Next();
1407
+ else iterator_->first_ = false;
1408
+
1409
+ if (!iterator_->Valid() || !iterator_->Increment()) break;
1410
+
1411
+ if (iterator_->keys_ && iterator_->values_) {
1412
+ auto k = iterator_->CurrentKey();
1413
+ auto v = iterator_->CurrentValue();
1414
+ cache_.emplace_back(k.data(), k.size());
1415
+ cache_.emplace_back(v.data(), v.size());
1416
+ bytesRead += k.size() + v.size();
1417
+ } else if (iterator_->keys_) {
1418
+ auto k = iterator_->CurrentKey();
1419
+ cache_.emplace_back(k.data(), k.size());
1420
+ cache_.push_back({});
1421
+ bytesRead += k.size();
1422
+ } else if (iterator_->values_) {
1423
+ auto v = iterator_->CurrentValue();
1424
+ cache_.push_back({});
1425
+ cache_.emplace_back(v.data(), v.size());
1426
+ bytesRead += v.size();
1427
+ }
1428
+
1429
+ if (bytesRead > iterator_->highWaterMarkBytes_ || cache_.size() / 2 >= size_) {
1430
+ finished_ = true;
1431
+ return rocksdb::Status::OK();
1432
+ }
1502
1433
  }
1434
+
1435
+ return iterator_->Status();
1503
1436
  }
1504
1437
 
1505
- void HandleOKCallback (napi_env env, napi_value callback) override {
1506
- const auto size = iterator_->cache_.size();
1438
+ void Then (napi_env env, napi_value callback) override {
1439
+ const auto size = cache_.size();
1507
1440
  napi_value result;
1508
1441
  napi_create_array_with_length(env, size, &result);
1509
1442
 
1510
- for (size_t idx = 0; idx < iterator_->cache_.size(); idx += 2) {
1443
+ for (size_t idx = 0; idx < cache_.size(); idx += 2) {
1511
1444
  napi_value key;
1512
1445
  napi_value val;
1513
1446
 
1514
- Convert(env, iterator_->cache_[idx + 0], iterator_->keyAsBuffer_, key);
1515
- Convert(env, iterator_->cache_[idx + 1], iterator_->valueAsBuffer_, val);
1447
+ Convert(env, cache_[idx + 0], iterator_->keyAsBuffer_, key);
1448
+ Convert(env, cache_[idx + 1], iterator_->valueAsBuffer_, val);
1516
1449
 
1517
1450
  napi_set_element(env, result, static_cast<int>(idx + 0), key);
1518
1451
  napi_set_element(env, result, static_cast<int>(idx + 1), val);
1519
1452
  }
1520
1453
 
1521
- iterator_->cache_.clear();
1454
+ cache_.clear();
1522
1455
 
1523
1456
  napi_value argv[3];
1524
1457
  napi_get_null(env, &argv[0]);
1525
1458
  argv[1] = result;
1526
- napi_get_boolean(env, !ok_, &argv[2]);
1459
+ napi_get_boolean(env, !finished_, &argv[2]);
1527
1460
  CallFunction(env, callback, 3, argv);
1528
1461
  }
1529
1462
 
1530
- void DoFinally (napi_env env) override {
1531
- // clean up & handle the next/end state
1532
- iterator_->nexting_ = false;
1533
-
1534
- if (iterator_->closeWorker_) {
1535
- iterator_->closeWorker_->Queue(env);
1536
- iterator_->closeWorker_ = nullptr;
1537
- }
1538
-
1539
- BaseWorker::DoFinally(env);
1540
- }
1541
-
1542
1463
  private:
1543
- Iterator* iterator_;
1544
- uint32_t size_;
1545
- bool ok_;
1464
+ std::vector<std::string> cache_;
1465
+ Iterator* iterator_ = nullptr;
1466
+ uint32_t size_ = 0;
1467
+ bool finished_ = false;
1546
1468
  };
1547
1469
 
1548
1470
  NAPI_METHOD(iterator_nextv) {
@@ -1555,48 +1477,63 @@ NAPI_METHOD(iterator_nextv) {
1555
1477
 
1556
1478
  const auto callback = argv[2];
1557
1479
 
1558
- if (iterator->isClosing_) {
1559
- napi_value argv = CreateCodeError(env, "LEVEL_ITERATOR_NOT_OPEN", "Iterator is not open");
1560
- NAPI_STATUS_THROWS(CallFunction(env, callback, 1, &argv));
1561
- return 0;
1562
- }
1563
-
1564
1480
  auto worker = new NextWorker(env, iterator, size, callback);
1565
- iterator->nexting_ = true;
1566
1481
  worker->Queue(env);
1567
1482
 
1568
1483
  return 0;
1569
1484
  }
1570
1485
 
1571
- /**
1572
- * Worker class for batch write operation.
1573
- */
1574
1486
  struct BatchWorker final : public PriorityWorker {
1575
1487
  BatchWorker (napi_env env,
1576
1488
  Database* database,
1577
1489
  napi_value callback,
1578
- leveldb::WriteBatch* batch,
1579
- const bool sync,
1580
- const bool hasData)
1581
- : PriorityWorker(env, database, callback, "rocks_level.batch.do"),
1582
- batch_(batch), hasData_(hasData) {
1583
- options_.sync = sync;
1584
- }
1490
+ napi_value array,
1491
+ const bool sync)
1492
+ : PriorityWorker(env, database, callback, "rocks_level.batch.do"), sync_(sync) {
1493
+ uint32_t length;
1494
+ NAPI_STATUS_THROWS_VOID(napi_get_array_length(env, array, &length));
1495
+
1496
+ for (uint32_t i = 0; i < length; i++) {
1497
+ napi_value element;
1498
+ NAPI_STATUS_THROWS_VOID(napi_get_element(env, array, i, &element));
1499
+
1500
+ if (!IsObject(env, element)) continue;
1501
+
1502
+ const auto type = StringProperty(env, element, "type");
1503
+
1504
+ if (type == "del") {
1505
+ if (!HasProperty(env, element, "key")) continue;
1506
+ const auto key = ToString(env, GetProperty(env, element, "key"));
1507
+
1508
+ batch_.Delete(key);
1509
+ if (!hasData_) hasData_ = true;
1510
+ } else if (type == "put") {
1511
+ if (!HasProperty(env, element, "key")) continue;
1512
+ if (!HasProperty(env, element, "value")) continue;
1513
+
1514
+ const auto key = ToString(env, GetProperty(env, element, "key"));
1515
+ const auto value = ToString(env, GetProperty(env, element, "value"));
1585
1516
 
1586
- ~BatchWorker () {
1587
- delete batch_;
1517
+ batch_.Put(key, value);
1518
+ if (!hasData_) hasData_ = true;
1519
+ }
1520
+ }
1588
1521
  }
1589
1522
 
1590
- void DoExecute () override {
1591
- if (hasData_) {
1592
- SetStatus(database_->WriteBatch(options_, batch_));
1523
+ rocksdb::Status Execute () override {
1524
+ if (!hasData_) {
1525
+ return rocksdb::Status::OK();
1593
1526
  }
1527
+
1528
+ rocksdb::WriteOptions options;
1529
+ options.sync = sync_;
1530
+ return database_->WriteBatch(options, &batch_);
1594
1531
  }
1595
1532
 
1596
1533
  private:
1597
- leveldb::WriteOptions options_;
1598
- leveldb::WriteBatch* batch_;
1599
- const bool hasData_;
1534
+ rocksdb::WriteBatch batch_;
1535
+ const bool sync_;
1536
+ bool hasData_;
1600
1537
  };
1601
1538
 
1602
1539
  NAPI_METHOD(batch_do) {
@@ -1607,39 +1544,7 @@ NAPI_METHOD(batch_do) {
1607
1544
  const auto sync = BooleanProperty(env, argv[2], "sync", false);
1608
1545
  const auto callback = argv[3];
1609
1546
 
1610
- uint32_t length;
1611
- napi_get_array_length(env, array, &length);
1612
-
1613
- leveldb::WriteBatch* batch = new leveldb::WriteBatch();
1614
- bool hasData = false;
1615
-
1616
- for (uint32_t i = 0; i < length; i++) {
1617
- napi_value element;
1618
- napi_get_element(env, array, i, &element);
1619
-
1620
- if (!IsObject(env, element)) continue;
1621
-
1622
- std::string type = StringProperty(env, element, "type");
1623
-
1624
- if (type == "del") {
1625
- if (!HasProperty(env, element, "key")) continue;
1626
- const auto key = ToString(env, GetProperty(env, element, "key"));
1627
-
1628
- batch->Delete(key);
1629
- if (!hasData) hasData = true;
1630
- } else if (type == "put") {
1631
- if (!HasProperty(env, element, "key")) continue;
1632
- if (!HasProperty(env, element, "value")) continue;
1633
-
1634
- const auto key = ToString(env, GetProperty(env, element, "key"));
1635
- const auto value = ToString(env, GetProperty(env, element, "value"));
1636
-
1637
- batch->Put(key, value);
1638
- if (!hasData) hasData = true;
1639
- }
1640
- }
1641
-
1642
- auto worker = new BatchWorker(env, database, callback, batch, sync, hasData);
1547
+ auto worker = new BatchWorker(env, database, callback, array, sync);
1643
1548
  worker->Queue(env);
1644
1549
 
1645
1550
  return 0;
@@ -1647,7 +1552,7 @@ NAPI_METHOD(batch_do) {
1647
1552
 
1648
1553
  static void FinalizeBatch (napi_env env, void* data, void* hint) {
1649
1554
  if (data) {
1650
- delete reinterpret_cast<leveldb::WriteBatch*>(data);
1555
+ delete reinterpret_cast<rocksdb::WriteBatch*>(data);
1651
1556
  }
1652
1557
  }
1653
1558
 
@@ -1655,12 +1560,10 @@ NAPI_METHOD(batch_init) {
1655
1560
  NAPI_ARGV(1);
1656
1561
  NAPI_DB_CONTEXT();
1657
1562
 
1658
- auto batch = new leveldb::WriteBatch();
1563
+ auto batch = new rocksdb::WriteBatch();
1659
1564
 
1660
1565
  napi_value result;
1661
- NAPI_STATUS_THROWS(napi_create_external(env, batch,
1662
- FinalizeBatch,
1663
- nullptr, &result));
1566
+ NAPI_STATUS_THROWS(napi_create_external(env, batch, FinalizeBatch, nullptr, &result));
1664
1567
  return result;
1665
1568
  }
1666
1569
 
@@ -1711,19 +1614,19 @@ struct BatchWriteWorker final : public PriorityWorker {
1711
1614
  NAPI_STATUS_THROWS_VOID(napi_create_reference(env, batch, 1, &batchRef_));
1712
1615
  }
1713
1616
 
1714
- void DoExecute () override {
1715
- leveldb::WriteOptions options;
1617
+ rocksdb::Status Execute () override {
1618
+ rocksdb::WriteOptions options;
1716
1619
  options.sync = sync_;
1717
- SetStatus(database_->WriteBatch(options, batch_));
1620
+ return database_->WriteBatch(options, batch_);
1718
1621
  }
1719
1622
 
1720
- void DoFinally (napi_env env) override {
1623
+ void Finally (napi_env env) override {
1721
1624
  napi_delete_reference(env, batchRef_);
1722
- PriorityWorker::DoFinally(env);
1625
+ PriorityWorker::Finally(env);
1723
1626
  }
1724
1627
 
1725
1628
  private:
1726
- leveldb::WriteBatch* batch_;
1629
+ rocksdb::WriteBatch* batch_;
1727
1630
  const bool sync_;
1728
1631
  napi_ref batchRef_;
1729
1632
  };