@nxtedition/rocksdb 5.2.17 → 5.2.27
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 +366 -783
- package/binding.gyp +78 -69
- 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 -443
- package/deps/snappy/snappy.gyp +4 -1
- 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/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/darwin-x64+arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
package/binding.cc
CHANGED
|
@@ -16,10 +16,12 @@
|
|
|
16
16
|
|
|
17
17
|
namespace leveldb = rocksdb;
|
|
18
18
|
|
|
19
|
+
#include <array>
|
|
19
20
|
#include <set>
|
|
20
21
|
#include <memory>
|
|
21
22
|
#include <string>
|
|
22
23
|
#include <vector>
|
|
24
|
+
#include <optional>
|
|
23
25
|
|
|
24
26
|
class NullLogger : public rocksdb::Logger {
|
|
25
27
|
public:
|
|
@@ -30,7 +32,6 @@ public:
|
|
|
30
32
|
|
|
31
33
|
struct Database;
|
|
32
34
|
struct Iterator;
|
|
33
|
-
static void iterator_do_close (napi_env env, Iterator* iterator, napi_value cb);
|
|
34
35
|
|
|
35
36
|
#define NAPI_DB_CONTEXT() \
|
|
36
37
|
Database* database = nullptr; \
|
|
@@ -41,7 +42,7 @@ static void iterator_do_close (napi_env env, Iterator* iterator, napi_value cb);
|
|
|
41
42
|
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&iterator));
|
|
42
43
|
|
|
43
44
|
#define NAPI_BATCH_CONTEXT() \
|
|
44
|
-
|
|
45
|
+
rocksdb::WriteBatch* batch = nullptr; \
|
|
45
46
|
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&batch));
|
|
46
47
|
|
|
47
48
|
static bool IsString (napi_env env, napi_value value) {
|
|
@@ -62,7 +63,7 @@ static bool IsObject (napi_env env, napi_value value) {
|
|
|
62
63
|
return type == napi_object;
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
static napi_value CreateError (napi_env env, const std::
|
|
66
|
+
static napi_value CreateError (napi_env env, const std::string_view& str) {
|
|
66
67
|
napi_value msg;
|
|
67
68
|
napi_create_string_utf8(env, str.data(), str.size(), &msg);
|
|
68
69
|
napi_value error;
|
|
@@ -70,7 +71,7 @@ static napi_value CreateError (napi_env env, const std::string& str) {
|
|
|
70
71
|
return error;
|
|
71
72
|
}
|
|
72
73
|
|
|
73
|
-
static napi_value CreateCodeError (napi_env env, const std::
|
|
74
|
+
static napi_value CreateCodeError (napi_env env, const std::string_view& code, const std::string_view& msg) {
|
|
74
75
|
napi_value codeValue;
|
|
75
76
|
napi_create_string_utf8(env, code.data(), code.size(), &codeValue);
|
|
76
77
|
napi_value msgValue;
|
|
@@ -80,20 +81,19 @@ static napi_value CreateCodeError (napi_env env, const std::string& code, const
|
|
|
80
81
|
return error;
|
|
81
82
|
}
|
|
82
83
|
|
|
83
|
-
static bool HasProperty (napi_env env, napi_value obj, const std::
|
|
84
|
+
static bool HasProperty (napi_env env, napi_value obj, const std::string_view& key) {
|
|
84
85
|
bool has = false;
|
|
85
86
|
napi_has_named_property(env, obj, key.data(), &has);
|
|
86
87
|
return has;
|
|
87
88
|
}
|
|
88
89
|
|
|
89
|
-
static napi_value GetProperty (napi_env env, napi_value obj, const std::
|
|
90
|
+
static napi_value GetProperty (napi_env env, napi_value obj, const std::string_view& key) {
|
|
90
91
|
napi_value value;
|
|
91
92
|
napi_get_named_property(env, obj, key.data(), &value);
|
|
92
93
|
return value;
|
|
93
94
|
}
|
|
94
95
|
|
|
95
|
-
static bool BooleanProperty (napi_env env, napi_value obj, const std::
|
|
96
|
-
bool defaultValue) {
|
|
96
|
+
static bool BooleanProperty (napi_env env, napi_value obj, const std::string_view& key, bool defaultValue) {
|
|
97
97
|
if (HasProperty(env, obj, key.data())) {
|
|
98
98
|
const auto value = GetProperty(env, obj, key.data());
|
|
99
99
|
bool result;
|
|
@@ -104,7 +104,7 @@ static bool BooleanProperty (napi_env env, napi_value obj, const std::string& ke
|
|
|
104
104
|
return defaultValue;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
static bool EncodingIsBuffer (napi_env env, napi_value obj, const std::
|
|
107
|
+
static bool EncodingIsBuffer (napi_env env, napi_value obj, const std::string_view& option) {
|
|
108
108
|
napi_value value;
|
|
109
109
|
size_t size;
|
|
110
110
|
|
|
@@ -117,8 +117,7 @@ static bool EncodingIsBuffer (napi_env env, napi_value obj, const std::string& o
|
|
|
117
117
|
return false;
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
static uint32_t Uint32Property (napi_env env, napi_value obj, const std::
|
|
121
|
-
uint32_t defaultValue) {
|
|
120
|
+
static uint32_t Uint32Property (napi_env env, napi_value obj, const std::string_view& key, uint32_t defaultValue) {
|
|
122
121
|
if (HasProperty(env, obj, key.data())) {
|
|
123
122
|
const auto value = GetProperty(env, obj, key.data());
|
|
124
123
|
uint32_t result;
|
|
@@ -129,8 +128,7 @@ static uint32_t Uint32Property (napi_env env, napi_value obj, const std::string&
|
|
|
129
128
|
return defaultValue;
|
|
130
129
|
}
|
|
131
130
|
|
|
132
|
-
static int Int32Property (napi_env env, napi_value obj, const std::
|
|
133
|
-
int defaultValue) {
|
|
131
|
+
static int Int32Property (napi_env env, napi_value obj, const std::string_view& key, int defaultValue) {
|
|
134
132
|
if (HasProperty(env, obj, key.data())) {
|
|
135
133
|
const auto value = GetProperty(env, obj, key.data());
|
|
136
134
|
int result;
|
|
@@ -146,7 +144,7 @@ static std::string ToString (napi_env env, napi_value from, const std::string& d
|
|
|
146
144
|
size_t length = 0;
|
|
147
145
|
napi_get_value_string_utf8(env, from, nullptr, 0, &length);
|
|
148
146
|
std::string value(length, '\0');
|
|
149
|
-
napi_get_value_string_utf8(
|
|
147
|
+
napi_get_value_string_utf8(env, from, &value[0], value.length() + 1, &length);
|
|
150
148
|
return value;
|
|
151
149
|
} else if (IsBuffer(env, from)) {
|
|
152
150
|
char* buf = nullptr;
|
|
@@ -158,7 +156,7 @@ static std::string ToString (napi_env env, napi_value from, const std::string& d
|
|
|
158
156
|
return defaultValue;
|
|
159
157
|
}
|
|
160
158
|
|
|
161
|
-
static std::string StringProperty (napi_env env, napi_value obj, const std::string&
|
|
159
|
+
static std::string StringProperty (napi_env env, napi_value obj, const std::string_view& key, 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)) {
|
|
@@ -166,7 +164,7 @@ static std::string StringProperty (napi_env env, napi_value obj, const std::stri
|
|
|
166
164
|
}
|
|
167
165
|
}
|
|
168
166
|
|
|
169
|
-
return
|
|
167
|
+
return defaultValue;
|
|
170
168
|
}
|
|
171
169
|
|
|
172
170
|
static size_t StringOrBufferLength (napi_env env, napi_value value) {
|
|
@@ -182,13 +180,13 @@ static size_t StringOrBufferLength (napi_env env, napi_value value) {
|
|
|
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 std::string(ToString(env, value));
|
|
189
187
|
}
|
|
190
188
|
|
|
191
|
-
return
|
|
189
|
+
return {};
|
|
192
190
|
}
|
|
193
191
|
|
|
194
192
|
static std::vector<std::string> KeyArray (napi_env env, napi_value arr) {
|
|
@@ -211,15 +209,38 @@ static std::vector<std::string> KeyArray (napi_env env, napi_value arr) {
|
|
|
211
209
|
return result;
|
|
212
210
|
}
|
|
213
211
|
|
|
214
|
-
static napi_status CallFunction (napi_env env,
|
|
215
|
-
napi_value callback,
|
|
216
|
-
const int argc,
|
|
217
|
-
napi_value* argv) {
|
|
212
|
+
static napi_status CallFunction (napi_env env, napi_value callback, const int argc, napi_value* argv) {
|
|
218
213
|
napi_value global;
|
|
219
214
|
napi_get_global(env, &global);
|
|
220
215
|
return napi_call_function(env, global, callback, argc, argv, nullptr);
|
|
221
216
|
}
|
|
222
217
|
|
|
218
|
+
static napi_value ToError(napi_env env, const rocksdb::Status& status) {
|
|
219
|
+
if (status.ok()) {
|
|
220
|
+
return 0;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const auto msg = status.ToString();
|
|
224
|
+
|
|
225
|
+
if (status.IsNotFound()) {
|
|
226
|
+
return CreateCodeError(env, "LEVEL_NOT_FOUND", msg);
|
|
227
|
+
} else if (status.IsCorruption()) {
|
|
228
|
+
return CreateCodeError(env, "LEVEL_CORRUPTION", msg);
|
|
229
|
+
} else if (status.IsIOError()) {
|
|
230
|
+
if (msg.find("IO error: lock ") != std::string::npos) { // env_posix.cc
|
|
231
|
+
return CreateCodeError(env, "LEVEL_LOCKED", msg);
|
|
232
|
+
} else if (msg.find("IO error: LockFile ") != std::string::npos) { // env_win.cc
|
|
233
|
+
return CreateCodeError(env, "LEVEL_LOCKED", msg);
|
|
234
|
+
} else if (msg.find("IO error: While lock file") != std::string::npos) { // env_mac.cc
|
|
235
|
+
return CreateCodeError(env, "LEVEL_LOCKED", msg);
|
|
236
|
+
} else {
|
|
237
|
+
return CreateCodeError(env, "LEVEL_IO_ERROR", msg);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return CreateError(env, msg);
|
|
242
|
+
}
|
|
243
|
+
|
|
223
244
|
template <typename T>
|
|
224
245
|
void Convert (napi_env env, const T& s, bool asBuffer, napi_value& result) {
|
|
225
246
|
if (asBuffer) {
|
|
@@ -229,106 +250,98 @@ void Convert (napi_env env, const T& s, bool asBuffer, napi_value& result) {
|
|
|
229
250
|
}
|
|
230
251
|
}
|
|
231
252
|
|
|
253
|
+
struct NapiSlice : public rocksdb::Slice {
|
|
254
|
+
NapiSlice (napi_env env, napi_value from) {
|
|
255
|
+
if (IsString(env, from)) {
|
|
256
|
+
napi_get_value_string_utf8(env, from, nullptr, 0, &size_);
|
|
257
|
+
char* data;
|
|
258
|
+
if (size_ + 1 < stack_.size()) {
|
|
259
|
+
data = stack_.data();
|
|
260
|
+
} else {
|
|
261
|
+
heap_.reset(new char[size_ + 1]);
|
|
262
|
+
data = heap_.get();
|
|
263
|
+
}
|
|
264
|
+
data[size_] = 0;
|
|
265
|
+
napi_get_value_string_utf8(env, from, data, size_ + 1, &size_);
|
|
266
|
+
data_ = data;
|
|
267
|
+
} else if (IsBuffer(env, from)) {
|
|
268
|
+
void* data;
|
|
269
|
+
napi_get_buffer_info(env, from, &data, &size_);
|
|
270
|
+
data_ = static_cast<char*>(data);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
std::unique_ptr<char[]> heap_;
|
|
275
|
+
std::array<char, 8192> stack_;
|
|
276
|
+
};
|
|
277
|
+
|
|
232
278
|
/**
|
|
233
279
|
* Base worker class. Handles the async work. Derived classes can override the
|
|
234
280
|
* following virtual methods (listed in the order in which they're called):
|
|
235
281
|
*
|
|
236
|
-
* -
|
|
237
|
-
* -
|
|
238
|
-
* -
|
|
239
|
-
* -
|
|
282
|
+
* - Execute (abstract, worker pool thread): main work
|
|
283
|
+
* - OnOk (main thread): call JS callback on success
|
|
284
|
+
* - OnError (main thread): call JS callback on error
|
|
285
|
+
* - Destroy (main thread): do cleanup regardless of success
|
|
240
286
|
*/
|
|
241
287
|
struct BaseWorker {
|
|
242
|
-
// Note: storing env is discouraged as we'd end up using it in unsafe places.
|
|
243
288
|
BaseWorker (napi_env env,
|
|
244
289
|
Database* database,
|
|
245
290
|
napi_value callback,
|
|
246
|
-
const
|
|
291
|
+
const std::string& resourceName)
|
|
247
292
|
: database_(database) {
|
|
248
293
|
NAPI_STATUS_THROWS_VOID(napi_create_reference(env, callback, 1, &callbackRef_));
|
|
249
294
|
napi_value asyncResourceName;
|
|
250
|
-
NAPI_STATUS_THROWS_VOID(napi_create_string_utf8(env, resourceName,
|
|
251
|
-
|
|
252
|
-
|
|
295
|
+
NAPI_STATUS_THROWS_VOID(napi_create_string_utf8(env, resourceName.data(),
|
|
296
|
+
NAPI_AUTO_LENGTH,
|
|
297
|
+
&asyncResourceName));
|
|
253
298
|
NAPI_STATUS_THROWS_VOID(napi_create_async_work(env, callback,
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
299
|
+
asyncResourceName,
|
|
300
|
+
BaseWorker::Execute,
|
|
301
|
+
BaseWorker::Complete,
|
|
302
|
+
this, &asyncWork_));
|
|
258
303
|
}
|
|
259
304
|
|
|
260
305
|
virtual ~BaseWorker () {}
|
|
261
306
|
|
|
262
307
|
static void Execute (napi_env env, void* data) {
|
|
263
308
|
auto self = reinterpret_cast<BaseWorker*>(data);
|
|
264
|
-
|
|
265
|
-
// Don't pass env to DoExecute() because use of Node-API
|
|
266
|
-
// methods should generally be avoided in async work.
|
|
267
|
-
self->DoExecute();
|
|
309
|
+
self->status_ = self->Execute(*self->database_);
|
|
268
310
|
}
|
|
269
311
|
|
|
270
|
-
bool SetStatus (const leveldb::Status& status) {
|
|
271
|
-
status_ = status;
|
|
272
|
-
return status.ok();
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
virtual void DoExecute () = 0;
|
|
276
|
-
|
|
277
312
|
static void Complete (napi_env env, napi_status status, void* data) {
|
|
278
313
|
auto self = reinterpret_cast<BaseWorker*>(data);
|
|
279
314
|
|
|
280
|
-
self->DoComplete(env);
|
|
281
|
-
self->DoFinally(env);
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
void DoComplete (napi_env env) {
|
|
285
315
|
napi_value callback;
|
|
286
|
-
napi_get_reference_value(env, callbackRef_, &callback);
|
|
316
|
+
napi_get_reference_value(env, self->callbackRef_, &callback);
|
|
287
317
|
|
|
288
|
-
if (status_.ok()) {
|
|
289
|
-
|
|
318
|
+
if (self->status_.ok()) {
|
|
319
|
+
self->OnOk(env, callback);
|
|
290
320
|
} else {
|
|
291
|
-
|
|
321
|
+
self->OnError(env, callback, ToError(env, self->status_));
|
|
292
322
|
}
|
|
323
|
+
|
|
324
|
+
self->Destroy(env);
|
|
325
|
+
|
|
326
|
+
napi_delete_reference(env, self->callbackRef_);
|
|
327
|
+
napi_delete_async_work(env, self->asyncWork_);
|
|
328
|
+
|
|
329
|
+
delete self;
|
|
293
330
|
}
|
|
294
331
|
|
|
295
|
-
virtual
|
|
332
|
+
virtual rocksdb::Status Execute (Database& database) = 0;
|
|
333
|
+
|
|
334
|
+
virtual void OnOk (napi_env env, napi_value callback) {
|
|
296
335
|
napi_value argv;
|
|
297
336
|
napi_get_null(env, &argv);
|
|
298
337
|
CallFunction(env, callback, 1, &argv);
|
|
299
338
|
}
|
|
300
339
|
|
|
301
|
-
virtual void
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
const auto msg = status_.ToString();
|
|
305
|
-
|
|
306
|
-
if (status_.IsNotFound()) {
|
|
307
|
-
argv = CreateCodeError(env, "LEVEL_NOT_FOUND", msg);
|
|
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
|
-
}
|
|
323
|
-
|
|
324
|
-
CallFunction(env, callback, 1, &argv);
|
|
340
|
+
virtual void OnError (napi_env env, napi_value callback, napi_value err) {
|
|
341
|
+
CallFunction(env, callback, 1, &err);
|
|
325
342
|
}
|
|
326
343
|
|
|
327
|
-
virtual void
|
|
328
|
-
napi_delete_reference(env, callbackRef_);
|
|
329
|
-
napi_delete_async_work(env, asyncWork_);
|
|
330
|
-
|
|
331
|
-
delete this;
|
|
344
|
+
virtual void Destroy (napi_env env) {
|
|
332
345
|
}
|
|
333
346
|
|
|
334
347
|
void Queue (napi_env env) {
|
|
@@ -336,33 +349,24 @@ struct BaseWorker {
|
|
|
336
349
|
}
|
|
337
350
|
|
|
338
351
|
Database* database_;
|
|
339
|
-
|
|
340
352
|
private:
|
|
341
353
|
napi_ref callbackRef_;
|
|
342
354
|
napi_async_work asyncWork_;
|
|
343
|
-
|
|
355
|
+
rocksdb::Status status_;
|
|
344
356
|
};
|
|
345
357
|
|
|
346
|
-
/**
|
|
347
|
-
* Owns the LevelDB storage, cache, filter policy and iterators.
|
|
348
|
-
*/
|
|
349
358
|
struct Database {
|
|
350
|
-
|
|
351
|
-
: pendingCloseWorker_(nullptr),
|
|
352
|
-
ref_(nullptr),
|
|
353
|
-
priorityWork_(0) {}
|
|
354
|
-
|
|
355
|
-
leveldb::Status Open (const leveldb::Options& options,
|
|
359
|
+
rocksdb::Status Open (const rocksdb::Options& options,
|
|
356
360
|
const bool readOnly,
|
|
357
361
|
const char* location) {
|
|
358
362
|
if (readOnly) {
|
|
359
|
-
|
|
363
|
+
rocksdb::DB* db = nullptr;
|
|
360
364
|
const auto status = rocksdb::DB::OpenForReadOnly(options, location, &db);
|
|
361
365
|
db_.reset(db);
|
|
362
366
|
return status;
|
|
363
367
|
} else {
|
|
364
|
-
|
|
365
|
-
const auto status =
|
|
368
|
+
rocksdb::DB* db = nullptr;
|
|
369
|
+
const auto status = rocksdb::DB::Open(options, location, &db);
|
|
366
370
|
db_.reset(db);
|
|
367
371
|
return status;
|
|
368
372
|
}
|
|
@@ -372,56 +376,6 @@ struct Database {
|
|
|
372
376
|
db_.reset();
|
|
373
377
|
}
|
|
374
378
|
|
|
375
|
-
leveldb::Status Put (const leveldb::WriteOptions& options,
|
|
376
|
-
const std::string& key,
|
|
377
|
-
const std::string& value) {
|
|
378
|
-
return db_->Put(options, db_->DefaultColumnFamily(), key, value);
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
leveldb::Status Get (const leveldb::ReadOptions& options,
|
|
382
|
-
const std::string& key,
|
|
383
|
-
rocksdb::PinnableSlice& value) {
|
|
384
|
-
return db_->Get(options, db_->DefaultColumnFamily(), key, &value);
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
leveldb::Status Del (const leveldb::WriteOptions& options,
|
|
388
|
-
const std::string& key) {
|
|
389
|
-
return db_->Delete(options, db_->DefaultColumnFamily(), key);
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
leveldb::Status WriteBatch (const leveldb::WriteOptions& options,
|
|
393
|
-
leveldb::WriteBatch* batch) {
|
|
394
|
-
return db_->Write(options, batch);
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
uint64_t ApproximateSize (const leveldb::Range* range) {
|
|
398
|
-
uint64_t size = 0;
|
|
399
|
-
db_->GetApproximateSizes(range, 1, &size);
|
|
400
|
-
return size;
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
void CompactRange (const leveldb::Slice* start,
|
|
404
|
-
const leveldb::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 leveldb::Snapshot* NewSnapshot () {
|
|
414
|
-
return db_->GetSnapshot();
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
leveldb::Iterator* NewIterator (const leveldb::ReadOptions& options) {
|
|
418
|
-
return db_->NewIterator(options);
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
void ReleaseSnapshot (const leveldb::Snapshot* snapshot) {
|
|
422
|
-
return db_->ReleaseSnapshot(snapshot);
|
|
423
|
-
}
|
|
424
|
-
|
|
425
379
|
void AttachIterator (napi_env env, Iterator* iterator) {
|
|
426
380
|
iterators_.insert(iterator);
|
|
427
381
|
IncrementPriorityWork(env);
|
|
@@ -433,11 +387,11 @@ struct Database {
|
|
|
433
387
|
}
|
|
434
388
|
|
|
435
389
|
void IncrementPriorityWork (napi_env env) {
|
|
436
|
-
napi_reference_ref(env,
|
|
390
|
+
napi_reference_ref(env, prioritRef_, &priorityWork_);
|
|
437
391
|
}
|
|
438
392
|
|
|
439
393
|
void DecrementPriorityWork (napi_env env) {
|
|
440
|
-
napi_reference_unref(env,
|
|
394
|
+
napi_reference_unref(env, prioritRef_, &priorityWork_);
|
|
441
395
|
|
|
442
396
|
if (priorityWork_ == 0 && pendingCloseWorker_) {
|
|
443
397
|
pendingCloseWorker_->Queue(env);
|
|
@@ -449,13 +403,13 @@ struct Database {
|
|
|
449
403
|
return priorityWork_ > 0;
|
|
450
404
|
}
|
|
451
405
|
|
|
452
|
-
std::unique_ptr<
|
|
406
|
+
std::unique_ptr<rocksdb::DB> db_;
|
|
453
407
|
BaseWorker* pendingCloseWorker_;
|
|
454
408
|
std::set<Iterator*> iterators_;
|
|
455
|
-
napi_ref
|
|
409
|
+
napi_ref prioritRef_;
|
|
456
410
|
|
|
457
411
|
private:
|
|
458
|
-
uint32_t priorityWork_;
|
|
412
|
+
uint32_t priorityWork_ = 0;
|
|
459
413
|
};
|
|
460
414
|
|
|
461
415
|
/**
|
|
@@ -464,133 +418,113 @@ private:
|
|
|
464
418
|
struct PriorityWorker : public BaseWorker {
|
|
465
419
|
PriorityWorker (napi_env env, Database* database, napi_value callback, const char* resourceName)
|
|
466
420
|
: BaseWorker(env, database, callback, resourceName) {
|
|
467
|
-
|
|
421
|
+
database_->IncrementPriorityWork(env);
|
|
468
422
|
}
|
|
469
423
|
|
|
470
424
|
virtual ~PriorityWorker () {}
|
|
471
425
|
|
|
472
|
-
void
|
|
426
|
+
void Destroy (napi_env env) override {
|
|
473
427
|
database_->DecrementPriorityWork(env);
|
|
474
|
-
BaseWorker::
|
|
428
|
+
BaseWorker::Destroy(env);
|
|
475
429
|
}
|
|
476
430
|
};
|
|
477
431
|
|
|
478
432
|
struct BaseIterator {
|
|
479
433
|
BaseIterator(Database* database,
|
|
480
434
|
const bool reverse,
|
|
481
|
-
const std::string
|
|
482
|
-
const std::string
|
|
483
|
-
const std::string
|
|
484
|
-
const std::string
|
|
435
|
+
const std::optional<std::string>& lt,
|
|
436
|
+
const std::optional<std::string>& lte,
|
|
437
|
+
const std::optional<std::string>& gt,
|
|
438
|
+
const std::optional<std::string>& gte,
|
|
485
439
|
const int limit,
|
|
486
440
|
const bool fillCache)
|
|
487
441
|
: database_(database),
|
|
488
|
-
snapshot_(database->NewSnapshot()),
|
|
489
|
-
dbIterator_(database->NewIterator([&]{
|
|
490
|
-
leveldb::ReadOptions options;
|
|
491
|
-
options.fill_cache = fillCache;
|
|
492
|
-
options.verify_checksums = false;
|
|
493
|
-
options.snapshot = snapshot_;
|
|
494
|
-
return options;
|
|
495
|
-
}())),
|
|
496
|
-
didSeek_(false),
|
|
497
|
-
reverse_(reverse),
|
|
498
442
|
lt_(lt),
|
|
499
443
|
lte_(lte),
|
|
500
444
|
gt_(gt),
|
|
501
445
|
gte_(gte),
|
|
502
|
-
|
|
503
|
-
|
|
446
|
+
snapshot_(database_->db_->GetSnapshot(), [this](const rocksdb::Snapshot* ptr) {
|
|
447
|
+
database_->db_->ReleaseSnapshot(ptr);
|
|
448
|
+
}),
|
|
449
|
+
iterator_(database->db_->NewIterator([&]{
|
|
450
|
+
rocksdb::ReadOptions options;
|
|
451
|
+
if (lt_ && !lte_) {
|
|
452
|
+
upper_bound_ = rocksdb::Slice(lt_->data(), lt_->size());
|
|
453
|
+
options.iterate_upper_bound = &upper_bound_;
|
|
454
|
+
}
|
|
455
|
+
if (gte_) {
|
|
456
|
+
lower_bound_ = rocksdb::Slice(gte_->data(), gte_->size());
|
|
457
|
+
options.iterate_lower_bound = &lower_bound_;
|
|
458
|
+
}
|
|
459
|
+
options.fill_cache = fillCache;
|
|
460
|
+
options.snapshot = snapshot_.get();
|
|
461
|
+
return options;
|
|
462
|
+
}())),
|
|
463
|
+
reverse_(reverse),
|
|
464
|
+
limit_(limit) {
|
|
504
465
|
}
|
|
505
466
|
|
|
506
467
|
virtual ~BaseIterator () {
|
|
507
|
-
assert(!
|
|
508
|
-
|
|
509
|
-
delete lt_;
|
|
510
|
-
delete lte_;
|
|
511
|
-
delete gt_;
|
|
512
|
-
delete gte_;
|
|
468
|
+
assert(!iterator_);
|
|
513
469
|
}
|
|
514
470
|
|
|
515
471
|
bool DidSeek () const {
|
|
516
472
|
return didSeek_;
|
|
517
473
|
}
|
|
518
474
|
|
|
519
|
-
/**
|
|
520
|
-
* Seek to the first relevant key based on range options.
|
|
521
|
-
*/
|
|
522
475
|
void SeekToRange () {
|
|
523
476
|
didSeek_ = true;
|
|
524
477
|
|
|
525
|
-
if (!reverse_ && gte_) {
|
|
526
|
-
|
|
527
|
-
} else if (!reverse_ && gt_) {
|
|
528
|
-
dbIterator_->Seek(*gt_);
|
|
478
|
+
if (!reverse_ && gt_ && !gte_) {
|
|
479
|
+
iterator_->Seek(*gt_);
|
|
529
480
|
|
|
530
|
-
if (
|
|
531
|
-
|
|
481
|
+
if (iterator_->Valid() && iterator_->key().compare(*gt_) == 0) {
|
|
482
|
+
iterator_->Next();
|
|
532
483
|
}
|
|
533
484
|
} else if (reverse_ && lte_) {
|
|
534
|
-
|
|
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
|
-
}
|
|
485
|
+
iterator_->SeekForPrev(*lte_);
|
|
549
486
|
} else if (reverse_) {
|
|
550
|
-
|
|
487
|
+
iterator_->SeekToLast();
|
|
551
488
|
} else {
|
|
552
|
-
|
|
489
|
+
iterator_->SeekToFirst();
|
|
553
490
|
}
|
|
554
491
|
}
|
|
555
492
|
|
|
556
|
-
/**
|
|
557
|
-
* Seek manually (during iteration).
|
|
558
|
-
*/
|
|
559
493
|
void Seek (const std::string& target) {
|
|
560
494
|
didSeek_ = true;
|
|
561
495
|
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
dbIterator_->Seek(target);
|
|
496
|
+
// TODO (fix): Only check for (gt && !gte) and lte.
|
|
497
|
+
// See, https://github.com/facebook/rocksdb/issues/9904.
|
|
567
498
|
|
|
568
|
-
if (
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
499
|
+
if (OutOfRange(target)) {
|
|
500
|
+
SeekToLast();
|
|
501
|
+
Next();
|
|
502
|
+
} else if (reverse_) {
|
|
503
|
+
iterator_->SeekForPrev(target);
|
|
573
504
|
} 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
|
-
}
|
|
505
|
+
iterator_->Seek(target);
|
|
581
506
|
}
|
|
582
507
|
}
|
|
583
508
|
|
|
584
509
|
void Close () {
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
dbIterator_ = nullptr;
|
|
588
|
-
database_->ReleaseSnapshot(snapshot_);
|
|
589
|
-
}
|
|
510
|
+
snapshot_.reset();
|
|
511
|
+
iterator_.reset();
|
|
590
512
|
}
|
|
591
513
|
|
|
592
514
|
bool Valid () const {
|
|
593
|
-
|
|
515
|
+
if (!iterator_->Valid()) {
|
|
516
|
+
return false;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
if (lte_ && iterator_->key().compare(*lte_) > 0) {
|
|
520
|
+
return false;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
if (!gte_ && gt_ && iterator_->key().compare(*gt_) <= 0) {
|
|
524
|
+
return false;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
return true;
|
|
594
528
|
}
|
|
595
529
|
|
|
596
530
|
bool Increment () {
|
|
@@ -598,38 +532,33 @@ struct BaseIterator {
|
|
|
598
532
|
}
|
|
599
533
|
|
|
600
534
|
void Next () {
|
|
601
|
-
if (reverse_)
|
|
602
|
-
else
|
|
535
|
+
if (reverse_) iterator_->Prev();
|
|
536
|
+
else iterator_->Next();
|
|
603
537
|
}
|
|
604
538
|
|
|
605
539
|
void SeekToFirst () {
|
|
606
|
-
if (reverse_)
|
|
607
|
-
else
|
|
540
|
+
if (reverse_) iterator_->SeekToLast();
|
|
541
|
+
else iterator_->SeekToFirst();
|
|
608
542
|
}
|
|
609
543
|
|
|
610
544
|
void SeekToLast () {
|
|
611
|
-
if (reverse_)
|
|
612
|
-
else
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
void SeekToEnd () {
|
|
616
|
-
SeekToLast();
|
|
617
|
-
Next();
|
|
545
|
+
if (reverse_) iterator_->SeekToFirst();
|
|
546
|
+
else iterator_->SeekToLast();
|
|
618
547
|
}
|
|
619
548
|
|
|
620
|
-
|
|
621
|
-
return
|
|
549
|
+
rocksdb::Slice CurrentKey () const {
|
|
550
|
+
return iterator_->key();
|
|
622
551
|
}
|
|
623
552
|
|
|
624
|
-
|
|
625
|
-
return
|
|
553
|
+
rocksdb::Slice CurrentValue () const {
|
|
554
|
+
return iterator_->value();
|
|
626
555
|
}
|
|
627
556
|
|
|
628
|
-
|
|
629
|
-
return
|
|
557
|
+
rocksdb::Status Status () const {
|
|
558
|
+
return iterator_->status();
|
|
630
559
|
}
|
|
631
560
|
|
|
632
|
-
bool OutOfRange (const
|
|
561
|
+
bool OutOfRange (const rocksdb::Slice& target) const {
|
|
633
562
|
if (lte_) {
|
|
634
563
|
if (target.compare(*lte_) > 0) return true;
|
|
635
564
|
} else if (lt_) {
|
|
@@ -648,16 +577,18 @@ struct BaseIterator {
|
|
|
648
577
|
Database* database_;
|
|
649
578
|
|
|
650
579
|
private:
|
|
651
|
-
const
|
|
652
|
-
|
|
653
|
-
|
|
580
|
+
const std::optional<std::string> lt_;
|
|
581
|
+
const std::optional<std::string> lte_;
|
|
582
|
+
const std::optional<std::string> gt_;
|
|
583
|
+
const std::optional<std::string> gte_;
|
|
584
|
+
rocksdb::Slice lower_bound_;
|
|
585
|
+
rocksdb::Slice upper_bound_;
|
|
586
|
+
std::shared_ptr<const rocksdb::Snapshot> snapshot_;
|
|
587
|
+
std::unique_ptr<rocksdb::Iterator> iterator_;
|
|
588
|
+
bool didSeek_ = false;
|
|
654
589
|
const bool reverse_;
|
|
655
|
-
const std::string* lt_;
|
|
656
|
-
const std::string* lte_;
|
|
657
|
-
const std::string* gt_;
|
|
658
|
-
const std::string* gte_;
|
|
659
590
|
const int limit_;
|
|
660
|
-
int count_;
|
|
591
|
+
int count_ = 0;
|
|
661
592
|
};
|
|
662
593
|
|
|
663
594
|
struct Iterator final : public BaseIterator {
|
|
@@ -666,10 +597,10 @@ struct Iterator final : public BaseIterator {
|
|
|
666
597
|
const bool keys,
|
|
667
598
|
const bool values,
|
|
668
599
|
const int limit,
|
|
669
|
-
const std::string
|
|
670
|
-
const std::string
|
|
671
|
-
const std::string
|
|
672
|
-
const std::string
|
|
600
|
+
const std::optional<std::string>& lt,
|
|
601
|
+
const std::optional<std::string>& lte,
|
|
602
|
+
const std::optional<std::string>& gt,
|
|
603
|
+
const std::optional<std::string>& gte,
|
|
673
604
|
const bool fillCache,
|
|
674
605
|
const bool keyAsBuffer,
|
|
675
606
|
const bool valueAsBuffer,
|
|
@@ -681,9 +612,6 @@ struct Iterator final : public BaseIterator {
|
|
|
681
612
|
valueAsBuffer_(valueAsBuffer),
|
|
682
613
|
highWaterMarkBytes_(highWaterMarkBytes),
|
|
683
614
|
first_(true),
|
|
684
|
-
nexting_(false),
|
|
685
|
-
isClosing_(false),
|
|
686
|
-
closeWorker_(nullptr),
|
|
687
615
|
ref_(nullptr) {
|
|
688
616
|
}
|
|
689
617
|
|
|
@@ -697,53 +625,12 @@ struct Iterator final : public BaseIterator {
|
|
|
697
625
|
if (ref_) napi_delete_reference(env, ref_);
|
|
698
626
|
}
|
|
699
627
|
|
|
700
|
-
bool ReadMany (uint32_t size) {
|
|
701
|
-
cache_.clear();
|
|
702
|
-
cache_.reserve(size * 2);
|
|
703
|
-
size_t bytesRead = 0;
|
|
704
|
-
|
|
705
|
-
while (true) {
|
|
706
|
-
if (!first_) Next();
|
|
707
|
-
else first_ = false;
|
|
708
|
-
|
|
709
|
-
if (!Valid() || !Increment()) break;
|
|
710
|
-
|
|
711
|
-
if (keys_ && values_) {
|
|
712
|
-
auto k = CurrentKey();
|
|
713
|
-
auto v = CurrentValue();
|
|
714
|
-
cache_.emplace_back(k.data(), k.size());
|
|
715
|
-
cache_.emplace_back(v.data(), v.size());
|
|
716
|
-
bytesRead += k.size() + v.size();
|
|
717
|
-
} else if (keys_) {
|
|
718
|
-
auto k = CurrentKey();
|
|
719
|
-
cache_.emplace_back(k.data(), k.size());
|
|
720
|
-
cache_.push_back({});
|
|
721
|
-
bytesRead += k.size();
|
|
722
|
-
} else if (values_) {
|
|
723
|
-
auto v = CurrentValue();
|
|
724
|
-
cache_.push_back({});
|
|
725
|
-
cache_.emplace_back(v.data(), v.size());
|
|
726
|
-
bytesRead += v.size();
|
|
727
|
-
}
|
|
728
|
-
|
|
729
|
-
if (bytesRead > highWaterMarkBytes_ || cache_.size() / 2 >= size) {
|
|
730
|
-
return true;
|
|
731
|
-
}
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
return false;
|
|
735
|
-
}
|
|
736
|
-
|
|
737
628
|
const bool keys_;
|
|
738
629
|
const bool values_;
|
|
739
630
|
const bool keyAsBuffer_;
|
|
740
631
|
const bool valueAsBuffer_;
|
|
741
632
|
const uint32_t highWaterMarkBytes_;
|
|
742
633
|
bool first_;
|
|
743
|
-
bool nexting_;
|
|
744
|
-
bool isClosing_;
|
|
745
|
-
BaseWorker* closeWorker_;
|
|
746
|
-
std::vector<std::string> cache_;
|
|
747
634
|
|
|
748
635
|
private:
|
|
749
636
|
napi_ref ref_;
|
|
@@ -755,7 +642,7 @@ private:
|
|
|
755
642
|
* the guarantee that no db operations will be in-flight at this time.
|
|
756
643
|
*/
|
|
757
644
|
static void env_cleanup_hook (void* arg) {
|
|
758
|
-
|
|
645
|
+
auto database = reinterpret_cast<Database*>(arg);
|
|
759
646
|
|
|
760
647
|
// Do everything that db_close() does but synchronously. We're expecting that GC
|
|
761
648
|
// did not (yet) collect the database because that would be a user mistake (not
|
|
@@ -776,15 +663,15 @@ static void env_cleanup_hook (void* arg) {
|
|
|
776
663
|
|
|
777
664
|
static void FinalizeDatabase (napi_env env, void* data, void* hint) {
|
|
778
665
|
if (data) {
|
|
779
|
-
|
|
666
|
+
auto database = reinterpret_cast<Database*>(data);
|
|
780
667
|
napi_remove_env_cleanup_hook(env, env_cleanup_hook, database);
|
|
781
|
-
if (database->
|
|
668
|
+
if (database->prioritRef_) napi_delete_reference(env, database->prioritRef_);
|
|
782
669
|
delete database;
|
|
783
670
|
}
|
|
784
671
|
}
|
|
785
672
|
|
|
786
673
|
NAPI_METHOD(db_init) {
|
|
787
|
-
|
|
674
|
+
auto database = new Database();
|
|
788
675
|
napi_add_env_cleanup_hook(env, env_cleanup_hook, database);
|
|
789
676
|
|
|
790
677
|
napi_value result;
|
|
@@ -792,17 +679,12 @@ NAPI_METHOD(db_init) {
|
|
|
792
679
|
FinalizeDatabase,
|
|
793
680
|
nullptr, &result));
|
|
794
681
|
|
|
795
|
-
|
|
796
|
-
NAPI_STATUS_THROWS(napi_create_reference(env, result, 0, &database->ref_));
|
|
682
|
+
NAPI_STATUS_THROWS(napi_create_reference(env, result, 0, &database->prioritRef_));
|
|
797
683
|
|
|
798
684
|
return result;
|
|
799
685
|
}
|
|
800
686
|
|
|
801
|
-
|
|
802
|
-
* Worker class for opening a database.
|
|
803
|
-
* TODO: shouldn't this be a PriorityWorker?
|
|
804
|
-
*/
|
|
805
|
-
struct OpenWorker final : public BaseWorker {
|
|
687
|
+
struct OpenWorker final : public PriorityWorker {
|
|
806
688
|
OpenWorker (napi_env env,
|
|
807
689
|
Database* database,
|
|
808
690
|
napi_value callback,
|
|
@@ -818,18 +700,18 @@ struct OpenWorker final : public BaseWorker {
|
|
|
818
700
|
const uint32_t cacheSize,
|
|
819
701
|
const std::string& infoLogLevel,
|
|
820
702
|
const bool readOnly)
|
|
821
|
-
:
|
|
703
|
+
: PriorityWorker(env, database, callback, "leveldown.db.open"),
|
|
822
704
|
readOnly_(readOnly),
|
|
823
705
|
location_(location) {
|
|
824
706
|
options_.create_if_missing = createIfMissing;
|
|
825
707
|
options_.error_if_exists = errorIfExists;
|
|
826
708
|
options_.compression = compression
|
|
827
|
-
?
|
|
828
|
-
:
|
|
709
|
+
? rocksdb::kSnappyCompression
|
|
710
|
+
: rocksdb::kNoCompression;
|
|
829
711
|
options_.write_buffer_size = writeBufferSize;
|
|
830
712
|
options_.max_open_files = maxOpenFiles;
|
|
831
713
|
options_.max_log_file_size = maxFileSize;
|
|
832
|
-
options_.
|
|
714
|
+
options_.use_adaptive_mutex = true;
|
|
833
715
|
|
|
834
716
|
if (infoLogLevel.size() > 0) {
|
|
835
717
|
rocksdb::InfoLogLevel lvl = {};
|
|
@@ -869,11 +751,11 @@ struct OpenWorker final : public BaseWorker {
|
|
|
869
751
|
);
|
|
870
752
|
}
|
|
871
753
|
|
|
872
|
-
|
|
873
|
-
|
|
754
|
+
rocksdb::Status Execute (Database& database) override {
|
|
755
|
+
return database.Open(options_, readOnly_, location_.c_str());
|
|
874
756
|
}
|
|
875
757
|
|
|
876
|
-
|
|
758
|
+
rocksdb::Options options_;
|
|
877
759
|
const bool readOnly_;
|
|
878
760
|
const std::string location_;
|
|
879
761
|
};
|
|
@@ -918,8 +800,8 @@ struct CloseWorker final : public BaseWorker {
|
|
|
918
800
|
napi_value callback)
|
|
919
801
|
: BaseWorker(env, database, callback, "leveldown.db.close") {}
|
|
920
802
|
|
|
921
|
-
|
|
922
|
-
|
|
803
|
+
rocksdb::Status Execute (Database& database) override {
|
|
804
|
+
return database.db_->Close();
|
|
923
805
|
}
|
|
924
806
|
};
|
|
925
807
|
|
|
@@ -933,13 +815,6 @@ NAPI_METHOD(db_close) {
|
|
|
933
815
|
|
|
934
816
|
const auto callback = argv[1];
|
|
935
817
|
|
|
936
|
-
napi_value noop;
|
|
937
|
-
napi_create_function(env, nullptr, 0, noop_callback, nullptr, &noop);
|
|
938
|
-
|
|
939
|
-
for (auto it : database->iterators_) {
|
|
940
|
-
iterator_do_close(env, it, noop);
|
|
941
|
-
}
|
|
942
|
-
|
|
943
818
|
auto worker = new CloseWorker(env, database, callback);
|
|
944
819
|
|
|
945
820
|
if (!database->HasPriorityWork()) {
|
|
@@ -951,41 +826,15 @@ NAPI_METHOD(db_close) {
|
|
|
951
826
|
return 0;
|
|
952
827
|
}
|
|
953
828
|
|
|
954
|
-
struct PutWorker final : public PriorityWorker {
|
|
955
|
-
PutWorker (napi_env env,
|
|
956
|
-
Database* database,
|
|
957
|
-
napi_value callback,
|
|
958
|
-
const std::string& key,
|
|
959
|
-
const std::string& value,
|
|
960
|
-
bool sync)
|
|
961
|
-
: PriorityWorker(env, database, callback, "rocks_level.db.put"),
|
|
962
|
-
key_(key), value_(value), sync_(sync) {
|
|
963
|
-
}
|
|
964
|
-
|
|
965
|
-
void DoExecute () override {
|
|
966
|
-
leveldb::WriteOptions options;
|
|
967
|
-
options.sync = sync_;
|
|
968
|
-
SetStatus(database_->Put(options, key_, value_));
|
|
969
|
-
}
|
|
970
|
-
|
|
971
|
-
const std::string key_;
|
|
972
|
-
const std::string value_;
|
|
973
|
-
const bool sync_;
|
|
974
|
-
};
|
|
975
|
-
|
|
976
829
|
NAPI_METHOD(db_put) {
|
|
977
|
-
NAPI_ARGV(
|
|
830
|
+
NAPI_ARGV(4);
|
|
978
831
|
NAPI_DB_CONTEXT();
|
|
979
832
|
|
|
980
833
|
const auto key = ToString(env, argv[1]);
|
|
981
834
|
const auto value = ToString(env, argv[2]);
|
|
982
|
-
const auto sync = BooleanProperty(env, argv[3], "sync", false);
|
|
983
|
-
const auto callback = argv[4];
|
|
984
|
-
|
|
985
|
-
auto worker = new PutWorker(env, database, callback, key, value, sync);
|
|
986
|
-
worker->Queue(env);
|
|
987
835
|
|
|
988
|
-
|
|
836
|
+
rocksdb::WriteOptions options;
|
|
837
|
+
return ToError(env, database->db_->Put(options, key, value));
|
|
989
838
|
}
|
|
990
839
|
|
|
991
840
|
struct GetWorker final : public PriorityWorker {
|
|
@@ -996,16 +845,22 @@ struct GetWorker final : public PriorityWorker {
|
|
|
996
845
|
const bool asBuffer,
|
|
997
846
|
const bool fillCache)
|
|
998
847
|
: PriorityWorker(env, database, callback, "rocks_level.db.get"),
|
|
999
|
-
key_(key), asBuffer_(asBuffer), fillCache_(fillCache)
|
|
848
|
+
key_(key), asBuffer_(asBuffer), fillCache_(fillCache),
|
|
849
|
+
snapshot_(database_->db_->GetSnapshot(), [this](const rocksdb::Snapshot* ptr) {
|
|
850
|
+
database_->db_->ReleaseSnapshot(ptr);
|
|
851
|
+
}) {
|
|
1000
852
|
}
|
|
1001
853
|
|
|
1002
|
-
|
|
1003
|
-
|
|
854
|
+
rocksdb::Status Execute (Database& database) override {
|
|
855
|
+
rocksdb::ReadOptions options;
|
|
1004
856
|
options.fill_cache = fillCache_;
|
|
1005
|
-
|
|
857
|
+
options.snapshot = snapshot_.get();
|
|
858
|
+
auto status = database.db_->Get(options, database.db_->DefaultColumnFamily(), key_, &value_);
|
|
859
|
+
snapshot_.reset();
|
|
860
|
+
return status;
|
|
1006
861
|
}
|
|
1007
862
|
|
|
1008
|
-
void
|
|
863
|
+
void OnOk (napi_env env, napi_value callback) override {
|
|
1009
864
|
napi_value argv[2];
|
|
1010
865
|
napi_get_null(env, &argv[0]);
|
|
1011
866
|
Convert(env, std::move(value_), asBuffer_, argv[1]);
|
|
@@ -1017,6 +872,7 @@ private:
|
|
|
1017
872
|
rocksdb::PinnableSlice value_;
|
|
1018
873
|
const bool asBuffer_;
|
|
1019
874
|
const bool fillCache_;
|
|
875
|
+
std::shared_ptr<const rocksdb::Snapshot> snapshot_;
|
|
1020
876
|
};
|
|
1021
877
|
|
|
1022
878
|
NAPI_METHOD(db_get) {
|
|
@@ -1044,54 +900,42 @@ struct GetManyWorker final : public PriorityWorker {
|
|
|
1044
900
|
const bool fillCache)
|
|
1045
901
|
: PriorityWorker(env, database, callback, "leveldown.get.many"),
|
|
1046
902
|
keys_(keys), valueAsBuffer_(valueAsBuffer), fillCache_(fillCache),
|
|
1047
|
-
snapshot_(
|
|
903
|
+
snapshot_(database_->db_->GetSnapshot(), [this](const rocksdb::Snapshot* ptr) {
|
|
904
|
+
database_->db_->ReleaseSnapshot(ptr);
|
|
905
|
+
}) {
|
|
1048
906
|
}
|
|
1049
907
|
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
database_->ReleaseSnapshot(snapshot_);
|
|
1053
|
-
snapshot_ = nullptr;
|
|
1054
|
-
}
|
|
1055
|
-
}
|
|
1056
|
-
|
|
1057
|
-
void DoExecute () override {
|
|
1058
|
-
cache_.reserve(keys_.size());
|
|
1059
|
-
|
|
1060
|
-
leveldb::ReadOptions options;
|
|
1061
|
-
options.snapshot = snapshot_;
|
|
908
|
+
rocksdb::Status Execute (Database& database) override {
|
|
909
|
+
rocksdb::ReadOptions options;
|
|
1062
910
|
options.fill_cache = fillCache_;
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
911
|
+
options.snapshot = snapshot_.get();
|
|
912
|
+
|
|
913
|
+
status_ = database.db_->MultiGet(
|
|
914
|
+
options,
|
|
915
|
+
std::vector<rocksdb::Slice>(keys_.begin(), keys_.end()),
|
|
916
|
+
&values_
|
|
917
|
+
);
|
|
918
|
+
snapshot_ = nullptr;
|
|
1068
919
|
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
cache_.emplace_back(nullptr);
|
|
1073
|
-
} else {
|
|
1074
|
-
SetStatus(status);
|
|
1075
|
-
break;
|
|
920
|
+
for (auto status : status_) {
|
|
921
|
+
if (!status.ok() && !status.IsNotFound()) {
|
|
922
|
+
return status;
|
|
1076
923
|
}
|
|
1077
|
-
|
|
1078
|
-
value.Reset();
|
|
1079
924
|
}
|
|
1080
925
|
|
|
1081
|
-
|
|
1082
|
-
snapshot_ = nullptr;
|
|
926
|
+
return rocksdb::Status::OK();
|
|
1083
927
|
}
|
|
1084
928
|
|
|
1085
|
-
void
|
|
1086
|
-
const auto size =
|
|
929
|
+
void OnOk (napi_env env, napi_value callback) override {
|
|
930
|
+
const auto size = values_.size();
|
|
1087
931
|
|
|
1088
932
|
napi_value array;
|
|
1089
933
|
napi_create_array_with_length(env, size, &array);
|
|
1090
934
|
|
|
1091
935
|
for (size_t idx = 0; idx < size; idx++) {
|
|
1092
936
|
napi_value element;
|
|
1093
|
-
if (
|
|
1094
|
-
Convert(env,
|
|
937
|
+
if (status_[idx].ok()) {
|
|
938
|
+
Convert(env, values_[idx], valueAsBuffer_, element);
|
|
1095
939
|
} else {
|
|
1096
940
|
napi_get_undefined(env, &element);
|
|
1097
941
|
}
|
|
@@ -1106,10 +950,11 @@ struct GetManyWorker final : public PriorityWorker {
|
|
|
1106
950
|
|
|
1107
951
|
private:
|
|
1108
952
|
const std::vector<std::string> keys_;
|
|
953
|
+
std::vector<std::string> values_;
|
|
954
|
+
std::vector<rocksdb::Status> status_;
|
|
1109
955
|
const bool valueAsBuffer_;
|
|
1110
|
-
std::vector<rocksdb::PinnableSlice> cache_;
|
|
1111
956
|
const bool fillCache_;
|
|
1112
|
-
const
|
|
957
|
+
std::shared_ptr<const rocksdb::Snapshot> snapshot_;
|
|
1113
958
|
};
|
|
1114
959
|
|
|
1115
960
|
NAPI_METHOD(db_get_many) {
|
|
@@ -1128,184 +973,65 @@ NAPI_METHOD(db_get_many) {
|
|
|
1128
973
|
return 0;
|
|
1129
974
|
}
|
|
1130
975
|
|
|
1131
|
-
struct DelWorker final : public PriorityWorker {
|
|
1132
|
-
DelWorker (napi_env env,
|
|
1133
|
-
Database* database,
|
|
1134
|
-
napi_value callback,
|
|
1135
|
-
const std::string& key,
|
|
1136
|
-
bool sync)
|
|
1137
|
-
: PriorityWorker(env, database, callback, "rocks_level.db.del"),
|
|
1138
|
-
key_(key), sync_(sync) {
|
|
1139
|
-
}
|
|
1140
|
-
|
|
1141
|
-
void DoExecute () override {
|
|
1142
|
-
leveldb::WriteOptions options;
|
|
1143
|
-
options.sync = sync_;
|
|
1144
|
-
SetStatus(database_->Del(options, key_));
|
|
1145
|
-
}
|
|
1146
|
-
|
|
1147
|
-
const std::string key_;
|
|
1148
|
-
const bool sync_;
|
|
1149
|
-
};
|
|
1150
|
-
|
|
1151
976
|
NAPI_METHOD(db_del) {
|
|
1152
|
-
NAPI_ARGV(
|
|
977
|
+
NAPI_ARGV(3);
|
|
1153
978
|
NAPI_DB_CONTEXT();
|
|
1154
979
|
|
|
1155
980
|
const auto key = ToString(env, argv[1]);
|
|
1156
|
-
const auto sync = BooleanProperty(env, argv[2], "sync", false);
|
|
1157
|
-
const auto callback = argv[3];
|
|
1158
|
-
|
|
1159
|
-
auto worker = new DelWorker(env, database, callback, key, sync);
|
|
1160
|
-
worker->Queue(env);
|
|
1161
981
|
|
|
1162
|
-
|
|
982
|
+
rocksdb::WriteOptions options;
|
|
983
|
+
return ToError(env, database->db_->Delete(options, key));
|
|
1163
984
|
}
|
|
1164
985
|
|
|
1165
|
-
struct ClearWorker final : public PriorityWorker {
|
|
1166
|
-
ClearWorker (napi_env env,
|
|
1167
|
-
Database* database,
|
|
1168
|
-
napi_value callback,
|
|
1169
|
-
const bool reverse,
|
|
1170
|
-
const int limit,
|
|
1171
|
-
const std::string* lt,
|
|
1172
|
-
const std::string* lte,
|
|
1173
|
-
const std::string* gt,
|
|
1174
|
-
const std::string* gte)
|
|
1175
|
-
: PriorityWorker(env, database, callback, "rocks_level.db.clear"),
|
|
1176
|
-
iterator_(database, reverse, lt, lte, gt, gte, limit, false) {
|
|
1177
|
-
}
|
|
1178
|
-
|
|
1179
|
-
void DoExecute () override {
|
|
1180
|
-
iterator_.SeekToRange();
|
|
1181
|
-
|
|
1182
|
-
// TODO: add option
|
|
1183
|
-
const uint32_t hwm = 16 * 1024;
|
|
1184
|
-
leveldb::WriteBatch batch;
|
|
1185
|
-
|
|
1186
|
-
leveldb::WriteOptions options;
|
|
1187
|
-
options.sync = false;
|
|
1188
|
-
|
|
1189
|
-
while (true) {
|
|
1190
|
-
size_t bytesRead = 0;
|
|
1191
|
-
|
|
1192
|
-
while (bytesRead <= hwm && iterator_.Valid() && iterator_.Increment()) {
|
|
1193
|
-
const auto key = iterator_.CurrentKey();
|
|
1194
|
-
batch.Delete(key);
|
|
1195
|
-
bytesRead += key.size();
|
|
1196
|
-
iterator_.Next();
|
|
1197
|
-
}
|
|
1198
|
-
|
|
1199
|
-
if (!SetStatus(iterator_.Status()) || bytesRead == 0) {
|
|
1200
|
-
break;
|
|
1201
|
-
}
|
|
1202
|
-
|
|
1203
|
-
if (!SetStatus(database_->WriteBatch(options, &batch))) {
|
|
1204
|
-
break;
|
|
1205
|
-
}
|
|
1206
|
-
|
|
1207
|
-
batch.Clear();
|
|
1208
|
-
}
|
|
1209
|
-
|
|
1210
|
-
iterator_.Close();
|
|
1211
|
-
}
|
|
1212
|
-
|
|
1213
|
-
private:
|
|
1214
|
-
BaseIterator iterator_;
|
|
1215
|
-
};
|
|
1216
|
-
|
|
1217
986
|
NAPI_METHOD(db_clear) {
|
|
1218
|
-
NAPI_ARGV(
|
|
987
|
+
NAPI_ARGV(2);
|
|
1219
988
|
NAPI_DB_CONTEXT();
|
|
1220
989
|
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
const auto reverse = BooleanProperty(env, options, "reverse", false);
|
|
1225
|
-
const auto limit = Int32Property(env, options, "limit", -1);
|
|
1226
|
-
|
|
1227
|
-
const auto lt = RangeOption(env, options, "lt");
|
|
1228
|
-
const auto lte = RangeOption(env, options, "lte");
|
|
1229
|
-
const auto gt = RangeOption(env, options, "gt");
|
|
1230
|
-
const auto gte = RangeOption(env, options, "gte");
|
|
1231
|
-
|
|
1232
|
-
auto worker = new ClearWorker(env, database, callback, reverse, limit, lt, lte, gt, gte);
|
|
1233
|
-
worker->Queue(env);
|
|
1234
|
-
|
|
1235
|
-
return 0;
|
|
1236
|
-
}
|
|
990
|
+
const auto reverse = BooleanProperty(env, argv[1], "reverse", false);
|
|
991
|
+
const auto limit = Int32Property(env, argv[1], "limit", -1);
|
|
1237
992
|
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
const std::string& start,
|
|
1243
|
-
const std::string& end)
|
|
1244
|
-
: PriorityWorker(env, database, callback, "rocks_level.db.approximate_size"),
|
|
1245
|
-
start_(start), end_(end) {}
|
|
993
|
+
const auto lt = RangeOption(env, argv[1], "lt");
|
|
994
|
+
const auto lte = RangeOption(env, argv[1], "lte");
|
|
995
|
+
const auto gt = RangeOption(env, argv[1], "gt");
|
|
996
|
+
const auto gte = RangeOption(env, argv[1], "gte");
|
|
1246
997
|
|
|
1247
|
-
|
|
1248
|
-
leveldb::Range range(start_, end_);
|
|
1249
|
-
size_ = database_->ApproximateSize(&range);
|
|
1250
|
-
}
|
|
1251
|
-
|
|
1252
|
-
void HandleOKCallback (napi_env env, napi_value callback) override {
|
|
1253
|
-
napi_value argv[2];
|
|
1254
|
-
napi_get_null(env, &argv[0]);
|
|
1255
|
-
napi_create_int64(env, size_, &argv[1]);
|
|
1256
|
-
CallFunction(env, callback, 2, argv);
|
|
1257
|
-
}
|
|
998
|
+
BaseIterator it(database, reverse, lt, lte, gt, gte, limit, false);
|
|
1258
999
|
|
|
1259
|
-
|
|
1260
|
-
std::string end_;
|
|
1261
|
-
uint64_t size_;
|
|
1262
|
-
};
|
|
1000
|
+
it.SeekToRange();
|
|
1263
1001
|
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
NAPI_DB_CONTEXT();
|
|
1002
|
+
// TODO: add option
|
|
1003
|
+
const uint32_t hwm = 16 * 1024;
|
|
1267
1004
|
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1005
|
+
rocksdb::WriteBatch batch;
|
|
1006
|
+
rocksdb::WriteOptions options;
|
|
1007
|
+
rocksdb::Status status;
|
|
1008
|
+
|
|
1009
|
+
while (true) {
|
|
1010
|
+
size_t bytesRead = 0;
|
|
1271
1011
|
|
|
1272
|
-
|
|
1273
|
-
|
|
1012
|
+
while (bytesRead <= hwm && it.Valid() && it.Increment()) {
|
|
1013
|
+
const auto key = it.CurrentKey();
|
|
1014
|
+
batch.Delete(key);
|
|
1015
|
+
bytesRead += key.size();
|
|
1016
|
+
it.Next();
|
|
1017
|
+
}
|
|
1274
1018
|
|
|
1275
|
-
|
|
1276
|
-
|
|
1019
|
+
status = it.Status();
|
|
1020
|
+
if (!status.ok() || bytesRead == 0) {
|
|
1021
|
+
break;
|
|
1022
|
+
}
|
|
1277
1023
|
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
const std::string& start,
|
|
1283
|
-
const std::string& end)
|
|
1284
|
-
: PriorityWorker(env, database, callback, "rocks_level.db.compact_range"),
|
|
1285
|
-
start_(start), end_(end) {}
|
|
1024
|
+
status = database->db_->Write(options, &batch);
|
|
1025
|
+
if (!status.ok()) {
|
|
1026
|
+
break;
|
|
1027
|
+
}
|
|
1286
1028
|
|
|
1287
|
-
|
|
1288
|
-
leveldb::Slice start = start_;
|
|
1289
|
-
leveldb::Slice end = end_;
|
|
1290
|
-
database_->CompactRange(&start, &end);
|
|
1029
|
+
batch.Clear();
|
|
1291
1030
|
}
|
|
1292
1031
|
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
NAPI_METHOD(db_compact_range) {
|
|
1298
|
-
NAPI_ARGV(4);
|
|
1299
|
-
NAPI_DB_CONTEXT();
|
|
1300
|
-
|
|
1301
|
-
const auto start = ToString(env, argv[1]);
|
|
1302
|
-
const auto end = ToString(env, argv[2]);
|
|
1303
|
-
const auto callback = argv[3];
|
|
1304
|
-
|
|
1305
|
-
auto worker = new CompactRangeWorker(env, database, callback, start, end);
|
|
1306
|
-
worker->Queue(env);
|
|
1307
|
-
|
|
1308
|
-
return 0;
|
|
1032
|
+
it.Close();
|
|
1033
|
+
|
|
1034
|
+
return ToError(env, status);
|
|
1309
1035
|
}
|
|
1310
1036
|
|
|
1311
1037
|
NAPI_METHOD(db_get_property) {
|
|
@@ -1315,7 +1041,7 @@ NAPI_METHOD(db_get_property) {
|
|
|
1315
1041
|
const auto property = ToString(env, argv[1]);
|
|
1316
1042
|
|
|
1317
1043
|
std::string value;
|
|
1318
|
-
database->GetProperty(property, value);
|
|
1044
|
+
database->db_->GetProperty(property, &value);
|
|
1319
1045
|
|
|
1320
1046
|
napi_value result;
|
|
1321
1047
|
napi_create_string_utf8(env, value.data(), value.size(), &result);
|
|
@@ -1323,62 +1049,6 @@ NAPI_METHOD(db_get_property) {
|
|
|
1323
1049
|
return result;
|
|
1324
1050
|
}
|
|
1325
1051
|
|
|
1326
|
-
struct DestroyWorker final : public BaseWorker {
|
|
1327
|
-
DestroyWorker (napi_env env,
|
|
1328
|
-
const std::string& location,
|
|
1329
|
-
napi_value callback)
|
|
1330
|
-
: BaseWorker(env, nullptr, callback, "rocks_level.destroy_db"),
|
|
1331
|
-
location_(location) {}
|
|
1332
|
-
|
|
1333
|
-
~DestroyWorker () {}
|
|
1334
|
-
|
|
1335
|
-
void DoExecute () override {
|
|
1336
|
-
leveldb::Options options;
|
|
1337
|
-
SetStatus(leveldb::DestroyDB(location_, options));
|
|
1338
|
-
}
|
|
1339
|
-
|
|
1340
|
-
const std::string location_;
|
|
1341
|
-
};
|
|
1342
|
-
|
|
1343
|
-
NAPI_METHOD(destroy_db) {
|
|
1344
|
-
NAPI_ARGV(2);
|
|
1345
|
-
|
|
1346
|
-
const auto location = ToString(env, argv[0]);
|
|
1347
|
-
const auto callback = argv[1];
|
|
1348
|
-
|
|
1349
|
-
auto worker = new DestroyWorker(env, location, callback);
|
|
1350
|
-
worker->Queue(env);
|
|
1351
|
-
|
|
1352
|
-
return 0;
|
|
1353
|
-
}
|
|
1354
|
-
|
|
1355
|
-
struct RepairWorker final : public BaseWorker {
|
|
1356
|
-
RepairWorker (napi_env env,
|
|
1357
|
-
const std::string& location,
|
|
1358
|
-
napi_value callback)
|
|
1359
|
-
: BaseWorker(env, nullptr, callback, "rocks_level.repair_db"),
|
|
1360
|
-
location_(location) {}
|
|
1361
|
-
|
|
1362
|
-
void DoExecute () override {
|
|
1363
|
-
leveldb::Options options;
|
|
1364
|
-
SetStatus(leveldb::RepairDB(location_, options));
|
|
1365
|
-
}
|
|
1366
|
-
|
|
1367
|
-
const std::string location_;
|
|
1368
|
-
};
|
|
1369
|
-
|
|
1370
|
-
NAPI_METHOD(repair_db) {
|
|
1371
|
-
NAPI_ARGV(2);
|
|
1372
|
-
|
|
1373
|
-
const auto location = ToString(env, argv[1]);
|
|
1374
|
-
const auto callback = argv[1];
|
|
1375
|
-
|
|
1376
|
-
auto worker = new RepairWorker(env, location, callback);
|
|
1377
|
-
worker->Queue(env);
|
|
1378
|
-
|
|
1379
|
-
return 0;
|
|
1380
|
-
}
|
|
1381
|
-
|
|
1382
1052
|
static void FinalizeIterator (napi_env env, void* data, void* hint) {
|
|
1383
1053
|
if (data) {
|
|
1384
1054
|
delete reinterpret_cast<Iterator*>(data);
|
|
@@ -1409,9 +1079,7 @@ NAPI_METHOD(iterator_init) {
|
|
|
1409
1079
|
keyAsBuffer, valueAsBuffer, highWaterMarkBytes);
|
|
1410
1080
|
napi_value result;
|
|
1411
1081
|
|
|
1412
|
-
NAPI_STATUS_THROWS(napi_create_external(env, iterator,
|
|
1413
|
-
FinalizeIterator,
|
|
1414
|
-
nullptr, &result));
|
|
1082
|
+
NAPI_STATUS_THROWS(napi_create_external(env, iterator, FinalizeIterator, nullptr, &result));
|
|
1415
1083
|
|
|
1416
1084
|
// Prevent GC of JS object before the iterator is closed (explicitly or on
|
|
1417
1085
|
// db close) and keep track of non-closed iterators to end them on db close.
|
|
@@ -1424,10 +1092,6 @@ NAPI_METHOD(iterator_seek) {
|
|
|
1424
1092
|
NAPI_ARGV(2);
|
|
1425
1093
|
NAPI_ITERATOR_CONTEXT();
|
|
1426
1094
|
|
|
1427
|
-
if (iterator->isClosing_) {
|
|
1428
|
-
napi_throw_error(env, nullptr, "iterator has closed");
|
|
1429
|
-
}
|
|
1430
|
-
|
|
1431
1095
|
const auto target = ToString(env, argv[1]);
|
|
1432
1096
|
iterator->first_ = true;
|
|
1433
1097
|
iterator->Seek(target);
|
|
@@ -1442,41 +1106,28 @@ struct CloseIteratorWorker final : public BaseWorker {
|
|
|
1442
1106
|
: BaseWorker(env, iterator->database_, callback, "leveldown.iterator.end"),
|
|
1443
1107
|
iterator_(iterator) {}
|
|
1444
1108
|
|
|
1445
|
-
|
|
1109
|
+
rocksdb::Status Execute (Database& database) override {
|
|
1446
1110
|
iterator_->Close();
|
|
1111
|
+
return rocksdb::Status::OK();
|
|
1447
1112
|
}
|
|
1448
1113
|
|
|
1449
|
-
void
|
|
1114
|
+
void Destroy (napi_env env) override {
|
|
1450
1115
|
iterator_->Detach(env);
|
|
1451
|
-
BaseWorker::
|
|
1116
|
+
BaseWorker::Destroy(env);
|
|
1452
1117
|
}
|
|
1453
1118
|
|
|
1454
1119
|
private:
|
|
1455
1120
|
Iterator* iterator_;
|
|
1456
1121
|
};
|
|
1457
1122
|
|
|
1458
|
-
/**
|
|
1459
|
-
* Called by NAPI_METHOD(iterator_) and also when closing
|
|
1460
|
-
* open iterators during NAPI_METHOD(db_close).
|
|
1461
|
-
*/
|
|
1462
|
-
static void iterator_do_close (napi_env env, Iterator* iterator, napi_value cb) {
|
|
1463
|
-
if (!iterator->isClosing_) {
|
|
1464
|
-
auto worker = new CloseIteratorWorker(env, iterator, cb);
|
|
1465
|
-
iterator->isClosing_ = true;
|
|
1466
|
-
|
|
1467
|
-
if (iterator->nexting_) {
|
|
1468
|
-
iterator->closeWorker_ = worker;
|
|
1469
|
-
} else {
|
|
1470
|
-
worker->Queue(env);
|
|
1471
|
-
}
|
|
1472
|
-
}
|
|
1473
|
-
}
|
|
1474
|
-
|
|
1475
1123
|
NAPI_METHOD(iterator_close) {
|
|
1476
1124
|
NAPI_ARGV(2);
|
|
1477
1125
|
NAPI_ITERATOR_CONTEXT();
|
|
1478
1126
|
|
|
1479
|
-
|
|
1127
|
+
const auto callback = argv[1];
|
|
1128
|
+
|
|
1129
|
+
auto worker = new CloseIteratorWorker(env, iterator, callback);
|
|
1130
|
+
worker->Queue(env);
|
|
1480
1131
|
|
|
1481
1132
|
return 0;
|
|
1482
1133
|
}
|
|
@@ -1488,63 +1139,82 @@ struct NextWorker final : public BaseWorker {
|
|
|
1488
1139
|
napi_value callback)
|
|
1489
1140
|
: BaseWorker(env, iterator->database_, callback,
|
|
1490
1141
|
"leveldown.iterator.next"),
|
|
1491
|
-
iterator_(iterator), size_(size)
|
|
1142
|
+
iterator_(iterator), size_(size) {}
|
|
1492
1143
|
|
|
1493
|
-
|
|
1144
|
+
rocksdb::Status Execute (Database& database) override {
|
|
1494
1145
|
if (!iterator_->DidSeek()) {
|
|
1495
1146
|
iterator_->SeekToRange();
|
|
1496
1147
|
}
|
|
1497
1148
|
|
|
1498
1149
|
// Limit the size of the cache to prevent starving the event loop
|
|
1499
1150
|
// in JS-land while we're recursively calling process.nextTick().
|
|
1500
|
-
ok_ = iterator_->ReadMany(size_);
|
|
1501
1151
|
|
|
1502
|
-
|
|
1503
|
-
|
|
1152
|
+
cache_.reserve(size_ * 2);
|
|
1153
|
+
size_t bytesRead = 0;
|
|
1154
|
+
|
|
1155
|
+
while (true) {
|
|
1156
|
+
if (!iterator_->first_) iterator_->Next();
|
|
1157
|
+
else iterator_->first_ = false;
|
|
1158
|
+
|
|
1159
|
+
if (!iterator_->Valid() || !iterator_->Increment()) break;
|
|
1160
|
+
|
|
1161
|
+
if (iterator_->keys_ && iterator_->values_) {
|
|
1162
|
+
auto k = iterator_->CurrentKey();
|
|
1163
|
+
auto v = iterator_->CurrentValue();
|
|
1164
|
+
cache_.emplace_back(k.data(), k.size());
|
|
1165
|
+
cache_.emplace_back(v.data(), v.size());
|
|
1166
|
+
bytesRead += k.size() + v.size();
|
|
1167
|
+
} else if (iterator_->keys_) {
|
|
1168
|
+
auto k = iterator_->CurrentKey();
|
|
1169
|
+
cache_.emplace_back(k.data(), k.size());
|
|
1170
|
+
cache_.push_back({});
|
|
1171
|
+
bytesRead += k.size();
|
|
1172
|
+
} else if (iterator_->values_) {
|
|
1173
|
+
auto v = iterator_->CurrentValue();
|
|
1174
|
+
cache_.push_back({});
|
|
1175
|
+
cache_.emplace_back(v.data(), v.size());
|
|
1176
|
+
bytesRead += v.size();
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
if (bytesRead > iterator_->highWaterMarkBytes_ || cache_.size() / 2 >= size_) {
|
|
1180
|
+
finished_ = true;
|
|
1181
|
+
return rocksdb::Status::OK();
|
|
1182
|
+
}
|
|
1504
1183
|
}
|
|
1184
|
+
|
|
1185
|
+
return iterator_->Status();
|
|
1505
1186
|
}
|
|
1506
1187
|
|
|
1507
|
-
void
|
|
1508
|
-
const auto size =
|
|
1188
|
+
void OnOk (napi_env env, napi_value callback) override {
|
|
1189
|
+
const auto size = cache_.size();
|
|
1509
1190
|
napi_value result;
|
|
1510
1191
|
napi_create_array_with_length(env, size, &result);
|
|
1511
1192
|
|
|
1512
|
-
for (size_t idx = 0; idx <
|
|
1193
|
+
for (size_t idx = 0; idx < cache_.size(); idx += 2) {
|
|
1513
1194
|
napi_value key;
|
|
1514
1195
|
napi_value val;
|
|
1515
1196
|
|
|
1516
|
-
Convert(env,
|
|
1517
|
-
Convert(env,
|
|
1197
|
+
Convert(env, cache_[idx + 0], iterator_->keyAsBuffer_, key);
|
|
1198
|
+
Convert(env, cache_[idx + 1], iterator_->valueAsBuffer_, val);
|
|
1518
1199
|
|
|
1519
1200
|
napi_set_element(env, result, static_cast<int>(idx + 0), key);
|
|
1520
1201
|
napi_set_element(env, result, static_cast<int>(idx + 1), val);
|
|
1521
1202
|
}
|
|
1522
1203
|
|
|
1523
|
-
|
|
1204
|
+
cache_.clear();
|
|
1524
1205
|
|
|
1525
1206
|
napi_value argv[3];
|
|
1526
1207
|
napi_get_null(env, &argv[0]);
|
|
1527
1208
|
argv[1] = result;
|
|
1528
|
-
napi_get_boolean(env, !
|
|
1209
|
+
napi_get_boolean(env, !finished_, &argv[2]);
|
|
1529
1210
|
CallFunction(env, callback, 3, argv);
|
|
1530
1211
|
}
|
|
1531
1212
|
|
|
1532
|
-
void DoFinally (napi_env env) override {
|
|
1533
|
-
// clean up & handle the next/end state
|
|
1534
|
-
iterator_->nexting_ = false;
|
|
1535
|
-
|
|
1536
|
-
if (iterator_->closeWorker_) {
|
|
1537
|
-
iterator_->closeWorker_->Queue(env);
|
|
1538
|
-
iterator_->closeWorker_ = nullptr;
|
|
1539
|
-
}
|
|
1540
|
-
|
|
1541
|
-
BaseWorker::DoFinally(env);
|
|
1542
|
-
}
|
|
1543
|
-
|
|
1544
1213
|
private:
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1214
|
+
std::vector<std::string> cache_;
|
|
1215
|
+
Iterator* iterator_ = nullptr;
|
|
1216
|
+
uint32_t size_ = 0;
|
|
1217
|
+
bool finished_ = false;
|
|
1548
1218
|
};
|
|
1549
1219
|
|
|
1550
1220
|
NAPI_METHOD(iterator_nextv) {
|
|
@@ -1557,99 +1227,55 @@ NAPI_METHOD(iterator_nextv) {
|
|
|
1557
1227
|
|
|
1558
1228
|
const auto callback = argv[2];
|
|
1559
1229
|
|
|
1560
|
-
if (iterator->isClosing_) {
|
|
1561
|
-
napi_value argv = CreateCodeError(env, "LEVEL_ITERATOR_NOT_OPEN", "Iterator is not open");
|
|
1562
|
-
NAPI_STATUS_THROWS(CallFunction(env, callback, 1, &argv));
|
|
1563
|
-
return 0;
|
|
1564
|
-
}
|
|
1565
|
-
|
|
1566
1230
|
auto worker = new NextWorker(env, iterator, size, callback);
|
|
1567
|
-
iterator->nexting_ = true;
|
|
1568
1231
|
worker->Queue(env);
|
|
1569
1232
|
|
|
1570
1233
|
return 0;
|
|
1571
1234
|
}
|
|
1572
1235
|
|
|
1573
|
-
/**
|
|
1574
|
-
* Worker class for batch write operation.
|
|
1575
|
-
*/
|
|
1576
|
-
struct BatchWorker final : public PriorityWorker {
|
|
1577
|
-
BatchWorker (napi_env env,
|
|
1578
|
-
Database* database,
|
|
1579
|
-
napi_value callback,
|
|
1580
|
-
leveldb::WriteBatch* batch,
|
|
1581
|
-
const bool sync,
|
|
1582
|
-
const bool hasData)
|
|
1583
|
-
: PriorityWorker(env, database, callback, "rocks_level.batch.do"),
|
|
1584
|
-
batch_(batch), hasData_(hasData) {
|
|
1585
|
-
options_.sync = sync;
|
|
1586
|
-
}
|
|
1587
|
-
|
|
1588
|
-
~BatchWorker () {
|
|
1589
|
-
delete batch_;
|
|
1590
|
-
}
|
|
1591
|
-
|
|
1592
|
-
void DoExecute () override {
|
|
1593
|
-
if (hasData_) {
|
|
1594
|
-
SetStatus(database_->WriteBatch(options_, batch_));
|
|
1595
|
-
}
|
|
1596
|
-
}
|
|
1597
|
-
|
|
1598
|
-
private:
|
|
1599
|
-
leveldb::WriteOptions options_;
|
|
1600
|
-
leveldb::WriteBatch* batch_;
|
|
1601
|
-
const bool hasData_;
|
|
1602
|
-
};
|
|
1603
|
-
|
|
1604
1236
|
NAPI_METHOD(batch_do) {
|
|
1605
|
-
NAPI_ARGV(
|
|
1237
|
+
NAPI_ARGV(3);
|
|
1606
1238
|
NAPI_DB_CONTEXT();
|
|
1607
1239
|
|
|
1608
|
-
const auto
|
|
1609
|
-
const auto sync = BooleanProperty(env, argv[2], "sync", false);
|
|
1610
|
-
const auto callback = argv[3];
|
|
1240
|
+
const auto operations = argv[1];
|
|
1611
1241
|
|
|
1612
|
-
|
|
1613
|
-
napi_get_array_length(env, array, &length);
|
|
1242
|
+
rocksdb::WriteBatch batch;
|
|
1614
1243
|
|
|
1615
|
-
|
|
1616
|
-
|
|
1244
|
+
uint32_t length;
|
|
1245
|
+
NAPI_STATUS_THROWS(napi_get_array_length(env, operations, &length));
|
|
1617
1246
|
|
|
1618
1247
|
for (uint32_t i = 0; i < length; i++) {
|
|
1619
1248
|
napi_value element;
|
|
1620
|
-
napi_get_element(env,
|
|
1249
|
+
NAPI_STATUS_THROWS(napi_get_element(env, operations, i, &element));
|
|
1621
1250
|
|
|
1622
1251
|
if (!IsObject(env, element)) continue;
|
|
1623
1252
|
|
|
1624
|
-
|
|
1253
|
+
const auto type = StringProperty(env, element, "type");
|
|
1625
1254
|
|
|
1626
1255
|
if (type == "del") {
|
|
1627
1256
|
if (!HasProperty(env, element, "key")) continue;
|
|
1628
|
-
const auto key = ToString(env, GetProperty(env, element, "key"));
|
|
1629
1257
|
|
|
1630
|
-
|
|
1631
|
-
|
|
1258
|
+
const auto key = NapiSlice(env, GetProperty(env, element, "key"));
|
|
1259
|
+
|
|
1260
|
+
batch.Delete(key);
|
|
1632
1261
|
} else if (type == "put") {
|
|
1633
1262
|
if (!HasProperty(env, element, "key")) continue;
|
|
1634
1263
|
if (!HasProperty(env, element, "value")) continue;
|
|
1635
1264
|
|
|
1636
|
-
const auto key =
|
|
1637
|
-
const auto value =
|
|
1265
|
+
const auto key = NapiSlice(env, GetProperty(env, element, "key"));
|
|
1266
|
+
const auto value = NapiSlice(env, GetProperty(env, element, "value"));
|
|
1638
1267
|
|
|
1639
|
-
batch
|
|
1640
|
-
if (!hasData) hasData = true;
|
|
1268
|
+
batch.Put(key, value);
|
|
1641
1269
|
}
|
|
1642
1270
|
}
|
|
1643
1271
|
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
return 0;
|
|
1272
|
+
rocksdb::WriteOptions options;
|
|
1273
|
+
return ToError(env, database->db_->Write(options, &batch));
|
|
1648
1274
|
}
|
|
1649
1275
|
|
|
1650
1276
|
static void FinalizeBatch (napi_env env, void* data, void* hint) {
|
|
1651
1277
|
if (data) {
|
|
1652
|
-
delete reinterpret_cast<
|
|
1278
|
+
delete reinterpret_cast<rocksdb::WriteBatch*>(data);
|
|
1653
1279
|
}
|
|
1654
1280
|
}
|
|
1655
1281
|
|
|
@@ -1657,12 +1283,10 @@ NAPI_METHOD(batch_init) {
|
|
|
1657
1283
|
NAPI_ARGV(1);
|
|
1658
1284
|
NAPI_DB_CONTEXT();
|
|
1659
1285
|
|
|
1660
|
-
auto batch = new
|
|
1286
|
+
auto batch = new rocksdb::WriteBatch();
|
|
1661
1287
|
|
|
1662
1288
|
napi_value result;
|
|
1663
|
-
NAPI_STATUS_THROWS(napi_create_external(env, batch,
|
|
1664
|
-
FinalizeBatch,
|
|
1665
|
-
nullptr, &result));
|
|
1289
|
+
NAPI_STATUS_THROWS(napi_create_external(env, batch, FinalizeBatch, nullptr, &result));
|
|
1666
1290
|
return result;
|
|
1667
1291
|
}
|
|
1668
1292
|
|
|
@@ -1670,8 +1294,8 @@ NAPI_METHOD(batch_put) {
|
|
|
1670
1294
|
NAPI_ARGV(3);
|
|
1671
1295
|
NAPI_BATCH_CONTEXT();
|
|
1672
1296
|
|
|
1673
|
-
const auto key =
|
|
1674
|
-
const auto value =
|
|
1297
|
+
const auto key = NapiSlice(env, argv[1]);
|
|
1298
|
+
const auto value = NapiSlice(env, argv[2]);
|
|
1675
1299
|
|
|
1676
1300
|
batch->Put(key, value);
|
|
1677
1301
|
|
|
@@ -1682,7 +1306,7 @@ NAPI_METHOD(batch_del) {
|
|
|
1682
1306
|
NAPI_ARGV(2);
|
|
1683
1307
|
NAPI_BATCH_CONTEXT();
|
|
1684
1308
|
|
|
1685
|
-
const auto key =
|
|
1309
|
+
const auto key = NapiSlice(env, argv[1]);
|
|
1686
1310
|
|
|
1687
1311
|
batch->Delete(key);
|
|
1688
1312
|
|
|
@@ -1698,51 +1322,15 @@ NAPI_METHOD(batch_clear) {
|
|
|
1698
1322
|
return 0;
|
|
1699
1323
|
}
|
|
1700
1324
|
|
|
1701
|
-
struct BatchWriteWorker final : public PriorityWorker {
|
|
1702
|
-
BatchWriteWorker (napi_env env,
|
|
1703
|
-
Database* database,
|
|
1704
|
-
napi_value batch,
|
|
1705
|
-
napi_value callback,
|
|
1706
|
-
const bool sync)
|
|
1707
|
-
: PriorityWorker(env, database, callback, "leveldown.batch.write"),
|
|
1708
|
-
sync_(sync) {
|
|
1709
|
-
|
|
1710
|
-
NAPI_STATUS_THROWS_VOID(napi_get_value_external(env, batch, reinterpret_cast<void**>(&batch_)));
|
|
1711
|
-
|
|
1712
|
-
// Prevent GC of batch object before we execute
|
|
1713
|
-
NAPI_STATUS_THROWS_VOID(napi_create_reference(env, batch, 1, &batchRef_));
|
|
1714
|
-
}
|
|
1715
|
-
|
|
1716
|
-
void DoExecute () override {
|
|
1717
|
-
leveldb::WriteOptions options;
|
|
1718
|
-
options.sync = sync_;
|
|
1719
|
-
SetStatus(database_->WriteBatch(options, batch_));
|
|
1720
|
-
}
|
|
1721
|
-
|
|
1722
|
-
void DoFinally (napi_env env) override {
|
|
1723
|
-
napi_delete_reference(env, batchRef_);
|
|
1724
|
-
PriorityWorker::DoFinally(env);
|
|
1725
|
-
}
|
|
1726
|
-
|
|
1727
|
-
private:
|
|
1728
|
-
leveldb::WriteBatch* batch_;
|
|
1729
|
-
const bool sync_;
|
|
1730
|
-
napi_ref batchRef_;
|
|
1731
|
-
};
|
|
1732
|
-
|
|
1733
1325
|
NAPI_METHOD(batch_write) {
|
|
1734
1326
|
NAPI_ARGV(4);
|
|
1735
1327
|
NAPI_DB_CONTEXT();
|
|
1736
1328
|
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
const auto sync = BooleanProperty(env, options, "sync", false);
|
|
1740
|
-
const auto callback = argv[3];
|
|
1741
|
-
|
|
1742
|
-
auto worker = new BatchWriteWorker(env, database, batch, callback, sync);
|
|
1743
|
-
worker->Queue(env);
|
|
1329
|
+
rocksdb::WriteBatch* batch;
|
|
1330
|
+
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[1], reinterpret_cast<void**>(&batch)));
|
|
1744
1331
|
|
|
1745
|
-
|
|
1332
|
+
rocksdb::WriteOptions options;
|
|
1333
|
+
return ToError(env, database->db_->Write(options, batch));
|
|
1746
1334
|
}
|
|
1747
1335
|
|
|
1748
1336
|
NAPI_INIT() {
|
|
@@ -1754,13 +1342,8 @@ NAPI_INIT() {
|
|
|
1754
1342
|
NAPI_EXPORT_FUNCTION(db_get_many);
|
|
1755
1343
|
NAPI_EXPORT_FUNCTION(db_del);
|
|
1756
1344
|
NAPI_EXPORT_FUNCTION(db_clear);
|
|
1757
|
-
NAPI_EXPORT_FUNCTION(db_approximate_size);
|
|
1758
|
-
NAPI_EXPORT_FUNCTION(db_compact_range);
|
|
1759
1345
|
NAPI_EXPORT_FUNCTION(db_get_property);
|
|
1760
1346
|
|
|
1761
|
-
NAPI_EXPORT_FUNCTION(destroy_db);
|
|
1762
|
-
NAPI_EXPORT_FUNCTION(repair_db);
|
|
1763
|
-
|
|
1764
1347
|
NAPI_EXPORT_FUNCTION(iterator_init);
|
|
1765
1348
|
NAPI_EXPORT_FUNCTION(iterator_seek);
|
|
1766
1349
|
NAPI_EXPORT_FUNCTION(iterator_close);
|