@nxtedition/rocksdb 8.1.4 → 8.1.6
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/deps/rocksdb/rocksdb/CMakeLists.txt +21 -0
- package/deps/rocksdb/rocksdb/Makefile +15 -3
- package/deps/rocksdb/rocksdb/TARGETS +6 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +32 -35
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +0 -30
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +0 -83
- package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +13 -14
- package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +40 -0
- package/deps/rocksdb/rocksdb/cache/cache_helpers.h +14 -20
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +8 -9
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +5 -4
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +124 -156
- package/deps/rocksdb/rocksdb/cache/charged_cache.cc +10 -26
- package/deps/rocksdb/rocksdb/cache/charged_cache.h +11 -16
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +35 -32
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +19 -21
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +42 -30
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -8
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +91 -143
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +54 -60
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +37 -63
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +120 -106
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +14 -5
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -31
- package/deps/rocksdb/rocksdb/cache/typed_cache.h +339 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.cc +0 -48
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +18 -15
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +5 -26
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +7 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +6 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +2 -7
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +19 -47
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +13 -5
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +15 -22
- package/deps/rocksdb/rocksdb/db/builder.cc +24 -10
- package/deps/rocksdb/rocksdb/db/builder.h +2 -1
- package/deps/rocksdb/rocksdb/db/c.cc +15 -0
- package/deps/rocksdb/rocksdb/db/c_test.c +3 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +11 -6
- package/deps/rocksdb/rocksdb/db/column_family.h +20 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +31 -34
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +3 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +21 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +4 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +4 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +9 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +275 -82
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +7 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -18
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +17 -16
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +19 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +5 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +22 -22
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +5 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +81 -52
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +5 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +5 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +8 -2
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +3 -0
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +266 -138
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +86 -1
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +98 -9
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -28
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +2 -3
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1022 -123
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +65 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +32 -21
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +32 -24
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +199 -77
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +3 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +3 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +8 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +43 -23
- package/deps/rocksdb/rocksdb/db/db_iter.cc +8 -2
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +42 -0
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +155 -0
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +12 -12
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +230 -2
- package/deps/rocksdb/rocksdb/db/db_test.cc +3 -0
- package/deps/rocksdb/rocksdb/db/db_test2.cc +233 -8
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +11 -10
- package/deps/rocksdb/rocksdb/db/db_test_util.h +39 -24
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +129 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +28 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +21 -0
- package/deps/rocksdb/rocksdb/db/dbformat.cc +25 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +2 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +3 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +3 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +92 -13
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +38 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +14 -110
- package/deps/rocksdb/rocksdb/db/flush_job.cc +12 -10
- package/deps/rocksdb/rocksdb/db/flush_job.h +3 -2
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +29 -29
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +56 -53
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +11 -11
- package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -2
- package/deps/rocksdb/rocksdb/db/log_reader.cc +8 -6
- package/deps/rocksdb/rocksdb/db/log_test.cc +35 -2
- package/deps/rocksdb/rocksdb/db/memtable.cc +31 -6
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +47 -29
- package/deps/rocksdb/rocksdb/db/merge_helper.h +14 -6
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +10 -10
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/repair.cc +65 -22
- package/deps/rocksdb/rocksdb/db/repair_test.cc +54 -0
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +26 -26
- package/deps/rocksdb/rocksdb/db/table_cache.cc +41 -91
- package/deps/rocksdb/rocksdb/db/table_cache.h +17 -19
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +7 -9
- package/deps/rocksdb/rocksdb/db/table_properties_collector.h +3 -1
- package/deps/rocksdb/rocksdb/db/version_builder.cc +102 -52
- package/deps/rocksdb/rocksdb/db/version_builder.h +20 -0
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +218 -93
- package/deps/rocksdb/rocksdb/db/version_edit.cc +27 -1
- package/deps/rocksdb/rocksdb/db/version_edit.h +34 -9
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +13 -6
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +17 -6
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +19 -17
- package/deps/rocksdb/rocksdb/db/version_set.cc +160 -28
- package/deps/rocksdb/rocksdb/db/version_set.h +34 -4
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -1
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +65 -31
- package/deps/rocksdb/rocksdb/db/write_batch.cc +4 -1
- package/deps/rocksdb/rocksdb/db/write_thread.cc +5 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +31 -32
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.h +2 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +8 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +11 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +16 -15
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +13 -1
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +1 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +286 -217
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +137 -135
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +6 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +21 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +9 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +8 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +69 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
- package/deps/rocksdb/rocksdb/memory/arena.cc +23 -87
- package/deps/rocksdb/rocksdb/memory/arena.h +25 -31
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +90 -0
- package/deps/rocksdb/rocksdb/memory/memory_allocator.h +9 -0
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +26 -26
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -3
- package/deps/rocksdb/rocksdb/port/mmap.cc +98 -0
- package/deps/rocksdb/rocksdb/port/mmap.h +70 -0
- package/deps/rocksdb/rocksdb/port/port_posix.h +2 -0
- package/{prebuilds → deps/rocksdb/rocksdb/prebuilds}/linux-x64/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/src.mk +3 -0
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/block.h +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +25 -67
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +18 -13
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +159 -225
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +31 -50
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +52 -20
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +96 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +132 -0
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +28 -0
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -5
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +1 -4
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +6 -7
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +6 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +19 -18
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +9 -5
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +2 -2
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +3 -3
- package/deps/rocksdb/rocksdb/table/format.cc +24 -20
- package/deps/rocksdb/rocksdb/table/format.h +6 -3
- package/deps/rocksdb/rocksdb/table/get_context.cc +12 -3
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +0 -2
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +69 -35
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +2 -2
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +1 -1
- package/deps/rocksdb/rocksdb/table/table_test.cc +7 -6
- package/deps/rocksdb/rocksdb/test_util/testutil.h +10 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +66 -1
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +9 -2
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +5 -0
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +2 -2
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +1 -1
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +20 -12
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +1 -1
- package/deps/rocksdb/rocksdb/util/compression.cc +2 -2
- package/deps/rocksdb/rocksdb/util/compression.h +11 -2
- package/deps/rocksdb/rocksdb/util/status.cc +7 -0
- package/deps/rocksdb/rocksdb/util/xxhash.h +1901 -887
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +250 -74
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +199 -4
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +35 -57
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +4 -5
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +39 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +9 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +11 -6
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +6 -5
- package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +10 -11
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +31 -31
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +111 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +12 -3
- package/package.json +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +0 -182
|
@@ -80,7 +80,7 @@ TEST_F(SeqnoTimeTest, TemperatureBasicUniversal) {
|
|
|
80
80
|
|
|
81
81
|
// pass some time first, otherwise the first a few keys write time are going
|
|
82
82
|
// to be zero, and internally zero has special meaning: kUnknownSeqnoTime
|
|
83
|
-
dbfull()->
|
|
83
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
84
84
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(kKeyPerSec)); });
|
|
85
85
|
|
|
86
86
|
int sst_num = 0;
|
|
@@ -88,7 +88,7 @@ TEST_F(SeqnoTimeTest, TemperatureBasicUniversal) {
|
|
|
88
88
|
for (; sst_num < kNumTrigger; sst_num++) {
|
|
89
89
|
for (int i = 0; i < kNumKeys; i++) {
|
|
90
90
|
ASSERT_OK(Put(Key(sst_num * (kNumKeys - 1) + i), "value"));
|
|
91
|
-
dbfull()->
|
|
91
|
+
dbfull()->TEST_WaitForPeriodicTaskRun([&] {
|
|
92
92
|
mock_clock_->MockSleepForSeconds(static_cast<int>(kKeyPerSec));
|
|
93
93
|
});
|
|
94
94
|
}
|
|
@@ -110,7 +110,7 @@ TEST_F(SeqnoTimeTest, TemperatureBasicUniversal) {
|
|
|
110
110
|
for (; sst_num < kNumTrigger * 2; sst_num++) {
|
|
111
111
|
for (int i = 0; i < kNumKeys; i++) {
|
|
112
112
|
ASSERT_OK(Put(Key(sst_num * (kNumKeys - 1) + i), "value"));
|
|
113
|
-
dbfull()->
|
|
113
|
+
dbfull()->TEST_WaitForPeriodicTaskRun([&] {
|
|
114
114
|
mock_clock_->MockSleepForSeconds(static_cast<int>(kKeyPerSec));
|
|
115
115
|
});
|
|
116
116
|
}
|
|
@@ -124,7 +124,7 @@ TEST_F(SeqnoTimeTest, TemperatureBasicUniversal) {
|
|
|
124
124
|
for (; sst_num < kNumTrigger * 3; sst_num++) {
|
|
125
125
|
for (int i = 0; i < kNumKeys; i++) {
|
|
126
126
|
ASSERT_OK(Put(Key(sst_num * (kNumKeys - 1) + i), "value"));
|
|
127
|
-
dbfull()->
|
|
127
|
+
dbfull()->TEST_WaitForPeriodicTaskRun([&] {
|
|
128
128
|
mock_clock_->MockSleepForSeconds(static_cast<int>(kKeyPerSec));
|
|
129
129
|
});
|
|
130
130
|
}
|
|
@@ -143,7 +143,7 @@ TEST_F(SeqnoTimeTest, TemperatureBasicUniversal) {
|
|
|
143
143
|
AssertKeyTemperature(20, Temperature::kCold);
|
|
144
144
|
|
|
145
145
|
for (int i = 0; i < 30; i++) {
|
|
146
|
-
dbfull()->
|
|
146
|
+
dbfull()->TEST_WaitForPeriodicTaskRun([&] {
|
|
147
147
|
mock_clock_->MockSleepForSeconds(static_cast<int>(20 * kKeyPerSec));
|
|
148
148
|
});
|
|
149
149
|
ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
|
|
@@ -161,7 +161,7 @@ TEST_F(SeqnoTimeTest, TemperatureBasicUniversal) {
|
|
|
161
161
|
// the compaction will not get the new seqno->time sampling to decide the last
|
|
162
162
|
// a few data's time.
|
|
163
163
|
for (int i = 0; i < 5; i++) {
|
|
164
|
-
dbfull()->
|
|
164
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
165
165
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(1000)); });
|
|
166
166
|
ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
|
|
167
167
|
}
|
|
@@ -192,7 +192,7 @@ TEST_F(SeqnoTimeTest, TemperatureBasicLevel) {
|
|
|
192
192
|
|
|
193
193
|
// pass some time first, otherwise the first a few keys write time are going
|
|
194
194
|
// to be zero, and internally zero has special meaning: kUnknownSeqnoTime
|
|
195
|
-
dbfull()->
|
|
195
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
196
196
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(10)); });
|
|
197
197
|
|
|
198
198
|
int sst_num = 0;
|
|
@@ -200,7 +200,7 @@ TEST_F(SeqnoTimeTest, TemperatureBasicLevel) {
|
|
|
200
200
|
for (; sst_num < 4; sst_num++) {
|
|
201
201
|
for (int i = 0; i < kNumKeys; i++) {
|
|
202
202
|
ASSERT_OK(Put(Key(sst_num * (kNumKeys - 1) + i), "value"));
|
|
203
|
-
dbfull()->
|
|
203
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
204
204
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(10)); });
|
|
205
205
|
}
|
|
206
206
|
ASSERT_OK(Flush());
|
|
@@ -222,7 +222,7 @@ TEST_F(SeqnoTimeTest, TemperatureBasicLevel) {
|
|
|
222
222
|
for (; sst_num < 14; sst_num++) {
|
|
223
223
|
for (int i = 0; i < kNumKeys; i++) {
|
|
224
224
|
ASSERT_OK(Put(Key(sst_num * (kNumKeys - 1) + i), "value"));
|
|
225
|
-
dbfull()->
|
|
225
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
226
226
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(10)); });
|
|
227
227
|
}
|
|
228
228
|
ASSERT_OK(Flush());
|
|
@@ -243,7 +243,7 @@ TEST_F(SeqnoTimeTest, TemperatureBasicLevel) {
|
|
|
243
243
|
// Wait some time, with each wait, the cold data is increasing and hot data is
|
|
244
244
|
// decreasing
|
|
245
245
|
for (int i = 0; i < 30; i++) {
|
|
246
|
-
dbfull()->
|
|
246
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
247
247
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(200)); });
|
|
248
248
|
ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
|
|
249
249
|
uint64_t pre_hot = hot_data_size;
|
|
@@ -262,7 +262,7 @@ TEST_F(SeqnoTimeTest, TemperatureBasicLevel) {
|
|
|
262
262
|
// hot data might not be empty, because if we don't write new data, there's
|
|
263
263
|
// no seqno->time sampling available to the compaction
|
|
264
264
|
for (int i = 0; i < 5; i++) {
|
|
265
|
-
dbfull()->
|
|
265
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
266
266
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(1000)); });
|
|
267
267
|
ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
|
|
268
268
|
}
|
|
@@ -324,7 +324,7 @@ TEST_P(SeqnoTimeTablePropTest, BasicSeqnoToTimeMapping) {
|
|
|
324
324
|
// Write a key every 10 seconds
|
|
325
325
|
for (int i = 0; i < 200; i++) {
|
|
326
326
|
ASSERT_OK(Put(Key(i), "value"));
|
|
327
|
-
dbfull()->
|
|
327
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
328
328
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(10)); });
|
|
329
329
|
}
|
|
330
330
|
ASSERT_OK(Flush());
|
|
@@ -357,7 +357,7 @@ TEST_P(SeqnoTimeTablePropTest, BasicSeqnoToTimeMapping) {
|
|
|
357
357
|
// Write a key every 1 seconds
|
|
358
358
|
for (int i = 0; i < 200; i++) {
|
|
359
359
|
ASSERT_OK(Put(Key(i + 190), "value"));
|
|
360
|
-
dbfull()->
|
|
360
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
361
361
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(1)); });
|
|
362
362
|
}
|
|
363
363
|
seq_end = dbfull()->GetLatestSequenceNumber();
|
|
@@ -393,7 +393,7 @@ TEST_P(SeqnoTimeTablePropTest, BasicSeqnoToTimeMapping) {
|
|
|
393
393
|
// Write a key every 200 seconds
|
|
394
394
|
for (int i = 0; i < 200; i++) {
|
|
395
395
|
ASSERT_OK(Put(Key(i + 380), "value"));
|
|
396
|
-
dbfull()->
|
|
396
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
397
397
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(200)); });
|
|
398
398
|
}
|
|
399
399
|
seq_end = dbfull()->GetLatestSequenceNumber();
|
|
@@ -435,7 +435,7 @@ TEST_P(SeqnoTimeTablePropTest, BasicSeqnoToTimeMapping) {
|
|
|
435
435
|
// Write a key every 100 seconds
|
|
436
436
|
for (int i = 0; i < 200; i++) {
|
|
437
437
|
ASSERT_OK(Put(Key(i + 570), "value"));
|
|
438
|
-
dbfull()->
|
|
438
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
439
439
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(100)); });
|
|
440
440
|
}
|
|
441
441
|
seq_end = dbfull()->GetLatestSequenceNumber();
|
|
@@ -516,7 +516,7 @@ TEST_P(SeqnoTimeTablePropTest, MultiCFs) {
|
|
|
516
516
|
// Write some data and increase the current time
|
|
517
517
|
for (int i = 0; i < 200; i++) {
|
|
518
518
|
ASSERT_OK(Put(Key(i), "value"));
|
|
519
|
-
dbfull()->
|
|
519
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
520
520
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(100)); });
|
|
521
521
|
}
|
|
522
522
|
ASSERT_OK(Flush());
|
|
@@ -536,7 +536,7 @@ TEST_P(SeqnoTimeTablePropTest, MultiCFs) {
|
|
|
536
536
|
// Write some data to the default CF (without preclude_last_level feature)
|
|
537
537
|
for (int i = 0; i < 200; i++) {
|
|
538
538
|
ASSERT_OK(Put(Key(i), "value"));
|
|
539
|
-
dbfull()->
|
|
539
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
540
540
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(100)); });
|
|
541
541
|
}
|
|
542
542
|
ASSERT_OK(Flush());
|
|
@@ -544,7 +544,7 @@ TEST_P(SeqnoTimeTablePropTest, MultiCFs) {
|
|
|
544
544
|
// Write some data to the CF one
|
|
545
545
|
for (int i = 0; i < 20; i++) {
|
|
546
546
|
ASSERT_OK(Put(1, Key(i), "value"));
|
|
547
|
-
dbfull()->
|
|
547
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
548
548
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(10)); });
|
|
549
549
|
}
|
|
550
550
|
ASSERT_OK(Flush(1));
|
|
@@ -568,7 +568,7 @@ TEST_P(SeqnoTimeTablePropTest, MultiCFs) {
|
|
|
568
568
|
// Add more data to CF "two" to fill the in memory mapping
|
|
569
569
|
for (int i = 0; i < 2000; i++) {
|
|
570
570
|
ASSERT_OK(Put(2, Key(i), "value"));
|
|
571
|
-
dbfull()->
|
|
571
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
572
572
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(100)); });
|
|
573
573
|
}
|
|
574
574
|
seqs = dbfull()->TEST_GetSeqnoToTimeMapping().TEST_GetInternalMapping();
|
|
@@ -592,7 +592,7 @@ TEST_P(SeqnoTimeTablePropTest, MultiCFs) {
|
|
|
592
592
|
// enabled have flushed, the in-memory seqno->time mapping should be cleared
|
|
593
593
|
for (int i = 0; i < 10; i++) {
|
|
594
594
|
ASSERT_OK(Put(0, Key(i), "value"));
|
|
595
|
-
dbfull()->
|
|
595
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
596
596
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(100)); });
|
|
597
597
|
}
|
|
598
598
|
seqs = dbfull()->TEST_GetSeqnoToTimeMapping().TEST_GetInternalMapping();
|
|
@@ -603,7 +603,7 @@ TEST_P(SeqnoTimeTablePropTest, MultiCFs) {
|
|
|
603
603
|
for (int j = 0; j < 3; j++) {
|
|
604
604
|
for (int i = 0; i < 200; i++) {
|
|
605
605
|
ASSERT_OK(Put(2, Key(i), "value"));
|
|
606
|
-
dbfull()->
|
|
606
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
607
607
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(100)); });
|
|
608
608
|
}
|
|
609
609
|
ASSERT_OK(Flush(2));
|
|
@@ -623,7 +623,7 @@ TEST_P(SeqnoTimeTablePropTest, MultiCFs) {
|
|
|
623
623
|
for (int j = 0; j < 2; j++) {
|
|
624
624
|
for (int i = 0; i < 200; i++) {
|
|
625
625
|
ASSERT_OK(Put(0, Key(i), "value"));
|
|
626
|
-
dbfull()->
|
|
626
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
627
627
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(100)); });
|
|
628
628
|
}
|
|
629
629
|
ASSERT_OK(Flush(0));
|
|
@@ -638,7 +638,7 @@ TEST_P(SeqnoTimeTablePropTest, MultiCFs) {
|
|
|
638
638
|
// Write some data to CF "two", but don't flush to accumulate
|
|
639
639
|
for (int i = 0; i < 1000; i++) {
|
|
640
640
|
ASSERT_OK(Put(2, Key(i), "value"));
|
|
641
|
-
dbfull()->
|
|
641
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
642
642
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(100)); });
|
|
643
643
|
}
|
|
644
644
|
ASSERT_GE(
|
|
@@ -682,7 +682,7 @@ TEST_P(SeqnoTimeTablePropTest, MultiInstancesBasic) {
|
|
|
682
682
|
WriteOptions wo;
|
|
683
683
|
for (int i = 0; i < 200; i++) {
|
|
684
684
|
ASSERT_OK(dbi->Put(wo, Key(i), "value"));
|
|
685
|
-
dbfull()->
|
|
685
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
686
686
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(100)); });
|
|
687
687
|
}
|
|
688
688
|
SeqnoToTimeMapping seqno_to_time_mapping = dbi->TEST_GetSeqnoToTimeMapping();
|
|
@@ -720,7 +720,7 @@ TEST_P(SeqnoTimeTablePropTest, SeqnoToTimeMappingUniversal) {
|
|
|
720
720
|
for (; sst_num < kNumTrigger - 1; sst_num++) {
|
|
721
721
|
for (int i = 0; i < kNumKeys; i++) {
|
|
722
722
|
ASSERT_OK(Put(Key(sst_num * (kNumKeys - 1) + i), "value"));
|
|
723
|
-
dbfull()->
|
|
723
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
724
724
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(10)); });
|
|
725
725
|
}
|
|
726
726
|
ASSERT_OK(Flush());
|
|
@@ -742,7 +742,7 @@ TEST_P(SeqnoTimeTablePropTest, SeqnoToTimeMappingUniversal) {
|
|
|
742
742
|
// Trigger a compaction
|
|
743
743
|
for (int i = 0; i < kNumKeys; i++) {
|
|
744
744
|
ASSERT_OK(Put(Key(sst_num * (kNumKeys - 1) + i), "value"));
|
|
745
|
-
dbfull()->
|
|
745
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
746
746
|
[&] { mock_clock_->MockSleepForSeconds(static_cast<int>(10)); });
|
|
747
747
|
}
|
|
748
748
|
sst_num++;
|
|
@@ -31,16 +31,6 @@
|
|
|
31
31
|
#include "util/coding.h"
|
|
32
32
|
#include "util/stop_watch.h"
|
|
33
33
|
|
|
34
|
-
namespace ROCKSDB_NAMESPACE {
|
|
35
|
-
namespace {
|
|
36
|
-
template <class T>
|
|
37
|
-
static void DeleteEntry(const Slice& /*key*/, void* value) {
|
|
38
|
-
T* typed_value = reinterpret_cast<T*>(value);
|
|
39
|
-
delete typed_value;
|
|
40
|
-
}
|
|
41
|
-
} // anonymous namespace
|
|
42
|
-
} // namespace ROCKSDB_NAMESPACE
|
|
43
|
-
|
|
44
34
|
// Generate the regular and coroutine versions of some methods by
|
|
45
35
|
// including table_cache_sync_and_async.h twice
|
|
46
36
|
// Macros in the header will expand differently based on whether
|
|
@@ -58,12 +48,6 @@ namespace ROCKSDB_NAMESPACE {
|
|
|
58
48
|
|
|
59
49
|
namespace {
|
|
60
50
|
|
|
61
|
-
static void UnrefEntry(void* arg1, void* arg2) {
|
|
62
|
-
Cache* cache = reinterpret_cast<Cache*>(arg1);
|
|
63
|
-
Cache::Handle* h = reinterpret_cast<Cache::Handle*>(arg2);
|
|
64
|
-
cache->Release(h);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
51
|
static Slice GetSliceForFileNumber(const uint64_t* file_number) {
|
|
68
52
|
return Slice(reinterpret_cast<const char*>(file_number),
|
|
69
53
|
sizeof(*file_number));
|
|
@@ -105,14 +89,6 @@ TableCache::TableCache(const ImmutableOptions& ioptions,
|
|
|
105
89
|
|
|
106
90
|
TableCache::~TableCache() {}
|
|
107
91
|
|
|
108
|
-
TableReader* TableCache::GetTableReaderFromHandle(Cache::Handle* handle) {
|
|
109
|
-
return reinterpret_cast<TableReader*>(cache_->Value(handle));
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
void TableCache::ReleaseHandle(Cache::Handle* handle) {
|
|
113
|
-
cache_->Release(handle);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
92
|
Status TableCache::GetTableReader(
|
|
117
93
|
const ReadOptions& ro, const FileOptions& file_options,
|
|
118
94
|
const InternalKeyComparator& internal_comparator,
|
|
@@ -178,17 +154,10 @@ Status TableCache::GetTableReader(
|
|
|
178
154
|
return s;
|
|
179
155
|
}
|
|
180
156
|
|
|
181
|
-
void TableCache::EraseHandle(const FileDescriptor& fd, Cache::Handle* handle) {
|
|
182
|
-
ReleaseHandle(handle);
|
|
183
|
-
uint64_t number = fd.GetNumber();
|
|
184
|
-
Slice key = GetSliceForFileNumber(&number);
|
|
185
|
-
cache_->Erase(key);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
157
|
Status TableCache::FindTable(
|
|
189
158
|
const ReadOptions& ro, const FileOptions& file_options,
|
|
190
159
|
const InternalKeyComparator& internal_comparator,
|
|
191
|
-
const FileMetaData& file_meta,
|
|
160
|
+
const FileMetaData& file_meta, TypedHandle** handle,
|
|
192
161
|
const std::shared_ptr<const SliceTransform>& prefix_extractor,
|
|
193
162
|
const bool no_io, bool record_read_stats, HistogramImpl* file_read_hist,
|
|
194
163
|
bool skip_filters, int level, bool prefetch_index_and_filter_in_cache,
|
|
@@ -196,7 +165,7 @@ Status TableCache::FindTable(
|
|
|
196
165
|
PERF_TIMER_GUARD_WITH_CLOCK(find_table_nanos, ioptions_.clock);
|
|
197
166
|
uint64_t number = file_meta.fd.GetNumber();
|
|
198
167
|
Slice key = GetSliceForFileNumber(&number);
|
|
199
|
-
*handle = cache_
|
|
168
|
+
*handle = cache_.Lookup(key);
|
|
200
169
|
TEST_SYNC_POINT_CALLBACK("TableCache::FindTable:0",
|
|
201
170
|
const_cast<bool*>(&no_io));
|
|
202
171
|
|
|
@@ -206,7 +175,7 @@ Status TableCache::FindTable(
|
|
|
206
175
|
}
|
|
207
176
|
MutexLock load_lock(loader_mutex_.get(key));
|
|
208
177
|
// We check the cache again under loading mutex
|
|
209
|
-
*handle = cache_
|
|
178
|
+
*handle = cache_.Lookup(key);
|
|
210
179
|
if (*handle != nullptr) {
|
|
211
180
|
return Status::OK();
|
|
212
181
|
}
|
|
@@ -224,8 +193,7 @@ Status TableCache::FindTable(
|
|
|
224
193
|
// We do not cache error results so that if the error is transient,
|
|
225
194
|
// or somebody repairs the file, we recover automatically.
|
|
226
195
|
} else {
|
|
227
|
-
s = cache_
|
|
228
|
-
handle);
|
|
196
|
+
s = cache_.Insert(key, table_reader.get(), 1, handle);
|
|
229
197
|
if (s.ok()) {
|
|
230
198
|
// Release ownership of table reader.
|
|
231
199
|
table_reader.release();
|
|
@@ -251,7 +219,7 @@ InternalIterator* TableCache::NewIterator(
|
|
|
251
219
|
|
|
252
220
|
Status s;
|
|
253
221
|
TableReader* table_reader = nullptr;
|
|
254
|
-
|
|
222
|
+
TypedHandle* handle = nullptr;
|
|
255
223
|
if (table_reader_ptr != nullptr) {
|
|
256
224
|
*table_reader_ptr = nullptr;
|
|
257
225
|
}
|
|
@@ -266,7 +234,7 @@ InternalIterator* TableCache::NewIterator(
|
|
|
266
234
|
level, true /* prefetch_index_and_filter_in_cache */,
|
|
267
235
|
max_file_size_for_l0_meta_pin, file_meta.temperature);
|
|
268
236
|
if (s.ok()) {
|
|
269
|
-
table_reader =
|
|
237
|
+
table_reader = cache_.Value(handle);
|
|
270
238
|
}
|
|
271
239
|
}
|
|
272
240
|
InternalIterator* result = nullptr;
|
|
@@ -280,7 +248,7 @@ InternalIterator* TableCache::NewIterator(
|
|
|
280
248
|
file_options.compaction_readahead_size, allow_unprepared_value);
|
|
281
249
|
}
|
|
282
250
|
if (handle != nullptr) {
|
|
283
|
-
|
|
251
|
+
cache_.RegisterReleaseAsCleanup(handle, *result);
|
|
284
252
|
handle = nullptr; // prevent from releasing below
|
|
285
253
|
}
|
|
286
254
|
|
|
@@ -330,7 +298,7 @@ InternalIterator* TableCache::NewIterator(
|
|
|
330
298
|
}
|
|
331
299
|
|
|
332
300
|
if (handle != nullptr) {
|
|
333
|
-
|
|
301
|
+
cache_.Release(handle);
|
|
334
302
|
}
|
|
335
303
|
if (!s.ok()) {
|
|
336
304
|
assert(result == nullptr);
|
|
@@ -348,12 +316,12 @@ Status TableCache::GetRangeTombstoneIterator(
|
|
|
348
316
|
const FileDescriptor& fd = file_meta.fd;
|
|
349
317
|
Status s;
|
|
350
318
|
TableReader* t = fd.table_reader;
|
|
351
|
-
|
|
319
|
+
TypedHandle* handle = nullptr;
|
|
352
320
|
if (t == nullptr) {
|
|
353
321
|
s = FindTable(options, file_options_, internal_comparator, file_meta,
|
|
354
322
|
&handle);
|
|
355
323
|
if (s.ok()) {
|
|
356
|
-
t =
|
|
324
|
+
t = cache_.Value(handle);
|
|
357
325
|
}
|
|
358
326
|
}
|
|
359
327
|
if (s.ok()) {
|
|
@@ -362,9 +330,9 @@ Status TableCache::GetRangeTombstoneIterator(
|
|
|
362
330
|
}
|
|
363
331
|
if (handle) {
|
|
364
332
|
if (*out_iter) {
|
|
365
|
-
(
|
|
333
|
+
cache_.RegisterReleaseAsCleanup(handle, **out_iter);
|
|
366
334
|
} else {
|
|
367
|
-
|
|
335
|
+
cache_.Release(handle);
|
|
368
336
|
}
|
|
369
337
|
}
|
|
370
338
|
return s;
|
|
@@ -411,16 +379,10 @@ bool TableCache::GetFromRowCache(const Slice& user_key, IterKey& row_cache_key,
|
|
|
411
379
|
bool found = false;
|
|
412
380
|
|
|
413
381
|
row_cache_key.TrimAppend(prefix_size, user_key.data(), user_key.size());
|
|
414
|
-
|
|
415
|
-
|
|
382
|
+
RowCacheInterface row_cache{ioptions_.row_cache.get()};
|
|
383
|
+
if (auto row_handle = row_cache.Lookup(row_cache_key.GetUserKey())) {
|
|
416
384
|
// Cleanable routine to release the cache entry
|
|
417
385
|
Cleanable value_pinner;
|
|
418
|
-
auto release_cache_entry_func = [](void* cache_to_clean,
|
|
419
|
-
void* cache_handle) {
|
|
420
|
-
((Cache*)cache_to_clean)->Release((Cache::Handle*)cache_handle);
|
|
421
|
-
};
|
|
422
|
-
auto found_row_cache_entry =
|
|
423
|
-
static_cast<const std::string*>(ioptions_.row_cache->Value(row_handle));
|
|
424
386
|
// If it comes here value is located on the cache.
|
|
425
387
|
// found_row_cache_entry points to the value on cache,
|
|
426
388
|
// and value_pinner has cleanup procedure for the cached entry.
|
|
@@ -429,9 +391,8 @@ bool TableCache::GetFromRowCache(const Slice& user_key, IterKey& row_cache_key,
|
|
|
429
391
|
// cleanup routine under value_pinner will be delegated to
|
|
430
392
|
// get_context.pinnable_slice_. Cache entry is released when
|
|
431
393
|
// get_context.pinnable_slice_ is reset.
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
replayGetContextLog(*found_row_cache_entry, user_key, get_context,
|
|
394
|
+
row_cache.RegisterReleaseAsCleanup(row_handle, value_pinner);
|
|
395
|
+
replayGetContextLog(*row_cache.Value(row_handle), user_key, get_context,
|
|
435
396
|
&value_pinner);
|
|
436
397
|
RecordTick(ioptions_.stats, ROW_CACHE_HIT);
|
|
437
398
|
found = true;
|
|
@@ -470,7 +431,7 @@ Status TableCache::Get(
|
|
|
470
431
|
#endif // ROCKSDB_LITE
|
|
471
432
|
Status s;
|
|
472
433
|
TableReader* t = fd.table_reader;
|
|
473
|
-
|
|
434
|
+
TypedHandle* handle = nullptr;
|
|
474
435
|
if (!done) {
|
|
475
436
|
assert(s.ok());
|
|
476
437
|
if (t == nullptr) {
|
|
@@ -481,7 +442,7 @@ Status TableCache::Get(
|
|
|
481
442
|
level, true /* prefetch_index_and_filter_in_cache */,
|
|
482
443
|
max_file_size_for_l0_meta_pin, file_meta.temperature);
|
|
483
444
|
if (s.ok()) {
|
|
484
|
-
t =
|
|
445
|
+
t = cache_.Value(handle);
|
|
485
446
|
}
|
|
486
447
|
}
|
|
487
448
|
SequenceNumber* max_covering_tombstone_seq =
|
|
@@ -517,18 +478,17 @@ Status TableCache::Get(
|
|
|
517
478
|
#ifndef ROCKSDB_LITE
|
|
518
479
|
// Put the replay log in row cache only if something was found.
|
|
519
480
|
if (!done && s.ok() && row_cache_entry && !row_cache_entry->empty()) {
|
|
481
|
+
RowCacheInterface row_cache{ioptions_.row_cache.get()};
|
|
520
482
|
size_t charge = row_cache_entry->capacity() + sizeof(std::string);
|
|
521
|
-
|
|
483
|
+
auto row_ptr = new std::string(std::move(*row_cache_entry));
|
|
522
484
|
// If row cache is full, it's OK to continue.
|
|
523
|
-
|
|
524
|
-
->Insert(row_cache_key.GetUserKey(), row_ptr, charge,
|
|
525
|
-
&DeleteEntry<std::string>)
|
|
485
|
+
row_cache.Insert(row_cache_key.GetUserKey(), row_ptr, charge)
|
|
526
486
|
.PermitUncheckedError();
|
|
527
487
|
}
|
|
528
488
|
#endif // ROCKSDB_LITE
|
|
529
489
|
|
|
530
490
|
if (handle != nullptr) {
|
|
531
|
-
|
|
491
|
+
cache_.Release(handle);
|
|
532
492
|
}
|
|
533
493
|
return s;
|
|
534
494
|
}
|
|
@@ -561,7 +521,7 @@ Status TableCache::MultiGetFilter(
|
|
|
561
521
|
const FileMetaData& file_meta,
|
|
562
522
|
const std::shared_ptr<const SliceTransform>& prefix_extractor,
|
|
563
523
|
HistogramImpl* file_read_hist, int level,
|
|
564
|
-
MultiGetContext::Range* mget_range,
|
|
524
|
+
MultiGetContext::Range* mget_range, TypedHandle** table_handle) {
|
|
565
525
|
auto& fd = file_meta.fd;
|
|
566
526
|
#ifndef ROCKSDB_LITE
|
|
567
527
|
IterKey row_cache_key;
|
|
@@ -577,7 +537,7 @@ Status TableCache::MultiGetFilter(
|
|
|
577
537
|
#endif // ROCKSDB_LITE
|
|
578
538
|
Status s;
|
|
579
539
|
TableReader* t = fd.table_reader;
|
|
580
|
-
|
|
540
|
+
TypedHandle* handle = nullptr;
|
|
581
541
|
MultiGetContext::Range tombstone_range(*mget_range, mget_range->begin(),
|
|
582
542
|
mget_range->end());
|
|
583
543
|
if (t == nullptr) {
|
|
@@ -588,7 +548,7 @@ Status TableCache::MultiGetFilter(
|
|
|
588
548
|
level, true /* prefetch_index_and_filter_in_cache */,
|
|
589
549
|
/*max_file_size_for_l0_meta_pin=*/0, file_meta.temperature);
|
|
590
550
|
if (s.ok()) {
|
|
591
|
-
t =
|
|
551
|
+
t = cache_.Value(handle);
|
|
592
552
|
}
|
|
593
553
|
*table_handle = handle;
|
|
594
554
|
}
|
|
@@ -602,7 +562,7 @@ Status TableCache::MultiGetFilter(
|
|
|
602
562
|
UpdateRangeTombstoneSeqnums(options, t, tombstone_range);
|
|
603
563
|
}
|
|
604
564
|
if (mget_range->empty() && handle) {
|
|
605
|
-
|
|
565
|
+
cache_.Release(handle);
|
|
606
566
|
*table_handle = nullptr;
|
|
607
567
|
}
|
|
608
568
|
|
|
@@ -623,16 +583,16 @@ Status TableCache::GetTableProperties(
|
|
|
623
583
|
return Status::OK();
|
|
624
584
|
}
|
|
625
585
|
|
|
626
|
-
|
|
586
|
+
TypedHandle* table_handle = nullptr;
|
|
627
587
|
Status s = FindTable(ReadOptions(), file_options, internal_comparator,
|
|
628
588
|
file_meta, &table_handle, prefix_extractor, no_io);
|
|
629
589
|
if (!s.ok()) {
|
|
630
590
|
return s;
|
|
631
591
|
}
|
|
632
592
|
assert(table_handle);
|
|
633
|
-
auto table =
|
|
593
|
+
auto table = cache_.Value(table_handle);
|
|
634
594
|
*properties = table->GetTableProperties();
|
|
635
|
-
|
|
595
|
+
cache_.Release(table_handle);
|
|
636
596
|
return s;
|
|
637
597
|
}
|
|
638
598
|
|
|
@@ -641,18 +601,18 @@ Status TableCache::ApproximateKeyAnchors(
|
|
|
641
601
|
const FileMetaData& file_meta, std::vector<TableReader::Anchor>& anchors) {
|
|
642
602
|
Status s;
|
|
643
603
|
TableReader* t = file_meta.fd.table_reader;
|
|
644
|
-
|
|
604
|
+
TypedHandle* handle = nullptr;
|
|
645
605
|
if (t == nullptr) {
|
|
646
606
|
s = FindTable(ro, file_options_, internal_comparator, file_meta, &handle);
|
|
647
607
|
if (s.ok()) {
|
|
648
|
-
t =
|
|
608
|
+
t = cache_.Value(handle);
|
|
649
609
|
}
|
|
650
610
|
}
|
|
651
611
|
if (s.ok() && t != nullptr) {
|
|
652
612
|
s = t->ApproximateKeyAnchors(ro, anchors);
|
|
653
613
|
}
|
|
654
614
|
if (handle != nullptr) {
|
|
655
|
-
|
|
615
|
+
cache_.Release(handle);
|
|
656
616
|
}
|
|
657
617
|
return s;
|
|
658
618
|
}
|
|
@@ -668,29 +628,19 @@ size_t TableCache::GetMemoryUsageByTableReader(
|
|
|
668
628
|
return table_reader->ApproximateMemoryUsage();
|
|
669
629
|
}
|
|
670
630
|
|
|
671
|
-
|
|
631
|
+
TypedHandle* table_handle = nullptr;
|
|
672
632
|
Status s = FindTable(ReadOptions(), file_options, internal_comparator,
|
|
673
633
|
file_meta, &table_handle, prefix_extractor, true);
|
|
674
634
|
if (!s.ok()) {
|
|
675
635
|
return 0;
|
|
676
636
|
}
|
|
677
637
|
assert(table_handle);
|
|
678
|
-
auto table =
|
|
638
|
+
auto table = cache_.Value(table_handle);
|
|
679
639
|
auto ret = table->ApproximateMemoryUsage();
|
|
680
|
-
|
|
640
|
+
cache_.Release(table_handle);
|
|
681
641
|
return ret;
|
|
682
642
|
}
|
|
683
643
|
|
|
684
|
-
bool TableCache::HasEntry(Cache* cache, uint64_t file_number) {
|
|
685
|
-
Cache::Handle* handle = cache->Lookup(GetSliceForFileNumber(&file_number));
|
|
686
|
-
if (handle) {
|
|
687
|
-
cache->Release(handle);
|
|
688
|
-
return true;
|
|
689
|
-
} else {
|
|
690
|
-
return false;
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
|
|
694
644
|
void TableCache::Evict(Cache* cache, uint64_t file_number) {
|
|
695
645
|
cache->Erase(GetSliceForFileNumber(&file_number));
|
|
696
646
|
}
|
|
@@ -701,7 +651,7 @@ uint64_t TableCache::ApproximateOffsetOf(
|
|
|
701
651
|
const std::shared_ptr<const SliceTransform>& prefix_extractor) {
|
|
702
652
|
uint64_t result = 0;
|
|
703
653
|
TableReader* table_reader = file_meta.fd.table_reader;
|
|
704
|
-
|
|
654
|
+
TypedHandle* table_handle = nullptr;
|
|
705
655
|
if (table_reader == nullptr) {
|
|
706
656
|
const bool for_compaction = (caller == TableReaderCaller::kCompaction);
|
|
707
657
|
Status s =
|
|
@@ -709,7 +659,7 @@ uint64_t TableCache::ApproximateOffsetOf(
|
|
|
709
659
|
&table_handle, prefix_extractor, false /* no_io */,
|
|
710
660
|
!for_compaction /* record_read_stats */);
|
|
711
661
|
if (s.ok()) {
|
|
712
|
-
table_reader =
|
|
662
|
+
table_reader = cache_.Value(table_handle);
|
|
713
663
|
}
|
|
714
664
|
}
|
|
715
665
|
|
|
@@ -717,7 +667,7 @@ uint64_t TableCache::ApproximateOffsetOf(
|
|
|
717
667
|
result = table_reader->ApproximateOffsetOf(key, caller);
|
|
718
668
|
}
|
|
719
669
|
if (table_handle != nullptr) {
|
|
720
|
-
|
|
670
|
+
cache_.Release(table_handle);
|
|
721
671
|
}
|
|
722
672
|
|
|
723
673
|
return result;
|
|
@@ -729,7 +679,7 @@ uint64_t TableCache::ApproximateSize(
|
|
|
729
679
|
const std::shared_ptr<const SliceTransform>& prefix_extractor) {
|
|
730
680
|
uint64_t result = 0;
|
|
731
681
|
TableReader* table_reader = file_meta.fd.table_reader;
|
|
732
|
-
|
|
682
|
+
TypedHandle* table_handle = nullptr;
|
|
733
683
|
if (table_reader == nullptr) {
|
|
734
684
|
const bool for_compaction = (caller == TableReaderCaller::kCompaction);
|
|
735
685
|
Status s =
|
|
@@ -737,7 +687,7 @@ uint64_t TableCache::ApproximateSize(
|
|
|
737
687
|
&table_handle, prefix_extractor, false /* no_io */,
|
|
738
688
|
!for_compaction /* record_read_stats */);
|
|
739
689
|
if (s.ok()) {
|
|
740
|
-
table_reader =
|
|
690
|
+
table_reader = cache_.Value(table_handle);
|
|
741
691
|
}
|
|
742
692
|
}
|
|
743
693
|
|
|
@@ -745,7 +695,7 @@ uint64_t TableCache::ApproximateSize(
|
|
|
745
695
|
result = table_reader->ApproximateSize(start, end, caller);
|
|
746
696
|
}
|
|
747
697
|
if (table_handle != nullptr) {
|
|
748
|
-
|
|
698
|
+
cache_.Release(table_handle);
|
|
749
699
|
}
|
|
750
700
|
|
|
751
701
|
return result;
|