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