@nxtedition/rocksdb 13.1.4 → 13.2.0
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 +43 -16
- package/deps/rocksdb/rocksdb/{TARGETS → BUCK} +27 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +3 -1
- package/deps/rocksdb/rocksdb/Makefile +2 -2
- package/deps/rocksdb/rocksdb/cache/cache.cc +3 -1
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +2 -0
- package/deps/rocksdb/rocksdb/db/attribute_group_iterator_impl.h +34 -9
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +7 -6
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +22 -14
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +149 -0
- package/deps/rocksdb/rocksdb/db/builder.cc +13 -24
- package/deps/rocksdb/rocksdb/db/coalescing_iterator.h +35 -10
- package/deps/rocksdb/rocksdb/db/column_family.cc +21 -10
- package/deps/rocksdb/rocksdb/db/column_family.h +15 -8
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +98 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +126 -16
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +51 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +2 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +24 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +52 -22
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +9 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +36 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +6 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +30 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +26 -23
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +43 -33
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +6 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +19 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +6 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +632 -411
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +171 -51
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +7 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +37 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +51 -11
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +10 -3
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +350 -154
- package/deps/rocksdb/rocksdb/db/convenience.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +62 -27
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +68 -1
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +91 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +134 -70
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +71 -23
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +43 -16
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +47 -33
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +27 -19
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +38 -25
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +3 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +7 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +258 -42
- package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +161 -9
- package/deps/rocksdb/rocksdb/db/db_iter.cc +118 -86
- package/deps/rocksdb/rocksdb/db/db_iter.h +44 -17
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +27 -6
- package/deps/rocksdb/rocksdb/db/db_test.cc +48 -16
- package/deps/rocksdb/rocksdb/db/db_test2.cc +60 -15
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +97 -44
- package/deps/rocksdb/rocksdb/db/db_test_util.h +7 -1
- package/deps/rocksdb/rocksdb/db/dbformat.cc +15 -5
- package/deps/rocksdb/rocksdb/db/dbformat.h +137 -55
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +1 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +54 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +663 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +152 -91
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +134 -11
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +55 -9
- package/deps/rocksdb/rocksdb/db/flush_job.cc +52 -29
- package/deps/rocksdb/rocksdb/db/flush_job.h +5 -3
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +18 -12
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +23 -29
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +3 -2
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +9 -6
- package/deps/rocksdb/rocksdb/db/internal_stats.h +54 -0
- package/deps/rocksdb/rocksdb/db/job_context.h +1 -1
- package/deps/rocksdb/rocksdb/db/log_reader.cc +6 -7
- package/deps/rocksdb/rocksdb/db/manifest_ops.cc +47 -0
- package/deps/rocksdb/rocksdb/db/manifest_ops.h +20 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +165 -64
- package/deps/rocksdb/rocksdb/db/memtable.h +422 -243
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +99 -68
- package/deps/rocksdb/rocksdb/db/memtable_list.h +63 -38
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +28 -25
- package/deps/rocksdb/rocksdb/db/multi_cf_iterator_impl.h +118 -60
- package/deps/rocksdb/rocksdb/db/multi_cf_iterator_test.cc +344 -89
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +2 -3
- package/deps/rocksdb/rocksdb/db/repair.cc +15 -14
- package/deps/rocksdb/rocksdb/db/repair_test.cc +0 -13
- package/deps/rocksdb/rocksdb/db/snapshot_checker.h +7 -0
- package/deps/rocksdb/rocksdb/db/table_cache.cc +62 -65
- package/deps/rocksdb/rocksdb/db/table_cache.h +70 -76
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +5 -6
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +8 -7
- package/deps/rocksdb/rocksdb/db/version_builder.cc +17 -19
- package/deps/rocksdb/rocksdb/db/version_builder.h +13 -12
- package/deps/rocksdb/rocksdb/db/version_edit.h +30 -0
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +3 -5
- package/deps/rocksdb/rocksdb/db/version_set.cc +89 -129
- package/deps/rocksdb/rocksdb/db/version_set.h +12 -4
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -2
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +12 -8
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +0 -15
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -2
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +9 -7
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +0 -8
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +28 -2
- package/deps/rocksdb/rocksdb/db/write_batch.cc +32 -10
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +9 -0
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/write_thread.cc +3 -1
- package/deps/rocksdb/rocksdb/db/write_thread.h +6 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +15 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +7 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +18 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +100 -22
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +15 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +34 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +223 -78
- package/deps/rocksdb/rocksdb/env/file_system.cc +6 -1
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +53 -0
- package/deps/rocksdb/rocksdb/env/io_posix.cc +63 -17
- package/deps/rocksdb/rocksdb/env/io_posix.h +30 -1
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +132 -48
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +92 -24
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +727 -109
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +3 -4
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +1 -1
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/attribute_groups.h +20 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +9 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +10 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +34 -37
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator_base.h +21 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +56 -28
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +36 -28
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +11 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +84 -60
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index.h +102 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +89 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +32 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +30 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +23 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +2 -0
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +79 -21
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +41 -18
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +1 -5
- package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.cc +169 -0
- package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.h +400 -0
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +137 -82
- package/deps/rocksdb/rocksdb/options/cf_options.h +18 -6
- package/deps/rocksdb/rocksdb/options/configurable.cc +31 -17
- package/deps/rocksdb/rocksdb/options/configurable_helper.h +7 -6
- package/deps/rocksdb/rocksdb/options/options_helper.cc +10 -8
- package/deps/rocksdb/rocksdb/options/options_parser.cc +74 -54
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +89 -0
- package/deps/rocksdb/rocksdb/options/options_test.cc +112 -26
- package/deps/rocksdb/rocksdb/port/port.h +5 -9
- package/deps/rocksdb/rocksdb/src.mk +8 -0
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +4 -0
- package/deps/rocksdb/rocksdb/table/block_based/block.h +1 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +62 -80
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +13 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +16 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +38 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +12 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +4 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +4 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +204 -1
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +4 -0
- package/deps/rocksdb/rocksdb/table/format.cc +3 -3
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +4 -1
- package/deps/rocksdb/rocksdb/table/mock_table.cc +0 -50
- package/deps/rocksdb/rocksdb/table/mock_table.h +53 -0
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +4 -0
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +1 -1
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +10 -5
- package/deps/rocksdb/rocksdb/table/table_builder.h +3 -1
- package/deps/rocksdb/rocksdb/table/table_properties.cc +181 -0
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +5 -5
- package/deps/rocksdb/rocksdb/table/table_test.cc +71 -64
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +45 -45
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim_test.py +35 -35
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +43 -43
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +41 -4
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +1 -1
- package/deps/rocksdb/rocksdb/unreleased_history/add.sh +13 -0
- package/deps/rocksdb/rocksdb/util/aligned_buffer.h +24 -5
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +7 -0
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +0 -52
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +1 -10
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +92 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +1 -0
- package/deps/rocksdb/rocksdb/util/udt_util.cc +50 -4
- package/deps/rocksdb/rocksdb/util/udt_util.h +24 -11
- package/deps/rocksdb/rocksdb/util/udt_util_test.cc +26 -13
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -16
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +2 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.cc +214 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.h +60 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index_test.cc +124 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_mixin.h +441 -0
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector.cc +34 -3
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector.h +7 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +437 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +34 -11
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +14 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +7 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +17 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +69 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +20 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1290 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +324 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +18 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +8 -1
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +57 -12
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +32 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +33 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +721 -9
- package/deps/rocksdb/rocksdb.gyp +2 -0
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
|
@@ -61,6 +61,9 @@ class UnregisteredTableFactory : public TableFactory {
|
|
|
61
61
|
WritableFileWriter*) const override {
|
|
62
62
|
return nullptr;
|
|
63
63
|
}
|
|
64
|
+
std::unique_ptr<TableFactory> Clone() const override {
|
|
65
|
+
return std::make_unique<UnregisteredTableFactory>();
|
|
66
|
+
}
|
|
64
67
|
};
|
|
65
68
|
|
|
66
69
|
TEST_F(OptionsTest, GetOptionsFromMapTest) {
|
|
@@ -829,6 +832,21 @@ TEST_F(OptionsTest, CompressionOptionsFromString) {
|
|
|
829
832
|
ASSERT_OK(GetColumnFamilyOptionsFromString(ignore, ColumnFamilyOptions(),
|
|
830
833
|
"compression_opts.unknown=bad",
|
|
831
834
|
&base_cf_opt));
|
|
835
|
+
|
|
836
|
+
// Test with some additional values added
|
|
837
|
+
config_options.ignore_unknown_options = false;
|
|
838
|
+
ASSERT_NOK(
|
|
839
|
+
GetColumnFamilyOptionsFromString(config_options, ColumnFamilyOptions(),
|
|
840
|
+
"new_unknown_field=whatever; "
|
|
841
|
+
"bottommost_compression_opts=4:5:6:7",
|
|
842
|
+
&base_cf_opt));
|
|
843
|
+
// Test Ignoring Unknown Options
|
|
844
|
+
config_options.ignore_unknown_options = true;
|
|
845
|
+
ASSERT_OK(
|
|
846
|
+
GetColumnFamilyOptionsFromString(config_options, ColumnFamilyOptions(),
|
|
847
|
+
"new_unknown_field=whatever; "
|
|
848
|
+
"bottommost_compression_opts=4:5:6:7",
|
|
849
|
+
&base_cf_opt));
|
|
832
850
|
}
|
|
833
851
|
|
|
834
852
|
TEST_F(OptionsTest, OldInterfaceTest) {
|
|
@@ -1662,29 +1680,38 @@ TEST_F(OptionsTest, MutableTableOptions) {
|
|
|
1662
1680
|
bbtf.reset(NewBlockBasedTableFactory());
|
|
1663
1681
|
auto bbto = bbtf->GetOptions<BlockBasedTableOptions>();
|
|
1664
1682
|
ASSERT_NE(bbto, nullptr);
|
|
1665
|
-
ASSERT_OK(bbtf->ConfigureOption(config_options, "
|
|
1683
|
+
ASSERT_OK(bbtf->ConfigureOption(config_options, "no_block_cache", "true"));
|
|
1666
1684
|
ASSERT_OK(bbtf->ConfigureOption(config_options, "block_size", "1024"));
|
|
1667
|
-
ASSERT_EQ(bbto->
|
|
1685
|
+
ASSERT_EQ(bbto->no_block_cache, true);
|
|
1668
1686
|
ASSERT_EQ(bbto->block_size, 1024);
|
|
1669
1687
|
ASSERT_OK(bbtf->PrepareOptions(config_options));
|
|
1670
1688
|
config_options.mutable_options_only = true;
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
ASSERT_EQ(bbto->
|
|
1689
|
+
// Options on BlockBasedTableOptions/Factory are no longer directly mutable
|
|
1690
|
+
// but have to be mutated on a live DB with SetOptions replacing the
|
|
1691
|
+
// table_factory with a copy using the new options.
|
|
1692
|
+
ASSERT_NOK(bbtf->ConfigureOption(config_options, "no_block_cache", "false"));
|
|
1693
|
+
ASSERT_NOK(bbtf->ConfigureOption(config_options, "block_size", "2048"));
|
|
1694
|
+
ASSERT_EQ(bbto->no_block_cache, true);
|
|
1695
|
+
ASSERT_EQ(bbto->block_size, 1024);
|
|
1677
1696
|
|
|
1678
1697
|
ColumnFamilyOptions cf_opts;
|
|
1679
1698
|
cf_opts.table_factory = bbtf;
|
|
1699
|
+
// FIXME: find a way to make this fail again
|
|
1700
|
+
/*
|
|
1680
1701
|
ASSERT_NOK(GetColumnFamilyOptionsFromString(
|
|
1681
|
-
config_options, cf_opts, "block_based_table_factory.
|
|
1702
|
+
config_options, cf_opts, "block_based_table_factory.no_block_cache=false",
|
|
1682
1703
|
&cf_opts));
|
|
1704
|
+
*/
|
|
1683
1705
|
ASSERT_OK(GetColumnFamilyOptionsFromString(
|
|
1684
1706
|
config_options, cf_opts, "block_based_table_factory.block_size=8192",
|
|
1685
1707
|
&cf_opts));
|
|
1686
|
-
|
|
1687
|
-
|
|
1708
|
+
const auto new_bbto =
|
|
1709
|
+
cf_opts.table_factory->GetOptions<BlockBasedTableOptions>();
|
|
1710
|
+
ASSERT_NE(new_bbto, nullptr);
|
|
1711
|
+
ASSERT_NE(new_bbto, bbto);
|
|
1712
|
+
ASSERT_EQ(new_bbto->no_block_cache, true);
|
|
1713
|
+
ASSERT_EQ(new_bbto->block_size, 8192);
|
|
1714
|
+
ASSERT_EQ(bbto->block_size, 1024);
|
|
1688
1715
|
}
|
|
1689
1716
|
|
|
1690
1717
|
TEST_F(OptionsTest, MutableCFOptions) {
|
|
@@ -1698,7 +1725,7 @@ TEST_F(OptionsTest, MutableCFOptions) {
|
|
|
1698
1725
|
&cf_opts));
|
|
1699
1726
|
ASSERT_TRUE(cf_opts.paranoid_file_checks);
|
|
1700
1727
|
ASSERT_NE(cf_opts.table_factory.get(), nullptr);
|
|
1701
|
-
|
|
1728
|
+
auto* bbto = cf_opts.table_factory->GetOptions<BlockBasedTableOptions>();
|
|
1702
1729
|
ASSERT_NE(bbto, nullptr);
|
|
1703
1730
|
ASSERT_EQ(bbto->block_size, 8192);
|
|
1704
1731
|
ASSERT_EQ(bbto->block_align, false);
|
|
@@ -1707,10 +1734,11 @@ TEST_F(OptionsTest, MutableCFOptions) {
|
|
|
1707
1734
|
config_options, cf_opts, {{"paranoid_file_checks", "false"}}, &cf_opts));
|
|
1708
1735
|
ASSERT_EQ(cf_opts.paranoid_file_checks, false);
|
|
1709
1736
|
|
|
1737
|
+
// Should replace the factory with the new setting
|
|
1710
1738
|
ASSERT_OK(GetColumnFamilyOptionsFromMap(
|
|
1711
1739
|
config_options, cf_opts,
|
|
1712
1740
|
{{"block_based_table_factory.block_size", "16384"}}, &cf_opts));
|
|
1713
|
-
|
|
1741
|
+
bbto = cf_opts.table_factory->GetOptions<BlockBasedTableOptions>();
|
|
1714
1742
|
ASSERT_EQ(bbto->block_size, 16384);
|
|
1715
1743
|
|
|
1716
1744
|
config_options.mutable_options_only = true;
|
|
@@ -1719,45 +1747,103 @@ TEST_F(OptionsTest, MutableCFOptions) {
|
|
|
1719
1747
|
config_options, cf_opts, {{"force_consistency_checks", "true"}},
|
|
1720
1748
|
&cf_opts));
|
|
1721
1749
|
|
|
1722
|
-
// Attempt to change the table
|
|
1723
|
-
//
|
|
1724
|
-
|
|
1750
|
+
// Attempt to change the table factory kind. This was previously disallowed
|
|
1751
|
+
// and is a dubious operation but is tricky to disallow without breaking
|
|
1752
|
+
// other things (FIXME?)
|
|
1753
|
+
ASSERT_OK(GetColumnFamilyOptionsFromMap(
|
|
1725
1754
|
config_options, cf_opts, {{"table_factory", "PlainTable"}}, &cf_opts));
|
|
1726
|
-
|
|
1755
|
+
ASSERT_STREQ(cf_opts.table_factory->Name(), TableFactory::kPlainTableName());
|
|
1756
|
+
ASSERT_OK(GetColumnFamilyOptionsFromMap(
|
|
1757
|
+
config_options, cf_opts, {{"table_factory", "BlockBasedTable"}},
|
|
1758
|
+
&cf_opts));
|
|
1759
|
+
ASSERT_STREQ(cf_opts.table_factory->Name(),
|
|
1760
|
+
TableFactory::kBlockBasedTableName());
|
|
1761
|
+
ASSERT_OK(GetColumnFamilyOptionsFromMap(
|
|
1727
1762
|
config_options, cf_opts, {{"table_factory.id", "PlainTable"}}, &cf_opts));
|
|
1728
|
-
|
|
1729
|
-
|
|
1763
|
+
ASSERT_STREQ(cf_opts.table_factory->Name(), TableFactory::kPlainTableName());
|
|
1764
|
+
ASSERT_OK(GetColumnFamilyOptionsFromMap(
|
|
1765
|
+
config_options, cf_opts, {{"table_factory.id", "BlockBasedTable"}},
|
|
1766
|
+
&cf_opts));
|
|
1767
|
+
ASSERT_STREQ(cf_opts.table_factory->Name(),
|
|
1768
|
+
TableFactory::kBlockBasedTableName());
|
|
1769
|
+
ASSERT_OK(GetColumnFamilyOptionsFromMap(
|
|
1770
|
+
config_options, cf_opts,
|
|
1771
|
+
{{"table_factory", "{id=PlainTable;bloom_bits_per_key=42}"}}, &cf_opts));
|
|
1772
|
+
ASSERT_STREQ(cf_opts.table_factory->Name(), TableFactory::kPlainTableName());
|
|
1773
|
+
|
|
1774
|
+
// Should at least be allowed to instantiate in place of nullptr, for
|
|
1775
|
+
// initialization purposes.
|
|
1776
|
+
cf_opts.table_factory = nullptr;
|
|
1777
|
+
ASSERT_OK(GetColumnFamilyOptionsFromMap(
|
|
1778
|
+
config_options, cf_opts,
|
|
1779
|
+
{{"table_factory", "{id=BlockBasedTable;block_size=12345}"}}, &cf_opts));
|
|
1780
|
+
ASSERT_STREQ(cf_opts.table_factory->Name(),
|
|
1781
|
+
TableFactory::kBlockBasedTableName());
|
|
1782
|
+
bbto = cf_opts.table_factory->GetOptions<BlockBasedTableOptions>();
|
|
1783
|
+
ASSERT_EQ(bbto->block_size, 12345);
|
|
1784
|
+
|
|
1785
|
+
// Accessing through the wrong factory alias fails gracefully
|
|
1786
|
+
ASSERT_NOK(GetColumnFamilyOptionsFromMap(
|
|
1787
|
+
config_options, cf_opts,
|
|
1788
|
+
{{"plain_table_factory", "{bloom_bits_per_key=42}"}}, &cf_opts));
|
|
1789
|
+
ASSERT_NOK(GetColumnFamilyOptionsFromMap(
|
|
1790
|
+
config_options, cf_opts,
|
|
1791
|
+
{{"plain_table_factory.bloom_bits_per_key", "42"}}, &cf_opts));
|
|
1792
|
+
ASSERT_STREQ(cf_opts.table_factory->Name(),
|
|
1793
|
+
TableFactory::kBlockBasedTableName());
|
|
1730
1794
|
|
|
1731
|
-
// Change the block size.
|
|
1795
|
+
// Change the block size.
|
|
1732
1796
|
ASSERT_OK(GetColumnFamilyOptionsFromMap(
|
|
1733
1797
|
config_options, cf_opts,
|
|
1734
1798
|
{{"block_based_table_factory.block_size", "8192"}}, &cf_opts));
|
|
1735
|
-
|
|
1799
|
+
bbto = cf_opts.table_factory->GetOptions<BlockBasedTableOptions>();
|
|
1736
1800
|
ASSERT_EQ(bbto->block_size, 8192);
|
|
1737
1801
|
|
|
1738
1802
|
// Attempt to turn off block cache fails, as this option is not mutable
|
|
1803
|
+
// FIXME: find a way to make this fail again
|
|
1804
|
+
/*
|
|
1739
1805
|
ASSERT_NOK(GetColumnFamilyOptionsFromMap(
|
|
1740
1806
|
config_options, cf_opts,
|
|
1741
1807
|
{{"block_based_table_factory.no_block_cache", "true"}}, &cf_opts));
|
|
1742
|
-
|
|
1808
|
+
*/
|
|
1743
1809
|
|
|
1744
|
-
// Attempt to change the block size via a config string/map.
|
|
1745
|
-
// the current value
|
|
1810
|
+
// Attempt to change the block size via a config string/map.
|
|
1746
1811
|
ASSERT_OK(GetColumnFamilyOptionsFromMap(
|
|
1747
1812
|
config_options, cf_opts,
|
|
1748
1813
|
{{"block_based_table_factory", "{block_size=32768}"}}, &cf_opts));
|
|
1749
|
-
|
|
1814
|
+
bbto = cf_opts.table_factory->GetOptions<BlockBasedTableOptions>();
|
|
1750
1815
|
ASSERT_EQ(bbto->block_size, 32768);
|
|
1751
1816
|
|
|
1752
1817
|
// Attempt to change the block size and no cache through the map. Should
|
|
1753
1818
|
// fail, leaving the old values intact
|
|
1819
|
+
// FIXME: find a way to make this fail again
|
|
1820
|
+
/*
|
|
1754
1821
|
ASSERT_NOK(GetColumnFamilyOptionsFromMap(
|
|
1755
1822
|
config_options, cf_opts,
|
|
1756
1823
|
{{"block_based_table_factory",
|
|
1757
1824
|
"{block_size=16384; no_block_cache=true}"}},
|
|
1758
1825
|
&cf_opts));
|
|
1759
|
-
|
|
1826
|
+
*/
|
|
1760
1827
|
ASSERT_EQ(bbto->block_size, 32768);
|
|
1828
|
+
|
|
1829
|
+
// Switch to plain table for some tests
|
|
1830
|
+
cf_opts.table_factory = nullptr;
|
|
1831
|
+
ASSERT_OK(GetColumnFamilyOptionsFromMap(
|
|
1832
|
+
config_options, cf_opts,
|
|
1833
|
+
{{"table_factory", "{id=PlainTable;bloom_bits_per_key=42}"}}, &cf_opts));
|
|
1834
|
+
ASSERT_STREQ(cf_opts.table_factory->Name(), TableFactory::kPlainTableName());
|
|
1835
|
+
auto* pto = cf_opts.table_factory->GetOptions<PlainTableOptions>();
|
|
1836
|
+
ASSERT_EQ(pto->bloom_bits_per_key, 42);
|
|
1837
|
+
|
|
1838
|
+
// Accessing through the wrong factory alias fails gracefully
|
|
1839
|
+
ASSERT_NOK(GetColumnFamilyOptionsFromMap(
|
|
1840
|
+
config_options, cf_opts,
|
|
1841
|
+
{{"block_based_table_factory.block_size", "8192"}}, &cf_opts));
|
|
1842
|
+
ASSERT_NOK(GetColumnFamilyOptionsFromMap(
|
|
1843
|
+
config_options, cf_opts,
|
|
1844
|
+
{{"block_based_table_factory", "{block_size=32768}"}}, &cf_opts));
|
|
1845
|
+
ASSERT_STREQ(cf_opts.table_factory->Name(), TableFactory::kPlainTableName());
|
|
1846
|
+
ASSERT_EQ(pto, cf_opts.table_factory->GetOptions<PlainTableOptions>());
|
|
1761
1847
|
}
|
|
1762
1848
|
|
|
1763
1849
|
|
|
@@ -24,14 +24,10 @@
|
|
|
24
24
|
// A temporary hook into long-running RocksDB threads to support modifying their
|
|
25
25
|
// priority etc. This should become a public API hook once the requirements
|
|
26
26
|
// are better understood.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
RocksDbThreadYield(); \
|
|
32
|
-
} \
|
|
33
|
-
}
|
|
27
|
+
// Returns true if query is aborted.
|
|
28
|
+
extern "C" bool RocksDbThreadYieldAndCheckAbort() __attribute__((__weak__));
|
|
29
|
+
#define ROCKSDB_THREAD_YIELD_CHECK_ABORT() \
|
|
30
|
+
(RocksDbThreadYieldAndCheckAbort ? RocksDbThreadYieldAndCheckAbort() : false)
|
|
34
31
|
#else
|
|
35
|
-
#define
|
|
36
|
-
{}
|
|
32
|
+
#define ROCKSDB_THREAD_YIELD_CHECK_ABORT() (false)
|
|
37
33
|
#endif
|
|
@@ -75,6 +75,7 @@ LIB_SOURCES = \
|
|
|
75
75
|
db/log_reader.cc \
|
|
76
76
|
db/log_writer.cc \
|
|
77
77
|
db/malloc_stats.cc \
|
|
78
|
+
db/manifest_ops.cc \
|
|
78
79
|
db/memtable.cc \
|
|
79
80
|
db/memtable_list.cc \
|
|
80
81
|
db/merge_helper.cc \
|
|
@@ -141,6 +142,7 @@ LIB_SOURCES = \
|
|
|
141
142
|
memtable/hash_skiplist_rep.cc \
|
|
142
143
|
memtable/skiplistrep.cc \
|
|
143
144
|
memtable/vectorrep.cc \
|
|
145
|
+
memtable/wbwi_memtable.cc \
|
|
144
146
|
memtable/write_buffer_manager.cc \
|
|
145
147
|
monitoring/histogram.cc \
|
|
146
148
|
monitoring/histogram_windowing.cc \
|
|
@@ -339,6 +341,9 @@ LIB_SOURCES_ASM =
|
|
|
339
341
|
LIB_SOURCES_C =
|
|
340
342
|
endif
|
|
341
343
|
|
|
344
|
+
WITH_FAISS_LIB_SOURCES = \
|
|
345
|
+
utilities/secondary_index/faiss_ivf_index.cc \
|
|
346
|
+
|
|
342
347
|
RANGE_TREE_SOURCES =\
|
|
343
348
|
utilities/transactions/lock/range/range_tree/lib/locktree/concurrent_tree.cc \
|
|
344
349
|
utilities/transactions/lock/range/range_tree/lib/locktree/keyrange.cc \
|
|
@@ -649,6 +654,9 @@ TEST_MAIN_SOURCES = \
|
|
|
649
654
|
TEST_MAIN_SOURCES_C = \
|
|
650
655
|
db/c_test.c \
|
|
651
656
|
|
|
657
|
+
WITH_FAISS_TEST_MAIN_SOURCES = \
|
|
658
|
+
utilities/secondary_index/faiss_ivf_index_test.cc \
|
|
659
|
+
|
|
652
660
|
MICROBENCH_SOURCES = \
|
|
653
661
|
microbench/ribbon_bench.cc \
|
|
654
662
|
microbench/db_basic_bench.cc \
|
|
@@ -46,6 +46,10 @@ class AdaptiveTableFactory : public TableFactory {
|
|
|
46
46
|
|
|
47
47
|
std::string GetPrintableOptions() const override;
|
|
48
48
|
|
|
49
|
+
std::unique_ptr<TableFactory> Clone() const override {
|
|
50
|
+
return std::make_unique<AdaptiveTableFactory>(*this);
|
|
51
|
+
}
|
|
52
|
+
|
|
49
53
|
private:
|
|
50
54
|
std::shared_ptr<TableFactory> table_factory_to_write_;
|
|
51
55
|
std::shared_ptr<TableFactory> block_based_table_factory_;
|
|
@@ -575,13 +575,7 @@ class BlockIter : public InternalIteratorBase<TValue> {
|
|
|
575
575
|
|
|
576
576
|
void UpdateRawKeyAndMaybePadMinTimestamp(const Slice& key) {
|
|
577
577
|
if (pad_min_timestamp_) {
|
|
578
|
-
|
|
579
|
-
if (raw_key_.IsUserKey()) {
|
|
580
|
-
AppendKeyWithMinTimestamp(&buf, key, ts_sz_);
|
|
581
|
-
} else {
|
|
582
|
-
PadInternalKeyWithMinTimestamp(&buf, key, ts_sz_);
|
|
583
|
-
}
|
|
584
|
-
raw_key_.SetKey(buf, true /* copy */);
|
|
578
|
+
raw_key_.SetKeyWithPaddedMinTimestamp(key, ts_sz_);
|
|
585
579
|
} else {
|
|
586
580
|
raw_key_.SetKey(key, false /* copy */);
|
|
587
581
|
}
|
|
@@ -619,11 +619,13 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
619
619
|
props.column_family_id = tbo.column_family_id;
|
|
620
620
|
props.column_family_name = tbo.column_family_name;
|
|
621
621
|
props.oldest_key_time = tbo.oldest_key_time;
|
|
622
|
+
props.newest_key_time = tbo.newest_key_time;
|
|
622
623
|
props.file_creation_time = tbo.file_creation_time;
|
|
623
624
|
props.orig_file_number = tbo.cur_file_num;
|
|
624
625
|
props.db_id = tbo.db_id;
|
|
625
626
|
props.db_session_id = tbo.db_session_id;
|
|
626
627
|
props.db_host_id = ioptions.db_host_id;
|
|
628
|
+
props.format_version = table_options.format_version;
|
|
627
629
|
if (!ReifyDbHostIdProperty(ioptions.env, &props.db_host_id).ok()) {
|
|
628
630
|
ROCKS_LOG_INFO(ioptions.logger, "db_host_id property will not be set");
|
|
629
631
|
}
|
|
@@ -224,10 +224,20 @@ static std::unordered_map<std::string,
|
|
|
224
224
|
{"kFlushOnly",
|
|
225
225
|
BlockBasedTableOptions::PrepopulateBlockCache::kFlushOnly}};
|
|
226
226
|
|
|
227
|
-
static
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
227
|
+
static struct BlockBasedTableTypeInfo {
|
|
228
|
+
std::unordered_map<std::string, OptionTypeInfo> info;
|
|
229
|
+
|
|
230
|
+
BlockBasedTableTypeInfo() {
|
|
231
|
+
info = {
|
|
232
|
+
// NOTE: Below the list, most of these options are marked as mutable.
|
|
233
|
+
// In theory, there should be no danger in mutability, as table
|
|
234
|
+
// builders and readers work from copies of BlockBasedTableOptions.
|
|
235
|
+
// However, there is currently an unresolved read-write race that
|
|
236
|
+
// affecting SetOptions on BBTO fields. This should be generally
|
|
237
|
+
// acceptable for non-pointer options of 64 bits or less, but a fix
|
|
238
|
+
// is needed to make it mutability general here. See
|
|
239
|
+
// https://github.com/facebook/rocksdb/issues/10079
|
|
240
|
+
/* currently not supported:
|
|
231
241
|
CacheUsageOptions cache_usage_options;
|
|
232
242
|
*/
|
|
233
243
|
{"flush_block_policy_factory",
|
|
@@ -238,24 +248,20 @@ static std::unordered_map<std::string, OptionTypeInfo>
|
|
|
238
248
|
{"cache_index_and_filter_blocks",
|
|
239
249
|
{offsetof(struct BlockBasedTableOptions,
|
|
240
250
|
cache_index_and_filter_blocks),
|
|
241
|
-
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
242
|
-
OptionTypeFlags::kNone}},
|
|
251
|
+
OptionType::kBoolean, OptionVerificationType::kNormal}},
|
|
243
252
|
{"cache_index_and_filter_blocks_with_high_priority",
|
|
244
253
|
{offsetof(struct BlockBasedTableOptions,
|
|
245
254
|
cache_index_and_filter_blocks_with_high_priority),
|
|
246
|
-
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
247
|
-
OptionTypeFlags::kNone}},
|
|
255
|
+
OptionType::kBoolean, OptionVerificationType::kNormal}},
|
|
248
256
|
{"pin_l0_filter_and_index_blocks_in_cache",
|
|
249
257
|
{offsetof(struct BlockBasedTableOptions,
|
|
250
258
|
pin_l0_filter_and_index_blocks_in_cache),
|
|
251
|
-
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
252
|
-
OptionTypeFlags::kNone}},
|
|
259
|
+
OptionType::kBoolean, OptionVerificationType::kNormal}},
|
|
253
260
|
{"index_type", OptionTypeInfo::Enum<BlockBasedTableOptions::IndexType>(
|
|
254
261
|
offsetof(struct BlockBasedTableOptions, index_type),
|
|
255
262
|
&block_base_table_index_type_string_map)},
|
|
256
263
|
{"hash_index_allow_collision",
|
|
257
|
-
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated,
|
|
258
|
-
OptionTypeFlags::kNone}},
|
|
264
|
+
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated}},
|
|
259
265
|
{"data_block_index_type",
|
|
260
266
|
OptionTypeInfo::Enum<BlockBasedTableOptions::DataBlockIndexType>(
|
|
261
267
|
offsetof(struct BlockBasedTableOptions, data_block_index_type),
|
|
@@ -267,86 +273,65 @@ static std::unordered_map<std::string, OptionTypeInfo>
|
|
|
267
273
|
{"data_block_hash_table_util_ratio",
|
|
268
274
|
{offsetof(struct BlockBasedTableOptions,
|
|
269
275
|
data_block_hash_table_util_ratio),
|
|
270
|
-
OptionType::kDouble, OptionVerificationType::kNormal,
|
|
271
|
-
OptionTypeFlags::kNone}},
|
|
276
|
+
OptionType::kDouble, OptionVerificationType::kNormal}},
|
|
272
277
|
{"checksum",
|
|
273
278
|
{offsetof(struct BlockBasedTableOptions, checksum),
|
|
274
|
-
OptionType::kChecksumType, OptionVerificationType::kNormal,
|
|
275
|
-
OptionTypeFlags::kNone}},
|
|
279
|
+
OptionType::kChecksumType, OptionVerificationType::kNormal}},
|
|
276
280
|
{"no_block_cache",
|
|
277
281
|
{offsetof(struct BlockBasedTableOptions, no_block_cache),
|
|
278
|
-
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
279
|
-
OptionTypeFlags::kNone}},
|
|
282
|
+
OptionType::kBoolean, OptionVerificationType::kNormal}},
|
|
280
283
|
{"block_size",
|
|
281
284
|
{offsetof(struct BlockBasedTableOptions, block_size),
|
|
282
|
-
OptionType::kSizeT, OptionVerificationType::kNormal,
|
|
283
|
-
OptionTypeFlags::kMutable}},
|
|
285
|
+
OptionType::kSizeT, OptionVerificationType::kNormal}},
|
|
284
286
|
{"block_size_deviation",
|
|
285
287
|
{offsetof(struct BlockBasedTableOptions, block_size_deviation),
|
|
286
|
-
OptionType::kInt, OptionVerificationType::kNormal,
|
|
287
|
-
OptionTypeFlags::kNone}},
|
|
288
|
+
OptionType::kInt, OptionVerificationType::kNormal}},
|
|
288
289
|
{"block_restart_interval",
|
|
289
290
|
{offsetof(struct BlockBasedTableOptions, block_restart_interval),
|
|
290
|
-
OptionType::kInt, OptionVerificationType::kNormal,
|
|
291
|
-
OptionTypeFlags::kMutable}},
|
|
291
|
+
OptionType::kInt, OptionVerificationType::kNormal}},
|
|
292
292
|
{"index_block_restart_interval",
|
|
293
293
|
{offsetof(struct BlockBasedTableOptions, index_block_restart_interval),
|
|
294
|
-
OptionType::kInt, OptionVerificationType::kNormal,
|
|
295
|
-
OptionTypeFlags::kNone}},
|
|
294
|
+
OptionType::kInt, OptionVerificationType::kNormal}},
|
|
296
295
|
{"index_per_partition",
|
|
297
|
-
{0, OptionType::kUInt64T, OptionVerificationType::kDeprecated,
|
|
298
|
-
OptionTypeFlags::kNone}},
|
|
296
|
+
{0, OptionType::kUInt64T, OptionVerificationType::kDeprecated}},
|
|
299
297
|
{"metadata_block_size",
|
|
300
298
|
{offsetof(struct BlockBasedTableOptions, metadata_block_size),
|
|
301
|
-
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
302
|
-
OptionTypeFlags::kNone}},
|
|
299
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal}},
|
|
303
300
|
{"partition_filters",
|
|
304
301
|
{offsetof(struct BlockBasedTableOptions, partition_filters),
|
|
305
|
-
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
306
|
-
OptionTypeFlags::kNone}},
|
|
302
|
+
OptionType::kBoolean, OptionVerificationType::kNormal}},
|
|
307
303
|
{"decouple_partitioned_filters",
|
|
308
304
|
{offsetof(struct BlockBasedTableOptions, decouple_partitioned_filters),
|
|
309
|
-
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
310
|
-
OptionTypeFlags::kNone}},
|
|
305
|
+
OptionType::kBoolean, OptionVerificationType::kNormal}},
|
|
311
306
|
{"optimize_filters_for_memory",
|
|
312
307
|
{offsetof(struct BlockBasedTableOptions, optimize_filters_for_memory),
|
|
313
|
-
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
314
|
-
OptionTypeFlags::kNone}},
|
|
308
|
+
OptionType::kBoolean, OptionVerificationType::kNormal}},
|
|
315
309
|
{"use_delta_encoding",
|
|
316
310
|
{offsetof(struct BlockBasedTableOptions, use_delta_encoding),
|
|
317
|
-
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
318
|
-
OptionTypeFlags::kNone}},
|
|
311
|
+
OptionType::kBoolean, OptionVerificationType::kNormal}},
|
|
319
312
|
{"filter_policy",
|
|
320
313
|
OptionTypeInfo::AsCustomSharedPtr<const FilterPolicy>(
|
|
321
314
|
offsetof(struct BlockBasedTableOptions, filter_policy),
|
|
322
|
-
OptionVerificationType::kByNameAllowFromNull,
|
|
323
|
-
OptionTypeFlags::kNone)},
|
|
315
|
+
OptionVerificationType::kByNameAllowFromNull)},
|
|
324
316
|
{"whole_key_filtering",
|
|
325
317
|
{offsetof(struct BlockBasedTableOptions, whole_key_filtering),
|
|
326
|
-
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
327
|
-
OptionTypeFlags::kNone}},
|
|
318
|
+
OptionType::kBoolean, OptionVerificationType::kNormal}},
|
|
328
319
|
{"detect_filter_construct_corruption",
|
|
329
320
|
{offsetof(struct BlockBasedTableOptions,
|
|
330
321
|
detect_filter_construct_corruption),
|
|
331
|
-
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
332
|
-
OptionTypeFlags::kMutable}},
|
|
322
|
+
OptionType::kBoolean, OptionVerificationType::kNormal}},
|
|
333
323
|
{"reserve_table_builder_memory",
|
|
334
|
-
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated,
|
|
335
|
-
OptionTypeFlags::kNone}},
|
|
324
|
+
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated}},
|
|
336
325
|
{"reserve_table_reader_memory",
|
|
337
|
-
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated,
|
|
338
|
-
OptionTypeFlags::kNone}},
|
|
326
|
+
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated}},
|
|
339
327
|
{"skip_table_builder_flush",
|
|
340
|
-
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated,
|
|
341
|
-
OptionTypeFlags::kNone}},
|
|
328
|
+
{0, OptionType::kBoolean, OptionVerificationType::kDeprecated}},
|
|
342
329
|
{"format_version",
|
|
343
330
|
{offsetof(struct BlockBasedTableOptions, format_version),
|
|
344
|
-
OptionType::kUInt32T, OptionVerificationType::kNormal,
|
|
345
|
-
OptionTypeFlags::kNone}},
|
|
331
|
+
OptionType::kUInt32T, OptionVerificationType::kNormal}},
|
|
346
332
|
{"verify_compression",
|
|
347
333
|
{offsetof(struct BlockBasedTableOptions, verify_compression),
|
|
348
|
-
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
349
|
-
OptionTypeFlags::kNone}},
|
|
334
|
+
OptionType::kBoolean, OptionVerificationType::kNormal}},
|
|
350
335
|
{"read_amp_bytes_per_bit",
|
|
351
336
|
{offsetof(struct BlockBasedTableOptions, read_amp_bytes_per_bit),
|
|
352
337
|
OptionType::kUInt32T, OptionVerificationType::kNormal,
|
|
@@ -369,17 +354,14 @@ static std::unordered_map<std::string, OptionTypeInfo>
|
|
|
369
354
|
}}},
|
|
370
355
|
{"enable_index_compression",
|
|
371
356
|
{offsetof(struct BlockBasedTableOptions, enable_index_compression),
|
|
372
|
-
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
373
|
-
OptionTypeFlags::kNone}},
|
|
357
|
+
OptionType::kBoolean, OptionVerificationType::kNormal}},
|
|
374
358
|
{"block_align",
|
|
375
359
|
{offsetof(struct BlockBasedTableOptions, block_align),
|
|
376
|
-
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
377
|
-
OptionTypeFlags::kNone}},
|
|
360
|
+
OptionType::kBoolean, OptionVerificationType::kNormal}},
|
|
378
361
|
{"pin_top_level_index_and_filter",
|
|
379
362
|
{offsetof(struct BlockBasedTableOptions,
|
|
380
363
|
pin_top_level_index_and_filter),
|
|
381
|
-
OptionType::kBoolean, OptionVerificationType::kNormal,
|
|
382
|
-
OptionTypeFlags::kNone}},
|
|
364
|
+
OptionType::kBoolean, OptionVerificationType::kNormal}},
|
|
383
365
|
{kOptNameMetadataCacheOpts,
|
|
384
366
|
OptionTypeInfo::Struct(
|
|
385
367
|
kOptNameMetadataCacheOpts, &metadata_cache_options_type_info,
|
|
@@ -396,36 +378,33 @@ static std::unordered_map<std::string, OptionTypeInfo>
|
|
|
396
378
|
return Cache::CreateFromString(opts, value, cache);
|
|
397
379
|
}}},
|
|
398
380
|
{"block_cache_compressed",
|
|
399
|
-
{0, OptionType::kUnknown, OptionVerificationType::kDeprecated,
|
|
400
|
-
OptionTypeFlags::kNone}},
|
|
381
|
+
{0, OptionType::kUnknown, OptionVerificationType::kDeprecated}},
|
|
401
382
|
{"max_auto_readahead_size",
|
|
402
383
|
{offsetof(struct BlockBasedTableOptions, max_auto_readahead_size),
|
|
403
|
-
OptionType::kSizeT, OptionVerificationType::kNormal,
|
|
404
|
-
OptionTypeFlags::kMutable}},
|
|
384
|
+
OptionType::kSizeT, OptionVerificationType::kNormal}},
|
|
405
385
|
{"prepopulate_block_cache",
|
|
406
386
|
OptionTypeInfo::Enum<BlockBasedTableOptions::PrepopulateBlockCache>(
|
|
407
387
|
offsetof(struct BlockBasedTableOptions, prepopulate_block_cache),
|
|
408
|
-
&block_base_table_prepopulate_block_cache_string_map,
|
|
409
|
-
OptionTypeFlags::kMutable)},
|
|
388
|
+
&block_base_table_prepopulate_block_cache_string_map)},
|
|
410
389
|
{"initial_auto_readahead_size",
|
|
411
390
|
{offsetof(struct BlockBasedTableOptions, initial_auto_readahead_size),
|
|
412
|
-
OptionType::kSizeT, OptionVerificationType::kNormal,
|
|
413
|
-
OptionTypeFlags::kMutable}},
|
|
391
|
+
OptionType::kSizeT, OptionVerificationType::kNormal}},
|
|
414
392
|
{"num_file_reads_for_auto_readahead",
|
|
415
393
|
{offsetof(struct BlockBasedTableOptions,
|
|
416
394
|
num_file_reads_for_auto_readahead),
|
|
417
|
-
OptionType::kUInt64T, OptionVerificationType::kNormal,
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
};
|
|
395
|
+
OptionType::kUInt64T, OptionVerificationType::kNormal}},
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
} block_based_table_type_info;
|
|
421
399
|
|
|
422
400
|
// TODO(myabandeh): We should return an error instead of silently changing the
|
|
423
401
|
// options
|
|
424
402
|
BlockBasedTableFactory::BlockBasedTableFactory(
|
|
425
403
|
const BlockBasedTableOptions& _table_options)
|
|
426
|
-
: table_options_(_table_options)
|
|
404
|
+
: table_options_(_table_options),
|
|
405
|
+
shared_state_(std::make_shared<SharedState>()) {
|
|
427
406
|
InitializeOptions();
|
|
428
|
-
RegisterOptions(&table_options_, &block_based_table_type_info);
|
|
407
|
+
RegisterOptions(&table_options_, &block_based_table_type_info.info);
|
|
429
408
|
|
|
430
409
|
const auto table_reader_charged =
|
|
431
410
|
table_options_.cache_usage_options.options_overrides
|
|
@@ -433,10 +412,11 @@ BlockBasedTableFactory::BlockBasedTableFactory(
|
|
|
433
412
|
.charged;
|
|
434
413
|
if (table_options_.block_cache &&
|
|
435
414
|
table_reader_charged == CacheEntryRoleOptions::Decision::kEnabled) {
|
|
436
|
-
|
|
437
|
-
std::make_shared<
|
|
438
|
-
|
|
439
|
-
|
|
415
|
+
shared_state_->table_reader_cache_res_mgr =
|
|
416
|
+
std::make_shared<ConcurrentCacheReservationManager>(
|
|
417
|
+
std::make_shared<CacheReservationManagerImpl<
|
|
418
|
+
CacheEntryRole::kBlockBasedTableReader>>(
|
|
419
|
+
table_options_.block_cache));
|
|
440
420
|
}
|
|
441
421
|
}
|
|
442
422
|
|
|
@@ -574,11 +554,13 @@ Status BlockBasedTableFactory::NewTableReader(
|
|
|
574
554
|
ro, table_reader_options.ioptions, table_reader_options.env_options,
|
|
575
555
|
table_options_, table_reader_options.internal_comparator, std::move(file),
|
|
576
556
|
file_size, table_reader_options.block_protection_bytes_per_key,
|
|
577
|
-
table_reader, table_reader_options.tail_size,
|
|
557
|
+
table_reader, table_reader_options.tail_size,
|
|
558
|
+
shared_state_->table_reader_cache_res_mgr,
|
|
578
559
|
table_reader_options.prefix_extractor, prefetch_index_and_filter_in_cache,
|
|
579
560
|
table_reader_options.skip_filters, table_reader_options.level,
|
|
580
561
|
table_reader_options.immortal, table_reader_options.largest_seqno,
|
|
581
|
-
table_reader_options.force_direct_prefetch,
|
|
562
|
+
table_reader_options.force_direct_prefetch,
|
|
563
|
+
&shared_state_->tail_prefetch_stats,
|
|
582
564
|
table_reader_options.block_cache_tracer,
|
|
583
565
|
table_reader_options.max_file_size_for_l0_meta_pin,
|
|
584
566
|
table_reader_options.cur_db_session_id, table_reader_options.cur_file_num,
|
|
@@ -79,7 +79,13 @@ class BlockBasedTableFactory : public TableFactory {
|
|
|
79
79
|
|
|
80
80
|
bool IsDeleteRangeSupported() const override { return true; }
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
std::unique_ptr<TableFactory> Clone() const override {
|
|
83
|
+
return std::make_unique<BlockBasedTableFactory>(*this);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
TailPrefetchStats* tail_prefetch_stats() {
|
|
87
|
+
return &shared_state_->tail_prefetch_stats;
|
|
88
|
+
}
|
|
83
89
|
|
|
84
90
|
protected:
|
|
85
91
|
const void* GetOptionsPtr(const std::string& name) const override;
|
|
@@ -91,8 +97,12 @@ class BlockBasedTableFactory : public TableFactory {
|
|
|
91
97
|
|
|
92
98
|
private:
|
|
93
99
|
BlockBasedTableOptions table_options_;
|
|
94
|
-
|
|
95
|
-
|
|
100
|
+
// Share some state among cloned instances
|
|
101
|
+
struct SharedState {
|
|
102
|
+
std::shared_ptr<CacheReservationManager> table_reader_cache_res_mgr;
|
|
103
|
+
TailPrefetchStats tail_prefetch_stats;
|
|
104
|
+
};
|
|
105
|
+
std::shared_ptr<SharedState> shared_state_;
|
|
96
106
|
};
|
|
97
107
|
|
|
98
108
|
extern const std::string kHashIndexPrefixesBlock;
|