@nxtedition/rocksdb 8.1.4 → 8.1.5
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
|
@@ -66,10 +66,10 @@ TEST_F(StatsHistoryTest, RunStatsDumpPeriodSec) {
|
|
|
66
66
|
|
|
67
67
|
// Wait for the first stats persist to finish, as the initial delay could be
|
|
68
68
|
// different.
|
|
69
|
-
dbfull()->
|
|
69
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
70
70
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec - 1); });
|
|
71
71
|
|
|
72
|
-
dbfull()->
|
|
72
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
73
73
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
74
74
|
ASSERT_GE(counter, 1);
|
|
75
75
|
|
|
@@ -98,17 +98,17 @@ TEST_F(StatsHistoryTest, StatsPersistScheduling) {
|
|
|
98
98
|
|
|
99
99
|
// Wait for the first stats persist to finish, as the initial delay could be
|
|
100
100
|
// different.
|
|
101
|
-
dbfull()->
|
|
101
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
102
102
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec - 1); });
|
|
103
103
|
|
|
104
|
-
dbfull()->
|
|
104
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
105
105
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
106
106
|
ASSERT_GE(counter, 1);
|
|
107
107
|
|
|
108
108
|
// Test cancel job through SetOptions
|
|
109
109
|
ASSERT_OK(dbfull()->SetDBOptions({{"stats_persist_period_sec", "0"}}));
|
|
110
110
|
int old_val = counter;
|
|
111
|
-
dbfull()->
|
|
111
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
112
112
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec * 2); });
|
|
113
113
|
ASSERT_EQ(counter, old_val);
|
|
114
114
|
|
|
@@ -130,7 +130,7 @@ TEST_F(StatsHistoryTest, PersistentStatsFreshInstall) {
|
|
|
130
130
|
{{"stats_persist_period_sec", std::to_string(kPeriodSec)}}));
|
|
131
131
|
ASSERT_EQ(kPeriodSec, dbfull()->GetDBOptions().stats_persist_period_sec);
|
|
132
132
|
|
|
133
|
-
dbfull()->
|
|
133
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
134
134
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
135
135
|
ASSERT_GE(counter, 1);
|
|
136
136
|
Close();
|
|
@@ -149,11 +149,11 @@ TEST_F(StatsHistoryTest, GetStatsHistoryInMemory) {
|
|
|
149
149
|
ReopenWithColumnFamilies({"default", "pikachu"}, options);
|
|
150
150
|
|
|
151
151
|
// make sure the first stats persist to finish
|
|
152
|
-
dbfull()->
|
|
152
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
153
153
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec - 1); });
|
|
154
154
|
|
|
155
155
|
// Wait for stats persist to finish
|
|
156
|
-
dbfull()->
|
|
156
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
157
157
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
158
158
|
|
|
159
159
|
std::unique_ptr<StatsHistoryIterator> stats_iter;
|
|
@@ -171,7 +171,7 @@ TEST_F(StatsHistoryTest, GetStatsHistoryInMemory) {
|
|
|
171
171
|
ASSERT_GT(stats_count, 0);
|
|
172
172
|
// Wait a bit and verify no more stats are found
|
|
173
173
|
for (int i = 0; i < 10; ++i) {
|
|
174
|
-
dbfull()->
|
|
174
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
175
175
|
[&] { mock_clock_->MockSleepForSeconds(1); });
|
|
176
176
|
}
|
|
177
177
|
ASSERT_OK(db_->GetStatsHistory(0, mock_clock_->NowSeconds(), &stats_iter));
|
|
@@ -226,7 +226,7 @@ TEST_F(StatsHistoryTest, InMemoryStatsHistoryPurging) {
|
|
|
226
226
|
|
|
227
227
|
const int kIterations = 10;
|
|
228
228
|
for (int i = 0; i < kIterations; ++i) {
|
|
229
|
-
dbfull()->
|
|
229
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
230
230
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
231
231
|
}
|
|
232
232
|
|
|
@@ -250,7 +250,7 @@ TEST_F(StatsHistoryTest, InMemoryStatsHistoryPurging) {
|
|
|
250
250
|
|
|
251
251
|
// Wait for stats persist to finish
|
|
252
252
|
for (int i = 0; i < kIterations; ++i) {
|
|
253
|
-
dbfull()->
|
|
253
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
254
254
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
255
255
|
}
|
|
256
256
|
|
|
@@ -299,11 +299,11 @@ TEST_F(StatsHistoryTest, GetStatsHistoryFromDisk) {
|
|
|
299
299
|
|
|
300
300
|
// Wait for the first stats persist to finish, as the initial delay could be
|
|
301
301
|
// different.
|
|
302
|
-
dbfull()->
|
|
302
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
303
303
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec - 1); });
|
|
304
304
|
|
|
305
305
|
// Wait for stats persist to finish
|
|
306
|
-
dbfull()->
|
|
306
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
307
307
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
308
308
|
|
|
309
309
|
auto iter =
|
|
@@ -311,14 +311,14 @@ TEST_F(StatsHistoryTest, GetStatsHistoryFromDisk) {
|
|
|
311
311
|
int key_count1 = countkeys(iter);
|
|
312
312
|
delete iter;
|
|
313
313
|
|
|
314
|
-
dbfull()->
|
|
314
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
315
315
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
316
316
|
iter =
|
|
317
317
|
db_->NewIterator(ReadOptions(), dbfull()->PersistentStatsColumnFamily());
|
|
318
318
|
int key_count2 = countkeys(iter);
|
|
319
319
|
delete iter;
|
|
320
320
|
|
|
321
|
-
dbfull()->
|
|
321
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
322
322
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
323
323
|
iter =
|
|
324
324
|
db_->NewIterator(ReadOptions(), dbfull()->PersistentStatsColumnFamily());
|
|
@@ -392,32 +392,32 @@ TEST_F(StatsHistoryTest, PersitentStatsVerifyValue) {
|
|
|
392
392
|
|
|
393
393
|
// Wait for the first stats persist to finish, as the initial delay could be
|
|
394
394
|
// different.
|
|
395
|
-
dbfull()->
|
|
395
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
396
396
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec - 1); });
|
|
397
397
|
|
|
398
398
|
// Wait for stats persist to finish
|
|
399
|
-
dbfull()->
|
|
399
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
400
400
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
401
401
|
auto iter =
|
|
402
402
|
db_->NewIterator(ReadOptions(), dbfull()->PersistentStatsColumnFamily());
|
|
403
403
|
countkeys(iter);
|
|
404
404
|
delete iter;
|
|
405
405
|
|
|
406
|
-
dbfull()->
|
|
406
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
407
407
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
408
408
|
iter =
|
|
409
409
|
db_->NewIterator(ReadOptions(), dbfull()->PersistentStatsColumnFamily());
|
|
410
410
|
countkeys(iter);
|
|
411
411
|
delete iter;
|
|
412
412
|
|
|
413
|
-
dbfull()->
|
|
413
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
414
414
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
415
415
|
iter =
|
|
416
416
|
db_->NewIterator(ReadOptions(), dbfull()->PersistentStatsColumnFamily());
|
|
417
417
|
countkeys(iter);
|
|
418
418
|
delete iter;
|
|
419
419
|
|
|
420
|
-
dbfull()->
|
|
420
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
421
421
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
422
422
|
|
|
423
423
|
std::map<std::string, uint64_t> stats_map_after;
|
|
@@ -481,10 +481,10 @@ TEST_F(StatsHistoryTest, PersistentStatsCreateColumnFamilies) {
|
|
|
481
481
|
ASSERT_EQ(Get(2, "foo"), "bar");
|
|
482
482
|
|
|
483
483
|
// make sure the first stats persist to finish
|
|
484
|
-
dbfull()->
|
|
484
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
485
485
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec - 1); });
|
|
486
486
|
|
|
487
|
-
dbfull()->
|
|
487
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
488
488
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
489
489
|
auto iter =
|
|
490
490
|
db_->NewIterator(ReadOptions(), dbfull()->PersistentStatsColumnFamily());
|
|
@@ -581,7 +581,7 @@ TEST_F(StatsHistoryTest, ForceManualFlushStatsCF) {
|
|
|
581
581
|
|
|
582
582
|
// Wait for the first stats persist to finish, as the initial delay could be
|
|
583
583
|
// different.
|
|
584
|
-
dbfull()->
|
|
584
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
585
585
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec - 1); });
|
|
586
586
|
|
|
587
587
|
ColumnFamilyData* cfd_default =
|
|
@@ -600,7 +600,7 @@ TEST_F(StatsHistoryTest, ForceManualFlushStatsCF) {
|
|
|
600
600
|
ASSERT_OK(Put(1, "Eevee", "v0"));
|
|
601
601
|
ASSERT_EQ("v0", Get(1, "Eevee"));
|
|
602
602
|
|
|
603
|
-
dbfull()->
|
|
603
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
604
604
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
605
605
|
// writing to all three cf, flush default cf
|
|
606
606
|
// LogNumbers: default: 16, stats: 10, pikachu: 5
|
|
@@ -629,7 +629,7 @@ TEST_F(StatsHistoryTest, ForceManualFlushStatsCF) {
|
|
|
629
629
|
ASSERT_EQ("v2", Get("bar2"));
|
|
630
630
|
ASSERT_EQ("v2", Get("foo2"));
|
|
631
631
|
|
|
632
|
-
dbfull()->
|
|
632
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
633
633
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
634
634
|
// writing to default and stats cf, flushing default cf
|
|
635
635
|
// LogNumbers: default: 19, stats: 19, pikachu: 19
|
|
@@ -644,7 +644,7 @@ TEST_F(StatsHistoryTest, ForceManualFlushStatsCF) {
|
|
|
644
644
|
ASSERT_OK(Put(1, "Jolteon", "v3"));
|
|
645
645
|
ASSERT_EQ("v3", Get(1, "Jolteon"));
|
|
646
646
|
|
|
647
|
-
dbfull()->
|
|
647
|
+
dbfull()->TEST_WaitForPeriodicTaskRun(
|
|
648
648
|
[&] { mock_clock_->MockSleepForSeconds(kPeriodSec); });
|
|
649
649
|
// writing to all three cf, flushing test cf
|
|
650
650
|
// LogNumbers: default: 19, stats: 19, pikachu: 22
|
|
@@ -1324,13 +1324,14 @@ class TestSecondaryCache : public SecondaryCache {
|
|
|
1324
1324
|
public:
|
|
1325
1325
|
static const char* kClassName() { return "Test"; }
|
|
1326
1326
|
const char* Name() const override { return kClassName(); }
|
|
1327
|
-
Status Insert(const Slice& /*key*/,
|
|
1327
|
+
Status Insert(const Slice& /*key*/, Cache::ObjectPtr /*value*/,
|
|
1328
1328
|
const Cache::CacheItemHelper* /*helper*/) override {
|
|
1329
1329
|
return Status::NotSupported();
|
|
1330
1330
|
}
|
|
1331
1331
|
std::unique_ptr<SecondaryCacheResultHandle> Lookup(
|
|
1332
|
-
const Slice& /*key*/, const Cache::
|
|
1333
|
-
|
|
1332
|
+
const Slice& /*key*/, const Cache::CacheItemHelper* /*helper*/,
|
|
1333
|
+
Cache::CreateContext* /*create_context*/, bool /*wait*/,
|
|
1334
|
+
bool /*advise_erase*/, bool& is_in_sec_cache) override {
|
|
1334
1335
|
is_in_sec_cache = true;
|
|
1335
1336
|
return nullptr;
|
|
1336
1337
|
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
// This source code is licensed under both the GPLv2 (found in the
|
|
3
|
+
// COPYING file in the root directory) and Apache 2.0 License
|
|
4
|
+
// (found in the LICENSE.Apache file in the root directory).
|
|
5
|
+
|
|
6
|
+
#include "port/mmap.h"
|
|
7
|
+
|
|
8
|
+
#include <cassert>
|
|
9
|
+
#include <cstdio>
|
|
10
|
+
#include <cstring>
|
|
11
|
+
#include <new>
|
|
12
|
+
#include <utility>
|
|
13
|
+
|
|
14
|
+
#include "util/hash.h"
|
|
15
|
+
|
|
16
|
+
namespace ROCKSDB_NAMESPACE {
|
|
17
|
+
|
|
18
|
+
MemMapping::~MemMapping() {
|
|
19
|
+
#ifdef OS_WIN
|
|
20
|
+
if (addr_ != nullptr) {
|
|
21
|
+
(void)::UnmapViewOfFile(addr_);
|
|
22
|
+
}
|
|
23
|
+
if (page_file_handle_ != NULL) {
|
|
24
|
+
(void)::CloseHandle(page_file_handle_);
|
|
25
|
+
}
|
|
26
|
+
#else // OS_WIN -> !OS_WIN
|
|
27
|
+
if (addr_ != nullptr) {
|
|
28
|
+
auto status = munmap(addr_, length_);
|
|
29
|
+
assert(status == 0);
|
|
30
|
+
if (status != 0) {
|
|
31
|
+
// TODO: handle error?
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
#endif // OS_WIN
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
MemMapping::MemMapping(MemMapping&& other) noexcept {
|
|
38
|
+
*this = std::move(other);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
MemMapping& MemMapping::operator=(MemMapping&& other) noexcept {
|
|
42
|
+
if (&other == this) {
|
|
43
|
+
return *this;
|
|
44
|
+
}
|
|
45
|
+
this->~MemMapping();
|
|
46
|
+
std::memcpy(this, &other, sizeof(*this));
|
|
47
|
+
new (&other) MemMapping();
|
|
48
|
+
return *this;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
MemMapping MemMapping::AllocateAnonymous(size_t length, bool huge) {
|
|
52
|
+
MemMapping mm;
|
|
53
|
+
mm.length_ = length;
|
|
54
|
+
assert(mm.addr_ == nullptr);
|
|
55
|
+
if (length == 0) {
|
|
56
|
+
// OK to leave addr as nullptr
|
|
57
|
+
return mm;
|
|
58
|
+
}
|
|
59
|
+
int huge_flag = 0;
|
|
60
|
+
#ifdef OS_WIN
|
|
61
|
+
if (huge) {
|
|
62
|
+
#ifdef FILE_MAP_LARGE_PAGES
|
|
63
|
+
huge_flag = FILE_MAP_LARGE_PAGES;
|
|
64
|
+
#endif // FILE_MAP_LARGE_PAGES
|
|
65
|
+
}
|
|
66
|
+
mm.page_file_handle_ = ::CreateFileMapping(
|
|
67
|
+
INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE | SEC_COMMIT,
|
|
68
|
+
Upper32of64(length), Lower32of64(length), nullptr);
|
|
69
|
+
if (mm.page_file_handle_ == NULL) {
|
|
70
|
+
// Failure
|
|
71
|
+
return mm;
|
|
72
|
+
}
|
|
73
|
+
mm.addr_ = ::MapViewOfFile(mm.page_file_handle_, FILE_MAP_WRITE | huge_flag,
|
|
74
|
+
0, 0, length);
|
|
75
|
+
#else // OS_WIN -> !OS_WIN
|
|
76
|
+
if (huge) {
|
|
77
|
+
#ifdef MAP_HUGETLB
|
|
78
|
+
huge_flag = MAP_HUGETLB;
|
|
79
|
+
#endif // MAP_HUGE_TLB
|
|
80
|
+
}
|
|
81
|
+
mm.addr_ = mmap(nullptr, length, PROT_READ | PROT_WRITE,
|
|
82
|
+
MAP_PRIVATE | MAP_ANONYMOUS | huge_flag, -1, 0);
|
|
83
|
+
if (mm.addr_ == MAP_FAILED) {
|
|
84
|
+
mm.addr_ = nullptr;
|
|
85
|
+
}
|
|
86
|
+
#endif // OS_WIN
|
|
87
|
+
return mm;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
MemMapping MemMapping::AllocateHuge(size_t length) {
|
|
91
|
+
return AllocateAnonymous(length, /*huge*/ true);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
MemMapping MemMapping::AllocateLazyZeroed(size_t length) {
|
|
95
|
+
return AllocateAnonymous(length, /*huge*/ false);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
// This source code is licensed under both the GPLv2 (found in the
|
|
3
|
+
// COPYING file in the root directory) and Apache 2.0 License
|
|
4
|
+
// (found in the LICENSE.Apache file in the root directory).
|
|
5
|
+
|
|
6
|
+
#pragma once
|
|
7
|
+
|
|
8
|
+
#ifdef OS_WIN
|
|
9
|
+
#include "port/win/port_win.h"
|
|
10
|
+
// ^^^ For proper/safe inclusion of windows.h. Must come first.
|
|
11
|
+
#include <memoryapi.h>
|
|
12
|
+
#else
|
|
13
|
+
#include <sys/mman.h>
|
|
14
|
+
#endif // OS_WIN
|
|
15
|
+
|
|
16
|
+
#include <cstdint>
|
|
17
|
+
|
|
18
|
+
#include "rocksdb/rocksdb_namespace.h"
|
|
19
|
+
|
|
20
|
+
namespace ROCKSDB_NAMESPACE {
|
|
21
|
+
|
|
22
|
+
// An RAII wrapper for mmaped memory
|
|
23
|
+
class MemMapping {
|
|
24
|
+
public:
|
|
25
|
+
static constexpr bool kHugePageSupported =
|
|
26
|
+
#if defined(MAP_HUGETLB) || defined(FILE_MAP_LARGE_PAGES)
|
|
27
|
+
true;
|
|
28
|
+
#else
|
|
29
|
+
false;
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
// Allocate memory requesting to be backed by huge pages
|
|
33
|
+
static MemMapping AllocateHuge(size_t length);
|
|
34
|
+
|
|
35
|
+
// Allocate memory that is only lazily mapped to resident memory and
|
|
36
|
+
// guaranteed to be zero-initialized. Note that some platforms like
|
|
37
|
+
// Linux allow memory over-commit, where only the used portion of memory
|
|
38
|
+
// matters, while other platforms require enough swap space (page file) to
|
|
39
|
+
// back the full mapping.
|
|
40
|
+
static MemMapping AllocateLazyZeroed(size_t length);
|
|
41
|
+
|
|
42
|
+
// No copies
|
|
43
|
+
MemMapping(const MemMapping&) = delete;
|
|
44
|
+
MemMapping& operator=(const MemMapping&) = delete;
|
|
45
|
+
// Move
|
|
46
|
+
MemMapping(MemMapping&&) noexcept;
|
|
47
|
+
MemMapping& operator=(MemMapping&&) noexcept;
|
|
48
|
+
|
|
49
|
+
// Releases the mapping
|
|
50
|
+
~MemMapping();
|
|
51
|
+
|
|
52
|
+
inline void* Get() const { return addr_; }
|
|
53
|
+
inline size_t Length() const { return length_; }
|
|
54
|
+
|
|
55
|
+
private:
|
|
56
|
+
MemMapping() {}
|
|
57
|
+
|
|
58
|
+
// The mapped memory, or nullptr on failure / not supported
|
|
59
|
+
void* addr_ = nullptr;
|
|
60
|
+
// The known usable number of bytes starting at that address
|
|
61
|
+
size_t length_ = 0;
|
|
62
|
+
|
|
63
|
+
#ifdef OS_WIN
|
|
64
|
+
HANDLE page_file_handle_ = NULL;
|
|
65
|
+
#endif // OS_WIN
|
|
66
|
+
|
|
67
|
+
static MemMapping AllocateAnonymous(size_t length, bool huge);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -169,6 +169,8 @@ static inline void AsmVolatilePause() {
|
|
|
169
169
|
asm volatile("isb");
|
|
170
170
|
#elif defined(__powerpc64__)
|
|
171
171
|
asm volatile("or 27,27,27");
|
|
172
|
+
#elif defined(__loongarch64)
|
|
173
|
+
asm volatile("dbar 0");
|
|
172
174
|
#endif
|
|
173
175
|
// it's okay for other platforms to be no-ops
|
|
174
176
|
}
|
|
Binary file
|
|
@@ -3,6 +3,7 @@ LIB_SOURCES = \
|
|
|
3
3
|
cache/cache.cc \
|
|
4
4
|
cache/cache_entry_roles.cc \
|
|
5
5
|
cache/cache_key.cc \
|
|
6
|
+
cache/cache_helpers.cc \
|
|
6
7
|
cache/cache_reservation_manager.cc \
|
|
7
8
|
cache/charged_cache.cc \
|
|
8
9
|
cache/clock_cache.cc \
|
|
@@ -154,6 +155,7 @@ LIB_SOURCES = \
|
|
|
154
155
|
options/options.cc \
|
|
155
156
|
options/options_helper.cc \
|
|
156
157
|
options/options_parser.cc \
|
|
158
|
+
port/mmap.cc \
|
|
157
159
|
port/port_posix.cc \
|
|
158
160
|
port/win/env_default.cc \
|
|
159
161
|
port/win/env_win.cc \
|
|
@@ -170,6 +172,7 @@ LIB_SOURCES = \
|
|
|
170
172
|
table/block_based/block_based_table_iterator.cc \
|
|
171
173
|
table/block_based/block_based_table_reader.cc \
|
|
172
174
|
table/block_based/block_builder.cc \
|
|
175
|
+
table/block_based/block_cache.cc \
|
|
173
176
|
table/block_based/block_prefetcher.cc \
|
|
174
177
|
table/block_based/block_prefix_index.cc \
|
|
175
178
|
table/block_based/data_block_hash_index.cc \
|
|
@@ -48,8 +48,9 @@ Status AdaptiveTableFactory::NewTableReader(
|
|
|
48
48
|
bool prefetch_index_and_filter_in_cache) const {
|
|
49
49
|
Footer footer;
|
|
50
50
|
IOOptions opts;
|
|
51
|
-
auto s =
|
|
52
|
-
|
|
51
|
+
auto s =
|
|
52
|
+
ReadFooterFromFile(opts, file.get(), *table_reader_options.ioptions.fs,
|
|
53
|
+
nullptr /* prefetch_buffer */, file_size, &footer);
|
|
53
54
|
if (!s.ok()) {
|
|
54
55
|
return s;
|
|
55
56
|
}
|
|
@@ -236,6 +236,9 @@ class Block {
|
|
|
236
236
|
// Report an approximation of how much memory has been used.
|
|
237
237
|
size_t ApproximateMemoryUsage() const;
|
|
238
238
|
|
|
239
|
+
// For TypedCacheInterface
|
|
240
|
+
const Slice& ContentSlice() const { return contents_.data; }
|
|
241
|
+
|
|
239
242
|
private:
|
|
240
243
|
BlockContents contents_;
|
|
241
244
|
const char* data_; // contents_.data.data()
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
#include <unordered_map>
|
|
22
22
|
#include <utility>
|
|
23
23
|
|
|
24
|
+
#include "block_cache.h"
|
|
24
25
|
#include "cache/cache_entry_roles.h"
|
|
25
26
|
#include "cache/cache_helpers.h"
|
|
26
27
|
#include "cache/cache_key.h"
|
|
@@ -41,7 +42,6 @@
|
|
|
41
42
|
#include "table/block_based/block_based_table_factory.h"
|
|
42
43
|
#include "table/block_based/block_based_table_reader.h"
|
|
43
44
|
#include "table/block_based/block_builder.h"
|
|
44
|
-
#include "table/block_based/block_like_traits.h"
|
|
45
45
|
#include "table/block_based/filter_block.h"
|
|
46
46
|
#include "table/block_based/filter_policy_internal.h"
|
|
47
47
|
#include "table/block_based/full_filter_block.h"
|
|
@@ -335,6 +335,7 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
335
335
|
std::vector<std::unique_ptr<IntTblPropCollector>> table_properties_collectors;
|
|
336
336
|
|
|
337
337
|
std::unique_ptr<ParallelCompressionRep> pc_rep;
|
|
338
|
+
BlockCreateContext create_context;
|
|
338
339
|
|
|
339
340
|
uint64_t get_offset() { return offset.load(std::memory_order_relaxed); }
|
|
340
341
|
void set_offset(uint64_t o) { offset.store(o, std::memory_order_relaxed); }
|
|
@@ -443,6 +444,9 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
443
444
|
flush_block_policy(
|
|
444
445
|
table_options.flush_block_policy_factory->NewFlushBlockPolicy(
|
|
445
446
|
table_options, data_block)),
|
|
447
|
+
create_context(&table_options, ioptions.stats,
|
|
448
|
+
compression_type == kZSTD ||
|
|
449
|
+
compression_type == kZSTDNotFinalCompression),
|
|
446
450
|
status_ok(true),
|
|
447
451
|
io_status_ok(true) {
|
|
448
452
|
if (tbo.target_file_size == 0) {
|
|
@@ -1240,6 +1244,10 @@ void BlockBasedTableBuilder::WriteMaybeCompressedBlock(
|
|
|
1240
1244
|
handle->set_size(block_contents.size());
|
|
1241
1245
|
assert(status().ok());
|
|
1242
1246
|
assert(io_status().ok());
|
|
1247
|
+
if (uncompressed_block_data == nullptr) {
|
|
1248
|
+
uncompressed_block_data = &block_contents;
|
|
1249
|
+
assert(type == kNoCompression);
|
|
1250
|
+
}
|
|
1243
1251
|
|
|
1244
1252
|
{
|
|
1245
1253
|
IOStatus io_s = r->file->Append(block_contents);
|
|
@@ -1291,12 +1299,8 @@ void BlockBasedTableBuilder::WriteMaybeCompressedBlock(
|
|
|
1291
1299
|
warm_cache = false;
|
|
1292
1300
|
}
|
|
1293
1301
|
if (warm_cache) {
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
} else if (uncompressed_block_data != nullptr) {
|
|
1297
|
-
s = InsertBlockInCacheHelper(*uncompressed_block_data, handle,
|
|
1298
|
-
block_type);
|
|
1299
|
-
}
|
|
1302
|
+
s = InsertBlockInCacheHelper(*uncompressed_block_data, handle,
|
|
1303
|
+
block_type);
|
|
1300
1304
|
if (!s.ok()) {
|
|
1301
1305
|
r->SetStatus(s);
|
|
1302
1306
|
return;
|
|
@@ -1425,13 +1429,14 @@ Status BlockBasedTableBuilder::InsertBlockInCompressedCache(
|
|
|
1425
1429
|
const Slice& block_contents, const CompressionType type,
|
|
1426
1430
|
const BlockHandle* handle) {
|
|
1427
1431
|
Rep* r = rep_;
|
|
1428
|
-
|
|
1432
|
+
CompressedBlockCacheInterface block_cache_compressed{
|
|
1433
|
+
r->table_options.block_cache_compressed.get()};
|
|
1429
1434
|
Status s;
|
|
1430
|
-
if (type != kNoCompression && block_cache_compressed
|
|
1435
|
+
if (type != kNoCompression && block_cache_compressed) {
|
|
1431
1436
|
size_t size = block_contents.size();
|
|
1432
1437
|
|
|
1433
|
-
auto ubuf =
|
|
1434
|
-
|
|
1438
|
+
auto ubuf = AllocateBlock(size + 1,
|
|
1439
|
+
block_cache_compressed.get()->memory_allocator());
|
|
1435
1440
|
memcpy(ubuf.get(), block_contents.data(), size);
|
|
1436
1441
|
ubuf[size] = type;
|
|
1437
1442
|
|
|
@@ -1443,10 +1448,9 @@ Status BlockBasedTableBuilder::InsertBlockInCompressedCache(
|
|
|
1443
1448
|
|
|
1444
1449
|
CacheKey key = BlockBasedTable::GetCacheKey(rep_->base_cache_key, *handle);
|
|
1445
1450
|
|
|
1446
|
-
s = block_cache_compressed
|
|
1451
|
+
s = block_cache_compressed.Insert(
|
|
1447
1452
|
key.AsSlice(), block_contents_to_cache,
|
|
1448
|
-
block_contents_to_cache->ApproximateMemoryUsage()
|
|
1449
|
-
&DeleteCacheEntry<BlockContents>);
|
|
1453
|
+
block_contents_to_cache->ApproximateMemoryUsage());
|
|
1450
1454
|
if (s.ok()) {
|
|
1451
1455
|
RecordTick(rep_->ioptions.stats, BLOCK_CACHE_COMPRESSED_ADD);
|
|
1452
1456
|
} else {
|
|
@@ -1462,65 +1466,19 @@ Status BlockBasedTableBuilder::InsertBlockInCompressedCache(
|
|
|
1462
1466
|
Status BlockBasedTableBuilder::InsertBlockInCacheHelper(
|
|
1463
1467
|
const Slice& block_contents, const BlockHandle* handle,
|
|
1464
1468
|
BlockType block_type) {
|
|
1465
|
-
Status s;
|
|
1466
|
-
switch (block_type) {
|
|
1467
|
-
case BlockType::kData:
|
|
1468
|
-
case BlockType::kIndex:
|
|
1469
|
-
case BlockType::kFilterPartitionIndex:
|
|
1470
|
-
s = InsertBlockInCache<Block>(block_contents, handle, block_type);
|
|
1471
|
-
break;
|
|
1472
|
-
case BlockType::kFilter:
|
|
1473
|
-
s = InsertBlockInCache<ParsedFullFilterBlock>(block_contents, handle,
|
|
1474
|
-
block_type);
|
|
1475
|
-
break;
|
|
1476
|
-
case BlockType::kCompressionDictionary:
|
|
1477
|
-
s = InsertBlockInCache<UncompressionDict>(block_contents, handle,
|
|
1478
|
-
block_type);
|
|
1479
|
-
break;
|
|
1480
|
-
default:
|
|
1481
|
-
// no-op / not cached
|
|
1482
|
-
break;
|
|
1483
|
-
}
|
|
1484
|
-
return s;
|
|
1485
|
-
}
|
|
1486
1469
|
|
|
1487
|
-
template <typename TBlocklike>
|
|
1488
|
-
Status BlockBasedTableBuilder::InsertBlockInCache(const Slice& block_contents,
|
|
1489
|
-
const BlockHandle* handle,
|
|
1490
|
-
BlockType block_type) {
|
|
1491
|
-
// Uncompressed regular block cache
|
|
1492
1470
|
Cache* block_cache = rep_->table_options.block_cache.get();
|
|
1493
1471
|
Status s;
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
memcpy(buf.get(), block_contents.data(), size);
|
|
1498
|
-
BlockContents results(std::move(buf), size);
|
|
1499
|
-
|
|
1472
|
+
auto helper =
|
|
1473
|
+
GetCacheItemHelper(block_type, rep_->ioptions.lowest_used_cache_tier);
|
|
1474
|
+
if (block_cache && helper && helper->create_cb) {
|
|
1500
1475
|
CacheKey key = BlockBasedTable::GetCacheKey(rep_->base_cache_key, *handle);
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
// TODO akanksha:: Dedup below code by calling
|
|
1506
|
-
// BlockBasedTable::PutDataBlockToCache.
|
|
1507
|
-
std::unique_ptr<TBlocklike> block_holder(
|
|
1508
|
-
BlocklikeTraits<TBlocklike>::Create(
|
|
1509
|
-
std::move(results), read_amp_bytes_per_bit,
|
|
1510
|
-
rep_->ioptions.statistics.get(),
|
|
1511
|
-
false /*rep_->blocks_definitely_zstd_compressed*/,
|
|
1512
|
-
rep_->table_options.filter_policy.get()));
|
|
1513
|
-
|
|
1514
|
-
assert(block_holder->own_bytes());
|
|
1515
|
-
size_t charge = block_holder->ApproximateMemoryUsage();
|
|
1516
|
-
s = block_cache->Insert(
|
|
1517
|
-
key.AsSlice(), block_holder.get(),
|
|
1518
|
-
BlocklikeTraits<TBlocklike>::GetCacheItemHelper(block_type), charge,
|
|
1519
|
-
nullptr, Cache::Priority::LOW);
|
|
1476
|
+
size_t charge;
|
|
1477
|
+
s = WarmInCache(block_cache, key.AsSlice(), block_contents,
|
|
1478
|
+
&rep_->create_context, helper, Cache::Priority::LOW,
|
|
1479
|
+
&charge);
|
|
1520
1480
|
|
|
1521
1481
|
if (s.ok()) {
|
|
1522
|
-
// Release ownership of block_holder.
|
|
1523
|
-
block_holder.release();
|
|
1524
1482
|
BlockBasedTable::UpdateCacheInsertionMetrics(
|
|
1525
1483
|
block_type, nullptr /*get_context*/, charge, s.IsOkOverwritten(),
|
|
1526
1484
|
rep_->ioptions.stats);
|
|
@@ -122,9 +122,9 @@ class BlockBasedTableBuilder : public TableBuilder {
|
|
|
122
122
|
void WriteBlock(const Slice& block_contents, BlockHandle* handle,
|
|
123
123
|
BlockType block_type);
|
|
124
124
|
// Directly write data to the file.
|
|
125
|
-
void WriteMaybeCompressedBlock(
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
void WriteMaybeCompressedBlock(
|
|
126
|
+
const Slice& block_contents, CompressionType, BlockHandle* handle,
|
|
127
|
+
BlockType block_type, const Slice* uncompressed_block_data = nullptr);
|
|
128
128
|
|
|
129
129
|
void SetupCacheKeyPrefix(const TableBuilderOptions& tbo);
|
|
130
130
|
|