@nxtedition/rocksdb 5.2.21 → 5.2.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.cc +216 -252
- package/binding.gyp +78 -72
- package/deps/rocksdb/build_version.cc +70 -4
- package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
- package/deps/rocksdb/rocksdb/Makefile +459 -469
- package/deps/rocksdb/rocksdb/README.md +4 -4
- package/deps/rocksdb/rocksdb/TARGETS +5244 -1500
- package/deps/rocksdb/rocksdb/cache/cache.cc +12 -3
- package/deps/rocksdb/rocksdb/cache/cache_bench.cc +7 -368
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +924 -0
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +128 -0
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +103 -0
- package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +183 -0
- package/deps/rocksdb/rocksdb/cache/cache_helpers.h +11 -0
- package/deps/rocksdb/rocksdb/cache/cache_key.cc +344 -0
- package/deps/rocksdb/rocksdb/cache/cache_key.h +132 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +183 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +288 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +468 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +85 -8
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +121 -51
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +171 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +86 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +607 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +381 -154
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +176 -33
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1659 -3
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +94 -23
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +49 -28
- package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
- package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
- package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
- package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
- package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
- package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
- package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
- package/deps/rocksdb/rocksdb/db/builder.h +16 -37
- package/deps/rocksdb/rocksdb/db/c.cc +413 -208
- package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
- package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
- package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
- package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
- package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
- package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
- package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
- package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
- package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
- package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
- package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
- package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
- package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
- package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
- package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
- package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
- package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
- package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
- package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
- package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
- package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
- package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
- package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
- package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
- package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
- package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
- package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
- package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
- package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
- package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
- package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
- package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
- package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
- package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
- package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
- package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
- package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
- package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
- package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
- package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
- package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
- package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
- package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
- package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
- package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
- package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
- package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
- package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
- package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
- package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
- package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
- package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
- package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
- package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
- package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
- package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
- package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
- package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
- package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
- package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
- package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
- package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
- package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
- package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
- package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
- package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
- package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
- package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
- package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
- package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
- package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
- package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
- package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
- package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
- package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
- package/deps/rocksdb/rocksdb/env/env.cc +632 -42
- package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
- package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
- package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
- package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
- package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
- package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
- package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
- package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
- package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
- package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
- package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
- package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
- package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
- package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
- package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
- package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
- package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
- package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
- package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
- package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
- package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
- package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
- package/deps/rocksdb/rocksdb/file/filename.h +13 -8
- package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
- package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
- package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
- package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
- package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
- package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
- package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
- package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
- package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
- package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
- package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
- package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
- package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
- package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
- package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
- package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
- package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
- package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
- package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
- package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
- package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
- package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
- package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
- package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
- package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
- package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
- package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
- package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
- package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
- package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
- package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
- package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
- package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
- package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
- package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
- package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
- package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
- package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
- package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
- package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
- package/deps/rocksdb/rocksdb/options/options.cc +49 -17
- package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
- package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
- package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
- package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
- package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
- package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
- package/deps/rocksdb/rocksdb/port/lang.h +52 -0
- package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
- package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
- package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
- package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
- package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
- package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
- package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
- package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
- package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
- package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
- package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
- package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
- package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
- package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
- package/deps/rocksdb/rocksdb/python.mk +9 -0
- package/deps/rocksdb/rocksdb/src.mk +82 -34
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
- package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
- package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
- package/deps/rocksdb/rocksdb/table/format.cc +258 -104
- package/deps/rocksdb/rocksdb/table/format.h +120 -109
- package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
- package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
- package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
- package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
- package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
- package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
- package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
- package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
- package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
- package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
- package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
- package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
- package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
- package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
- package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
- package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
- package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
- package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
- package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
- package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
- package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
- package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
- package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
- package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
- package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
- package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
- package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
- package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
- package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
- package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
- package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
- package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
- package/deps/rocksdb/rocksdb/util/channel.h +2 -0
- package/deps/rocksdb/rocksdb/util/coding.h +1 -33
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
- package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
- package/deps/rocksdb/rocksdb/util/compression.h +212 -7
- package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
- package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
- package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
- package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
- package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
- package/deps/rocksdb/rocksdb/util/defer.h +30 -1
- package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
- package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
- package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
- package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
- package/deps/rocksdb/rocksdb/util/hash.h +31 -1
- package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
- package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
- package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
- package/deps/rocksdb/rocksdb/util/heap.h +6 -1
- package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
- package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
- package/deps/rocksdb/rocksdb/util/math.h +74 -7
- package/deps/rocksdb/rocksdb/util/math128.h +13 -1
- package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
- package/deps/rocksdb/rocksdb/util/random.cc +9 -0
- package/deps/rocksdb/rocksdb/util/random.h +6 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
- package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
- package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
- package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
- package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
- package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
- package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
- package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
- package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
- package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
- package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
- package/deps/rocksdb/rocksdb/util/status.cc +32 -29
- package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
- package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
- package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
- package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
- package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
- package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
- package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
- package/deps/rocksdb/rocksdb/util/timer.h +55 -46
- package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
- package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
- package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
- package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
- package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
- package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
- package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
- package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
- package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
- package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
- package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
- package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
- package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
- package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
- package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
- package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
- package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
- package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
- package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
- package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
- package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
- package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
- package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
- package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
- package/deps/rocksdb/rocksdb.gyp +425 -446
- package/package.json +8 -8
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/darwin-x86/node.napi.node +0 -0
- package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
- package/deps/rocksdb/rocksdb/hdfs/README +0 -23
- package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
- package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
- package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
- package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
- package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
- package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
- package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
- package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
- package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
- package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
- package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
- package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
- package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
- package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
- package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
- package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
- package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
- package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
- package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
- package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
- package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
- package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
- package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
- package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
- package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
- package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
|
@@ -12,65 +12,22 @@
|
|
|
12
12
|
#include <cctype>
|
|
13
13
|
#include <iostream>
|
|
14
14
|
|
|
15
|
+
#include "env/composite_env_wrapper.h"
|
|
15
16
|
#include "env/env_encryption_ctr.h"
|
|
16
17
|
#include "monitoring/perf_context_imp.h"
|
|
17
18
|
#include "rocksdb/convenience.h"
|
|
19
|
+
#include "rocksdb/io_status.h"
|
|
20
|
+
#include "rocksdb/system_clock.h"
|
|
21
|
+
#include "rocksdb/utilities/customizable_util.h"
|
|
22
|
+
#include "rocksdb/utilities/options_type.h"
|
|
18
23
|
#include "util/aligned_buffer.h"
|
|
19
24
|
#include "util/coding.h"
|
|
20
25
|
#include "util/random.h"
|
|
21
26
|
#include "util/string_util.h"
|
|
22
27
|
|
|
23
28
|
#endif
|
|
24
|
-
|
|
25
29
|
namespace ROCKSDB_NAMESPACE {
|
|
26
|
-
|
|
27
30
|
#ifndef ROCKSDB_LITE
|
|
28
|
-
static constexpr char kROT13CipherName[] = "ROT13";
|
|
29
|
-
static constexpr char kCTRProviderName[] = "CTR";
|
|
30
|
-
|
|
31
|
-
Status BlockCipher::CreateFromString(const ConfigOptions& /*config_options*/,
|
|
32
|
-
const std::string& value,
|
|
33
|
-
std::shared_ptr<BlockCipher>* result) {
|
|
34
|
-
std::string id = value;
|
|
35
|
-
size_t colon = value.find(':');
|
|
36
|
-
if (colon != std::string::npos) {
|
|
37
|
-
id = value.substr(0, colon);
|
|
38
|
-
}
|
|
39
|
-
if (id == kROT13CipherName) {
|
|
40
|
-
if (colon != std::string::npos) {
|
|
41
|
-
size_t block_size = ParseSizeT(value.substr(colon + 1));
|
|
42
|
-
result->reset(new ROT13BlockCipher(block_size));
|
|
43
|
-
} else {
|
|
44
|
-
result->reset(new ROT13BlockCipher(32));
|
|
45
|
-
}
|
|
46
|
-
return Status::OK();
|
|
47
|
-
} else {
|
|
48
|
-
return Status::NotSupported("Could not find cipher ", value);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
Status EncryptionProvider::CreateFromString(
|
|
53
|
-
const ConfigOptions& /*config_options*/, const std::string& value,
|
|
54
|
-
std::shared_ptr<EncryptionProvider>* result) {
|
|
55
|
-
std::string id = value;
|
|
56
|
-
bool is_test = StartsWith(value, "test://");
|
|
57
|
-
Status status = Status::OK();
|
|
58
|
-
if (is_test) {
|
|
59
|
-
id = value.substr(strlen("test://"));
|
|
60
|
-
}
|
|
61
|
-
if (id == kCTRProviderName) {
|
|
62
|
-
result->reset(new CTREncryptionProvider());
|
|
63
|
-
} else if (is_test) {
|
|
64
|
-
result->reset(new CTREncryptionProvider());
|
|
65
|
-
} else {
|
|
66
|
-
return Status::NotSupported("Could not find provider ", value);
|
|
67
|
-
}
|
|
68
|
-
if (status.ok() && is_test) {
|
|
69
|
-
status = result->get()->TEST_Initialize();
|
|
70
|
-
}
|
|
71
|
-
return status;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
31
|
std::shared_ptr<EncryptionProvider> EncryptionProvider::NewCTRProvider(
|
|
75
32
|
const std::shared_ptr<BlockCipher>& cipher) {
|
|
76
33
|
return std::make_shared<CTREncryptionProvider>(cipher);
|
|
@@ -84,19 +41,24 @@ std::shared_ptr<EncryptionProvider> EncryptionProvider::NewCTRProvider(
|
|
|
84
41
|
// If an error was encountered, returns a non-OK status.
|
|
85
42
|
//
|
|
86
43
|
// REQUIRES: External synchronization
|
|
87
|
-
|
|
44
|
+
IOStatus EncryptedSequentialFile::Read(size_t n, const IOOptions& options,
|
|
45
|
+
Slice* result, char* scratch,
|
|
46
|
+
IODebugContext* dbg) {
|
|
88
47
|
assert(scratch);
|
|
89
|
-
|
|
90
|
-
if (!
|
|
91
|
-
return
|
|
48
|
+
IOStatus io_s = file_->Read(n, options, result, scratch, dbg);
|
|
49
|
+
if (!io_s.ok()) {
|
|
50
|
+
return io_s;
|
|
92
51
|
}
|
|
93
52
|
{
|
|
94
53
|
PERF_TIMER_GUARD(decrypt_data_nanos);
|
|
95
|
-
|
|
54
|
+
io_s = status_to_io_status(
|
|
55
|
+
stream_->Decrypt(offset_, (char*)result->data(), result->size()));
|
|
96
56
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
57
|
+
if (io_s.ok()) {
|
|
58
|
+
offset_ += result->size(); // We've already ready data from disk, so update
|
|
59
|
+
// offset_ even if decryption fails.
|
|
60
|
+
}
|
|
61
|
+
return io_s;
|
|
100
62
|
}
|
|
101
63
|
|
|
102
64
|
// Skip "n" bytes from the file. This is guaranteed to be no
|
|
@@ -106,7 +68,7 @@ Status EncryptedSequentialFile::Read(size_t n, Slice* result, char* scratch) {
|
|
|
106
68
|
// file, and Skip will return OK.
|
|
107
69
|
//
|
|
108
70
|
// REQUIRES: External synchronization
|
|
109
|
-
|
|
71
|
+
IOStatus EncryptedSequentialFile::Skip(uint64_t n) {
|
|
110
72
|
auto status = file_->Skip(n);
|
|
111
73
|
if (!status.ok()) {
|
|
112
74
|
return status;
|
|
@@ -130,26 +92,30 @@ size_t EncryptedSequentialFile::GetRequiredBufferAlignment() const {
|
|
|
130
92
|
// Remove any kind of caching of data from the offset to offset+length
|
|
131
93
|
// of this file. If the length is 0, then it refers to the end of file.
|
|
132
94
|
// If the system is not caching the file contents, then this is a noop.
|
|
133
|
-
|
|
95
|
+
IOStatus EncryptedSequentialFile::InvalidateCache(size_t offset,
|
|
96
|
+
size_t length) {
|
|
134
97
|
return file_->InvalidateCache(offset + prefixLength_, length);
|
|
135
98
|
}
|
|
136
99
|
|
|
137
100
|
// Positioned Read for direct I/O
|
|
138
101
|
// If Direct I/O enabled, offset, n, and scratch should be properly aligned
|
|
139
|
-
|
|
140
|
-
|
|
102
|
+
IOStatus EncryptedSequentialFile::PositionedRead(uint64_t offset, size_t n,
|
|
103
|
+
const IOOptions& options,
|
|
104
|
+
Slice* result, char* scratch,
|
|
105
|
+
IODebugContext* dbg) {
|
|
141
106
|
assert(scratch);
|
|
142
107
|
offset += prefixLength_; // Skip prefix
|
|
143
|
-
auto
|
|
144
|
-
if (!
|
|
145
|
-
return
|
|
108
|
+
auto io_s = file_->PositionedRead(offset, n, options, result, scratch, dbg);
|
|
109
|
+
if (!io_s.ok()) {
|
|
110
|
+
return io_s;
|
|
146
111
|
}
|
|
147
112
|
offset_ = offset + result->size();
|
|
148
113
|
{
|
|
149
114
|
PERF_TIMER_GUARD(decrypt_data_nanos);
|
|
150
|
-
|
|
115
|
+
io_s = status_to_io_status(
|
|
116
|
+
stream_->Decrypt(offset, (char*)result->data(), result->size()));
|
|
151
117
|
}
|
|
152
|
-
return
|
|
118
|
+
return io_s;
|
|
153
119
|
}
|
|
154
120
|
|
|
155
121
|
// Read up to "n" bytes from the file starting at "offset".
|
|
@@ -162,25 +128,30 @@ Status EncryptedSequentialFile::PositionedRead(uint64_t offset, size_t n,
|
|
|
162
128
|
//
|
|
163
129
|
// Safe for concurrent use by multiple threads.
|
|
164
130
|
// If Direct I/O enabled, offset, n, and scratch should be aligned properly.
|
|
165
|
-
|
|
166
|
-
|
|
131
|
+
IOStatus EncryptedRandomAccessFile::Read(uint64_t offset, size_t n,
|
|
132
|
+
const IOOptions& options,
|
|
133
|
+
Slice* result, char* scratch,
|
|
134
|
+
IODebugContext* dbg) const {
|
|
167
135
|
assert(scratch);
|
|
168
136
|
offset += prefixLength_;
|
|
169
|
-
auto
|
|
170
|
-
if (!
|
|
171
|
-
return
|
|
137
|
+
auto io_s = file_->Read(offset, n, options, result, scratch, dbg);
|
|
138
|
+
if (!io_s.ok()) {
|
|
139
|
+
return io_s;
|
|
172
140
|
}
|
|
173
141
|
{
|
|
174
142
|
PERF_TIMER_GUARD(decrypt_data_nanos);
|
|
175
|
-
|
|
143
|
+
io_s = status_to_io_status(
|
|
144
|
+
stream_->Decrypt(offset, (char*)result->data(), result->size()));
|
|
176
145
|
}
|
|
177
|
-
return
|
|
146
|
+
return io_s;
|
|
178
147
|
}
|
|
179
148
|
|
|
180
149
|
// Readahead the file starting from offset by n bytes for caching.
|
|
181
|
-
|
|
150
|
+
IOStatus EncryptedRandomAccessFile::Prefetch(uint64_t offset, size_t n,
|
|
151
|
+
const IOOptions& options,
|
|
152
|
+
IODebugContext* dbg) {
|
|
182
153
|
// return Status::OK();
|
|
183
|
-
return file_->Prefetch(offset + prefixLength_, n);
|
|
154
|
+
return file_->Prefetch(offset + prefixLength_, n, options, dbg);
|
|
184
155
|
}
|
|
185
156
|
|
|
186
157
|
// Tries to get an unique ID for this file that will be the same each time
|
|
@@ -221,20 +192,21 @@ size_t EncryptedRandomAccessFile::GetRequiredBufferAlignment() const {
|
|
|
221
192
|
// Remove any kind of caching of data from the offset to offset+length
|
|
222
193
|
// of this file. If the length is 0, then it refers to the end of file.
|
|
223
194
|
// If the system is not caching the file contents, then this is a noop.
|
|
224
|
-
|
|
225
|
-
|
|
195
|
+
IOStatus EncryptedRandomAccessFile::InvalidateCache(size_t offset,
|
|
196
|
+
size_t length) {
|
|
226
197
|
return file_->InvalidateCache(offset + prefixLength_, length);
|
|
227
198
|
}
|
|
228
199
|
|
|
229
200
|
// A file abstraction for sequential writing. The implementation
|
|
230
201
|
// must provide buffering since callers may append small fragments
|
|
231
202
|
// at a time to the file.
|
|
232
|
-
|
|
203
|
+
IOStatus EncryptedWritableFile::Append(const Slice& data,
|
|
204
|
+
const IOOptions& options,
|
|
205
|
+
IODebugContext* dbg) {
|
|
233
206
|
AlignedBuffer buf;
|
|
234
|
-
Status status;
|
|
235
207
|
Slice dataToAppend(data);
|
|
236
208
|
if (data.size() > 0) {
|
|
237
|
-
auto offset = file_->GetFileSize(); // size including prefix
|
|
209
|
+
auto offset = file_->GetFileSize(options, dbg); // size including prefix
|
|
238
210
|
// Encrypt in cloned buffer
|
|
239
211
|
buf.Alignment(GetRequiredBufferAlignment());
|
|
240
212
|
buf.AllocateNewBuffer(data.size());
|
|
@@ -242,26 +214,25 @@ Status EncryptedWritableFile::Append(const Slice& data) {
|
|
|
242
214
|
// so that the next two lines can be replaced with buf.Append().
|
|
243
215
|
memmove(buf.BufferStart(), data.data(), data.size());
|
|
244
216
|
buf.Size(data.size());
|
|
217
|
+
IOStatus io_s;
|
|
245
218
|
{
|
|
246
219
|
PERF_TIMER_GUARD(encrypt_data_nanos);
|
|
247
|
-
|
|
220
|
+
io_s = status_to_io_status(
|
|
221
|
+
stream_->Encrypt(offset, buf.BufferStart(), buf.CurrentSize()));
|
|
248
222
|
}
|
|
249
|
-
if (!
|
|
250
|
-
return
|
|
223
|
+
if (!io_s.ok()) {
|
|
224
|
+
return io_s;
|
|
251
225
|
}
|
|
252
226
|
dataToAppend = Slice(buf.BufferStart(), buf.CurrentSize());
|
|
253
227
|
}
|
|
254
|
-
|
|
255
|
-
if (!status.ok()) {
|
|
256
|
-
return status;
|
|
257
|
-
}
|
|
258
|
-
return status;
|
|
228
|
+
return file_->Append(dataToAppend, options, dbg);
|
|
259
229
|
}
|
|
260
230
|
|
|
261
|
-
|
|
262
|
-
|
|
231
|
+
IOStatus EncryptedWritableFile::PositionedAppend(const Slice& data,
|
|
232
|
+
uint64_t offset,
|
|
233
|
+
const IOOptions& options,
|
|
234
|
+
IODebugContext* dbg) {
|
|
263
235
|
AlignedBuffer buf;
|
|
264
|
-
Status status;
|
|
265
236
|
Slice dataToAppend(data);
|
|
266
237
|
offset += prefixLength_;
|
|
267
238
|
if (data.size() > 0) {
|
|
@@ -270,28 +241,32 @@ Status EncryptedWritableFile::PositionedAppend(const Slice& data,
|
|
|
270
241
|
buf.AllocateNewBuffer(data.size());
|
|
271
242
|
memmove(buf.BufferStart(), data.data(), data.size());
|
|
272
243
|
buf.Size(data.size());
|
|
244
|
+
IOStatus io_s;
|
|
273
245
|
{
|
|
274
246
|
PERF_TIMER_GUARD(encrypt_data_nanos);
|
|
275
|
-
|
|
247
|
+
io_s = status_to_io_status(
|
|
248
|
+
stream_->Encrypt(offset, buf.BufferStart(), buf.CurrentSize()));
|
|
276
249
|
}
|
|
277
|
-
if (!
|
|
278
|
-
return
|
|
250
|
+
if (!io_s.ok()) {
|
|
251
|
+
return io_s;
|
|
279
252
|
}
|
|
280
253
|
dataToAppend = Slice(buf.BufferStart(), buf.CurrentSize());
|
|
281
254
|
}
|
|
282
|
-
|
|
283
|
-
if (!status.ok()) {
|
|
284
|
-
return status;
|
|
285
|
-
}
|
|
286
|
-
return status;
|
|
255
|
+
return file_->PositionedAppend(dataToAppend, offset, options, dbg);
|
|
287
256
|
}
|
|
288
257
|
|
|
289
|
-
|
|
290
|
-
|
|
258
|
+
// Indicates the upper layers if the current WritableFile implementation
|
|
259
|
+
// uses direct IO.
|
|
291
260
|
bool EncryptedWritableFile::use_direct_io() const {
|
|
292
261
|
return file_->use_direct_io();
|
|
293
262
|
}
|
|
294
263
|
|
|
264
|
+
// true if Sync() and Fsync() are safe to call concurrently with Append()
|
|
265
|
+
// and Flush().
|
|
266
|
+
bool EncryptedWritableFile::IsSyncThreadSafe() const {
|
|
267
|
+
return file_->IsSyncThreadSafe();
|
|
268
|
+
}
|
|
269
|
+
|
|
295
270
|
// Use the returned alignment value to allocate
|
|
296
271
|
// aligned buffer for Direct I/O
|
|
297
272
|
size_t EncryptedWritableFile::GetRequiredBufferAlignment() const {
|
|
@@ -301,48 +276,83 @@ size_t EncryptedWritableFile::GetRequiredBufferAlignment() const {
|
|
|
301
276
|
/*
|
|
302
277
|
* Get the size of valid data in the file.
|
|
303
278
|
*/
|
|
304
|
-
uint64_t EncryptedWritableFile::GetFileSize(
|
|
305
|
-
|
|
279
|
+
uint64_t EncryptedWritableFile::GetFileSize(const IOOptions& options,
|
|
280
|
+
IODebugContext* dbg) {
|
|
281
|
+
return file_->GetFileSize(options, dbg) - prefixLength_;
|
|
306
282
|
}
|
|
307
283
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
284
|
+
// Truncate is necessary to trim the file to the correct size
|
|
285
|
+
// before closing. It is not always possible to keep track of the file
|
|
286
|
+
// size due to whole pages writes. The behavior is undefined if called
|
|
287
|
+
// with other writes to follow.
|
|
288
|
+
IOStatus EncryptedWritableFile::Truncate(uint64_t size,
|
|
289
|
+
const IOOptions& options,
|
|
290
|
+
IODebugContext* dbg) {
|
|
291
|
+
return file_->Truncate(size + prefixLength_, options, dbg);
|
|
314
292
|
}
|
|
315
293
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
294
|
+
// Remove any kind of caching of data from the offset to offset+length
|
|
295
|
+
// of this file. If the length is 0, then it refers to the end of file.
|
|
296
|
+
// If the system is not caching the file contents, then this is a noop.
|
|
297
|
+
// This call has no effect on dirty pages in the cache.
|
|
298
|
+
IOStatus EncryptedWritableFile::InvalidateCache(size_t offset, size_t length) {
|
|
321
299
|
return file_->InvalidateCache(offset + prefixLength_, length);
|
|
322
300
|
}
|
|
323
301
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
302
|
+
// Sync a file range with disk.
|
|
303
|
+
// offset is the starting byte of the file range to be synchronized.
|
|
304
|
+
// nbytes specifies the length of the range to be synchronized.
|
|
305
|
+
// This asks the OS to initiate flushing the cached data to disk,
|
|
306
|
+
// without waiting for completion.
|
|
307
|
+
// Default implementation does nothing.
|
|
308
|
+
IOStatus EncryptedWritableFile::RangeSync(uint64_t offset, uint64_t nbytes,
|
|
309
|
+
const IOOptions& options,
|
|
310
|
+
IODebugContext* dbg) {
|
|
311
|
+
return file_->RangeSync(offset + prefixLength_, nbytes, options, dbg);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// PrepareWrite performs any necessary preparation for a write
|
|
315
|
+
// before the write actually occurs. This allows for pre-allocation
|
|
316
|
+
// of space on devices where it can result in less file
|
|
317
|
+
// fragmentation and/or less waste from over-zealous filesystem
|
|
318
|
+
// pre-allocation.
|
|
319
|
+
void EncryptedWritableFile::PrepareWrite(size_t offset, size_t len,
|
|
320
|
+
const IOOptions& options,
|
|
321
|
+
IODebugContext* dbg) {
|
|
322
|
+
file_->PrepareWrite(offset + prefixLength_, len, options, dbg);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
void EncryptedWritableFile::SetPreallocationBlockSize(size_t size) {
|
|
326
|
+
// the size here doesn't need to include prefixLength_, as it's a
|
|
327
|
+
// configuration will be use for `PrepareWrite()`.
|
|
328
|
+
file_->SetPreallocationBlockSize(size);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
void EncryptedWritableFile::GetPreallocationStatus(
|
|
332
|
+
size_t* block_size, size_t* last_allocated_block) {
|
|
333
|
+
file_->GetPreallocationStatus(block_size, last_allocated_block);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// Pre-allocates space for a file.
|
|
337
|
+
IOStatus EncryptedWritableFile::Allocate(uint64_t offset, uint64_t len,
|
|
338
|
+
const IOOptions& options,
|
|
339
|
+
IODebugContext* dbg) {
|
|
340
|
+
return file_->Allocate(offset + prefixLength_, len, options, dbg);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
IOStatus EncryptedWritableFile::Flush(const IOOptions& options,
|
|
344
|
+
IODebugContext* dbg) {
|
|
345
|
+
return file_->Flush(options, dbg);
|
|
332
346
|
}
|
|
333
347
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
// fragmentation and/or less waste from over-zealous filesystem
|
|
338
|
-
// pre-allocation.
|
|
339
|
-
void EncryptedWritableFile::PrepareWrite(size_t offset, size_t len) {
|
|
340
|
-
file_->PrepareWrite(offset + prefixLength_, len);
|
|
348
|
+
IOStatus EncryptedWritableFile::Sync(const IOOptions& options,
|
|
349
|
+
IODebugContext* dbg) {
|
|
350
|
+
return file_->Sync(options, dbg);
|
|
341
351
|
}
|
|
342
352
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
return file_->
|
|
353
|
+
IOStatus EncryptedWritableFile::Close(const IOOptions& options,
|
|
354
|
+
IODebugContext* dbg) {
|
|
355
|
+
return file_->Close(options, dbg);
|
|
346
356
|
}
|
|
347
357
|
|
|
348
358
|
// A file abstraction for random reading and writing.
|
|
@@ -361,9 +371,10 @@ size_t EncryptedRandomRWFile::GetRequiredBufferAlignment() const {
|
|
|
361
371
|
|
|
362
372
|
// Write bytes in `data` at offset `offset`, Returns Status::OK() on success.
|
|
363
373
|
// Pass aligned buffer when use_direct_io() returns true.
|
|
364
|
-
|
|
374
|
+
IOStatus EncryptedRandomRWFile::Write(uint64_t offset, const Slice& data,
|
|
375
|
+
const IOOptions& options,
|
|
376
|
+
IODebugContext* dbg) {
|
|
365
377
|
AlignedBuffer buf;
|
|
366
|
-
Status status;
|
|
367
378
|
Slice dataToWrite(data);
|
|
368
379
|
offset += prefixLength_;
|
|
369
380
|
if (data.size() > 0) {
|
|
@@ -372,71 +383,98 @@ Status EncryptedRandomRWFile::Write(uint64_t offset, const Slice& data) {
|
|
|
372
383
|
buf.AllocateNewBuffer(data.size());
|
|
373
384
|
memmove(buf.BufferStart(), data.data(), data.size());
|
|
374
385
|
buf.Size(data.size());
|
|
386
|
+
IOStatus io_s;
|
|
375
387
|
{
|
|
376
388
|
PERF_TIMER_GUARD(encrypt_data_nanos);
|
|
377
|
-
|
|
389
|
+
io_s = status_to_io_status(
|
|
390
|
+
stream_->Encrypt(offset, buf.BufferStart(), buf.CurrentSize()));
|
|
378
391
|
}
|
|
379
|
-
if (!
|
|
380
|
-
return
|
|
392
|
+
if (!io_s.ok()) {
|
|
393
|
+
return io_s;
|
|
381
394
|
}
|
|
382
395
|
dataToWrite = Slice(buf.BufferStart(), buf.CurrentSize());
|
|
383
396
|
}
|
|
384
|
-
|
|
385
|
-
return status;
|
|
397
|
+
return file_->Write(offset, dataToWrite, options, dbg);
|
|
386
398
|
}
|
|
387
399
|
|
|
388
400
|
// Read up to `n` bytes starting from offset `offset` and store them in
|
|
389
401
|
// result, provided `scratch` size should be at least `n`.
|
|
390
402
|
// Returns Status::OK() on success.
|
|
391
|
-
|
|
392
|
-
|
|
403
|
+
IOStatus EncryptedRandomRWFile::Read(uint64_t offset, size_t n,
|
|
404
|
+
const IOOptions& options, Slice* result,
|
|
405
|
+
char* scratch, IODebugContext* dbg) const {
|
|
393
406
|
assert(scratch);
|
|
394
407
|
offset += prefixLength_;
|
|
395
|
-
auto status = file_->Read(offset, n, result, scratch);
|
|
408
|
+
auto status = file_->Read(offset, n, options, result, scratch, dbg);
|
|
396
409
|
if (!status.ok()) {
|
|
397
410
|
return status;
|
|
398
411
|
}
|
|
399
412
|
{
|
|
400
413
|
PERF_TIMER_GUARD(decrypt_data_nanos);
|
|
401
|
-
status =
|
|
414
|
+
status = status_to_io_status(
|
|
415
|
+
stream_->Decrypt(offset, (char*)result->data(), result->size()));
|
|
402
416
|
}
|
|
403
417
|
return status;
|
|
404
418
|
}
|
|
405
419
|
|
|
406
|
-
|
|
420
|
+
IOStatus EncryptedRandomRWFile::Flush(const IOOptions& options,
|
|
421
|
+
IODebugContext* dbg) {
|
|
422
|
+
return file_->Flush(options, dbg);
|
|
423
|
+
}
|
|
407
424
|
|
|
408
|
-
|
|
425
|
+
IOStatus EncryptedRandomRWFile::Sync(const IOOptions& options,
|
|
426
|
+
IODebugContext* dbg) {
|
|
427
|
+
return file_->Sync(options, dbg);
|
|
428
|
+
}
|
|
409
429
|
|
|
410
|
-
|
|
430
|
+
IOStatus EncryptedRandomRWFile::Fsync(const IOOptions& options,
|
|
431
|
+
IODebugContext* dbg) {
|
|
432
|
+
return file_->Fsync(options, dbg);
|
|
433
|
+
}
|
|
411
434
|
|
|
412
|
-
|
|
435
|
+
IOStatus EncryptedRandomRWFile::Close(const IOOptions& options,
|
|
436
|
+
IODebugContext* dbg) {
|
|
437
|
+
return file_->Close(options, dbg);
|
|
438
|
+
}
|
|
413
439
|
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
440
|
+
namespace {
|
|
441
|
+
static std::unordered_map<std::string, OptionTypeInfo> encrypted_fs_type_info =
|
|
442
|
+
{
|
|
443
|
+
{"provider",
|
|
444
|
+
OptionTypeInfo::AsCustomSharedPtr<EncryptionProvider>(
|
|
445
|
+
0 /* No offset, whole struct*/, OptionVerificationType::kByName,
|
|
446
|
+
OptionTypeFlags::kNone)},
|
|
447
|
+
};
|
|
448
|
+
// EncryptedFileSystemImpl implements an FileSystemWrapper that adds encryption
|
|
449
|
+
// to files stored on disk.
|
|
450
|
+
class EncryptedFileSystemImpl : public EncryptedFileSystem {
|
|
451
|
+
public:
|
|
452
|
+
const char* Name() const override {
|
|
453
|
+
return EncryptedFileSystem::kClassName();
|
|
454
|
+
}
|
|
417
455
|
// Returns the raw encryption provider that should be used to write the input
|
|
418
456
|
// encrypted file. If there is no such provider, NotFound is returned.
|
|
419
|
-
|
|
420
|
-
|
|
457
|
+
IOStatus GetWritableProvider(const std::string& /*fname*/,
|
|
458
|
+
EncryptionProvider** result) {
|
|
421
459
|
if (provider_) {
|
|
422
460
|
*result = provider_.get();
|
|
423
|
-
return
|
|
461
|
+
return IOStatus::OK();
|
|
424
462
|
} else {
|
|
425
463
|
*result = nullptr;
|
|
426
|
-
return
|
|
464
|
+
return IOStatus::NotFound("No WriteProvider specified");
|
|
427
465
|
}
|
|
428
466
|
}
|
|
429
467
|
|
|
430
468
|
// Returns the raw encryption provider that should be used to read the input
|
|
431
469
|
// encrypted file. If there is no such provider, NotFound is returned.
|
|
432
|
-
|
|
433
|
-
|
|
470
|
+
IOStatus GetReadableProvider(const std::string& /*fname*/,
|
|
471
|
+
EncryptionProvider** result) {
|
|
434
472
|
if (provider_) {
|
|
435
473
|
*result = provider_.get();
|
|
436
|
-
return
|
|
474
|
+
return IOStatus::OK();
|
|
437
475
|
} else {
|
|
438
476
|
*result = nullptr;
|
|
439
|
-
return
|
|
477
|
+
return IOStatus::NotFound("No Provider specified");
|
|
440
478
|
}
|
|
441
479
|
}
|
|
442
480
|
|
|
@@ -452,13 +490,13 @@ class EncryptedEnvImpl : public EnvWrapper {
|
|
|
452
490
|
// should be encrypted
|
|
453
491
|
// @return OK on success, non-OK on failure.
|
|
454
492
|
template <class TypeFile>
|
|
455
|
-
|
|
493
|
+
IOStatus CreateWritableCipherStream(
|
|
456
494
|
const std::string& fname, const std::unique_ptr<TypeFile>& underlying,
|
|
457
|
-
const
|
|
458
|
-
std::unique_ptr<BlockAccessCipherStream>* stream) {
|
|
495
|
+
const FileOptions& options, size_t* prefix_length,
|
|
496
|
+
std::unique_ptr<BlockAccessCipherStream>* stream, IODebugContext* dbg) {
|
|
459
497
|
EncryptionProvider* provider = nullptr;
|
|
460
498
|
*prefix_length = 0;
|
|
461
|
-
|
|
499
|
+
IOStatus status = GetWritableProvider(fname, &provider);
|
|
462
500
|
if (!status.ok()) {
|
|
463
501
|
return status;
|
|
464
502
|
} else if (provider != nullptr) {
|
|
@@ -470,34 +508,36 @@ class EncryptedEnvImpl : public EnvWrapper {
|
|
|
470
508
|
// Initialize prefix
|
|
471
509
|
buffer.Alignment(underlying->GetRequiredBufferAlignment());
|
|
472
510
|
buffer.AllocateNewBuffer(*prefix_length);
|
|
473
|
-
status = provider->CreateNewPrefix(
|
|
474
|
-
|
|
511
|
+
status = status_to_io_status(provider->CreateNewPrefix(
|
|
512
|
+
fname, buffer.BufferStart(), *prefix_length));
|
|
475
513
|
if (status.ok()) {
|
|
476
514
|
buffer.Size(*prefix_length);
|
|
477
515
|
prefix = Slice(buffer.BufferStart(), buffer.CurrentSize());
|
|
478
516
|
// Write prefix
|
|
479
|
-
status = underlying->Append(prefix);
|
|
517
|
+
status = underlying->Append(prefix, options.io_options, dbg);
|
|
480
518
|
}
|
|
481
519
|
if (!status.ok()) {
|
|
482
520
|
return status;
|
|
483
521
|
}
|
|
484
522
|
}
|
|
485
523
|
// Create cipher stream
|
|
486
|
-
status =
|
|
524
|
+
status = status_to_io_status(
|
|
525
|
+
provider->CreateCipherStream(fname, options, prefix, stream));
|
|
487
526
|
}
|
|
488
527
|
return status;
|
|
489
528
|
}
|
|
490
529
|
|
|
491
530
|
template <class TypeFile>
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
531
|
+
IOStatus CreateWritableEncryptedFile(const std::string& fname,
|
|
532
|
+
std::unique_ptr<TypeFile>& underlying,
|
|
533
|
+
const FileOptions& options,
|
|
534
|
+
std::unique_ptr<TypeFile>* result,
|
|
535
|
+
IODebugContext* dbg) {
|
|
496
536
|
// Create cipher stream
|
|
497
537
|
std::unique_ptr<BlockAccessCipherStream> stream;
|
|
498
538
|
size_t prefix_length;
|
|
499
|
-
|
|
500
|
-
|
|
539
|
+
IOStatus status = CreateWritableCipherStream(fname, underlying, options,
|
|
540
|
+
&prefix_length, &stream, dbg);
|
|
501
541
|
if (status.ok()) {
|
|
502
542
|
if (stream) {
|
|
503
543
|
result->reset(new EncryptedWritableFile(
|
|
@@ -521,15 +561,15 @@ class EncryptedEnvImpl : public EnvWrapper {
|
|
|
521
561
|
// should be encrypted
|
|
522
562
|
// @return OK on success, non-OK on failure.
|
|
523
563
|
template <class TypeFile>
|
|
524
|
-
|
|
564
|
+
IOStatus CreateRandomWriteCipherStream(
|
|
525
565
|
const std::string& fname, const std::unique_ptr<TypeFile>& underlying,
|
|
526
|
-
const
|
|
527
|
-
std::unique_ptr<BlockAccessCipherStream>* stream) {
|
|
566
|
+
const FileOptions& options, size_t* prefix_length,
|
|
567
|
+
std::unique_ptr<BlockAccessCipherStream>* stream, IODebugContext* dbg) {
|
|
528
568
|
EncryptionProvider* provider = nullptr;
|
|
529
569
|
*prefix_length = 0;
|
|
530
|
-
|
|
531
|
-
if (!
|
|
532
|
-
return
|
|
570
|
+
IOStatus io_s = GetWritableProvider(fname, &provider);
|
|
571
|
+
if (!io_s.ok()) {
|
|
572
|
+
return io_s;
|
|
533
573
|
} else if (provider != nullptr) {
|
|
534
574
|
// Initialize & write prefix (if needed)
|
|
535
575
|
AlignedBuffer buffer;
|
|
@@ -539,22 +579,23 @@ class EncryptedEnvImpl : public EnvWrapper {
|
|
|
539
579
|
// Initialize prefix
|
|
540
580
|
buffer.Alignment(underlying->GetRequiredBufferAlignment());
|
|
541
581
|
buffer.AllocateNewBuffer(*prefix_length);
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
if (
|
|
582
|
+
io_s = status_to_io_status(provider->CreateNewPrefix(
|
|
583
|
+
fname, buffer.BufferStart(), *prefix_length));
|
|
584
|
+
if (io_s.ok()) {
|
|
545
585
|
buffer.Size(*prefix_length);
|
|
546
586
|
prefix = Slice(buffer.BufferStart(), buffer.CurrentSize());
|
|
547
587
|
// Write prefix
|
|
548
|
-
|
|
588
|
+
io_s = underlying->Write(0, prefix, options.io_options, dbg);
|
|
549
589
|
}
|
|
550
|
-
if (!
|
|
551
|
-
return
|
|
590
|
+
if (!io_s.ok()) {
|
|
591
|
+
return io_s;
|
|
552
592
|
}
|
|
553
593
|
}
|
|
554
594
|
// Create cipher stream
|
|
555
|
-
|
|
595
|
+
io_s = status_to_io_status(
|
|
596
|
+
provider->CreateCipherStream(fname, options, prefix, stream));
|
|
556
597
|
}
|
|
557
|
-
return
|
|
598
|
+
return io_s;
|
|
558
599
|
}
|
|
559
600
|
|
|
560
601
|
// Creates a CipherStream for the underlying file/name using the options
|
|
@@ -569,10 +610,10 @@ class EncryptedEnvImpl : public EnvWrapper {
|
|
|
569
610
|
// is encrypted
|
|
570
611
|
// @return OK on success, non-OK on failure.
|
|
571
612
|
template <class TypeFile>
|
|
572
|
-
|
|
613
|
+
IOStatus CreateSequentialCipherStream(
|
|
573
614
|
const std::string& fname, const std::unique_ptr<TypeFile>& underlying,
|
|
574
|
-
const
|
|
575
|
-
std::unique_ptr<BlockAccessCipherStream>* stream) {
|
|
615
|
+
const FileOptions& options, size_t* prefix_length,
|
|
616
|
+
std::unique_ptr<BlockAccessCipherStream>* stream, IODebugContext* dbg) {
|
|
576
617
|
// Read prefix (if needed)
|
|
577
618
|
AlignedBuffer buffer;
|
|
578
619
|
Slice prefix;
|
|
@@ -581,14 +622,15 @@ class EncryptedEnvImpl : public EnvWrapper {
|
|
|
581
622
|
// Read prefix
|
|
582
623
|
buffer.Alignment(underlying->GetRequiredBufferAlignment());
|
|
583
624
|
buffer.AllocateNewBuffer(*prefix_length);
|
|
584
|
-
|
|
585
|
-
|
|
625
|
+
IOStatus status = underlying->Read(*prefix_length, options.io_options,
|
|
626
|
+
&prefix, buffer.BufferStart(), dbg);
|
|
586
627
|
if (!status.ok()) {
|
|
587
628
|
return status;
|
|
588
629
|
}
|
|
589
630
|
buffer.Size(*prefix_length);
|
|
590
631
|
}
|
|
591
|
-
return
|
|
632
|
+
return status_to_io_status(
|
|
633
|
+
provider_->CreateCipherStream(fname, options, prefix, stream));
|
|
592
634
|
}
|
|
593
635
|
|
|
594
636
|
// Creates a CipherStream for the underlying file/name using the options
|
|
@@ -603,10 +645,10 @@ class EncryptedEnvImpl : public EnvWrapper {
|
|
|
603
645
|
// is encrypted
|
|
604
646
|
// @return OK on success, non-OK on failure.
|
|
605
647
|
template <class TypeFile>
|
|
606
|
-
|
|
648
|
+
IOStatus CreateRandomReadCipherStream(
|
|
607
649
|
const std::string& fname, const std::unique_ptr<TypeFile>& underlying,
|
|
608
|
-
const
|
|
609
|
-
std::unique_ptr<BlockAccessCipherStream>* stream) {
|
|
650
|
+
const FileOptions& options, size_t* prefix_length,
|
|
651
|
+
std::unique_ptr<BlockAccessCipherStream>* stream, IODebugContext* dbg) {
|
|
610
652
|
// Read prefix (if needed)
|
|
611
653
|
AlignedBuffer buffer;
|
|
612
654
|
Slice prefix;
|
|
@@ -615,42 +657,61 @@ class EncryptedEnvImpl : public EnvWrapper {
|
|
|
615
657
|
// Read prefix
|
|
616
658
|
buffer.Alignment(underlying->GetRequiredBufferAlignment());
|
|
617
659
|
buffer.AllocateNewBuffer(*prefix_length);
|
|
618
|
-
|
|
619
|
-
|
|
660
|
+
IOStatus status = underlying->Read(0, *prefix_length, options.io_options,
|
|
661
|
+
&prefix, buffer.BufferStart(), dbg);
|
|
620
662
|
if (!status.ok()) {
|
|
621
663
|
return status;
|
|
622
664
|
}
|
|
623
665
|
buffer.Size(*prefix_length);
|
|
624
666
|
}
|
|
625
|
-
return
|
|
667
|
+
return status_to_io_status(
|
|
668
|
+
provider_->CreateCipherStream(fname, options, prefix, stream));
|
|
626
669
|
}
|
|
627
670
|
|
|
628
671
|
public:
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
:
|
|
672
|
+
EncryptedFileSystemImpl(const std::shared_ptr<FileSystem>& base,
|
|
673
|
+
const std::shared_ptr<EncryptionProvider>& provider)
|
|
674
|
+
: EncryptedFileSystem(base) {
|
|
632
675
|
provider_ = provider;
|
|
676
|
+
RegisterOptions("EncryptionProvider", &provider_, &encrypted_fs_type_info);
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
Status AddCipher(const std::string& descriptor, const char* cipher,
|
|
680
|
+
size_t len, bool for_write) override {
|
|
681
|
+
return provider_->AddCipher(descriptor, cipher, len, for_write);
|
|
633
682
|
}
|
|
634
683
|
|
|
635
684
|
// NewSequentialFile opens a file for sequential reading.
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
685
|
+
IOStatus NewSequentialFile(const std::string& fname,
|
|
686
|
+
const FileOptions& options,
|
|
687
|
+
std::unique_ptr<FSSequentialFile>* result,
|
|
688
|
+
IODebugContext* dbg) override {
|
|
639
689
|
result->reset();
|
|
640
690
|
if (options.use_mmap_reads) {
|
|
641
|
-
return
|
|
691
|
+
return IOStatus::InvalidArgument();
|
|
642
692
|
}
|
|
643
693
|
// Open file using underlying Env implementation
|
|
644
|
-
std::unique_ptr<
|
|
645
|
-
auto status =
|
|
694
|
+
std::unique_ptr<FSSequentialFile> underlying;
|
|
695
|
+
auto status =
|
|
696
|
+
FileSystemWrapper::NewSequentialFile(fname, options, &underlying, dbg);
|
|
697
|
+
if (!status.ok()) {
|
|
698
|
+
return status;
|
|
699
|
+
}
|
|
700
|
+
uint64_t file_size;
|
|
701
|
+
status = FileSystemWrapper::GetFileSize(fname, options.io_options,
|
|
702
|
+
&file_size, dbg);
|
|
646
703
|
if (!status.ok()) {
|
|
647
704
|
return status;
|
|
648
705
|
}
|
|
706
|
+
if (!file_size) {
|
|
707
|
+
*result = std::move(underlying);
|
|
708
|
+
return status;
|
|
709
|
+
}
|
|
649
710
|
// Create cipher stream
|
|
650
711
|
std::unique_ptr<BlockAccessCipherStream> stream;
|
|
651
712
|
size_t prefix_length;
|
|
652
713
|
status = CreateSequentialCipherStream(fname, underlying, options,
|
|
653
|
-
&prefix_length, &stream);
|
|
714
|
+
&prefix_length, &stream, dbg);
|
|
654
715
|
if (status.ok()) {
|
|
655
716
|
result->reset(new EncryptedSequentialFile(
|
|
656
717
|
std::move(underlying), std::move(stream), prefix_length));
|
|
@@ -659,23 +720,25 @@ class EncryptedEnvImpl : public EnvWrapper {
|
|
|
659
720
|
}
|
|
660
721
|
|
|
661
722
|
// NewRandomAccessFile opens a file for random read access.
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
723
|
+
IOStatus NewRandomAccessFile(const std::string& fname,
|
|
724
|
+
const FileOptions& options,
|
|
725
|
+
std::unique_ptr<FSRandomAccessFile>* result,
|
|
726
|
+
IODebugContext* dbg) override {
|
|
665
727
|
result->reset();
|
|
666
728
|
if (options.use_mmap_reads) {
|
|
667
|
-
return
|
|
729
|
+
return IOStatus::InvalidArgument();
|
|
668
730
|
}
|
|
669
731
|
// Open file using underlying Env implementation
|
|
670
|
-
std::unique_ptr<
|
|
671
|
-
auto status =
|
|
732
|
+
std::unique_ptr<FSRandomAccessFile> underlying;
|
|
733
|
+
auto status = FileSystemWrapper::NewRandomAccessFile(fname, options,
|
|
734
|
+
&underlying, dbg);
|
|
672
735
|
if (!status.ok()) {
|
|
673
736
|
return status;
|
|
674
737
|
}
|
|
675
738
|
std::unique_ptr<BlockAccessCipherStream> stream;
|
|
676
739
|
size_t prefix_length;
|
|
677
740
|
status = CreateRandomReadCipherStream(fname, underlying, options,
|
|
678
|
-
&prefix_length, &stream);
|
|
741
|
+
&prefix_length, &stream, dbg);
|
|
679
742
|
if (status.ok()) {
|
|
680
743
|
if (stream) {
|
|
681
744
|
result->reset(new EncryptedRandomAccessFile(
|
|
@@ -688,20 +751,21 @@ class EncryptedEnvImpl : public EnvWrapper {
|
|
|
688
751
|
}
|
|
689
752
|
|
|
690
753
|
// NewWritableFile opens a file for sequential writing.
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
754
|
+
IOStatus NewWritableFile(const std::string& fname, const FileOptions& options,
|
|
755
|
+
std::unique_ptr<FSWritableFile>* result,
|
|
756
|
+
IODebugContext* dbg) override {
|
|
694
757
|
result->reset();
|
|
695
758
|
if (options.use_mmap_writes) {
|
|
696
|
-
return
|
|
759
|
+
return IOStatus::InvalidArgument();
|
|
697
760
|
}
|
|
698
761
|
// Open file using underlying Env implementation
|
|
699
|
-
std::unique_ptr<
|
|
700
|
-
|
|
762
|
+
std::unique_ptr<FSWritableFile> underlying;
|
|
763
|
+
IOStatus status =
|
|
764
|
+
FileSystemWrapper::NewWritableFile(fname, options, &underlying, dbg);
|
|
701
765
|
if (!status.ok()) {
|
|
702
766
|
return status;
|
|
703
767
|
}
|
|
704
|
-
return CreateWritableEncryptedFile(fname, underlying, options, result);
|
|
768
|
+
return CreateWritableEncryptedFile(fname, underlying, options, result, dbg);
|
|
705
769
|
}
|
|
706
770
|
|
|
707
771
|
// Create an object that writes to a new file with the specified
|
|
@@ -711,39 +775,42 @@ class EncryptedEnvImpl : public EnvWrapper {
|
|
|
711
775
|
// returns non-OK.
|
|
712
776
|
//
|
|
713
777
|
// The returned file will only be accessed by one thread at a time.
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
778
|
+
IOStatus ReopenWritableFile(const std::string& fname,
|
|
779
|
+
const FileOptions& options,
|
|
780
|
+
std::unique_ptr<FSWritableFile>* result,
|
|
781
|
+
IODebugContext* dbg) override {
|
|
717
782
|
result->reset();
|
|
718
783
|
if (options.use_mmap_writes) {
|
|
719
|
-
return
|
|
784
|
+
return IOStatus::InvalidArgument();
|
|
720
785
|
}
|
|
721
786
|
// Open file using underlying Env implementation
|
|
722
|
-
std::unique_ptr<
|
|
723
|
-
|
|
787
|
+
std::unique_ptr<FSWritableFile> underlying;
|
|
788
|
+
IOStatus status =
|
|
789
|
+
FileSystemWrapper::ReopenWritableFile(fname, options, &underlying, dbg);
|
|
724
790
|
if (!status.ok()) {
|
|
725
791
|
return status;
|
|
726
792
|
}
|
|
727
|
-
return CreateWritableEncryptedFile(fname, underlying, options, result);
|
|
793
|
+
return CreateWritableEncryptedFile(fname, underlying, options, result, dbg);
|
|
728
794
|
}
|
|
729
795
|
|
|
730
796
|
// Reuse an existing file by renaming it and opening it as writable.
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
797
|
+
IOStatus ReuseWritableFile(const std::string& fname,
|
|
798
|
+
const std::string& old_fname,
|
|
799
|
+
const FileOptions& options,
|
|
800
|
+
std::unique_ptr<FSWritableFile>* result,
|
|
801
|
+
IODebugContext* dbg) override {
|
|
735
802
|
result->reset();
|
|
736
803
|
if (options.use_mmap_writes) {
|
|
737
|
-
return
|
|
804
|
+
return IOStatus::InvalidArgument();
|
|
738
805
|
}
|
|
739
806
|
// Open file using underlying Env implementation
|
|
740
|
-
std::unique_ptr<
|
|
741
|
-
|
|
742
|
-
|
|
807
|
+
std::unique_ptr<FSWritableFile> underlying;
|
|
808
|
+
auto status = FileSystemWrapper::ReuseWritableFile(
|
|
809
|
+
fname, old_fname, options, &underlying, dbg);
|
|
743
810
|
if (!status.ok()) {
|
|
744
811
|
return status;
|
|
745
812
|
}
|
|
746
|
-
return CreateWritableEncryptedFile(fname, underlying, options, result);
|
|
813
|
+
return CreateWritableEncryptedFile(fname, underlying, options, result, dbg);
|
|
747
814
|
}
|
|
748
815
|
|
|
749
816
|
// Open `fname` for random read and write, if file doesn't exist the file
|
|
@@ -751,19 +818,20 @@ class EncryptedEnvImpl : public EnvWrapper {
|
|
|
751
818
|
// *result and returns OK. On failure returns non-OK.
|
|
752
819
|
//
|
|
753
820
|
// The returned file will only be accessed by one thread at a time.
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
821
|
+
IOStatus NewRandomRWFile(const std::string& fname, const FileOptions& options,
|
|
822
|
+
std::unique_ptr<FSRandomRWFile>* result,
|
|
823
|
+
IODebugContext* dbg) override {
|
|
757
824
|
result->reset();
|
|
758
825
|
if (options.use_mmap_reads || options.use_mmap_writes) {
|
|
759
|
-
return
|
|
826
|
+
return IOStatus::InvalidArgument();
|
|
760
827
|
}
|
|
761
828
|
// Check file exists
|
|
762
|
-
bool isNewFile = !FileExists(fname).ok();
|
|
829
|
+
bool isNewFile = !FileExists(fname, options.io_options, dbg).ok();
|
|
763
830
|
|
|
764
831
|
// Open file using underlying Env implementation
|
|
765
|
-
std::unique_ptr<
|
|
766
|
-
|
|
832
|
+
std::unique_ptr<FSRandomRWFile> underlying;
|
|
833
|
+
auto status =
|
|
834
|
+
FileSystemWrapper::NewRandomRWFile(fname, options, &underlying, dbg);
|
|
767
835
|
if (!status.ok()) {
|
|
768
836
|
return status;
|
|
769
837
|
}
|
|
@@ -773,10 +841,10 @@ class EncryptedEnvImpl : public EnvWrapper {
|
|
|
773
841
|
if (!isNewFile) {
|
|
774
842
|
// File already exists, read prefix
|
|
775
843
|
status = CreateRandomReadCipherStream(fname, underlying, options,
|
|
776
|
-
&prefix_length, &stream);
|
|
844
|
+
&prefix_length, &stream, dbg);
|
|
777
845
|
} else {
|
|
778
846
|
status = CreateRandomWriteCipherStream(fname, underlying, options,
|
|
779
|
-
&prefix_length, &stream);
|
|
847
|
+
&prefix_length, &stream, dbg);
|
|
780
848
|
}
|
|
781
849
|
if (status.ok()) {
|
|
782
850
|
if (stream) {
|
|
@@ -803,9 +871,12 @@ class EncryptedEnvImpl : public EnvWrapper {
|
|
|
803
871
|
// have
|
|
804
872
|
// permission to access "dir", or if "dir" is invalid.
|
|
805
873
|
// IOError if an IO Error was encountered
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
874
|
+
IOStatus GetChildrenFileAttributes(const std::string& dir,
|
|
875
|
+
const IOOptions& options,
|
|
876
|
+
std::vector<FileAttributes>* result,
|
|
877
|
+
IODebugContext* dbg) override {
|
|
878
|
+
auto status =
|
|
879
|
+
FileSystemWrapper::GetChildrenFileAttributes(dir, options, result, dbg);
|
|
809
880
|
if (!status.ok()) {
|
|
810
881
|
return status;
|
|
811
882
|
}
|
|
@@ -823,14 +894,15 @@ class EncryptedEnvImpl : public EnvWrapper {
|
|
|
823
894
|
it->size_bytes -= provider->GetPrefixLength();
|
|
824
895
|
}
|
|
825
896
|
}
|
|
826
|
-
return
|
|
897
|
+
return IOStatus::OK();
|
|
827
898
|
}
|
|
828
899
|
|
|
829
900
|
// Store the size of fname in *file_size.
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
auto status =
|
|
833
|
-
|
|
901
|
+
IOStatus GetFileSize(const std::string& fname, const IOOptions& options,
|
|
902
|
+
uint64_t* file_size, IODebugContext* dbg) override {
|
|
903
|
+
auto status =
|
|
904
|
+
FileSystemWrapper::GetFileSize(fname, options, file_size, dbg);
|
|
905
|
+
if (!status.ok() || !(*file_size)) {
|
|
834
906
|
return status;
|
|
835
907
|
}
|
|
836
908
|
EncryptionProvider* provider;
|
|
@@ -846,12 +918,37 @@ class EncryptedEnvImpl : public EnvWrapper {
|
|
|
846
918
|
private:
|
|
847
919
|
std::shared_ptr<EncryptionProvider> provider_;
|
|
848
920
|
};
|
|
921
|
+
} // namespace
|
|
849
922
|
|
|
923
|
+
Status NewEncryptedFileSystemImpl(
|
|
924
|
+
const std::shared_ptr<FileSystem>& base,
|
|
925
|
+
const std::shared_ptr<EncryptionProvider>& provider,
|
|
926
|
+
std::unique_ptr<FileSystem>* result) {
|
|
927
|
+
result->reset(new EncryptedFileSystemImpl(base, provider));
|
|
928
|
+
return Status::OK();
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
std::shared_ptr<FileSystem> NewEncryptedFS(
|
|
932
|
+
const std::shared_ptr<FileSystem>& base,
|
|
933
|
+
const std::shared_ptr<EncryptionProvider>& provider) {
|
|
934
|
+
std::unique_ptr<FileSystem> efs;
|
|
935
|
+
Status s = NewEncryptedFileSystemImpl(base, provider, &efs);
|
|
936
|
+
if (s.ok()) {
|
|
937
|
+
s = efs->PrepareOptions(ConfigOptions());
|
|
938
|
+
}
|
|
939
|
+
if (s.ok()) {
|
|
940
|
+
std::shared_ptr<FileSystem> result(efs.release());
|
|
941
|
+
return result;
|
|
942
|
+
} else {
|
|
943
|
+
return nullptr;
|
|
944
|
+
}
|
|
945
|
+
}
|
|
850
946
|
// Returns an Env that encrypts data when stored on disk and decrypts data when
|
|
851
947
|
// read from disk.
|
|
852
948
|
Env* NewEncryptedEnv(Env* base_env,
|
|
853
949
|
const std::shared_ptr<EncryptionProvider>& provider) {
|
|
854
|
-
return new
|
|
950
|
+
return new CompositeEnvWrapper(
|
|
951
|
+
base_env, NewEncryptedFS(base_env->GetFileSystem(), provider));
|
|
855
952
|
}
|
|
856
953
|
|
|
857
954
|
// Encrypt one or more (partial) blocks of data at the file offset.
|
|
@@ -952,20 +1049,53 @@ Status BlockAccessCipherStream::Decrypt(uint64_t fileOffset, char *data, size_t
|
|
|
952
1049
|
}
|
|
953
1050
|
}
|
|
954
1051
|
|
|
955
|
-
|
|
1052
|
+
namespace {
|
|
1053
|
+
static std::unordered_map<std::string, OptionTypeInfo>
|
|
1054
|
+
rot13_block_cipher_type_info = {
|
|
1055
|
+
{"block_size",
|
|
1056
|
+
{0 /* No offset, whole struct*/, OptionType::kInt,
|
|
1057
|
+
OptionVerificationType::kNormal, OptionTypeFlags::kNone}},
|
|
1058
|
+
};
|
|
1059
|
+
// Implements a BlockCipher using ROT13.
|
|
1060
|
+
//
|
|
1061
|
+
// Note: This is a sample implementation of BlockCipher,
|
|
1062
|
+
// it is NOT considered safe and should NOT be used in production.
|
|
1063
|
+
class ROT13BlockCipher : public BlockCipher {
|
|
1064
|
+
private:
|
|
1065
|
+
size_t blockSize_;
|
|
956
1066
|
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
1067
|
+
public:
|
|
1068
|
+
explicit ROT13BlockCipher(size_t blockSize) : blockSize_(blockSize) {
|
|
1069
|
+
RegisterOptions("ROT13BlockCipherOptions", &blockSize_,
|
|
1070
|
+
&rot13_block_cipher_type_info);
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
static const char* kClassName() { return "ROT13"; }
|
|
1074
|
+
const char* Name() const override { return kClassName(); }
|
|
1075
|
+
// BlockSize returns the size of each block supported by this cipher stream.
|
|
1076
|
+
size_t BlockSize() override { return blockSize_; }
|
|
1077
|
+
|
|
1078
|
+
// Encrypt a block of data.
|
|
1079
|
+
// Length of data is equal to BlockSize().
|
|
1080
|
+
Status Encrypt(char* data) override {
|
|
1081
|
+
for (size_t i = 0; i < blockSize_; ++i) {
|
|
1082
|
+
data[i] += 13;
|
|
1083
|
+
}
|
|
1084
|
+
return Status::OK();
|
|
962
1085
|
}
|
|
963
|
-
return Status::OK();
|
|
964
|
-
}
|
|
965
1086
|
|
|
966
|
-
// Decrypt a block of data.
|
|
967
|
-
// Length of data is equal to BlockSize().
|
|
968
|
-
Status
|
|
1087
|
+
// Decrypt a block of data.
|
|
1088
|
+
// Length of data is equal to BlockSize().
|
|
1089
|
+
Status Decrypt(char* data) override { return Encrypt(data); }
|
|
1090
|
+
};
|
|
1091
|
+
static const std::unordered_map<std::string, OptionTypeInfo>
|
|
1092
|
+
ctr_encryption_provider_type_info = {
|
|
1093
|
+
{"cipher",
|
|
1094
|
+
OptionTypeInfo::AsCustomSharedPtr<BlockCipher>(
|
|
1095
|
+
0 /* No offset, whole struct*/, OptionVerificationType::kByName,
|
|
1096
|
+
OptionTypeFlags::kNone)},
|
|
1097
|
+
};
|
|
1098
|
+
} // anonymous namespace
|
|
969
1099
|
|
|
970
1100
|
// Allocate scratch space which is passed to EncryptBlock/DecryptBlock.
|
|
971
1101
|
void CTRCipherStream::AllocateScratch(std::string& scratch) {
|
|
@@ -1003,7 +1133,11 @@ Status CTRCipherStream::DecryptBlock(uint64_t blockIndex, char* data,
|
|
|
1003
1133
|
return EncryptBlock(blockIndex, data, scratch);
|
|
1004
1134
|
}
|
|
1005
1135
|
|
|
1006
|
-
|
|
1136
|
+
CTREncryptionProvider::CTREncryptionProvider(
|
|
1137
|
+
const std::shared_ptr<BlockCipher>& c)
|
|
1138
|
+
: cipher_(c) {
|
|
1139
|
+
RegisterOptions("Cipher", &cipher_, &ctr_encryption_provider_type_info);
|
|
1140
|
+
}
|
|
1007
1141
|
|
|
1008
1142
|
// GetPrefixLength returns the length of the prefix that is added to every file
|
|
1009
1143
|
// and used for storing encryption options.
|
|
@@ -1013,20 +1147,12 @@ size_t CTREncryptionProvider::GetPrefixLength() const {
|
|
|
1013
1147
|
return defaultPrefixLength;
|
|
1014
1148
|
}
|
|
1015
1149
|
|
|
1016
|
-
Status CTREncryptionProvider::TEST_Initialize() {
|
|
1017
|
-
if (!cipher_) {
|
|
1018
|
-
return BlockCipher::CreateFromString(
|
|
1019
|
-
ConfigOptions(), std::string(kROT13CipherName) + ":32", &cipher_);
|
|
1020
|
-
}
|
|
1021
|
-
return Status::OK();
|
|
1022
|
-
}
|
|
1023
|
-
|
|
1024
1150
|
Status CTREncryptionProvider::AddCipher(const std::string& /*descriptor*/,
|
|
1025
1151
|
const char* cipher, size_t len,
|
|
1026
1152
|
bool /*for_write*/) {
|
|
1027
1153
|
if (cipher_) {
|
|
1028
1154
|
return Status::NotSupported("Cannot add keys to CTREncryptionProvider");
|
|
1029
|
-
} else if (strcmp(
|
|
1155
|
+
} else if (strcmp(ROT13BlockCipher::kClassName(), cipher) == 0) {
|
|
1030
1156
|
cipher_.reset(new ROT13BlockCipher(len));
|
|
1031
1157
|
return Status::OK();
|
|
1032
1158
|
} else {
|
|
@@ -1054,7 +1180,7 @@ Status CTREncryptionProvider::CreateNewPrefix(const std::string& /*fname*/,
|
|
|
1054
1180
|
return Status::InvalidArgument("Encryption Cipher is missing");
|
|
1055
1181
|
}
|
|
1056
1182
|
// Create & seed rnd.
|
|
1057
|
-
Random rnd((uint32_t)
|
|
1183
|
+
Random rnd((uint32_t)SystemClock::Default()->NowMicros());
|
|
1058
1184
|
// Fill entire prefix block with random values.
|
|
1059
1185
|
for (size_t i = 0; i < prefixLength; i++) {
|
|
1060
1186
|
prefix[i] = rnd.Uniform(256) & 0xFF;
|
|
@@ -1143,6 +1269,72 @@ Status CTREncryptionProvider::CreateCipherStreamFromPrefix(
|
|
|
1143
1269
|
return Status::OK();
|
|
1144
1270
|
}
|
|
1145
1271
|
|
|
1272
|
+
namespace {
|
|
1273
|
+
static void RegisterEncryptionBuiltins() {
|
|
1274
|
+
static std::once_flag once;
|
|
1275
|
+
std::call_once(once, [&]() {
|
|
1276
|
+
auto lib = ObjectRegistry::Default()->AddLibrary("encryption");
|
|
1277
|
+
// Match "CTR" or "CTR://test"
|
|
1278
|
+
lib->AddFactory<EncryptionProvider>(
|
|
1279
|
+
ObjectLibrary::PatternEntry(CTREncryptionProvider::kClassName(), true)
|
|
1280
|
+
.AddSuffix("://test"),
|
|
1281
|
+
[](const std::string& uri, std::unique_ptr<EncryptionProvider>* guard,
|
|
1282
|
+
std::string* /*errmsg*/) {
|
|
1283
|
+
if (EndsWith(uri, "://test")) {
|
|
1284
|
+
std::shared_ptr<BlockCipher> cipher =
|
|
1285
|
+
std::make_shared<ROT13BlockCipher>(32);
|
|
1286
|
+
guard->reset(new CTREncryptionProvider(cipher));
|
|
1287
|
+
} else {
|
|
1288
|
+
guard->reset(new CTREncryptionProvider());
|
|
1289
|
+
}
|
|
1290
|
+
return guard->get();
|
|
1291
|
+
});
|
|
1292
|
+
|
|
1293
|
+
lib->AddFactory<EncryptionProvider>(
|
|
1294
|
+
"1://test", [](const std::string& /*uri*/,
|
|
1295
|
+
std::unique_ptr<EncryptionProvider>* guard,
|
|
1296
|
+
std::string* /*errmsg*/) {
|
|
1297
|
+
std::shared_ptr<BlockCipher> cipher =
|
|
1298
|
+
std::make_shared<ROT13BlockCipher>(32);
|
|
1299
|
+
guard->reset(new CTREncryptionProvider(cipher));
|
|
1300
|
+
return guard->get();
|
|
1301
|
+
});
|
|
1302
|
+
|
|
1303
|
+
// Match "ROT13" or "ROT13:[0-9]+"
|
|
1304
|
+
lib->AddFactory<BlockCipher>(
|
|
1305
|
+
ObjectLibrary::PatternEntry(ROT13BlockCipher::kClassName(), true)
|
|
1306
|
+
.AddNumber(":"),
|
|
1307
|
+
[](const std::string& uri, std::unique_ptr<BlockCipher>* guard,
|
|
1308
|
+
std::string* /* errmsg */) {
|
|
1309
|
+
size_t colon = uri.find(':');
|
|
1310
|
+
if (colon != std::string::npos) {
|
|
1311
|
+
size_t block_size = ParseSizeT(uri.substr(colon + 1));
|
|
1312
|
+
guard->reset(new ROT13BlockCipher(block_size));
|
|
1313
|
+
} else {
|
|
1314
|
+
guard->reset(new ROT13BlockCipher(32));
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1317
|
+
return guard->get();
|
|
1318
|
+
});
|
|
1319
|
+
});
|
|
1320
|
+
}
|
|
1321
|
+
} // namespace
|
|
1322
|
+
|
|
1323
|
+
Status BlockCipher::CreateFromString(const ConfigOptions& config_options,
|
|
1324
|
+
const std::string& value,
|
|
1325
|
+
std::shared_ptr<BlockCipher>* result) {
|
|
1326
|
+
RegisterEncryptionBuiltins();
|
|
1327
|
+
return LoadSharedObject<BlockCipher>(config_options, value, nullptr, result);
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1330
|
+
Status EncryptionProvider::CreateFromString(
|
|
1331
|
+
const ConfigOptions& config_options, const std::string& value,
|
|
1332
|
+
std::shared_ptr<EncryptionProvider>* result) {
|
|
1333
|
+
RegisterEncryptionBuiltins();
|
|
1334
|
+
return LoadSharedObject<EncryptionProvider>(config_options, value, nullptr,
|
|
1335
|
+
result);
|
|
1336
|
+
}
|
|
1337
|
+
|
|
1146
1338
|
#endif // ROCKSDB_LITE
|
|
1147
1339
|
|
|
1148
1340
|
} // namespace ROCKSDB_NAMESPACE
|