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