@nxtedition/rocksdb 5.2.1 → 5.2.10
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 +516 -1020
- package/binding.gyp +5 -4
- package/chained-batch.js +29 -20
- 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/deps/rocksdb/rocksdb.gyp +44 -62
- package/index.js +92 -0
- package/iterator.js +103 -34
- package/package-lock.json +23687 -0
- package/package.json +22 -17
- package/leveldown.js +0 -164
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,11 @@
|
|
|
16
16
|
|
|
17
17
|
namespace leveldb = rocksdb;
|
|
18
18
|
|
|
19
|
-
#include <
|
|
19
|
+
#include <set>
|
|
20
|
+
#include <optional>
|
|
21
|
+
#include <memory>
|
|
22
|
+
#include <string>
|
|
23
|
+
#include <string_view>
|
|
20
24
|
#include <vector>
|
|
21
25
|
|
|
22
26
|
class NullLogger : public rocksdb::Logger {
|
|
@@ -26,255 +30,182 @@ public:
|
|
|
26
30
|
virtual size_t GetLogFileSize() const override { return 0; }
|
|
27
31
|
};
|
|
28
32
|
|
|
29
|
-
/**
|
|
30
|
-
* Forward declarations.
|
|
31
|
-
*/
|
|
32
33
|
struct Database;
|
|
33
34
|
struct Iterator;
|
|
34
|
-
static void
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Macros.
|
|
38
|
-
*/
|
|
35
|
+
static void iterator_do_close (napi_env env, Iterator* iterator, napi_value cb);
|
|
39
36
|
|
|
40
37
|
#define NAPI_DB_CONTEXT() \
|
|
41
|
-
Database* database =
|
|
38
|
+
Database* database = nullptr; \
|
|
42
39
|
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&database));
|
|
43
40
|
|
|
44
41
|
#define NAPI_ITERATOR_CONTEXT() \
|
|
45
|
-
Iterator* iterator =
|
|
42
|
+
Iterator* iterator = nullptr; \
|
|
46
43
|
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&iterator));
|
|
47
44
|
|
|
48
45
|
#define NAPI_BATCH_CONTEXT() \
|
|
49
|
-
|
|
46
|
+
leveldb::WriteBatch* batch = nullptr; \
|
|
50
47
|
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&batch));
|
|
51
48
|
|
|
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
49
|
static bool IsString (napi_env env, napi_value value) {
|
|
88
50
|
napi_valuetype type;
|
|
89
51
|
napi_typeof(env, value, &type);
|
|
90
52
|
return type == napi_string;
|
|
91
53
|
}
|
|
92
54
|
|
|
93
|
-
/**
|
|
94
|
-
* Returns true if 'value' is a buffer.
|
|
95
|
-
*/
|
|
96
55
|
static bool IsBuffer (napi_env env, napi_value value) {
|
|
97
56
|
bool isBuffer;
|
|
98
57
|
napi_is_buffer(env, value, &isBuffer);
|
|
99
58
|
return isBuffer;
|
|
100
59
|
}
|
|
101
60
|
|
|
102
|
-
/**
|
|
103
|
-
* Returns true if 'value' is an object.
|
|
104
|
-
*/
|
|
105
61
|
static bool IsObject (napi_env env, napi_value value) {
|
|
106
62
|
napi_valuetype type;
|
|
107
63
|
napi_typeof(env, value, &type);
|
|
108
64
|
return type == napi_object;
|
|
109
65
|
}
|
|
110
66
|
|
|
111
|
-
|
|
112
|
-
* Create an error object.
|
|
113
|
-
*/
|
|
114
|
-
static napi_value CreateError (napi_env env, const char* str) {
|
|
67
|
+
static napi_value CreateError (napi_env env, const std::string_view& str) {
|
|
115
68
|
napi_value msg;
|
|
116
|
-
napi_create_string_utf8(env, str,
|
|
69
|
+
napi_create_string_utf8(env, str.data(), str.size(), &msg);
|
|
117
70
|
napi_value error;
|
|
118
|
-
napi_create_error(env,
|
|
71
|
+
napi_create_error(env, nullptr, msg, &error);
|
|
119
72
|
return error;
|
|
120
73
|
}
|
|
121
74
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
75
|
+
static napi_value CreateCodeError (napi_env env, const std::string_view& code, const std::string_view& msg) {
|
|
76
|
+
napi_value codeValue;
|
|
77
|
+
napi_create_string_utf8(env, code.data(), code.size(), &codeValue);
|
|
78
|
+
napi_value msgValue;
|
|
79
|
+
napi_create_string_utf8(env, msg.data(), msg.size(), &msgValue);
|
|
80
|
+
napi_value error;
|
|
81
|
+
napi_create_error(env, codeValue, msgValue, &error);
|
|
82
|
+
return error;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
static bool HasProperty (napi_env env, napi_value obj, const std::string_view& key) {
|
|
126
86
|
bool has = false;
|
|
127
|
-
napi_has_named_property(env, obj, key, &has);
|
|
87
|
+
napi_has_named_property(env, obj, key.data(), &has);
|
|
128
88
|
return has;
|
|
129
89
|
}
|
|
130
90
|
|
|
131
|
-
|
|
132
|
-
* Returns a property in napi_value form.
|
|
133
|
-
*/
|
|
134
|
-
static napi_value GetProperty (napi_env env, napi_value obj, const char* key) {
|
|
91
|
+
static napi_value GetProperty (napi_env env, napi_value obj, const std::string_view& key) {
|
|
135
92
|
napi_value value;
|
|
136
|
-
napi_get_named_property(env, obj, key, &value);
|
|
93
|
+
napi_get_named_property(env, obj, key.data(), &value);
|
|
137
94
|
return value;
|
|
138
95
|
}
|
|
139
96
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
static bool BooleanProperty (napi_env env, napi_value obj, const char* key,
|
|
145
|
-
bool DEFAULT) {
|
|
146
|
-
if (HasProperty(env, obj, key)) {
|
|
147
|
-
napi_value value = GetProperty(env, obj, key);
|
|
97
|
+
static bool BooleanProperty (napi_env env, napi_value obj, const std::string_view& key,
|
|
98
|
+
bool defaultValue) {
|
|
99
|
+
if (HasProperty(env, obj, key.data())) {
|
|
100
|
+
const auto value = GetProperty(env, obj, key.data());
|
|
148
101
|
bool result;
|
|
149
102
|
napi_get_value_bool(env, value, &result);
|
|
150
103
|
return result;
|
|
151
104
|
}
|
|
152
105
|
|
|
153
|
-
return
|
|
106
|
+
return defaultValue;
|
|
154
107
|
}
|
|
155
108
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
109
|
+
static bool EncodingIsBuffer (napi_env env, napi_value obj, const std::string_view& option) {
|
|
110
|
+
napi_value value;
|
|
111
|
+
size_t size;
|
|
112
|
+
|
|
113
|
+
if (napi_get_named_property(env, obj, option.data(), &value) == napi_ok &&
|
|
114
|
+
napi_get_value_string_utf8(env, value, NULL, 0, &size) == napi_ok) {
|
|
115
|
+
// Value is either "buffer" or "utf8" so we can tell them apart just by size
|
|
116
|
+
return size == 6;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
static uint32_t Uint32Property (napi_env env, napi_value obj, const std::string_view& key,
|
|
123
|
+
uint32_t defaultValue) {
|
|
124
|
+
if (HasProperty(env, obj, key.data())) {
|
|
125
|
+
const auto value = GetProperty(env, obj, key.data());
|
|
164
126
|
uint32_t result;
|
|
165
127
|
napi_get_value_uint32(env, value, &result);
|
|
166
128
|
return result;
|
|
167
129
|
}
|
|
168
130
|
|
|
169
|
-
return
|
|
131
|
+
return defaultValue;
|
|
170
132
|
}
|
|
171
133
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
static int Int32Property (napi_env env, napi_value obj, const char* key,
|
|
177
|
-
int DEFAULT) {
|
|
178
|
-
if (HasProperty(env, obj, key)) {
|
|
179
|
-
napi_value value = GetProperty(env, obj, key);
|
|
134
|
+
static int Int32Property (napi_env env, napi_value obj, const std::string_view& key,
|
|
135
|
+
int defaultValue) {
|
|
136
|
+
if (HasProperty(env, obj, key.data())) {
|
|
137
|
+
const auto value = GetProperty(env, obj, key.data());
|
|
180
138
|
int result;
|
|
181
139
|
napi_get_value_int32(env, value, &result);
|
|
182
140
|
return result;
|
|
183
141
|
}
|
|
184
142
|
|
|
185
|
-
return
|
|
143
|
+
return defaultValue;
|
|
186
144
|
}
|
|
187
145
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
146
|
+
static std::optional<std::string> ToString (napi_env env, napi_value from) {
|
|
147
|
+
if (IsString(env, from)) {
|
|
148
|
+
size_t length = 0;
|
|
149
|
+
napi_get_value_string_utf8(env, from, nullptr, 0, &length);
|
|
150
|
+
std::string value(length, '\0');
|
|
151
|
+
napi_get_value_string_utf8( env, from, &value[0], value.length() + 1, &length);
|
|
152
|
+
return value;
|
|
153
|
+
} else if (IsBuffer(env, from)) {
|
|
154
|
+
char* buf = nullptr;
|
|
155
|
+
size_t length = 0;
|
|
156
|
+
napi_get_buffer_info(env, from, reinterpret_cast<void **>(&buf), &length);
|
|
157
|
+
return std::string(buf, length);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return {};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
static std::string StringProperty (napi_env env, napi_value obj, const std::string_view& key) {
|
|
193
164
|
if (HasProperty(env, obj, key)) {
|
|
194
165
|
napi_value value = GetProperty(env, obj, key);
|
|
195
166
|
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;
|
|
167
|
+
return ToString(env, value).value_or(std::string());
|
|
206
168
|
}
|
|
207
169
|
}
|
|
208
170
|
|
|
209
171
|
return "";
|
|
210
172
|
}
|
|
211
173
|
|
|
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
174
|
static size_t StringOrBufferLength (napi_env env, napi_value value) {
|
|
228
175
|
size_t size = 0;
|
|
229
176
|
|
|
230
177
|
if (IsString(env, value)) {
|
|
231
|
-
napi_get_value_string_utf8(env, value,
|
|
178
|
+
napi_get_value_string_utf8(env, value, nullptr, 0, &size);
|
|
232
179
|
} else if (IsBuffer(env, value)) {
|
|
233
|
-
char* buf;
|
|
180
|
+
char* buf = nullptr;
|
|
234
181
|
napi_get_buffer_info(env, value, (void **)&buf, &size);
|
|
235
182
|
}
|
|
236
183
|
|
|
237
184
|
return size;
|
|
238
185
|
}
|
|
239
186
|
|
|
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) {
|
|
187
|
+
static std::optional<std::string> RangeOption (napi_env env, napi_value opts, const std::string& name) {
|
|
245
188
|
if (HasProperty(env, opts, name)) {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
if (StringOrBufferLength(env, value) > 0) {
|
|
249
|
-
LD_STRING_OR_BUFFER_TO_COPY(env, value, to);
|
|
250
|
-
std::string* result = new std::string(toCh_, toSz_);
|
|
251
|
-
delete [] toCh_;
|
|
252
|
-
return result;
|
|
253
|
-
}
|
|
189
|
+
const auto value = GetProperty(env, opts, name);
|
|
190
|
+
return ToString(env, value);
|
|
254
191
|
}
|
|
255
192
|
|
|
256
|
-
return
|
|
193
|
+
return {};
|
|
257
194
|
}
|
|
258
195
|
|
|
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) {
|
|
196
|
+
static std::vector<std::string> KeyArray (napi_env env, napi_value arr) {
|
|
264
197
|
uint32_t length;
|
|
265
|
-
std::vector<std::string
|
|
198
|
+
std::vector<std::string> result;
|
|
266
199
|
|
|
267
200
|
if (napi_get_array_length(env, arr, &length) == napi_ok) {
|
|
268
|
-
result
|
|
201
|
+
result.reserve(length);
|
|
269
202
|
|
|
270
203
|
for (uint32_t i = 0; i < length; i++) {
|
|
271
204
|
napi_value element;
|
|
272
205
|
|
|
273
206
|
if (napi_get_element(env, arr, i, &element) == napi_ok &&
|
|
274
207
|
StringOrBufferLength(env, element) > 0) {
|
|
275
|
-
|
|
276
|
-
result->emplace_back(toCh_, toSz_);
|
|
277
|
-
delete [] toCh_;
|
|
208
|
+
result.push_back(ToString(env, element).value_or(std::string()));
|
|
278
209
|
}
|
|
279
210
|
}
|
|
280
211
|
}
|
|
@@ -282,75 +213,34 @@ static std::vector<std::string>* KeyArray (napi_env env, napi_value arr) {
|
|
|
282
213
|
return result;
|
|
283
214
|
}
|
|
284
215
|
|
|
285
|
-
/**
|
|
286
|
-
* Calls a function.
|
|
287
|
-
*/
|
|
288
216
|
static napi_status CallFunction (napi_env env,
|
|
289
217
|
napi_value callback,
|
|
290
218
|
const int argc,
|
|
291
219
|
napi_value* argv) {
|
|
292
220
|
napi_value global;
|
|
293
221
|
napi_get_global(env, &global);
|
|
294
|
-
return napi_call_function(env, global, callback, argc, argv,
|
|
222
|
+
return napi_call_function(env, global, callback, argc, argv, nullptr);
|
|
295
223
|
}
|
|
296
224
|
|
|
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_;
|
|
318
|
-
}
|
|
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
|
-
}
|
|
225
|
+
template <typename T>
|
|
226
|
+
void Convert (napi_env env, const std::optional<T>& s, bool asBuffer, napi_value& result) {
|
|
227
|
+
if (!s) {
|
|
228
|
+
napi_get_undefined(env, &result);
|
|
229
|
+
} else if (asBuffer) {
|
|
230
|
+
napi_create_buffer_copy(env, s->size(), s->data(), nullptr, &result);
|
|
231
|
+
} else {
|
|
232
|
+
napi_create_string_utf8(env, s->data(), s->size(), &result);
|
|
338
233
|
}
|
|
234
|
+
}
|
|
339
235
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
napi_create_string_utf8(env, s->data(), s->size(), result);
|
|
347
|
-
}
|
|
236
|
+
template <typename T>
|
|
237
|
+
void Convert (napi_env env, const T& s, bool asBuffer, napi_value& result) {
|
|
238
|
+
if (asBuffer) {
|
|
239
|
+
napi_create_buffer_copy(env, s.size(), s.data(), nullptr, &result);
|
|
240
|
+
} else {
|
|
241
|
+
napi_create_string_utf8(env, s.data(), s.size(), &result);
|
|
348
242
|
}
|
|
349
|
-
|
|
350
|
-
private:
|
|
351
|
-
std::string* key_;
|
|
352
|
-
std::string* value_;
|
|
353
|
-
};
|
|
243
|
+
}
|
|
354
244
|
|
|
355
245
|
/**
|
|
356
246
|
* Base worker class. Handles the async work. Derived classes can override the
|
|
@@ -367,7 +257,7 @@ struct BaseWorker {
|
|
|
367
257
|
Database* database,
|
|
368
258
|
napi_value callback,
|
|
369
259
|
const char* resourceName)
|
|
370
|
-
: database_(database)
|
|
260
|
+
: database_(database) {
|
|
371
261
|
NAPI_STATUS_THROWS_VOID(napi_create_reference(env, callback, 1, &callbackRef_));
|
|
372
262
|
napi_value asyncResourceName;
|
|
373
263
|
NAPI_STATUS_THROWS_VOID(napi_create_string_utf8(env, resourceName,
|
|
@@ -380,38 +270,25 @@ struct BaseWorker {
|
|
|
380
270
|
this, &asyncWork_));
|
|
381
271
|
}
|
|
382
272
|
|
|
383
|
-
virtual ~BaseWorker () {
|
|
384
|
-
delete [] errMsg_;
|
|
385
|
-
}
|
|
273
|
+
virtual ~BaseWorker () {}
|
|
386
274
|
|
|
387
275
|
static void Execute (napi_env env, void* data) {
|
|
388
|
-
|
|
276
|
+
auto self = reinterpret_cast<BaseWorker*>(data);
|
|
389
277
|
|
|
390
278
|
// Don't pass env to DoExecute() because use of Node-API
|
|
391
279
|
// methods should generally be avoided in async work.
|
|
392
280
|
self->DoExecute();
|
|
393
281
|
}
|
|
394
282
|
|
|
395
|
-
bool SetStatus (leveldb::Status status) {
|
|
283
|
+
bool SetStatus (const leveldb::Status& status) {
|
|
396
284
|
status_ = status;
|
|
397
|
-
|
|
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);
|
|
285
|
+
return status.ok();
|
|
409
286
|
}
|
|
410
287
|
|
|
411
288
|
virtual void DoExecute () = 0;
|
|
412
289
|
|
|
413
290
|
static void Complete (napi_env env, napi_status status, void* data) {
|
|
414
|
-
|
|
291
|
+
auto self = reinterpret_cast<BaseWorker*>(data);
|
|
415
292
|
|
|
416
293
|
self->DoComplete(env);
|
|
417
294
|
self->DoFinally(env);
|
|
@@ -435,7 +312,28 @@ struct BaseWorker {
|
|
|
435
312
|
}
|
|
436
313
|
|
|
437
314
|
virtual void HandleErrorCallback (napi_env env, napi_value callback) {
|
|
438
|
-
napi_value argv
|
|
315
|
+
napi_value argv;
|
|
316
|
+
|
|
317
|
+
const auto msg = status_.ToString();
|
|
318
|
+
|
|
319
|
+
if (status_.IsNotFound()) {
|
|
320
|
+
argv = CreateCodeError(env, "LEVEL_NOT_FOUND", msg);
|
|
321
|
+
} else if (status_.IsCorruption()) {
|
|
322
|
+
argv = CreateCodeError(env, "LEVEL_CORRUPTION", msg);
|
|
323
|
+
} else if (status_.IsIOError()) {
|
|
324
|
+
if (msg.find("IO error: lock ") != std::string::npos) { // env_posix.cc
|
|
325
|
+
argv = CreateCodeError(env, "LEVEL_LOCKED", msg);
|
|
326
|
+
} else if (msg.find("IO error: LockFile ") != std::string::npos) { // env_win.cc
|
|
327
|
+
argv = CreateCodeError(env, "LEVEL_LOCKED", msg);
|
|
328
|
+
} else if (msg.find("IO error: While lock file") != std::string::npos) { // env_mac.cc
|
|
329
|
+
argv = CreateCodeError(env, "LEVEL_LOCKED", msg);
|
|
330
|
+
} else {
|
|
331
|
+
argv = CreateCodeError(env, "LEVEL_IO_ERROR", msg);
|
|
332
|
+
}
|
|
333
|
+
} else {
|
|
334
|
+
argv = CreateError(env, msg);
|
|
335
|
+
}
|
|
336
|
+
|
|
439
337
|
CallFunction(env, callback, 1, &argv);
|
|
440
338
|
}
|
|
441
339
|
|
|
@@ -456,7 +354,6 @@ private:
|
|
|
456
354
|
napi_ref callbackRef_;
|
|
457
355
|
napi_async_work asyncWork_;
|
|
458
356
|
leveldb::Status status_;
|
|
459
|
-
char *errMsg_;
|
|
460
357
|
};
|
|
461
358
|
|
|
462
359
|
/**
|
|
@@ -464,49 +361,45 @@ private:
|
|
|
464
361
|
*/
|
|
465
362
|
struct Database {
|
|
466
363
|
Database ()
|
|
467
|
-
:
|
|
468
|
-
|
|
469
|
-
pendingCloseWorker_(NULL),
|
|
470
|
-
ref_(NULL),
|
|
364
|
+
: pendingCloseWorker_(nullptr),
|
|
365
|
+
ref_(nullptr),
|
|
471
366
|
priorityWork_(0) {}
|
|
472
367
|
|
|
473
|
-
~Database () {
|
|
474
|
-
if (db_ != NULL) {
|
|
475
|
-
delete db_;
|
|
476
|
-
db_ = NULL;
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
|
|
480
368
|
leveldb::Status Open (const leveldb::Options& options,
|
|
481
|
-
bool readOnly,
|
|
369
|
+
const bool readOnly,
|
|
482
370
|
const char* location) {
|
|
483
371
|
if (readOnly) {
|
|
484
|
-
|
|
372
|
+
leveldb::DB* db = nullptr;
|
|
373
|
+
const auto status = rocksdb::DB::OpenForReadOnly(options, location, &db);
|
|
374
|
+
db_.reset(db);
|
|
375
|
+
return status;
|
|
485
376
|
} else {
|
|
486
|
-
|
|
377
|
+
leveldb::DB* db = nullptr;
|
|
378
|
+
const auto status = leveldb::DB::Open(options, location, &db);
|
|
379
|
+
db_.reset(db);
|
|
380
|
+
return status;
|
|
487
381
|
}
|
|
488
382
|
}
|
|
489
383
|
|
|
490
384
|
void CloseDatabase () {
|
|
491
|
-
|
|
492
|
-
db_ = NULL;
|
|
385
|
+
db_.reset();
|
|
493
386
|
}
|
|
494
387
|
|
|
495
388
|
leveldb::Status Put (const leveldb::WriteOptions& options,
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
return db_->Put(options, key, value);
|
|
389
|
+
const std::string& key,
|
|
390
|
+
const std::string& value) {
|
|
391
|
+
return db_->Put(options, db_->DefaultColumnFamily(), key, value);
|
|
499
392
|
}
|
|
500
393
|
|
|
501
394
|
leveldb::Status Get (const leveldb::ReadOptions& options,
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
return db_->Get(options, key, &value);
|
|
395
|
+
const std::string& key,
|
|
396
|
+
rocksdb::PinnableSlice& value) {
|
|
397
|
+
return db_->Get(options, db_->DefaultColumnFamily(), key, &value);
|
|
505
398
|
}
|
|
506
399
|
|
|
507
400
|
leveldb::Status Del (const leveldb::WriteOptions& options,
|
|
508
|
-
|
|
509
|
-
return db_->Delete(options, key);
|
|
401
|
+
const std::string& key) {
|
|
402
|
+
return db_->Delete(options, db_->DefaultColumnFamily(), key);
|
|
510
403
|
}
|
|
511
404
|
|
|
512
405
|
leveldb::Status WriteBatch (const leveldb::WriteOptions& options,
|
|
@@ -514,41 +407,29 @@ struct Database {
|
|
|
514
407
|
return db_->Write(options, batch);
|
|
515
408
|
}
|
|
516
409
|
|
|
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);
|
|
410
|
+
void GetProperty (const std::string& property, std::string& value) {
|
|
411
|
+
db_->GetProperty(property, &value);
|
|
531
412
|
}
|
|
532
413
|
|
|
533
414
|
const leveldb::Snapshot* NewSnapshot () {
|
|
534
415
|
return db_->GetSnapshot();
|
|
535
416
|
}
|
|
536
417
|
|
|
537
|
-
leveldb::Iterator* NewIterator (leveldb::ReadOptions
|
|
538
|
-
return db_->NewIterator(
|
|
418
|
+
leveldb::Iterator* NewIterator (const leveldb::ReadOptions& options) {
|
|
419
|
+
return db_->NewIterator(options);
|
|
539
420
|
}
|
|
540
421
|
|
|
541
422
|
void ReleaseSnapshot (const leveldb::Snapshot* snapshot) {
|
|
542
423
|
return db_->ReleaseSnapshot(snapshot);
|
|
543
424
|
}
|
|
544
425
|
|
|
545
|
-
void AttachIterator (napi_env env,
|
|
546
|
-
iterators_
|
|
426
|
+
void AttachIterator (napi_env env, Iterator* iterator) {
|
|
427
|
+
iterators_.insert(iterator);
|
|
547
428
|
IncrementPriorityWork(env);
|
|
548
429
|
}
|
|
549
430
|
|
|
550
|
-
void DetachIterator (napi_env env,
|
|
551
|
-
iterators_.erase(
|
|
431
|
+
void DetachIterator (napi_env env, Iterator* iterator) {
|
|
432
|
+
iterators_.erase(iterator);
|
|
552
433
|
DecrementPriorityWork(env);
|
|
553
434
|
}
|
|
554
435
|
|
|
@@ -559,9 +440,9 @@ struct Database {
|
|
|
559
440
|
void DecrementPriorityWork (napi_env env) {
|
|
560
441
|
napi_reference_unref(env, ref_, &priorityWork_);
|
|
561
442
|
|
|
562
|
-
if (priorityWork_ == 0 && pendingCloseWorker_
|
|
443
|
+
if (priorityWork_ == 0 && pendingCloseWorker_) {
|
|
563
444
|
pendingCloseWorker_->Queue(env);
|
|
564
|
-
pendingCloseWorker_ =
|
|
445
|
+
pendingCloseWorker_ = nullptr;
|
|
565
446
|
}
|
|
566
447
|
}
|
|
567
448
|
|
|
@@ -569,10 +450,9 @@ struct Database {
|
|
|
569
450
|
return priorityWork_ > 0;
|
|
570
451
|
}
|
|
571
452
|
|
|
572
|
-
leveldb::DB
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
std::map< uint32_t, Iterator * > iterators_;
|
|
453
|
+
std::unique_ptr<leveldb::DB> db_;
|
|
454
|
+
BaseWorker* pendingCloseWorker_;
|
|
455
|
+
std::set<Iterator*> iterators_;
|
|
576
456
|
napi_ref ref_;
|
|
577
457
|
|
|
578
458
|
private:
|
|
@@ -596,20 +476,24 @@ struct PriorityWorker : public BaseWorker {
|
|
|
596
476
|
}
|
|
597
477
|
};
|
|
598
478
|
|
|
599
|
-
/**
|
|
600
|
-
* Owns a leveldb iterator.
|
|
601
|
-
*/
|
|
602
479
|
struct BaseIterator {
|
|
603
480
|
BaseIterator(Database* database,
|
|
604
481
|
const bool reverse,
|
|
605
|
-
std::string
|
|
606
|
-
std::string
|
|
607
|
-
std::string
|
|
608
|
-
std::string
|
|
482
|
+
const std::optional<std::string>& lt,
|
|
483
|
+
const std::optional<std::string>& lte,
|
|
484
|
+
const std::optional<std::string>& gt,
|
|
485
|
+
const std::optional<std::string>& gte,
|
|
609
486
|
const int limit,
|
|
610
487
|
const bool fillCache)
|
|
611
488
|
: database_(database),
|
|
612
|
-
|
|
489
|
+
snapshot_(database->NewSnapshot()),
|
|
490
|
+
dbIterator_(database->NewIterator([&]{
|
|
491
|
+
leveldb::ReadOptions options;
|
|
492
|
+
options.fill_cache = fillCache;
|
|
493
|
+
options.verify_checksums = false;
|
|
494
|
+
options.snapshot = snapshot_;
|
|
495
|
+
return options;
|
|
496
|
+
}())),
|
|
613
497
|
didSeek_(false),
|
|
614
498
|
reverse_(reverse),
|
|
615
499
|
lt_(lt),
|
|
@@ -618,22 +502,10 @@ struct BaseIterator {
|
|
|
618
502
|
gte_(gte),
|
|
619
503
|
limit_(limit),
|
|
620
504
|
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
505
|
}
|
|
627
506
|
|
|
628
507
|
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_;
|
|
508
|
+
assert(!dbIterator_);
|
|
637
509
|
}
|
|
638
510
|
|
|
639
511
|
bool DidSeek () const {
|
|
@@ -646,15 +518,15 @@ struct BaseIterator {
|
|
|
646
518
|
void SeekToRange () {
|
|
647
519
|
didSeek_ = true;
|
|
648
520
|
|
|
649
|
-
if (!reverse_ && gte_
|
|
521
|
+
if (!reverse_ && gte_) {
|
|
650
522
|
dbIterator_->Seek(*gte_);
|
|
651
|
-
} else if (!reverse_ && gt_
|
|
523
|
+
} else if (!reverse_ && gt_) {
|
|
652
524
|
dbIterator_->Seek(*gt_);
|
|
653
525
|
|
|
654
526
|
if (dbIterator_->Valid() && dbIterator_->key().compare(*gt_) == 0) {
|
|
655
527
|
dbIterator_->Next();
|
|
656
528
|
}
|
|
657
|
-
} else if (reverse_ && lte_
|
|
529
|
+
} else if (reverse_ && lte_) {
|
|
658
530
|
dbIterator_->Seek(*lte_);
|
|
659
531
|
|
|
660
532
|
if (!dbIterator_->Valid()) {
|
|
@@ -662,7 +534,7 @@ struct BaseIterator {
|
|
|
662
534
|
} else if (dbIterator_->key().compare(*lte_) > 0) {
|
|
663
535
|
dbIterator_->Prev();
|
|
664
536
|
}
|
|
665
|
-
} else if (reverse_ && lt_
|
|
537
|
+
} else if (reverse_ && lt_) {
|
|
666
538
|
dbIterator_->Seek(*lt_);
|
|
667
539
|
|
|
668
540
|
if (!dbIterator_->Valid()) {
|
|
@@ -680,7 +552,7 @@ struct BaseIterator {
|
|
|
680
552
|
/**
|
|
681
553
|
* Seek manually (during iteration).
|
|
682
554
|
*/
|
|
683
|
-
void Seek (
|
|
555
|
+
void Seek (const std::string& target) {
|
|
684
556
|
didSeek_ = true;
|
|
685
557
|
|
|
686
558
|
if (OutOfRange(target)) {
|
|
@@ -690,14 +562,14 @@ struct BaseIterator {
|
|
|
690
562
|
dbIterator_->Seek(target);
|
|
691
563
|
|
|
692
564
|
if (dbIterator_->Valid()) {
|
|
693
|
-
|
|
565
|
+
const auto cmp = dbIterator_->key().compare(target);
|
|
694
566
|
if (reverse_ ? cmp > 0 : cmp < 0) {
|
|
695
567
|
Next();
|
|
696
568
|
}
|
|
697
569
|
} else {
|
|
698
570
|
SeekToFirst();
|
|
699
571
|
if (dbIterator_->Valid()) {
|
|
700
|
-
|
|
572
|
+
const auto cmp = dbIterator_->key().compare(target);
|
|
701
573
|
if (reverse_ ? cmp > 0 : cmp < 0) {
|
|
702
574
|
SeekToEnd();
|
|
703
575
|
}
|
|
@@ -705,12 +577,11 @@ struct BaseIterator {
|
|
|
705
577
|
}
|
|
706
578
|
}
|
|
707
579
|
|
|
708
|
-
void
|
|
709
|
-
if (
|
|
710
|
-
hasEnded_ = true;
|
|
580
|
+
void Close () {
|
|
581
|
+
if (dbIterator_) {
|
|
711
582
|
delete dbIterator_;
|
|
712
|
-
dbIterator_ =
|
|
713
|
-
database_->ReleaseSnapshot(
|
|
583
|
+
dbIterator_ = nullptr;
|
|
584
|
+
database_->ReleaseSnapshot(snapshot_);
|
|
714
585
|
}
|
|
715
586
|
}
|
|
716
587
|
|
|
@@ -755,108 +626,103 @@ struct BaseIterator {
|
|
|
755
626
|
}
|
|
756
627
|
|
|
757
628
|
bool OutOfRange (const leveldb::Slice& target) const {
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
629
|
+
if (lte_) {
|
|
630
|
+
if (target.compare(*lte_) > 0) return true;
|
|
631
|
+
} else if (lt_) {
|
|
632
|
+
if (target.compare(*lt_) >= 0) return true;
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
if (gte_) {
|
|
636
|
+
if (target.compare(*gte_) < 0) return true;
|
|
637
|
+
} else if (gt_) {
|
|
638
|
+
if (target.compare(*gt_) <= 0) return true;
|
|
639
|
+
}
|
|
763
640
|
|
|
764
|
-
return
|
|
765
|
-
(lte_ != NULL && target.compare(*lte_) > 0) ||
|
|
766
|
-
(gt_ != NULL && target.compare(*gt_) <= 0) ||
|
|
767
|
-
(gte_ != NULL && target.compare(*gte_) < 0));
|
|
641
|
+
return false;
|
|
768
642
|
}
|
|
769
643
|
|
|
770
644
|
Database* database_;
|
|
771
|
-
bool hasEnded_;
|
|
772
645
|
|
|
773
646
|
private:
|
|
647
|
+
const leveldb::Snapshot* snapshot_;
|
|
774
648
|
leveldb::Iterator* dbIterator_;
|
|
775
649
|
bool didSeek_;
|
|
776
650
|
const bool reverse_;
|
|
777
|
-
std::string
|
|
778
|
-
std::string
|
|
779
|
-
std::string
|
|
780
|
-
std::string
|
|
651
|
+
const std::optional<std::string> lt_;
|
|
652
|
+
const std::optional<std::string> lte_;
|
|
653
|
+
const std::optional<std::string> gt_;
|
|
654
|
+
const std::optional<std::string> gte_;
|
|
781
655
|
const int limit_;
|
|
782
656
|
int count_;
|
|
783
|
-
leveldb::ReadOptions* options_;
|
|
784
657
|
};
|
|
785
658
|
|
|
786
|
-
/**
|
|
787
|
-
* Extends BaseIterator for reading it from JS land.
|
|
788
|
-
*/
|
|
789
659
|
struct Iterator final : public BaseIterator {
|
|
790
660
|
Iterator (Database* database,
|
|
791
|
-
const uint32_t id,
|
|
792
661
|
const bool reverse,
|
|
793
662
|
const bool keys,
|
|
794
663
|
const bool values,
|
|
795
664
|
const int limit,
|
|
796
|
-
std::string
|
|
797
|
-
std::string
|
|
798
|
-
std::string
|
|
799
|
-
std::string
|
|
665
|
+
const std::optional<std::string>& lt,
|
|
666
|
+
const std::optional<std::string>& lte,
|
|
667
|
+
const std::optional<std::string>& gt,
|
|
668
|
+
const std::optional<std::string>& gte,
|
|
800
669
|
const bool fillCache,
|
|
801
670
|
const bool keyAsBuffer,
|
|
802
671
|
const bool valueAsBuffer,
|
|
803
|
-
const uint32_t
|
|
672
|
+
const uint32_t highWaterMarkBytes)
|
|
804
673
|
: BaseIterator(database, reverse, lt, lte, gt, gte, limit, fillCache),
|
|
805
|
-
id_(id),
|
|
806
674
|
keys_(keys),
|
|
807
675
|
values_(values),
|
|
808
676
|
keyAsBuffer_(keyAsBuffer),
|
|
809
677
|
valueAsBuffer_(valueAsBuffer),
|
|
810
|
-
|
|
811
|
-
|
|
678
|
+
highWaterMarkBytes_(highWaterMarkBytes),
|
|
679
|
+
first_(true),
|
|
812
680
|
nexting_(false),
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
ref_(
|
|
681
|
+
isClosing_(false),
|
|
682
|
+
closeWorker_(nullptr),
|
|
683
|
+
ref_(nullptr) {
|
|
816
684
|
}
|
|
817
685
|
|
|
818
|
-
~Iterator () {}
|
|
819
|
-
|
|
820
686
|
void Attach (napi_env env, napi_value context) {
|
|
821
687
|
napi_create_reference(env, context, 1, &ref_);
|
|
822
|
-
database_->AttachIterator(env,
|
|
688
|
+
database_->AttachIterator(env, this);
|
|
823
689
|
}
|
|
824
690
|
|
|
825
691
|
void Detach (napi_env env) {
|
|
826
|
-
database_->DetachIterator(env,
|
|
827
|
-
if (ref_
|
|
692
|
+
database_->DetachIterator(env, this);
|
|
693
|
+
if (ref_) napi_delete_reference(env, ref_);
|
|
828
694
|
}
|
|
829
695
|
|
|
830
696
|
bool ReadMany (uint32_t size) {
|
|
831
697
|
cache_.clear();
|
|
698
|
+
cache_.reserve(size * 2);
|
|
832
699
|
size_t bytesRead = 0;
|
|
833
700
|
|
|
834
701
|
while (true) {
|
|
835
|
-
if (
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
if (keys_) {
|
|
839
|
-
leveldb::Slice slice = CurrentKey();
|
|
840
|
-
cache_.emplace_back(slice.data(), slice.size());
|
|
841
|
-
bytesRead += slice.size();
|
|
842
|
-
} else {
|
|
843
|
-
cache_.emplace_back("");
|
|
844
|
-
}
|
|
845
|
-
|
|
846
|
-
if (values_) {
|
|
847
|
-
leveldb::Slice slice = CurrentValue();
|
|
848
|
-
cache_.emplace_back(slice.data(), slice.size());
|
|
849
|
-
bytesRead += slice.size();
|
|
850
|
-
} else {
|
|
851
|
-
cache_.emplace_back("");
|
|
852
|
-
}
|
|
702
|
+
if (!first_) Next();
|
|
703
|
+
else first_ = false;
|
|
853
704
|
|
|
854
|
-
if (!
|
|
855
|
-
|
|
856
|
-
|
|
705
|
+
if (!Valid() || !Increment()) break;
|
|
706
|
+
|
|
707
|
+
if (keys_ && values_) {
|
|
708
|
+
auto k = CurrentKey();
|
|
709
|
+
auto v = CurrentValue();
|
|
710
|
+
cache_.emplace_back(k.data(), k.size());
|
|
711
|
+
cache_.emplace_back(v.data(), v.size());
|
|
712
|
+
bytesRead += k.size() + v.size();
|
|
713
|
+
} else if (keys_) {
|
|
714
|
+
auto k = CurrentKey();
|
|
715
|
+
cache_.emplace_back(k.data(), k.size());
|
|
716
|
+
cache_.push_back({});
|
|
717
|
+
bytesRead += k.size();
|
|
718
|
+
} else if (values_) {
|
|
719
|
+
auto v = CurrentValue();
|
|
720
|
+
cache_.push_back({});
|
|
721
|
+
cache_.emplace_back(v.data(), v.size());
|
|
722
|
+
bytesRead += v.size();
|
|
857
723
|
}
|
|
858
724
|
|
|
859
|
-
if (bytesRead >
|
|
725
|
+
if (bytesRead > highWaterMarkBytes_ || cache_.size() / 2 >= size) {
|
|
860
726
|
return true;
|
|
861
727
|
}
|
|
862
728
|
}
|
|
@@ -864,16 +730,15 @@ struct Iterator final : public BaseIterator {
|
|
|
864
730
|
return false;
|
|
865
731
|
}
|
|
866
732
|
|
|
867
|
-
const uint32_t id_;
|
|
868
733
|
const bool keys_;
|
|
869
734
|
const bool values_;
|
|
870
735
|
const bool keyAsBuffer_;
|
|
871
736
|
const bool valueAsBuffer_;
|
|
872
|
-
const uint32_t
|
|
873
|
-
bool
|
|
737
|
+
const uint32_t highWaterMarkBytes_;
|
|
738
|
+
bool first_;
|
|
874
739
|
bool nexting_;
|
|
875
|
-
bool
|
|
876
|
-
BaseWorker*
|
|
740
|
+
bool isClosing_;
|
|
741
|
+
BaseWorker* closeWorker_;
|
|
877
742
|
std::vector<std::string> cache_;
|
|
878
743
|
|
|
879
744
|
private:
|
|
@@ -886,7 +751,7 @@ private:
|
|
|
886
751
|
* the guarantee that no db operations will be in-flight at this time.
|
|
887
752
|
*/
|
|
888
753
|
static void env_cleanup_hook (void* arg) {
|
|
889
|
-
Database* database = (
|
|
754
|
+
Database* database = reinterpret_cast<Database*>(arg);
|
|
890
755
|
|
|
891
756
|
// Do everything that db_close() does but synchronously. We're expecting that GC
|
|
892
757
|
// did not (yet) collect the database because that would be a user mistake (not
|
|
@@ -894,35 +759,26 @@ static void env_cleanup_hook (void* arg) {
|
|
|
894
759
|
// from an environment being torn down (like the main process or a worker thread)
|
|
895
760
|
// where it's our responsibility to clean up. Note also, the following code must
|
|
896
761
|
// 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
|
-
|
|
762
|
+
if (database && database->db_) {
|
|
901
763
|
// TODO: does not do `napi_delete_reference(env, iterator->ref_)`. Problem?
|
|
902
|
-
for (
|
|
903
|
-
it->
|
|
764
|
+
for (auto it : database->iterators_) {
|
|
765
|
+
it->Close();
|
|
904
766
|
}
|
|
905
767
|
|
|
906
|
-
// Having
|
|
768
|
+
// Having closed the iterators (and released snapshots) we can safely close.
|
|
907
769
|
database->CloseDatabase();
|
|
908
770
|
}
|
|
909
771
|
}
|
|
910
772
|
|
|
911
|
-
/**
|
|
912
|
-
* Runs when a Database is garbage collected.
|
|
913
|
-
*/
|
|
914
773
|
static void FinalizeDatabase (napi_env env, void* data, void* hint) {
|
|
915
774
|
if (data) {
|
|
916
775
|
Database* database = (Database*)data;
|
|
917
776
|
napi_remove_env_cleanup_hook(env, env_cleanup_hook, database);
|
|
918
|
-
if (database->ref_
|
|
777
|
+
if (database->ref_) napi_delete_reference(env, database->ref_);
|
|
919
778
|
delete database;
|
|
920
779
|
}
|
|
921
780
|
}
|
|
922
781
|
|
|
923
|
-
/**
|
|
924
|
-
* Returns a context object for a database.
|
|
925
|
-
*/
|
|
926
782
|
NAPI_METHOD(db_init) {
|
|
927
783
|
Database* database = new Database();
|
|
928
784
|
napi_add_env_cleanup_hook(env, env_cleanup_hook, database);
|
|
@@ -930,7 +786,7 @@ NAPI_METHOD(db_init) {
|
|
|
930
786
|
napi_value result;
|
|
931
787
|
NAPI_STATUS_THROWS(napi_create_external(env, database,
|
|
932
788
|
FinalizeDatabase,
|
|
933
|
-
|
|
789
|
+
nullptr, &result));
|
|
934
790
|
|
|
935
791
|
// Reference counter to prevent GC of database while priority workers are active
|
|
936
792
|
NAPI_STATUS_THROWS(napi_create_reference(env, result, 0, &database->ref_));
|
|
@@ -972,7 +828,7 @@ struct OpenWorker final : public BaseWorker {
|
|
|
972
828
|
options_.paranoid_checks = false;
|
|
973
829
|
|
|
974
830
|
if (infoLogLevel.size() > 0) {
|
|
975
|
-
rocksdb::InfoLogLevel lvl;
|
|
831
|
+
rocksdb::InfoLogLevel lvl = {};
|
|
976
832
|
|
|
977
833
|
if (infoLogLevel == "debug") lvl = rocksdb::InfoLogLevel::DEBUG_LEVEL;
|
|
978
834
|
else if (infoLogLevel == "info") lvl = rocksdb::InfoLogLevel::INFO_LEVEL;
|
|
@@ -980,7 +836,7 @@ struct OpenWorker final : public BaseWorker {
|
|
|
980
836
|
else if (infoLogLevel == "error") lvl = rocksdb::InfoLogLevel::ERROR_LEVEL;
|
|
981
837
|
else if (infoLogLevel == "fatal") lvl = rocksdb::InfoLogLevel::FATAL_LEVEL;
|
|
982
838
|
else if (infoLogLevel == "header") lvl = rocksdb::InfoLogLevel::HEADER_LEVEL;
|
|
983
|
-
else napi_throw_error(env,
|
|
839
|
+
else napi_throw_error(env, nullptr, "invalid log level");
|
|
984
840
|
|
|
985
841
|
options_.info_log_level = lvl;
|
|
986
842
|
} else {
|
|
@@ -1007,65 +863,55 @@ struct OpenWorker final : public BaseWorker {
|
|
|
1007
863
|
);
|
|
1008
864
|
}
|
|
1009
865
|
|
|
1010
|
-
~OpenWorker () {}
|
|
1011
|
-
|
|
1012
866
|
void DoExecute () override {
|
|
1013
867
|
SetStatus(database_->Open(options_, readOnly_, location_.c_str()));
|
|
1014
868
|
}
|
|
1015
869
|
|
|
1016
870
|
leveldb::Options options_;
|
|
1017
|
-
bool readOnly_;
|
|
1018
|
-
std::string location_;
|
|
871
|
+
const bool readOnly_;
|
|
872
|
+
const std::string location_;
|
|
1019
873
|
};
|
|
1020
874
|
|
|
1021
|
-
/**
|
|
1022
|
-
* Open a database.
|
|
1023
|
-
*/
|
|
1024
875
|
NAPI_METHOD(db_open) {
|
|
1025
876
|
NAPI_ARGV(4);
|
|
1026
877
|
NAPI_DB_CONTEXT();
|
|
1027
|
-
NAPI_ARGV_UTF8_NEW(location, 1);
|
|
1028
878
|
|
|
1029
|
-
|
|
1030
|
-
const
|
|
1031
|
-
const
|
|
1032
|
-
const
|
|
1033
|
-
|
|
879
|
+
const auto location = ToString(env, argv[1]).value_or(std::string());
|
|
880
|
+
const auto options = argv[2];
|
|
881
|
+
const auto createIfMissing = BooleanProperty(env, options, "createIfMissing", true);
|
|
882
|
+
const auto errorIfExists = BooleanProperty(env, options, "errorIfExists", false);
|
|
883
|
+
const auto compression = BooleanProperty(env, options, "compression", true);
|
|
884
|
+
const auto readOnly = BooleanProperty(env, options, "readOnly", false);
|
|
1034
885
|
|
|
1035
|
-
const
|
|
886
|
+
const auto infoLogLevel = StringProperty(env, options, "infoLogLevel");
|
|
1036
887
|
|
|
1037
|
-
const
|
|
1038
|
-
const
|
|
1039
|
-
const
|
|
1040
|
-
const
|
|
1041
|
-
const
|
|
888
|
+
const auto cacheSize = Uint32Property(env, options, "cacheSize", 8 << 20);
|
|
889
|
+
const auto writeBufferSize = Uint32Property(env, options , "writeBufferSize" , 4 << 20);
|
|
890
|
+
const auto blockSize = Uint32Property(env, options, "blockSize", 4096);
|
|
891
|
+
const auto maxOpenFiles = Uint32Property(env, options, "maxOpenFiles", 1000);
|
|
892
|
+
const auto blockRestartInterval = Uint32Property(env, options,
|
|
1042
893
|
"blockRestartInterval", 16);
|
|
1043
|
-
const
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
894
|
+
const auto maxFileSize = Uint32Property(env, options, "maxFileSize", 2 << 20);
|
|
895
|
+
|
|
896
|
+
const auto callback = argv[3];
|
|
897
|
+
|
|
898
|
+
auto worker = new OpenWorker(env, database, callback, location,
|
|
899
|
+
createIfMissing, errorIfExists,
|
|
900
|
+
compression, writeBufferSize, blockSize,
|
|
901
|
+
maxOpenFiles, blockRestartInterval,
|
|
902
|
+
maxFileSize, cacheSize,
|
|
903
|
+
infoLogLevel, readOnly);
|
|
1052
904
|
worker->Queue(env);
|
|
1053
|
-
delete [] location;
|
|
1054
905
|
|
|
1055
|
-
|
|
906
|
+
return 0;
|
|
1056
907
|
}
|
|
1057
908
|
|
|
1058
|
-
/**
|
|
1059
|
-
* Worker class for closing a database
|
|
1060
|
-
*/
|
|
1061
909
|
struct CloseWorker final : public BaseWorker {
|
|
1062
910
|
CloseWorker (napi_env env,
|
|
1063
911
|
Database* database,
|
|
1064
912
|
napi_value callback)
|
|
1065
913
|
: BaseWorker(env, database, callback, "leveldown.db.close") {}
|
|
1066
914
|
|
|
1067
|
-
~CloseWorker () {}
|
|
1068
|
-
|
|
1069
915
|
void DoExecute () override {
|
|
1070
916
|
database_->CloseDatabase();
|
|
1071
917
|
}
|
|
@@ -1075,197 +921,172 @@ napi_value noop_callback (napi_env env, napi_callback_info info) {
|
|
|
1075
921
|
return 0;
|
|
1076
922
|
}
|
|
1077
923
|
|
|
1078
|
-
/**
|
|
1079
|
-
* Close a database.
|
|
1080
|
-
*/
|
|
1081
924
|
NAPI_METHOD(db_close) {
|
|
1082
925
|
NAPI_ARGV(2);
|
|
1083
926
|
NAPI_DB_CONTEXT();
|
|
1084
927
|
|
|
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;
|
|
928
|
+
const auto callback = argv[1];
|
|
1094
929
|
|
|
1095
930
|
napi_value noop;
|
|
1096
|
-
napi_create_function(env,
|
|
931
|
+
napi_create_function(env, nullptr, 0, noop_callback, nullptr, &noop);
|
|
1097
932
|
|
|
1098
|
-
|
|
1099
|
-
|
|
933
|
+
for (auto it : database->iterators_) {
|
|
934
|
+
iterator_do_close(env, it, noop);
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
auto worker = new CloseWorker(env, database, callback);
|
|
1100
938
|
|
|
1101
|
-
|
|
1102
|
-
|
|
939
|
+
if (!database->HasPriorityWork()) {
|
|
940
|
+
worker->Queue(env);
|
|
941
|
+
} else {
|
|
942
|
+
database->pendingCloseWorker_ = worker;
|
|
1103
943
|
}
|
|
1104
944
|
|
|
1105
|
-
|
|
945
|
+
return 0;
|
|
1106
946
|
}
|
|
1107
947
|
|
|
1108
|
-
/**
|
|
1109
|
-
* Worker class for putting key/value to the database
|
|
1110
|
-
*/
|
|
1111
948
|
struct PutWorker final : public PriorityWorker {
|
|
1112
949
|
PutWorker (napi_env env,
|
|
1113
950
|
Database* database,
|
|
1114
951
|
napi_value callback,
|
|
1115
|
-
|
|
1116
|
-
|
|
952
|
+
const std::string& key,
|
|
953
|
+
const std::string& value,
|
|
1117
954
|
bool sync)
|
|
1118
|
-
: PriorityWorker(env, database, callback, "
|
|
1119
|
-
key_(key), value_(value) {
|
|
1120
|
-
options_.sync = sync;
|
|
1121
|
-
}
|
|
1122
|
-
|
|
1123
|
-
~PutWorker () {
|
|
1124
|
-
DisposeSliceBuffer(key_);
|
|
1125
|
-
DisposeSliceBuffer(value_);
|
|
955
|
+
: PriorityWorker(env, database, callback, "classic_level.db.put"),
|
|
956
|
+
key_(key), value_(value), sync_(sync) {
|
|
1126
957
|
}
|
|
1127
958
|
|
|
1128
959
|
void DoExecute () override {
|
|
1129
|
-
|
|
960
|
+
leveldb::WriteOptions options;
|
|
961
|
+
options.sync = sync_;
|
|
962
|
+
SetStatus(database_->Put(options, key_, value_));
|
|
1130
963
|
}
|
|
1131
964
|
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
965
|
+
const std::string key_;
|
|
966
|
+
const std::string value_;
|
|
967
|
+
const bool sync_;
|
|
1135
968
|
};
|
|
1136
969
|
|
|
1137
|
-
/**
|
|
1138
|
-
* Puts a key and a value to a database.
|
|
1139
|
-
*/
|
|
1140
970
|
NAPI_METHOD(db_put) {
|
|
1141
971
|
NAPI_ARGV(5);
|
|
1142
972
|
NAPI_DB_CONTEXT();
|
|
1143
973
|
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
974
|
+
const auto key = ToString(env, argv[1]).value_or(std::string());
|
|
975
|
+
const auto value = ToString(env, argv[2]).value_or(std::string());
|
|
976
|
+
const auto sync = BooleanProperty(env, argv[3], "sync", false);
|
|
977
|
+
const auto callback = argv[4];
|
|
1148
978
|
|
|
1149
|
-
|
|
979
|
+
auto worker = new PutWorker(env, database, callback, key, value, sync);
|
|
1150
980
|
worker->Queue(env);
|
|
1151
981
|
|
|
1152
|
-
|
|
982
|
+
return 0;
|
|
1153
983
|
}
|
|
1154
984
|
|
|
1155
|
-
/**
|
|
1156
|
-
* Worker class for getting a value from a database.
|
|
1157
|
-
*/
|
|
1158
985
|
struct GetWorker final : public PriorityWorker {
|
|
1159
986
|
GetWorker (napi_env env,
|
|
1160
987
|
Database* database,
|
|
1161
988
|
napi_value callback,
|
|
1162
|
-
|
|
989
|
+
const std::string& key,
|
|
1163
990
|
const bool asBuffer,
|
|
1164
991
|
const bool fillCache)
|
|
1165
|
-
: PriorityWorker(env, database, callback, "
|
|
1166
|
-
key_(key),
|
|
1167
|
-
asBuffer_(asBuffer) {
|
|
1168
|
-
options_.fill_cache = fillCache;
|
|
1169
|
-
}
|
|
1170
|
-
|
|
1171
|
-
~GetWorker () {
|
|
1172
|
-
DisposeSliceBuffer(key_);
|
|
992
|
+
: PriorityWorker(env, database, callback, "classic_level.db.get"),
|
|
993
|
+
key_(key), asBuffer_(asBuffer), fillCache_(fillCache) {
|
|
1173
994
|
}
|
|
1174
995
|
|
|
1175
996
|
void DoExecute () override {
|
|
1176
|
-
|
|
997
|
+
leveldb::ReadOptions options;
|
|
998
|
+
options.fill_cache = fillCache_;
|
|
999
|
+
SetStatus(database_->Get(options, key_, value_));
|
|
1177
1000
|
}
|
|
1178
1001
|
|
|
1179
1002
|
void HandleOKCallback (napi_env env, napi_value callback) override {
|
|
1180
1003
|
napi_value argv[2];
|
|
1181
1004
|
napi_get_null(env, &argv[0]);
|
|
1182
|
-
|
|
1005
|
+
Convert(env, std::move(value_), asBuffer_, argv[1]);
|
|
1183
1006
|
CallFunction(env, callback, 2, argv);
|
|
1184
1007
|
}
|
|
1185
1008
|
|
|
1186
1009
|
private:
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
std::string value_;
|
|
1010
|
+
const std::string key_;
|
|
1011
|
+
rocksdb::PinnableSlice value_;
|
|
1190
1012
|
const bool asBuffer_;
|
|
1013
|
+
const bool fillCache_;
|
|
1191
1014
|
};
|
|
1192
1015
|
|
|
1193
|
-
/**
|
|
1194
|
-
* Gets a value from a database.
|
|
1195
|
-
*/
|
|
1196
1016
|
NAPI_METHOD(db_get) {
|
|
1197
1017
|
NAPI_ARGV(4);
|
|
1198
1018
|
NAPI_DB_CONTEXT();
|
|
1199
1019
|
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
const
|
|
1203
|
-
const
|
|
1204
|
-
|
|
1020
|
+
const auto key = ToString(env, argv[1]).value_or(std::string());
|
|
1021
|
+
const auto options = argv[2];
|
|
1022
|
+
const auto asBuffer = EncodingIsBuffer(env, options, "valueEncoding");
|
|
1023
|
+
const auto fillCache = BooleanProperty(env, options, "fillCache", true);
|
|
1024
|
+
const auto callback = argv[3];
|
|
1205
1025
|
|
|
1206
|
-
|
|
1207
|
-
fillCache);
|
|
1026
|
+
auto worker = new GetWorker(env, database, callback, key, asBuffer, fillCache);
|
|
1208
1027
|
worker->Queue(env);
|
|
1209
1028
|
|
|
1210
|
-
|
|
1029
|
+
return 0;
|
|
1211
1030
|
}
|
|
1212
1031
|
|
|
1213
|
-
|
|
1214
|
-
* Worker class for getting many values.
|
|
1215
|
-
*/
|
|
1032
|
+
|
|
1216
1033
|
struct GetManyWorker final : public PriorityWorker {
|
|
1217
1034
|
GetManyWorker (napi_env env,
|
|
1218
1035
|
Database* database,
|
|
1219
|
-
const std::vector<std::string
|
|
1036
|
+
const std::vector<std::string>& keys,
|
|
1220
1037
|
napi_value callback,
|
|
1221
1038
|
const bool valueAsBuffer,
|
|
1222
1039
|
const bool fillCache)
|
|
1223
1040
|
: PriorityWorker(env, database, callback, "leveldown.get.many"),
|
|
1224
|
-
keys_(keys), valueAsBuffer_(valueAsBuffer)
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
}
|
|
1041
|
+
keys_(keys), valueAsBuffer_(valueAsBuffer), fillCache_(fillCache),
|
|
1042
|
+
snapshot_(database->NewSnapshot()) {
|
|
1043
|
+
}
|
|
1228
1044
|
|
|
1229
|
-
~GetManyWorker() {
|
|
1230
|
-
|
|
1045
|
+
~GetManyWorker () {
|
|
1046
|
+
if (snapshot_) {
|
|
1047
|
+
database_->ReleaseSnapshot(snapshot_);
|
|
1048
|
+
snapshot_ = nullptr;
|
|
1049
|
+
}
|
|
1231
1050
|
}
|
|
1232
1051
|
|
|
1233
1052
|
void DoExecute () override {
|
|
1234
|
-
cache_.reserve(keys_
|
|
1053
|
+
cache_.reserve(keys_.size());
|
|
1235
1054
|
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1055
|
+
leveldb::ReadOptions options;
|
|
1056
|
+
options.snapshot = snapshot_;
|
|
1057
|
+
options.fill_cache = fillCache_;
|
|
1058
|
+
|
|
1059
|
+
rocksdb::PinnableSlice value;
|
|
1060
|
+
|
|
1061
|
+
for (const auto& key: keys_) {
|
|
1062
|
+
const auto status = database_->Get(options, key, value);
|
|
1239
1063
|
|
|
1240
1064
|
if (status.ok()) {
|
|
1241
|
-
cache_.push_back(value);
|
|
1065
|
+
cache_.push_back(std::move(value));
|
|
1242
1066
|
} else if (status.IsNotFound()) {
|
|
1243
|
-
|
|
1244
|
-
cache_.push_back(NULL);
|
|
1067
|
+
cache_.push_back({});
|
|
1245
1068
|
} else {
|
|
1246
|
-
delete value;
|
|
1247
|
-
for (const std::string* value: cache_) {
|
|
1248
|
-
if (value != NULL) delete value;
|
|
1249
|
-
}
|
|
1250
1069
|
SetStatus(status);
|
|
1251
1070
|
break;
|
|
1252
1071
|
}
|
|
1072
|
+
|
|
1073
|
+
value.Reset();
|
|
1253
1074
|
}
|
|
1254
1075
|
|
|
1255
|
-
database_->ReleaseSnapshot(
|
|
1076
|
+
database_->ReleaseSnapshot(snapshot_);
|
|
1077
|
+
snapshot_ = nullptr;
|
|
1256
1078
|
}
|
|
1257
1079
|
|
|
1258
1080
|
void HandleOKCallback (napi_env env, napi_value callback) override {
|
|
1259
|
-
|
|
1081
|
+
const auto size = cache_.size();
|
|
1082
|
+
|
|
1260
1083
|
napi_value array;
|
|
1261
1084
|
napi_create_array_with_length(env, size, &array);
|
|
1262
1085
|
|
|
1263
1086
|
for (size_t idx = 0; idx < size; idx++) {
|
|
1264
|
-
std::string* value = cache_[idx];
|
|
1265
1087
|
napi_value element;
|
|
1266
|
-
|
|
1088
|
+
Convert(env, cache_[idx], valueAsBuffer_, element);
|
|
1267
1089
|
napi_set_element(env, array, static_cast<uint32_t>(idx), element);
|
|
1268
|
-
if (value != NULL) delete value;
|
|
1269
1090
|
}
|
|
1270
1091
|
|
|
1271
1092
|
napi_value argv[2];
|
|
@@ -1275,139 +1096,115 @@ struct GetManyWorker final : public PriorityWorker {
|
|
|
1275
1096
|
}
|
|
1276
1097
|
|
|
1277
1098
|
private:
|
|
1278
|
-
|
|
1279
|
-
const std::vector<std::string>* keys_;
|
|
1099
|
+
const std::vector<std::string> keys_;
|
|
1280
1100
|
const bool valueAsBuffer_;
|
|
1281
|
-
std::vector<std::
|
|
1101
|
+
std::vector<std::optional<rocksdb::PinnableSlice>> cache_;
|
|
1102
|
+
const bool fillCache_;
|
|
1103
|
+
const leveldb::Snapshot* snapshot_;
|
|
1282
1104
|
};
|
|
1283
1105
|
|
|
1284
|
-
/**
|
|
1285
|
-
* Gets many values from a database.
|
|
1286
|
-
*/
|
|
1287
1106
|
NAPI_METHOD(db_get_many) {
|
|
1288
1107
|
NAPI_ARGV(4);
|
|
1289
1108
|
NAPI_DB_CONTEXT();
|
|
1290
1109
|
|
|
1291
|
-
const
|
|
1292
|
-
|
|
1293
|
-
const bool asBuffer =
|
|
1110
|
+
const auto keys = KeyArray(env, argv[1]);
|
|
1111
|
+
const auto options = argv[2];
|
|
1112
|
+
const bool asBuffer = EncodingIsBuffer(env, options, "valueEncoding");
|
|
1294
1113
|
const bool fillCache = BooleanProperty(env, options, "fillCache", true);
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
GetManyWorker* worker = new GetManyWorker(
|
|
1298
|
-
env, database, keys, callback, asBuffer, fillCache
|
|
1299
|
-
);
|
|
1114
|
+
const auto callback = argv[3];
|
|
1300
1115
|
|
|
1116
|
+
auto worker = new GetManyWorker(env, database, keys, callback, asBuffer, fillCache);
|
|
1301
1117
|
worker->Queue(env);
|
|
1302
|
-
|
|
1118
|
+
|
|
1119
|
+
return 0;
|
|
1303
1120
|
}
|
|
1304
1121
|
|
|
1305
|
-
/**
|
|
1306
|
-
* Worker class for deleting a value from a database.
|
|
1307
|
-
*/
|
|
1308
1122
|
struct DelWorker final : public PriorityWorker {
|
|
1309
1123
|
DelWorker (napi_env env,
|
|
1310
1124
|
Database* database,
|
|
1311
1125
|
napi_value callback,
|
|
1312
|
-
|
|
1126
|
+
const std::string& key,
|
|
1313
1127
|
bool sync)
|
|
1314
|
-
: PriorityWorker(env, database, callback, "
|
|
1315
|
-
key_(key) {
|
|
1316
|
-
options_.sync = sync;
|
|
1317
|
-
}
|
|
1318
|
-
|
|
1319
|
-
~DelWorker () {
|
|
1320
|
-
DisposeSliceBuffer(key_);
|
|
1128
|
+
: PriorityWorker(env, database, callback, "classic_level.db.del"),
|
|
1129
|
+
key_(key), sync_(sync) {
|
|
1321
1130
|
}
|
|
1322
1131
|
|
|
1323
1132
|
void DoExecute () override {
|
|
1324
|
-
|
|
1133
|
+
leveldb::WriteOptions options;
|
|
1134
|
+
options.sync = sync_;
|
|
1135
|
+
SetStatus(database_->Del(options, key_));
|
|
1325
1136
|
}
|
|
1326
1137
|
|
|
1327
|
-
|
|
1328
|
-
|
|
1138
|
+
const std::string key_;
|
|
1139
|
+
const bool sync_;
|
|
1329
1140
|
};
|
|
1330
1141
|
|
|
1331
|
-
/**
|
|
1332
|
-
* Delete a value from a database.
|
|
1333
|
-
*/
|
|
1334
1142
|
NAPI_METHOD(db_del) {
|
|
1335
1143
|
NAPI_ARGV(4);
|
|
1336
1144
|
NAPI_DB_CONTEXT();
|
|
1337
1145
|
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1146
|
+
const auto key = ToString(env, argv[1]).value_or(std::string());
|
|
1147
|
+
const auto sync = BooleanProperty(env, argv[2], "sync", false);
|
|
1148
|
+
const auto callback = argv[3];
|
|
1341
1149
|
|
|
1342
|
-
|
|
1150
|
+
auto worker = new DelWorker(env, database, callback, key, sync);
|
|
1343
1151
|
worker->Queue(env);
|
|
1344
1152
|
|
|
1345
|
-
|
|
1153
|
+
return 0;
|
|
1346
1154
|
}
|
|
1347
1155
|
|
|
1348
|
-
/**
|
|
1349
|
-
* Worker class for deleting a range from a database.
|
|
1350
|
-
*/
|
|
1351
1156
|
struct ClearWorker final : public PriorityWorker {
|
|
1352
1157
|
ClearWorker (napi_env env,
|
|
1353
1158
|
Database* database,
|
|
1354
1159
|
napi_value callback,
|
|
1355
1160
|
const bool reverse,
|
|
1356
1161
|
const int limit,
|
|
1357
|
-
std::string
|
|
1358
|
-
std::string
|
|
1359
|
-
std::string
|
|
1360
|
-
std::string
|
|
1361
|
-
: PriorityWorker(env, database, callback, "
|
|
1362
|
-
|
|
1363
|
-
writeOptions_ = new leveldb::WriteOptions();
|
|
1364
|
-
writeOptions_->sync = false;
|
|
1365
|
-
}
|
|
1366
|
-
|
|
1367
|
-
~ClearWorker () {
|
|
1368
|
-
delete iterator_;
|
|
1369
|
-
delete writeOptions_;
|
|
1162
|
+
const std::optional<std::string>& lt,
|
|
1163
|
+
const std::optional<std::string>& lte,
|
|
1164
|
+
const std::optional<std::string>& gt,
|
|
1165
|
+
const std::optional<std::string>& gte)
|
|
1166
|
+
: PriorityWorker(env, database, callback, "classic_level.db.clear"),
|
|
1167
|
+
iterator_(database, reverse, lt, lte, gt, gte, limit, false) {
|
|
1370
1168
|
}
|
|
1371
1169
|
|
|
1372
1170
|
void DoExecute () override {
|
|
1373
|
-
iterator_
|
|
1171
|
+
iterator_.SeekToRange();
|
|
1374
1172
|
|
|
1375
1173
|
// TODO: add option
|
|
1376
|
-
uint32_t hwm = 16 * 1024;
|
|
1174
|
+
const uint32_t hwm = 16 * 1024;
|
|
1377
1175
|
leveldb::WriteBatch batch;
|
|
1378
1176
|
|
|
1177
|
+
leveldb::WriteOptions options;
|
|
1178
|
+
options.sync = false;
|
|
1179
|
+
|
|
1379
1180
|
while (true) {
|
|
1380
1181
|
size_t bytesRead = 0;
|
|
1381
1182
|
|
|
1382
|
-
while (bytesRead <= hwm && iterator_
|
|
1383
|
-
|
|
1183
|
+
while (bytesRead <= hwm && iterator_.Valid() && iterator_.Increment()) {
|
|
1184
|
+
const auto key = iterator_.CurrentKey();
|
|
1384
1185
|
batch.Delete(key);
|
|
1385
1186
|
bytesRead += key.size();
|
|
1386
|
-
iterator_
|
|
1187
|
+
iterator_.Next();
|
|
1387
1188
|
}
|
|
1388
1189
|
|
|
1389
|
-
if (!SetStatus(iterator_
|
|
1190
|
+
if (!SetStatus(iterator_.Status()) || bytesRead == 0) {
|
|
1390
1191
|
break;
|
|
1391
1192
|
}
|
|
1392
1193
|
|
|
1393
|
-
if (!SetStatus(database_->WriteBatch(
|
|
1194
|
+
if (!SetStatus(database_->WriteBatch(options, &batch))) {
|
|
1394
1195
|
break;
|
|
1395
1196
|
}
|
|
1396
1197
|
|
|
1397
1198
|
batch.Clear();
|
|
1398
1199
|
}
|
|
1399
1200
|
|
|
1400
|
-
iterator_
|
|
1201
|
+
iterator_.Close();
|
|
1401
1202
|
}
|
|
1402
1203
|
|
|
1403
1204
|
private:
|
|
1404
|
-
BaseIterator
|
|
1405
|
-
leveldb::WriteOptions* writeOptions_;
|
|
1205
|
+
BaseIterator iterator_;
|
|
1406
1206
|
};
|
|
1407
1207
|
|
|
1408
|
-
/**
|
|
1409
|
-
* Delete a range from a database.
|
|
1410
|
-
*/
|
|
1411
1208
|
NAPI_METHOD(db_clear) {
|
|
1412
1209
|
NAPI_ARGV(3);
|
|
1413
1210
|
NAPI_DB_CONTEXT();
|
|
@@ -1415,301 +1212,85 @@ NAPI_METHOD(db_clear) {
|
|
|
1415
1212
|
napi_value options = argv[1];
|
|
1416
1213
|
napi_value callback = argv[2];
|
|
1417
1214
|
|
|
1418
|
-
const
|
|
1419
|
-
const
|
|
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());
|
|
1215
|
+
const auto reverse = BooleanProperty(env, options, "reverse", false);
|
|
1216
|
+
const auto limit = Int32Property(env, options, "limit", -1);
|
|
1608
1217
|
|
|
1609
|
-
|
|
1610
|
-
|
|
1218
|
+
const auto lt = RangeOption(env, options, "lt");
|
|
1219
|
+
const auto lte = RangeOption(env, options, "lte");
|
|
1220
|
+
const auto gt = RangeOption(env, options, "gt");
|
|
1221
|
+
const auto gte = RangeOption(env, options, "gte");
|
|
1611
1222
|
|
|
1612
|
-
|
|
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);
|
|
1223
|
+
auto worker = new ClearWorker(env, database, callback, reverse, limit, lt, lte, gt, gte);
|
|
1624
1224
|
worker->Queue(env);
|
|
1625
1225
|
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
NAPI_RETURN_UNDEFINED();
|
|
1226
|
+
return 0;
|
|
1629
1227
|
}
|
|
1630
1228
|
|
|
1631
|
-
/**
|
|
1632
|
-
* Runs when an Iterator is garbage collected.
|
|
1633
|
-
*/
|
|
1634
1229
|
static void FinalizeIterator (napi_env env, void* data, void* hint) {
|
|
1635
1230
|
if (data) {
|
|
1636
|
-
delete (
|
|
1231
|
+
delete reinterpret_cast<Iterator*>(data);
|
|
1637
1232
|
}
|
|
1638
1233
|
}
|
|
1639
1234
|
|
|
1640
|
-
/**
|
|
1641
|
-
* Create an iterator.
|
|
1642
|
-
*/
|
|
1643
1235
|
NAPI_METHOD(iterator_init) {
|
|
1644
1236
|
NAPI_ARGV(2);
|
|
1645
1237
|
NAPI_DB_CONTEXT();
|
|
1646
1238
|
|
|
1647
|
-
|
|
1648
|
-
const
|
|
1649
|
-
const
|
|
1650
|
-
const
|
|
1651
|
-
const
|
|
1652
|
-
const bool keyAsBuffer =
|
|
1653
|
-
const bool valueAsBuffer =
|
|
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);
|
|
1239
|
+
const auto options = argv[1];
|
|
1240
|
+
const auto reverse = BooleanProperty(env, options, "reverse", false);
|
|
1241
|
+
const auto keys = BooleanProperty(env, options, "keys", true);
|
|
1242
|
+
const auto values = BooleanProperty(env, options, "values", true);
|
|
1243
|
+
const auto fillCache = BooleanProperty(env, options, "fillCache", false);
|
|
1244
|
+
const bool keyAsBuffer = EncodingIsBuffer(env, options, "keyEncoding");
|
|
1245
|
+
const bool valueAsBuffer = EncodingIsBuffer(env, options, "valueEncoding");
|
|
1246
|
+
const auto limit = Int32Property(env, options, "limit", -1);
|
|
1247
|
+
const auto highWaterMarkBytes = Uint32Property(env, options, "highWaterMarkBytes", 16 * 1024);
|
|
1248
|
+
|
|
1249
|
+
const auto lt = RangeOption(env, options, "lt");
|
|
1250
|
+
const auto lte = RangeOption(env, options, "lte");
|
|
1251
|
+
const auto gt = RangeOption(env, options, "gt");
|
|
1252
|
+
const auto gte = RangeOption(env, options, "gte");
|
|
1253
|
+
|
|
1254
|
+
auto iterator = new Iterator(database, reverse, keys,
|
|
1255
|
+
values, limit, lt, lte, gt, gte, fillCache,
|
|
1256
|
+
keyAsBuffer, valueAsBuffer, highWaterMarkBytes);
|
|
1667
1257
|
napi_value result;
|
|
1668
1258
|
|
|
1669
1259
|
NAPI_STATUS_THROWS(napi_create_external(env, iterator,
|
|
1670
1260
|
FinalizeIterator,
|
|
1671
|
-
|
|
1261
|
+
nullptr, &result));
|
|
1672
1262
|
|
|
1673
|
-
// Prevent GC of JS object before the iterator is
|
|
1674
|
-
// db close) and keep track of non-
|
|
1263
|
+
// Prevent GC of JS object before the iterator is closed (explicitly or on
|
|
1264
|
+
// db close) and keep track of non-closed iterators to end them on db close.
|
|
1675
1265
|
iterator->Attach(env, result);
|
|
1676
1266
|
|
|
1677
1267
|
return result;
|
|
1678
1268
|
}
|
|
1679
1269
|
|
|
1680
|
-
/**
|
|
1681
|
-
* Seeks an iterator.
|
|
1682
|
-
*/
|
|
1683
1270
|
NAPI_METHOD(iterator_seek) {
|
|
1684
1271
|
NAPI_ARGV(2);
|
|
1685
1272
|
NAPI_ITERATOR_CONTEXT();
|
|
1686
1273
|
|
|
1687
|
-
if (iterator->
|
|
1688
|
-
napi_throw_error(env,
|
|
1274
|
+
if (iterator->isClosing_) {
|
|
1275
|
+
napi_throw_error(env, nullptr, "iterator has closed");
|
|
1689
1276
|
}
|
|
1690
1277
|
|
|
1691
|
-
|
|
1692
|
-
iterator->
|
|
1278
|
+
const auto target = ToString(env, argv[1]).value_or(std::string());
|
|
1279
|
+
iterator->first_ = true;
|
|
1693
1280
|
iterator->Seek(target);
|
|
1694
1281
|
|
|
1695
|
-
|
|
1696
|
-
NAPI_RETURN_UNDEFINED();
|
|
1282
|
+
return 0;
|
|
1697
1283
|
}
|
|
1698
1284
|
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
EndWorker (napi_env env,
|
|
1704
|
-
Iterator* iterator,
|
|
1705
|
-
napi_value callback)
|
|
1285
|
+
struct CloseIteratorWorker final : public BaseWorker {
|
|
1286
|
+
CloseIteratorWorker (napi_env env,
|
|
1287
|
+
Iterator* iterator,
|
|
1288
|
+
napi_value callback)
|
|
1706
1289
|
: BaseWorker(env, iterator->database_, callback, "leveldown.iterator.end"),
|
|
1707
1290
|
iterator_(iterator) {}
|
|
1708
1291
|
|
|
1709
|
-
~EndWorker () {}
|
|
1710
|
-
|
|
1711
1292
|
void DoExecute () override {
|
|
1712
|
-
iterator_->
|
|
1293
|
+
iterator_->Close();
|
|
1713
1294
|
}
|
|
1714
1295
|
|
|
1715
1296
|
void DoFinally (napi_env env) override {
|
|
@@ -1722,46 +1303,39 @@ private:
|
|
|
1722
1303
|
};
|
|
1723
1304
|
|
|
1724
1305
|
/**
|
|
1725
|
-
* Called by NAPI_METHOD(
|
|
1306
|
+
* Called by NAPI_METHOD(iterator_) and also when closing
|
|
1726
1307
|
* open iterators during NAPI_METHOD(db_close).
|
|
1727
1308
|
*/
|
|
1728
|
-
static void
|
|
1729
|
-
if (!iterator->
|
|
1730
|
-
|
|
1731
|
-
iterator->
|
|
1309
|
+
static void iterator_do_close (napi_env env, Iterator* iterator, napi_value cb) {
|
|
1310
|
+
if (!iterator->isClosing_) {
|
|
1311
|
+
auto worker = new CloseIteratorWorker(env, iterator, cb);
|
|
1312
|
+
iterator->isClosing_ = true;
|
|
1732
1313
|
|
|
1733
1314
|
if (iterator->nexting_) {
|
|
1734
|
-
iterator->
|
|
1315
|
+
iterator->closeWorker_ = worker;
|
|
1735
1316
|
} else {
|
|
1736
1317
|
worker->Queue(env);
|
|
1737
1318
|
}
|
|
1738
1319
|
}
|
|
1739
1320
|
}
|
|
1740
1321
|
|
|
1741
|
-
|
|
1742
|
-
* Ends an iterator.
|
|
1743
|
-
*/
|
|
1744
|
-
NAPI_METHOD(iterator_end) {
|
|
1322
|
+
NAPI_METHOD(iterator_close) {
|
|
1745
1323
|
NAPI_ARGV(2);
|
|
1746
1324
|
NAPI_ITERATOR_CONTEXT();
|
|
1747
1325
|
|
|
1748
|
-
|
|
1326
|
+
iterator_do_close(env, iterator, argv[1]);
|
|
1749
1327
|
|
|
1750
|
-
|
|
1328
|
+
return 0;
|
|
1751
1329
|
}
|
|
1752
1330
|
|
|
1753
|
-
/**
|
|
1754
|
-
* Worker class for nexting an iterator.
|
|
1755
|
-
*/
|
|
1756
1331
|
struct NextWorker final : public BaseWorker {
|
|
1757
1332
|
NextWorker (napi_env env,
|
|
1758
1333
|
Iterator* iterator,
|
|
1334
|
+
uint32_t size,
|
|
1759
1335
|
napi_value callback)
|
|
1760
1336
|
: BaseWorker(env, iterator->database_, callback,
|
|
1761
1337
|
"leveldown.iterator.next"),
|
|
1762
|
-
iterator_(iterator), ok_() {}
|
|
1763
|
-
|
|
1764
|
-
~NextWorker () {}
|
|
1338
|
+
iterator_(iterator), size_(size), ok_() {}
|
|
1765
1339
|
|
|
1766
1340
|
void DoExecute () override {
|
|
1767
1341
|
if (!iterator_->DidSeek()) {
|
|
@@ -1770,7 +1344,7 @@ struct NextWorker final : public BaseWorker {
|
|
|
1770
1344
|
|
|
1771
1345
|
// Limit the size of the cache to prevent starving the event loop
|
|
1772
1346
|
// in JS-land while we're recursively calling process.nextTick().
|
|
1773
|
-
ok_ = iterator_->ReadMany(
|
|
1347
|
+
ok_ = iterator_->ReadMany(size_);
|
|
1774
1348
|
|
|
1775
1349
|
if (!ok_) {
|
|
1776
1350
|
SetStatus(iterator_->Status());
|
|
@@ -1778,28 +1352,26 @@ struct NextWorker final : public BaseWorker {
|
|
|
1778
1352
|
}
|
|
1779
1353
|
|
|
1780
1354
|
void HandleOKCallback (napi_env env, napi_value callback) override {
|
|
1781
|
-
|
|
1782
|
-
napi_value
|
|
1783
|
-
napi_create_array_with_length(env,
|
|
1355
|
+
const auto size = iterator_->cache_.size();
|
|
1356
|
+
napi_value result;
|
|
1357
|
+
napi_create_array_with_length(env, size, &result);
|
|
1784
1358
|
|
|
1785
1359
|
for (size_t idx = 0; idx < iterator_->cache_.size(); idx += 2) {
|
|
1786
|
-
|
|
1787
|
-
|
|
1360
|
+
napi_value key;
|
|
1361
|
+
napi_value val;
|
|
1788
1362
|
|
|
1789
|
-
|
|
1790
|
-
|
|
1363
|
+
Convert(env, iterator_->cache_[idx + 0], iterator_->keyAsBuffer_, key);
|
|
1364
|
+
Convert(env, iterator_->cache_[idx + 1], iterator_->valueAsBuffer_, val);
|
|
1791
1365
|
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
// put the key & value in a descending order, so that they can be .pop:ed in javascript-land
|
|
1796
|
-
napi_set_element(env, jsArray, static_cast<int>(arraySize - idx - 1), returnKey);
|
|
1797
|
-
napi_set_element(env, jsArray, static_cast<int>(arraySize - idx - 2), returnValue);
|
|
1366
|
+
napi_set_element(env, result, static_cast<int>(idx + 0), key);
|
|
1367
|
+
napi_set_element(env, result, static_cast<int>(idx + 1), val);
|
|
1798
1368
|
}
|
|
1799
1369
|
|
|
1370
|
+
iterator_->cache_.clear();
|
|
1371
|
+
|
|
1800
1372
|
napi_value argv[3];
|
|
1801
1373
|
napi_get_null(env, &argv[0]);
|
|
1802
|
-
argv[1] =
|
|
1374
|
+
argv[1] = result;
|
|
1803
1375
|
napi_get_boolean(env, !ok_, &argv[2]);
|
|
1804
1376
|
CallFunction(env, callback, 3, argv);
|
|
1805
1377
|
}
|
|
@@ -1808,9 +1380,9 @@ struct NextWorker final : public BaseWorker {
|
|
|
1808
1380
|
// clean up & handle the next/end state
|
|
1809
1381
|
iterator_->nexting_ = false;
|
|
1810
1382
|
|
|
1811
|
-
if (iterator_->
|
|
1812
|
-
iterator_->
|
|
1813
|
-
iterator_->
|
|
1383
|
+
if (iterator_->closeWorker_) {
|
|
1384
|
+
iterator_->closeWorker_->Queue(env);
|
|
1385
|
+
iterator_->closeWorker_ = nullptr;
|
|
1814
1386
|
}
|
|
1815
1387
|
|
|
1816
1388
|
BaseWorker::DoFinally(env);
|
|
@@ -1818,30 +1390,31 @@ struct NextWorker final : public BaseWorker {
|
|
|
1818
1390
|
|
|
1819
1391
|
private:
|
|
1820
1392
|
Iterator* iterator_;
|
|
1393
|
+
uint32_t size_;
|
|
1821
1394
|
bool ok_;
|
|
1822
1395
|
};
|
|
1823
1396
|
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
*/
|
|
1827
|
-
NAPI_METHOD(iterator_next) {
|
|
1828
|
-
NAPI_ARGV(2);
|
|
1397
|
+
NAPI_METHOD(iterator_nextv) {
|
|
1398
|
+
NAPI_ARGV(3);
|
|
1829
1399
|
NAPI_ITERATOR_CONTEXT();
|
|
1830
1400
|
|
|
1831
|
-
|
|
1401
|
+
uint32_t size;
|
|
1402
|
+
NAPI_STATUS_THROWS(napi_get_value_uint32(env, argv[1], &size));
|
|
1403
|
+
if (size == 0) size = 1;
|
|
1832
1404
|
|
|
1833
|
-
|
|
1834
|
-
napi_value argv = CreateError(env, "iterator has ended");
|
|
1835
|
-
CallFunction(env, callback, 1, &argv);
|
|
1405
|
+
const auto callback = argv[2];
|
|
1836
1406
|
|
|
1837
|
-
|
|
1407
|
+
if (iterator->isClosing_) {
|
|
1408
|
+
napi_value argv = CreateCodeError(env, "LEVEL_ITERATOR_NOT_OPEN", "Iterator is not open");
|
|
1409
|
+
NAPI_STATUS_THROWS(CallFunction(env, callback, 1, &argv));
|
|
1410
|
+
return 0;
|
|
1838
1411
|
}
|
|
1839
1412
|
|
|
1840
|
-
|
|
1413
|
+
auto worker = new NextWorker(env, iterator, size, callback);
|
|
1841
1414
|
iterator->nexting_ = true;
|
|
1842
1415
|
worker->Queue(env);
|
|
1843
1416
|
|
|
1844
|
-
|
|
1417
|
+
return 0;
|
|
1845
1418
|
}
|
|
1846
1419
|
|
|
1847
1420
|
/**
|
|
@@ -1854,7 +1427,7 @@ struct BatchWorker final : public PriorityWorker {
|
|
|
1854
1427
|
leveldb::WriteBatch* batch,
|
|
1855
1428
|
const bool sync,
|
|
1856
1429
|
const bool hasData)
|
|
1857
|
-
: PriorityWorker(env, database, callback, "
|
|
1430
|
+
: PriorityWorker(env, database, callback, "classic_level.batch.do"),
|
|
1858
1431
|
batch_(batch), hasData_(hasData) {
|
|
1859
1432
|
options_.sync = sync;
|
|
1860
1433
|
}
|
|
@@ -1875,16 +1448,13 @@ private:
|
|
|
1875
1448
|
const bool hasData_;
|
|
1876
1449
|
};
|
|
1877
1450
|
|
|
1878
|
-
/**
|
|
1879
|
-
* Does a batch write operation on a database.
|
|
1880
|
-
*/
|
|
1881
1451
|
NAPI_METHOD(batch_do) {
|
|
1882
1452
|
NAPI_ARGV(4);
|
|
1883
1453
|
NAPI_DB_CONTEXT();
|
|
1884
1454
|
|
|
1885
|
-
|
|
1886
|
-
const
|
|
1887
|
-
|
|
1455
|
+
const auto array = argv[1];
|
|
1456
|
+
const auto sync = BooleanProperty(env, argv[2], "sync", false);
|
|
1457
|
+
const auto callback = argv[3];
|
|
1888
1458
|
|
|
1889
1459
|
uint32_t length;
|
|
1890
1460
|
napi_get_array_length(env, array, &length);
|
|
@@ -1902,194 +1472,126 @@ NAPI_METHOD(batch_do) {
|
|
|
1902
1472
|
|
|
1903
1473
|
if (type == "del") {
|
|
1904
1474
|
if (!HasProperty(env, element, "key")) continue;
|
|
1905
|
-
|
|
1475
|
+
const auto key = ToString(env, GetProperty(env, element, "key")).value_or(std::string());
|
|
1906
1476
|
|
|
1907
1477
|
batch->Delete(key);
|
|
1908
1478
|
if (!hasData) hasData = true;
|
|
1909
|
-
|
|
1910
|
-
DisposeSliceBuffer(key);
|
|
1911
1479
|
} else if (type == "put") {
|
|
1912
1480
|
if (!HasProperty(env, element, "key")) continue;
|
|
1913
1481
|
if (!HasProperty(env, element, "value")) continue;
|
|
1914
1482
|
|
|
1915
|
-
|
|
1916
|
-
|
|
1483
|
+
const auto key = ToString(env, GetProperty(env, element, "key")).value_or(std::string());
|
|
1484
|
+
const auto value = ToString(env, GetProperty(env, element, "value")).value_or(std::string());
|
|
1917
1485
|
|
|
1918
1486
|
batch->Put(key, value);
|
|
1919
1487
|
if (!hasData) hasData = true;
|
|
1920
|
-
|
|
1921
|
-
DisposeSliceBuffer(key);
|
|
1922
|
-
DisposeSliceBuffer(value);
|
|
1923
1488
|
}
|
|
1924
1489
|
}
|
|
1925
1490
|
|
|
1926
|
-
|
|
1491
|
+
auto worker = new BatchWorker(env, database, callback, batch, sync, hasData);
|
|
1927
1492
|
worker->Queue(env);
|
|
1928
1493
|
|
|
1929
|
-
|
|
1494
|
+
return 0;
|
|
1930
1495
|
}
|
|
1931
1496
|
|
|
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
1497
|
static void FinalizeBatch (napi_env env, void* data, void* hint) {
|
|
1975
1498
|
if (data) {
|
|
1976
|
-
delete (
|
|
1499
|
+
delete reinterpret_cast<leveldb::WriteBatch*>(data);
|
|
1977
1500
|
}
|
|
1978
1501
|
}
|
|
1979
1502
|
|
|
1980
|
-
/**
|
|
1981
|
-
* Return a batch object.
|
|
1982
|
-
*/
|
|
1983
1503
|
NAPI_METHOD(batch_init) {
|
|
1984
1504
|
NAPI_ARGV(1);
|
|
1985
1505
|
NAPI_DB_CONTEXT();
|
|
1986
1506
|
|
|
1987
|
-
|
|
1507
|
+
auto batch = new leveldb::WriteBatch();
|
|
1988
1508
|
|
|
1989
1509
|
napi_value result;
|
|
1990
1510
|
NAPI_STATUS_THROWS(napi_create_external(env, batch,
|
|
1991
1511
|
FinalizeBatch,
|
|
1992
|
-
|
|
1512
|
+
nullptr, &result));
|
|
1993
1513
|
return result;
|
|
1994
1514
|
}
|
|
1995
1515
|
|
|
1996
|
-
/**
|
|
1997
|
-
* Adds a put instruction to a batch object.
|
|
1998
|
-
*/
|
|
1999
1516
|
NAPI_METHOD(batch_put) {
|
|
2000
1517
|
NAPI_ARGV(3);
|
|
2001
1518
|
NAPI_BATCH_CONTEXT();
|
|
2002
1519
|
|
|
2003
|
-
|
|
2004
|
-
|
|
1520
|
+
const auto key = ToString(env, argv[1]).value_or(std::string());
|
|
1521
|
+
const auto value = ToString(env, argv[2]).value_or(std::string());
|
|
1522
|
+
|
|
2005
1523
|
batch->Put(key, value);
|
|
2006
|
-
DisposeSliceBuffer(key);
|
|
2007
|
-
DisposeSliceBuffer(value);
|
|
2008
1524
|
|
|
2009
|
-
|
|
1525
|
+
return 0;
|
|
2010
1526
|
}
|
|
2011
1527
|
|
|
2012
|
-
/**
|
|
2013
|
-
* Adds a delete instruction to a batch object.
|
|
2014
|
-
*/
|
|
2015
1528
|
NAPI_METHOD(batch_del) {
|
|
2016
1529
|
NAPI_ARGV(2);
|
|
2017
1530
|
NAPI_BATCH_CONTEXT();
|
|
2018
1531
|
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
1532
|
+
const auto key = ToString(env, argv[1]).value_or(std::string());
|
|
1533
|
+
|
|
1534
|
+
batch->Delete(key);
|
|
2022
1535
|
|
|
2023
|
-
|
|
1536
|
+
return 0;
|
|
2024
1537
|
}
|
|
2025
1538
|
|
|
2026
|
-
/**
|
|
2027
|
-
* Clears a batch object.
|
|
2028
|
-
*/
|
|
2029
1539
|
NAPI_METHOD(batch_clear) {
|
|
2030
1540
|
NAPI_ARGV(1);
|
|
2031
1541
|
NAPI_BATCH_CONTEXT();
|
|
2032
1542
|
|
|
2033
1543
|
batch->Clear();
|
|
2034
1544
|
|
|
2035
|
-
|
|
1545
|
+
return 0;
|
|
2036
1546
|
}
|
|
2037
1547
|
|
|
2038
|
-
/**
|
|
2039
|
-
* Worker class for batch write operation.
|
|
2040
|
-
*/
|
|
2041
1548
|
struct BatchWriteWorker final : public PriorityWorker {
|
|
2042
1549
|
BatchWriteWorker (napi_env env,
|
|
2043
|
-
|
|
2044
|
-
|
|
1550
|
+
Database* database,
|
|
1551
|
+
napi_value batch,
|
|
2045
1552
|
napi_value callback,
|
|
2046
1553
|
const bool sync)
|
|
2047
|
-
: PriorityWorker(env,
|
|
2048
|
-
batch_(batch),
|
|
1554
|
+
: PriorityWorker(env, database, callback, "leveldown.batch.write"),
|
|
2049
1555
|
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
1556
|
|
|
2054
|
-
|
|
1557
|
+
NAPI_STATUS_THROWS_VOID(napi_get_value_external(env, batch, reinterpret_cast<void**>(&batch_)));
|
|
1558
|
+
|
|
1559
|
+
// Prevent GC of batch object before we execute
|
|
1560
|
+
NAPI_STATUS_THROWS_VOID(napi_create_reference(env, batch, 1, &batchRef_));
|
|
1561
|
+
}
|
|
2055
1562
|
|
|
2056
1563
|
void DoExecute () override {
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
1564
|
+
leveldb::WriteOptions options;
|
|
1565
|
+
options.sync = sync_;
|
|
1566
|
+
SetStatus(database_->WriteBatch(options, batch_));
|
|
2060
1567
|
}
|
|
2061
1568
|
|
|
2062
1569
|
void DoFinally (napi_env env) override {
|
|
2063
|
-
napi_delete_reference(env,
|
|
1570
|
+
napi_delete_reference(env, batchRef_);
|
|
2064
1571
|
PriorityWorker::DoFinally(env);
|
|
2065
1572
|
}
|
|
2066
1573
|
|
|
2067
1574
|
private:
|
|
2068
|
-
|
|
1575
|
+
leveldb::WriteBatch* batch_;
|
|
2069
1576
|
const bool sync_;
|
|
2070
|
-
napi_ref
|
|
1577
|
+
napi_ref batchRef_;
|
|
2071
1578
|
};
|
|
2072
1579
|
|
|
2073
|
-
/**
|
|
2074
|
-
* Writes a batch object.
|
|
2075
|
-
*/
|
|
2076
1580
|
NAPI_METHOD(batch_write) {
|
|
2077
|
-
NAPI_ARGV(
|
|
2078
|
-
|
|
1581
|
+
NAPI_ARGV(4);
|
|
1582
|
+
NAPI_DB_CONTEXT();
|
|
2079
1583
|
|
|
2080
|
-
|
|
2081
|
-
const
|
|
2082
|
-
|
|
1584
|
+
const auto batch = argv[1];
|
|
1585
|
+
const auto options = argv[2];
|
|
1586
|
+
const auto sync = BooleanProperty(env, options, "sync", false);
|
|
1587
|
+
const auto callback = argv[3];
|
|
2083
1588
|
|
|
2084
|
-
|
|
1589
|
+
auto worker = new BatchWriteWorker(env, database, batch, callback, sync);
|
|
2085
1590
|
worker->Queue(env);
|
|
2086
1591
|
|
|
2087
|
-
|
|
1592
|
+
return 0;
|
|
2088
1593
|
}
|
|
2089
1594
|
|
|
2090
|
-
/**
|
|
2091
|
-
* All exported functions.
|
|
2092
|
-
*/
|
|
2093
1595
|
NAPI_INIT() {
|
|
2094
1596
|
NAPI_EXPORT_FUNCTION(db_init);
|
|
2095
1597
|
NAPI_EXPORT_FUNCTION(db_open);
|
|
@@ -2099,17 +1601,11 @@ NAPI_INIT() {
|
|
|
2099
1601
|
NAPI_EXPORT_FUNCTION(db_get_many);
|
|
2100
1602
|
NAPI_EXPORT_FUNCTION(db_del);
|
|
2101
1603
|
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
1604
|
|
|
2109
1605
|
NAPI_EXPORT_FUNCTION(iterator_init);
|
|
2110
1606
|
NAPI_EXPORT_FUNCTION(iterator_seek);
|
|
2111
|
-
NAPI_EXPORT_FUNCTION(
|
|
2112
|
-
NAPI_EXPORT_FUNCTION(
|
|
1607
|
+
NAPI_EXPORT_FUNCTION(iterator_close);
|
|
1608
|
+
NAPI_EXPORT_FUNCTION(iterator_nextv);
|
|
2113
1609
|
|
|
2114
1610
|
NAPI_EXPORT_FUNCTION(batch_do);
|
|
2115
1611
|
NAPI_EXPORT_FUNCTION(batch_init);
|