@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
|
@@ -245,6 +245,14 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "s390x")
|
|
|
245
245
|
endif(HAS_S390X_MARCH_NATIVE)
|
|
246
246
|
endif(CMAKE_SYSTEM_PROCESSOR MATCHES "s390x")
|
|
247
247
|
|
|
248
|
+
if(CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch64")
|
|
249
|
+
CHECK_C_COMPILER_FLAG("-march=loongarch64" HAS_LOONGARCH64)
|
|
250
|
+
if(HAS_LOONGARCH64)
|
|
251
|
+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=loongarch64 -mtune=loongarch64")
|
|
252
|
+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=loongarch64 -mtune=loongarch64")
|
|
253
|
+
endif(HAS_LOONGARCH64)
|
|
254
|
+
endif(CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch64")
|
|
255
|
+
|
|
248
256
|
option(PORTABLE "build a portable binary" OFF)
|
|
249
257
|
option(FORCE_SSE42 "force building with SSE4.2, even when PORTABLE=ON" OFF)
|
|
250
258
|
option(FORCE_AVX "force building with AVX, even when PORTABLE=ON" OFF)
|
|
@@ -275,6 +283,9 @@ if(PORTABLE)
|
|
|
275
283
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^s390x")
|
|
276
284
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=z196")
|
|
277
285
|
endif()
|
|
286
|
+
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^loongarch64")
|
|
287
|
+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=loongarch64")
|
|
288
|
+
endif()
|
|
278
289
|
endif()
|
|
279
290
|
else()
|
|
280
291
|
if(MSVC)
|
|
@@ -649,6 +660,7 @@ set(SOURCES
|
|
|
649
660
|
cache/cache.cc
|
|
650
661
|
cache/cache_entry_roles.cc
|
|
651
662
|
cache/cache_key.cc
|
|
663
|
+
cache/cache_helpers.cc
|
|
652
664
|
cache/cache_reservation_manager.cc
|
|
653
665
|
cache/charged_cache.cc
|
|
654
666
|
cache/clock_cache.cc
|
|
@@ -796,6 +808,7 @@ set(SOURCES
|
|
|
796
808
|
options/options.cc
|
|
797
809
|
options/options_helper.cc
|
|
798
810
|
options/options_parser.cc
|
|
811
|
+
port/mmap.cc
|
|
799
812
|
port/stack_trace.cc
|
|
800
813
|
table/adaptive/adaptive_table_factory.cc
|
|
801
814
|
table/block_based/binary_search_index_reader.cc
|
|
@@ -805,6 +818,7 @@ set(SOURCES
|
|
|
805
818
|
table/block_based/block_based_table_iterator.cc
|
|
806
819
|
table/block_based/block_based_table_reader.cc
|
|
807
820
|
table/block_based/block_builder.cc
|
|
821
|
+
table/block_based/block_cache.cc
|
|
808
822
|
table/block_based/block_prefetcher.cc
|
|
809
823
|
table/block_based/block_prefix_index.cc
|
|
810
824
|
table/block_based/data_block_hash_index.cc
|
|
@@ -978,6 +992,12 @@ if ( ROCKSDB_PLUGINS )
|
|
|
978
992
|
plugin/${plugin}/${src}
|
|
979
993
|
PROPERTIES COMPILE_FLAGS "${${plugin}_COMPILE_FLAGS}")
|
|
980
994
|
endforeach()
|
|
995
|
+
foreach (test ${${plugin}_TESTS})
|
|
996
|
+
list(APPEND PLUGIN_TESTS plugin/${plugin}/${test})
|
|
997
|
+
set_source_files_properties(
|
|
998
|
+
plugin/${plugin}/${test}
|
|
999
|
+
PROPERTIES COMPILE_FLAGS "${${plugin}_COMPILE_FLAGS}")
|
|
1000
|
+
endforeach()
|
|
981
1001
|
foreach (path ${${plugin}_INCLUDE_PATHS})
|
|
982
1002
|
include_directories(${path})
|
|
983
1003
|
endforeach()
|
|
@@ -1469,6 +1489,7 @@ if(WITH_TESTS)
|
|
|
1469
1489
|
utilities/ttl/ttl_test.cc
|
|
1470
1490
|
utilities/util_merge_operators_test.cc
|
|
1471
1491
|
utilities/write_batch_with_index/write_batch_with_index_test.cc
|
|
1492
|
+
${PLUGIN_TESTS}
|
|
1472
1493
|
)
|
|
1473
1494
|
endif()
|
|
1474
1495
|
|
|
@@ -266,6 +266,7 @@ ROCKSDB_PLUGIN_EXTERNS = $(foreach p, $(ROCKSDB_PLUGIN_W_FUNCS), int $($(p)_FUNC
|
|
|
266
266
|
ROCKSDB_PLUGIN_BUILTINS = $(foreach p, $(ROCKSDB_PLUGIN_W_FUNCS), {\"$(p)\"\, $($(p)_FUNC)}\,)
|
|
267
267
|
ROCKSDB_PLUGIN_LDFLAGS = $(foreach plugin, $(ROCKSDB_PLUGINS), $($(plugin)_LDFLAGS))
|
|
268
268
|
ROCKSDB_PLUGIN_PKGCONFIG_REQUIRES = $(foreach plugin, $(ROCKSDB_PLUGINS), $($(plugin)_PKGCONFIG_REQUIRES))
|
|
269
|
+
ROCKSDB_PLUGIN_TESTS = $(foreach p, $(ROCKSDB_PLUGINS), $(foreach test, $($(p)_TESTS), plugin/$(p)/$(test)))
|
|
269
270
|
|
|
270
271
|
CXXFLAGS += $(foreach plugin, $(ROCKSDB_PLUGINS), $($(plugin)_CXXFLAGS))
|
|
271
272
|
PLATFORM_LDFLAGS += $(ROCKSDB_PLUGIN_LDFLAGS)
|
|
@@ -647,10 +648,12 @@ STRESS_OBJECTS = $(patsubst %.cc, $(OBJ_DIR)/%.o, $(STRESS_LIB_SOURCES))
|
|
|
647
648
|
ALL_SOURCES = $(filter-out util/build_version.cc, $(LIB_SOURCES)) $(TEST_LIB_SOURCES) $(MOCK_LIB_SOURCES) $(GTEST_DIR)/gtest/gtest-all.cc
|
|
648
649
|
ALL_SOURCES += $(TOOL_LIB_SOURCES) $(BENCH_LIB_SOURCES) $(CACHE_BENCH_LIB_SOURCES) $(ANALYZER_LIB_SOURCES) $(STRESS_LIB_SOURCES)
|
|
649
650
|
ALL_SOURCES += $(TEST_MAIN_SOURCES) $(TOOL_MAIN_SOURCES) $(BENCH_MAIN_SOURCES)
|
|
650
|
-
ALL_SOURCES += $(ROCKSDB_PLUGIN_SOURCES)
|
|
651
|
+
ALL_SOURCES += $(ROCKSDB_PLUGIN_SOURCES) $(ROCKSDB_PLUGIN_TESTS)
|
|
651
652
|
|
|
653
|
+
PLUGIN_TESTS = $(patsubst %.cc, %, $(notdir $(ROCKSDB_PLUGIN_TESTS)))
|
|
652
654
|
TESTS = $(patsubst %.cc, %, $(notdir $(TEST_MAIN_SOURCES)))
|
|
653
655
|
TESTS += $(patsubst %.c, %, $(notdir $(TEST_MAIN_SOURCES_C)))
|
|
656
|
+
TESTS += $(PLUGIN_TESTS)
|
|
654
657
|
|
|
655
658
|
# `make check-headers` to very that each header file includes its own
|
|
656
659
|
# dependencies
|
|
@@ -702,6 +705,7 @@ NON_PARALLEL_TEST = \
|
|
|
702
705
|
env_test \
|
|
703
706
|
deletefile_test \
|
|
704
707
|
db_bloom_filter_test \
|
|
708
|
+
$(PLUGIN_TESTS) \
|
|
705
709
|
|
|
706
710
|
PARALLEL_TEST = $(filter-out $(NON_PARALLEL_TEST), $(TESTS))
|
|
707
711
|
|
|
@@ -1355,6 +1359,14 @@ db_sanity_test: $(OBJ_DIR)/tools/db_sanity_test.o $(LIBRARY)
|
|
|
1355
1359
|
db_repl_stress: $(OBJ_DIR)/tools/db_repl_stress.o $(LIBRARY)
|
|
1356
1360
|
$(AM_LINK)
|
|
1357
1361
|
|
|
1362
|
+
define MakeTestRule
|
|
1363
|
+
$(notdir $(1:%.cc=%)): $(1:%.cc=$$(OBJ_DIR)/%.o) $$(TEST_LIBRARY) $$(LIBRARY)
|
|
1364
|
+
$$(AM_LINK)
|
|
1365
|
+
endef
|
|
1366
|
+
|
|
1367
|
+
# For each PLUGIN test, create a rule to generate the test executable
|
|
1368
|
+
$(foreach test, $(ROCKSDB_PLUGIN_TESTS), $(eval $(call MakeTestRule, $(test))))
|
|
1369
|
+
|
|
1358
1370
|
arena_test: $(OBJ_DIR)/memory/arena_test.o $(TEST_LIBRARY) $(LIBRARY)
|
|
1359
1371
|
$(AM_LINK)
|
|
1360
1372
|
|
|
@@ -2058,7 +2070,7 @@ JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux
|
|
|
2058
2070
|
ifeq ($(PLATFORM), OS_SOLARIS)
|
|
2059
2071
|
ARCH := $(shell isainfo -b)
|
|
2060
2072
|
else ifeq ($(PLATFORM), OS_OPENBSD)
|
|
2061
|
-
ifneq (,$(filter amd64 ppc64 ppc64le s390x arm64 aarch64 sparc64, $(MACHINE)))
|
|
2073
|
+
ifneq (,$(filter amd64 ppc64 ppc64le s390x arm64 aarch64 sparc64 loongarch64, $(MACHINE)))
|
|
2062
2074
|
ARCH := 64
|
|
2063
2075
|
else
|
|
2064
2076
|
ARCH := 32
|
|
@@ -2079,7 +2091,7 @@ ifneq ($(origin JNI_LIBC), undefined)
|
|
|
2079
2091
|
endif
|
|
2080
2092
|
|
|
2081
2093
|
ifeq (,$(ROCKSDBJNILIB))
|
|
2082
|
-
ifneq (,$(filter ppc% s390x arm64 aarch64 sparc64, $(MACHINE)))
|
|
2094
|
+
ifneq (,$(filter ppc% s390x arm64 aarch64 sparc64 loongarch64, $(MACHINE)))
|
|
2083
2095
|
ROCKSDBJNILIB = librocksdbjni-linux-$(MACHINE)$(JNI_LIBC_POSTFIX).so
|
|
2084
2096
|
else
|
|
2085
2097
|
ROCKSDBJNILIB = librocksdbjni-linux$(ARCH)$(JNI_LIBC_POSTFIX).so
|
|
@@ -11,6 +11,7 @@ load("//rocks/buckifier:defs.bzl", "cpp_library_wrapper","rocks_cpp_library_wrap
|
|
|
11
11
|
cpp_library_wrapper(name="rocksdb_lib", srcs=[
|
|
12
12
|
"cache/cache.cc",
|
|
13
13
|
"cache/cache_entry_roles.cc",
|
|
14
|
+
"cache/cache_helpers.cc",
|
|
14
15
|
"cache/cache_key.cc",
|
|
15
16
|
"cache/cache_reservation_manager.cc",
|
|
16
17
|
"cache/charged_cache.cc",
|
|
@@ -163,6 +164,7 @@ cpp_library_wrapper(name="rocksdb_lib", srcs=[
|
|
|
163
164
|
"options/options.cc",
|
|
164
165
|
"options/options_helper.cc",
|
|
165
166
|
"options/options_parser.cc",
|
|
167
|
+
"port/mmap.cc",
|
|
166
168
|
"port/port_posix.cc",
|
|
167
169
|
"port/stack_trace.cc",
|
|
168
170
|
"port/win/env_default.cc",
|
|
@@ -179,6 +181,7 @@ cpp_library_wrapper(name="rocksdb_lib", srcs=[
|
|
|
179
181
|
"table/block_based/block_based_table_iterator.cc",
|
|
180
182
|
"table/block_based/block_based_table_reader.cc",
|
|
181
183
|
"table/block_based/block_builder.cc",
|
|
184
|
+
"table/block_based/block_cache.cc",
|
|
182
185
|
"table/block_based/block_prefetcher.cc",
|
|
183
186
|
"table/block_based/block_prefix_index.cc",
|
|
184
187
|
"table/block_based/data_block_footer.cc",
|
|
@@ -350,6 +353,7 @@ cpp_library_wrapper(name="rocksdb_lib", srcs=[
|
|
|
350
353
|
cpp_library_wrapper(name="rocksdb_whole_archive_lib", srcs=[
|
|
351
354
|
"cache/cache.cc",
|
|
352
355
|
"cache/cache_entry_roles.cc",
|
|
356
|
+
"cache/cache_helpers.cc",
|
|
353
357
|
"cache/cache_key.cc",
|
|
354
358
|
"cache/cache_reservation_manager.cc",
|
|
355
359
|
"cache/charged_cache.cc",
|
|
@@ -502,6 +506,7 @@ cpp_library_wrapper(name="rocksdb_whole_archive_lib", srcs=[
|
|
|
502
506
|
"options/options.cc",
|
|
503
507
|
"options/options_helper.cc",
|
|
504
508
|
"options/options_parser.cc",
|
|
509
|
+
"port/mmap.cc",
|
|
505
510
|
"port/port_posix.cc",
|
|
506
511
|
"port/stack_trace.cc",
|
|
507
512
|
"port/win/env_default.cc",
|
|
@@ -518,6 +523,7 @@ cpp_library_wrapper(name="rocksdb_whole_archive_lib", srcs=[
|
|
|
518
523
|
"table/block_based/block_based_table_iterator.cc",
|
|
519
524
|
"table/block_based/block_based_table_reader.cc",
|
|
520
525
|
"table/block_based/block_builder.cc",
|
|
526
|
+
"table/block_based/block_cache.cc",
|
|
521
527
|
"table/block_based/block_prefetcher.cc",
|
|
522
528
|
"table/block_based/block_prefix_index.cc",
|
|
523
529
|
"table/block_based/data_block_footer.cc",
|
|
@@ -226,7 +226,7 @@ struct KeyGen {
|
|
|
226
226
|
}
|
|
227
227
|
};
|
|
228
228
|
|
|
229
|
-
|
|
229
|
+
Cache::ObjectPtr createValue(Random64& rnd) {
|
|
230
230
|
char* rv = new char[FLAGS_value_bytes];
|
|
231
231
|
// Fill with some filler data, and take some CPU time
|
|
232
232
|
for (uint32_t i = 0; i < FLAGS_value_bytes; i += 8) {
|
|
@@ -236,28 +236,33 @@ char* createValue(Random64& rnd) {
|
|
|
236
236
|
}
|
|
237
237
|
|
|
238
238
|
// Callbacks for secondary cache
|
|
239
|
-
size_t SizeFn(
|
|
239
|
+
size_t SizeFn(Cache::ObjectPtr /*obj*/) { return FLAGS_value_bytes; }
|
|
240
240
|
|
|
241
|
-
Status SaveToFn(
|
|
242
|
-
|
|
241
|
+
Status SaveToFn(Cache::ObjectPtr from_obj, size_t /*from_offset*/,
|
|
242
|
+
size_t length, char* out) {
|
|
243
|
+
memcpy(out, from_obj, length);
|
|
243
244
|
return Status::OK();
|
|
244
245
|
}
|
|
245
246
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
}
|
|
254
|
-
|
|
247
|
+
Status CreateFn(const Slice& data, Cache::CreateContext* /*context*/,
|
|
248
|
+
MemoryAllocator* /*allocator*/, Cache::ObjectPtr* out_obj,
|
|
249
|
+
size_t* out_charge) {
|
|
250
|
+
*out_obj = new char[data.size()];
|
|
251
|
+
memcpy(*out_obj, data.data(), data.size());
|
|
252
|
+
*out_charge = data.size();
|
|
253
|
+
return Status::OK();
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
void DeleteFn(Cache::ObjectPtr value, MemoryAllocator* /*alloc*/) {
|
|
255
257
|
delete[] static_cast<char*>(value);
|
|
256
258
|
}
|
|
257
259
|
|
|
258
|
-
Cache::CacheItemHelper helper1(
|
|
259
|
-
|
|
260
|
-
Cache::CacheItemHelper
|
|
260
|
+
Cache::CacheItemHelper helper1(CacheEntryRole::kDataBlock, DeleteFn, SizeFn,
|
|
261
|
+
SaveToFn, CreateFn);
|
|
262
|
+
Cache::CacheItemHelper helper2(CacheEntryRole::kIndexBlock, DeleteFn, SizeFn,
|
|
263
|
+
SaveToFn, CreateFn);
|
|
264
|
+
Cache::CacheItemHelper helper3(CacheEntryRole::kFilterBlock, DeleteFn, SizeFn,
|
|
265
|
+
SaveToFn, CreateFn);
|
|
261
266
|
} // namespace
|
|
262
267
|
|
|
263
268
|
class CacheBench {
|
|
@@ -436,7 +441,7 @@ class CacheBench {
|
|
|
436
441
|
uint64_t total_entry_count = 0;
|
|
437
442
|
uint64_t table_occupancy = 0;
|
|
438
443
|
uint64_t table_size = 0;
|
|
439
|
-
std::set<Cache::
|
|
444
|
+
std::set<const Cache::CacheItemHelper*> helpers;
|
|
440
445
|
StopWatchNano timer(clock);
|
|
441
446
|
|
|
442
447
|
for (;;) {
|
|
@@ -461,7 +466,7 @@ class CacheBench {
|
|
|
461
466
|
<< BytesToHumanString(static_cast<uint64_t>(
|
|
462
467
|
1.0 * total_charge / total_entry_count))
|
|
463
468
|
<< "\n"
|
|
464
|
-
<< "Unique
|
|
469
|
+
<< "Unique helpers: " << helpers.size() << "\n";
|
|
465
470
|
*stats_report = ostr.str();
|
|
466
471
|
return;
|
|
467
472
|
}
|
|
@@ -477,14 +482,14 @@ class CacheBench {
|
|
|
477
482
|
total_key_size = 0;
|
|
478
483
|
total_charge = 0;
|
|
479
484
|
total_entry_count = 0;
|
|
480
|
-
|
|
481
|
-
auto fn = [&](const Slice& key,
|
|
482
|
-
Cache::
|
|
485
|
+
helpers.clear();
|
|
486
|
+
auto fn = [&](const Slice& key, Cache::ObjectPtr /*value*/, size_t charge,
|
|
487
|
+
const Cache::CacheItemHelper* helper) {
|
|
483
488
|
total_key_size += key.size();
|
|
484
489
|
total_charge += charge;
|
|
485
490
|
++total_entry_count;
|
|
486
|
-
// Something slightly more expensive as in
|
|
487
|
-
|
|
491
|
+
// Something slightly more expensive as in stats by category
|
|
492
|
+
helpers.insert(helper);
|
|
488
493
|
};
|
|
489
494
|
timer.Start();
|
|
490
495
|
Cache::ApplyToAllEntriesOptions opts;
|
|
@@ -533,14 +538,6 @@ class CacheBench {
|
|
|
533
538
|
for (uint64_t i = 0; i < FLAGS_ops_per_thread; i++) {
|
|
534
539
|
Slice key = gen.GetRand(thread->rnd, max_key_, max_log_);
|
|
535
540
|
uint64_t random_op = thread->rnd.Next();
|
|
536
|
-
Cache::CreateCallback create_cb = [](const void* buf, size_t size,
|
|
537
|
-
void** out_obj,
|
|
538
|
-
size_t* charge) -> Status {
|
|
539
|
-
*out_obj = reinterpret_cast<void*>(new char[size]);
|
|
540
|
-
memcpy(*out_obj, buf, size);
|
|
541
|
-
*charge = size;
|
|
542
|
-
return Status::OK();
|
|
543
|
-
};
|
|
544
541
|
|
|
545
542
|
timer.Start();
|
|
546
543
|
|
|
@@ -550,8 +547,8 @@ class CacheBench {
|
|
|
550
547
|
handle = nullptr;
|
|
551
548
|
}
|
|
552
549
|
// do lookup
|
|
553
|
-
handle = cache_->Lookup(key, &helper2,
|
|
554
|
-
true);
|
|
550
|
+
handle = cache_->Lookup(key, &helper2, /*context*/ nullptr,
|
|
551
|
+
Cache::Priority::LOW, true);
|
|
555
552
|
if (handle) {
|
|
556
553
|
if (!FLAGS_lean) {
|
|
557
554
|
// do something with the data
|
|
@@ -579,8 +576,8 @@ class CacheBench {
|
|
|
579
576
|
handle = nullptr;
|
|
580
577
|
}
|
|
581
578
|
// do lookup
|
|
582
|
-
handle = cache_->Lookup(key, &helper2,
|
|
583
|
-
true);
|
|
579
|
+
handle = cache_->Lookup(key, &helper2, /*context*/ nullptr,
|
|
580
|
+
Cache::Priority::LOW, true);
|
|
584
581
|
if (handle) {
|
|
585
582
|
if (!FLAGS_lean) {
|
|
586
583
|
// do something with the data
|
|
@@ -101,34 +101,4 @@ std::string BlockCacheEntryStatsMapKeys::UsedPercent(CacheEntryRole role) {
|
|
|
101
101
|
return GetPrefixedCacheEntryRoleName(kPrefix, role);
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
namespace {
|
|
105
|
-
|
|
106
|
-
struct Registry {
|
|
107
|
-
std::mutex mutex;
|
|
108
|
-
UnorderedMap<Cache::DeleterFn, CacheEntryRole> role_map;
|
|
109
|
-
void Register(Cache::DeleterFn fn, CacheEntryRole role) {
|
|
110
|
-
std::lock_guard<std::mutex> lock(mutex);
|
|
111
|
-
role_map[fn] = role;
|
|
112
|
-
}
|
|
113
|
-
UnorderedMap<Cache::DeleterFn, CacheEntryRole> Copy() {
|
|
114
|
-
std::lock_guard<std::mutex> lock(mutex);
|
|
115
|
-
return role_map;
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
Registry& GetRegistry() {
|
|
120
|
-
STATIC_AVOID_DESTRUCTION(Registry, registry);
|
|
121
|
-
return registry;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
} // namespace
|
|
125
|
-
|
|
126
|
-
void RegisterCacheDeleterRole(Cache::DeleterFn fn, CacheEntryRole role) {
|
|
127
|
-
GetRegistry().Register(fn, role);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
UnorderedMap<Cache::DeleterFn, CacheEntryRole> CopyCacheDeleterRoleMap() {
|
|
131
|
-
return GetRegistry().Copy();
|
|
132
|
-
}
|
|
133
|
-
|
|
134
104
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -7,11 +7,8 @@
|
|
|
7
7
|
|
|
8
8
|
#include <array>
|
|
9
9
|
#include <cstdint>
|
|
10
|
-
#include <memory>
|
|
11
|
-
#include <type_traits>
|
|
12
10
|
|
|
13
11
|
#include "rocksdb/cache.h"
|
|
14
|
-
#include "util/hash_containers.h"
|
|
15
12
|
|
|
16
13
|
namespace ROCKSDB_NAMESPACE {
|
|
17
14
|
|
|
@@ -20,84 +17,4 @@ extern std::array<std::string, kNumCacheEntryRoles>
|
|
|
20
17
|
extern std::array<std::string, kNumCacheEntryRoles>
|
|
21
18
|
kCacheEntryRoleToHyphenString;
|
|
22
19
|
|
|
23
|
-
// To associate cache entries with their role, we use a hack on the
|
|
24
|
-
// existing Cache interface. Because the deleter of an entry can authenticate
|
|
25
|
-
// the code origin of an entry, we can elaborate the choice of deleter to
|
|
26
|
-
// also encode role information, without inferring false role information
|
|
27
|
-
// from entries not choosing to encode a role.
|
|
28
|
-
//
|
|
29
|
-
// The rest of this file is for handling mappings between deleters and
|
|
30
|
-
// roles.
|
|
31
|
-
|
|
32
|
-
// To infer a role from a deleter, the deleter must be registered. This
|
|
33
|
-
// can be done "manually" with this function. This function is thread-safe,
|
|
34
|
-
// and the registration mappings go into private but static storage. (Note
|
|
35
|
-
// that DeleterFn is a function pointer, not std::function. Registrations
|
|
36
|
-
// should not be too many.)
|
|
37
|
-
void RegisterCacheDeleterRole(Cache::DeleterFn fn, CacheEntryRole role);
|
|
38
|
-
|
|
39
|
-
// Gets a copy of the registered deleter -> role mappings. This is the only
|
|
40
|
-
// function for reading the mappings made with RegisterCacheDeleterRole.
|
|
41
|
-
// Why only this interface for reading?
|
|
42
|
-
// * This function has to be thread safe, which could incur substantial
|
|
43
|
-
// overhead. We should not pay this overhead for every deleter look-up.
|
|
44
|
-
// * This is suitable for preparing for batch operations, like with
|
|
45
|
-
// CacheEntryStatsCollector.
|
|
46
|
-
// * The number of mappings should be sufficiently small (dozens).
|
|
47
|
-
UnorderedMap<Cache::DeleterFn, CacheEntryRole> CopyCacheDeleterRoleMap();
|
|
48
|
-
|
|
49
|
-
// ************************************************************** //
|
|
50
|
-
// An automatic registration infrastructure. This enables code
|
|
51
|
-
// to simply ask for a deleter associated with a particular type
|
|
52
|
-
// and role, and registration is automatic. In a sense, this is
|
|
53
|
-
// a small dependency injection infrastructure, because linking
|
|
54
|
-
// in new deleter instantiations is essentially sufficient for
|
|
55
|
-
// making stats collection (using CopyCacheDeleterRoleMap) aware
|
|
56
|
-
// of them.
|
|
57
|
-
|
|
58
|
-
namespace cache_entry_roles_detail {
|
|
59
|
-
|
|
60
|
-
template <typename T, CacheEntryRole R>
|
|
61
|
-
struct RegisteredDeleter {
|
|
62
|
-
RegisteredDeleter() { RegisterCacheDeleterRole(Delete, R); }
|
|
63
|
-
|
|
64
|
-
// These have global linkage to help ensure compiler optimizations do not
|
|
65
|
-
// break uniqueness for each <T,R>
|
|
66
|
-
static void Delete(const Slice& /* key */, void* value) {
|
|
67
|
-
// Supports T == Something[], unlike delete operator
|
|
68
|
-
std::default_delete<T>()(
|
|
69
|
-
static_cast<typename std::remove_extent<T>::type*>(value));
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
template <CacheEntryRole R>
|
|
74
|
-
struct RegisteredNoopDeleter {
|
|
75
|
-
RegisteredNoopDeleter() { RegisterCacheDeleterRole(Delete, R); }
|
|
76
|
-
|
|
77
|
-
static void Delete(const Slice& /* key */, void* /* value */) {
|
|
78
|
-
// Here was `assert(value == nullptr);` but we can also put pointers
|
|
79
|
-
// to static data in Cache, for testing at least.
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
} // namespace cache_entry_roles_detail
|
|
84
|
-
|
|
85
|
-
// Get an automatically registered deleter for value type T and role R.
|
|
86
|
-
// Based on C++ semantics, registration is invoked exactly once in a
|
|
87
|
-
// thread-safe way on first call to this function, for each <T, R>.
|
|
88
|
-
template <typename T, CacheEntryRole R>
|
|
89
|
-
Cache::DeleterFn GetCacheEntryDeleterForRole() {
|
|
90
|
-
static cache_entry_roles_detail::RegisteredDeleter<T, R> reg;
|
|
91
|
-
return reg.Delete;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// Get an automatically registered no-op deleter (value should be nullptr)
|
|
95
|
-
// and associated with role R. This is used for Cache "reservation" entries
|
|
96
|
-
// such as for WriteBufferManager.
|
|
97
|
-
template <CacheEntryRole R>
|
|
98
|
-
Cache::DeleterFn GetNoopDeleterForRole() {
|
|
99
|
-
static cache_entry_roles_detail::RegisteredNoopDeleter<R> reg;
|
|
100
|
-
return reg.Delete;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
20
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
#include <memory>
|
|
11
11
|
#include <mutex>
|
|
12
12
|
|
|
13
|
-
#include "cache/cache_helpers.h"
|
|
14
13
|
#include "cache/cache_key.h"
|
|
14
|
+
#include "cache/typed_cache.h"
|
|
15
15
|
#include "port/lang.h"
|
|
16
16
|
#include "rocksdb/cache.h"
|
|
17
17
|
#include "rocksdb/status.h"
|
|
@@ -111,11 +111,14 @@ class CacheEntryStatsCollector {
|
|
|
111
111
|
// Gets or creates a shared instance of CacheEntryStatsCollector in the
|
|
112
112
|
// cache itself, and saves into `ptr`. This shared_ptr will hold the
|
|
113
113
|
// entry in cache until all refs are destroyed.
|
|
114
|
-
static Status GetShared(Cache *
|
|
114
|
+
static Status GetShared(Cache *raw_cache, SystemClock *clock,
|
|
115
115
|
std::shared_ptr<CacheEntryStatsCollector> *ptr) {
|
|
116
|
-
|
|
116
|
+
assert(raw_cache);
|
|
117
|
+
BasicTypedCacheInterface<CacheEntryStatsCollector, CacheEntryRole::kMisc>
|
|
118
|
+
cache{raw_cache};
|
|
117
119
|
|
|
118
|
-
|
|
120
|
+
const Slice &cache_key = GetCacheKey();
|
|
121
|
+
auto h = cache.Lookup(cache_key);
|
|
119
122
|
if (h == nullptr) {
|
|
120
123
|
// Not yet in cache, but Cache doesn't provide a built-in way to
|
|
121
124
|
// avoid racing insert. So we double-check under a shared mutex,
|
|
@@ -123,15 +126,15 @@ class CacheEntryStatsCollector {
|
|
|
123
126
|
STATIC_AVOID_DESTRUCTION(std::mutex, static_mutex);
|
|
124
127
|
std::lock_guard<std::mutex> lock(static_mutex);
|
|
125
128
|
|
|
126
|
-
h = cache
|
|
129
|
+
h = cache.Lookup(cache_key);
|
|
127
130
|
if (h == nullptr) {
|
|
128
|
-
auto new_ptr = new CacheEntryStatsCollector(cache, clock);
|
|
131
|
+
auto new_ptr = new CacheEntryStatsCollector(cache.get(), clock);
|
|
129
132
|
// TODO: non-zero charge causes some tests that count block cache
|
|
130
133
|
// usage to go flaky. Fix the problem somehow so we can use an
|
|
131
134
|
// accurate charge.
|
|
132
135
|
size_t charge = 0;
|
|
133
|
-
Status s =
|
|
134
|
-
|
|
136
|
+
Status s =
|
|
137
|
+
cache.Insert(cache_key, new_ptr, charge, &h, Cache::Priority::HIGH);
|
|
135
138
|
if (!s.ok()) {
|
|
136
139
|
assert(h == nullptr);
|
|
137
140
|
delete new_ptr;
|
|
@@ -140,11 +143,11 @@ class CacheEntryStatsCollector {
|
|
|
140
143
|
}
|
|
141
144
|
}
|
|
142
145
|
// If we reach here, shared entry is in cache with handle `h`.
|
|
143
|
-
assert(cache->
|
|
146
|
+
assert(cache.get()->GetCacheItemHelper(h) == &cache.kBasicHelper);
|
|
144
147
|
|
|
145
148
|
// Build an aliasing shared_ptr that keeps `ptr` in cache while there
|
|
146
149
|
// are references.
|
|
147
|
-
*ptr =
|
|
150
|
+
*ptr = cache.SharedGuard(h);
|
|
148
151
|
return Status::OK();
|
|
149
152
|
}
|
|
150
153
|
|
|
@@ -157,10 +160,6 @@ class CacheEntryStatsCollector {
|
|
|
157
160
|
cache_(cache),
|
|
158
161
|
clock_(clock) {}
|
|
159
162
|
|
|
160
|
-
static void Deleter(const Slice &, void *value) {
|
|
161
|
-
delete static_cast<CacheEntryStatsCollector *>(value);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
163
|
static const Slice &GetCacheKey() {
|
|
165
164
|
// For each template instantiation
|
|
166
165
|
static CacheKey ckey = CacheKey::CreateUniqueForProcessLifetime();
|
|
@@ -0,0 +1,40 @@
|
|
|
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 "cache/cache_helpers.h"
|
|
7
|
+
|
|
8
|
+
namespace ROCKSDB_NAMESPACE {
|
|
9
|
+
|
|
10
|
+
void ReleaseCacheHandleCleanup(void* arg1, void* arg2) {
|
|
11
|
+
Cache* const cache = static_cast<Cache*>(arg1);
|
|
12
|
+
assert(cache);
|
|
13
|
+
|
|
14
|
+
Cache::Handle* const cache_handle = static_cast<Cache::Handle*>(arg2);
|
|
15
|
+
assert(cache_handle);
|
|
16
|
+
|
|
17
|
+
cache->Release(cache_handle);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
Status WarmInCache(Cache* cache, const Slice& key, const Slice& saved,
|
|
21
|
+
Cache::CreateContext* create_context,
|
|
22
|
+
const Cache::CacheItemHelper* helper,
|
|
23
|
+
Cache::Priority priority, size_t* out_charge) {
|
|
24
|
+
assert(helper);
|
|
25
|
+
assert(helper->create_cb);
|
|
26
|
+
Cache::ObjectPtr value;
|
|
27
|
+
size_t charge;
|
|
28
|
+
Status st = helper->create_cb(saved, create_context,
|
|
29
|
+
cache->memory_allocator(), &value, &charge);
|
|
30
|
+
if (st.ok()) {
|
|
31
|
+
st =
|
|
32
|
+
cache->Insert(key, value, helper, charge, /*handle*/ nullptr, priority);
|
|
33
|
+
if (out_charge) {
|
|
34
|
+
*out_charge = charge;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return st;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -17,22 +17,17 @@ template <typename T>
|
|
|
17
17
|
T* GetFromCacheHandle(Cache* cache, Cache::Handle* handle) {
|
|
18
18
|
assert(cache);
|
|
19
19
|
assert(handle);
|
|
20
|
-
|
|
21
20
|
return static_cast<T*>(cache->Value(handle));
|
|
22
21
|
}
|
|
23
22
|
|
|
24
|
-
// Simple generic deleter for Cache (to be used with Cache::Insert).
|
|
25
|
-
template <typename T>
|
|
26
|
-
void DeleteCacheEntry(const Slice& /* key */, void* value) {
|
|
27
|
-
delete static_cast<T*>(value);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
23
|
// Turns a T* into a Slice so it can be used as a key with Cache.
|
|
31
24
|
template <typename T>
|
|
32
|
-
Slice
|
|
25
|
+
Slice GetSliceForKey(const T* t) {
|
|
33
26
|
return Slice(reinterpret_cast<const char*>(t), sizeof(T));
|
|
34
27
|
}
|
|
35
28
|
|
|
29
|
+
void ReleaseCacheHandleCleanup(void* arg1, void* arg2);
|
|
30
|
+
|
|
36
31
|
// Generic resource management object for cache handles that releases the handle
|
|
37
32
|
// when destroyed. Has unique ownership of the handle, so copying it is not
|
|
38
33
|
// allowed, while moving it transfers ownership.
|
|
@@ -88,7 +83,7 @@ class CacheHandleGuard {
|
|
|
88
83
|
if (cleanable) {
|
|
89
84
|
if (handle_ != nullptr) {
|
|
90
85
|
assert(cache_);
|
|
91
|
-
cleanable->RegisterCleanup(&
|
|
86
|
+
cleanable->RegisterCleanup(&ReleaseCacheHandleCleanup, cache_, handle_);
|
|
92
87
|
}
|
|
93
88
|
}
|
|
94
89
|
ResetFields();
|
|
@@ -115,16 +110,6 @@ class CacheHandleGuard {
|
|
|
115
110
|
value_ = nullptr;
|
|
116
111
|
}
|
|
117
112
|
|
|
118
|
-
static void ReleaseCacheHandle(void* arg1, void* arg2) {
|
|
119
|
-
Cache* const cache = static_cast<Cache*>(arg1);
|
|
120
|
-
assert(cache);
|
|
121
|
-
|
|
122
|
-
Cache::Handle* const cache_handle = static_cast<Cache::Handle*>(arg2);
|
|
123
|
-
assert(cache_handle);
|
|
124
|
-
|
|
125
|
-
cache->Release(cache_handle);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
113
|
private:
|
|
129
114
|
Cache* cache_ = nullptr;
|
|
130
115
|
Cache::Handle* handle_ = nullptr;
|
|
@@ -139,7 +124,16 @@ template <typename T>
|
|
|
139
124
|
std::shared_ptr<T> MakeSharedCacheHandleGuard(Cache* cache,
|
|
140
125
|
Cache::Handle* handle) {
|
|
141
126
|
auto wrapper = std::make_shared<CacheHandleGuard<T>>(cache, handle);
|
|
142
|
-
return std::shared_ptr<T>(wrapper,
|
|
127
|
+
return std::shared_ptr<T>(wrapper, GetFromCacheHandle<T>(cache, handle));
|
|
143
128
|
}
|
|
144
129
|
|
|
130
|
+
// Given the persistable data (saved) for a block cache entry, parse that
|
|
131
|
+
// into a cache entry object and insert it into the given cache. The charge
|
|
132
|
+
// of the new entry can be returned to the caller through `out_charge`.
|
|
133
|
+
Status WarmInCache(Cache* cache, const Slice& key, const Slice& saved,
|
|
134
|
+
Cache::CreateContext* create_context,
|
|
135
|
+
const Cache::CacheItemHelper* helper,
|
|
136
|
+
Cache::Priority priority = Cache::Priority::LOW,
|
|
137
|
+
size_t* out_charge = nullptr);
|
|
138
|
+
|
|
145
139
|
} // namespace ROCKSDB_NAMESPACE
|