From 18cfadf7f5206c5822313d7dd7c49068068faed2 Mon Sep 17 00:00:00 2001 From: Mathieu Dutour Sikiric Date: Wed, 22 Jan 2025 12:46:39 +0100 Subject: [PATCH] Compilation corrections after rebase. --- linera-indexer/lib/src/rocks_db.rs | 6 ++--- linera-indexer/lib/src/scylla_db.rs | 6 ++--- linera-views/src/backends/dynamo_db.rs | 2 +- linera-views/src/backends/lru_caching.rs | 3 +-- linera-views/src/backends/rocks_db.rs | 2 +- linera-views/src/backends/scylla_db.rs | 11 +++++--- linera-views/src/test_utils/mod.rs | 32 ++++++++++++++++++++++++ linera-views/tests/store_tests.rs | 5 ++-- 8 files changed, 52 insertions(+), 15 deletions(-) diff --git a/linera-indexer/lib/src/rocks_db.rs b/linera-indexer/lib/src/rocks_db.rs index 940c4546cc76..c95892c6225a 100644 --- a/linera-indexer/lib/src/rocks_db.rs +++ b/linera-indexer/lib/src/rocks_db.rs @@ -39,13 +39,13 @@ pub type RocksDbRunner = Runner; impl RocksDbRunner { pub async fn load() -> Result { let config = IndexerConfig::::parse(); + let storage_cache_policy = + read_storage_cache_policy(config.client.storage_cache_policy.clone()); let common_config = CommonStoreConfig { max_concurrent_queries: config.client.max_concurrent_queries, max_stream_queries: config.client.max_stream_queries, - cache_size: config.client.cache_size, + storage_cache_policy, }; - let storage_cache_policy = - read_storage_cache_policy(config.client.storage_cache_policy.clone()); let path_buf = config.client.storage.as_path().to_path_buf(); let path_with_guard = PathWithGuard::new(path_buf); // The tests are run in single threaded mode, therefore we need diff --git a/linera-indexer/lib/src/scylla_db.rs b/linera-indexer/lib/src/scylla_db.rs index 6a1d109bdc49..7fdd4fdcfc47 100644 --- a/linera-indexer/lib/src/scylla_db.rs +++ b/linera-indexer/lib/src/scylla_db.rs @@ -36,13 +36,13 @@ pub type ScyllaDbRunner = Runner; impl ScyllaDbRunner { pub async fn load() -> Result { let config = as clap::Parser>::parse(); + let storage_cache_policy = + read_storage_cache_policy(config.client.storage_cache_policy.clone()); let common_config = CommonStoreConfig { max_concurrent_queries: config.client.max_concurrent_queries, max_stream_queries: config.client.max_stream_queries, - cache_size: config.client.cache_size, + storage_cache_policy, }; - let storage_cache_policy = - read_storage_cache_policy(config.client.storage_cache_policy.clone()); let namespace = config.client.table.clone(); let root_key = &[]; let store_config = ScyllaDbStoreConfig::new(config.client.uri.clone(), common_config); diff --git a/linera-views/src/backends/dynamo_db.rs b/linera-views/src/backends/dynamo_db.rs index dd1c5e4addd7..5aeb4d266b80 100644 --- a/linera-views/src/backends/dynamo_db.rs +++ b/linera-views/src/backends/dynamo_db.rs @@ -1168,7 +1168,7 @@ impl DynamoDbStoreConfig { }; DynamoDbStoreConfig { inner_config, - cache_size: common_config.cache_size, + storage_cache_policy: common_config.storage_cache_policy, } } } diff --git a/linera-views/src/backends/lru_caching.rs b/linera-views/src/backends/lru_caching.rs index ae4dd779586c..177d2262a0a8 100644 --- a/linera-views/src/backends/lru_caching.rs +++ b/linera-views/src/backends/lru_caching.rs @@ -12,8 +12,6 @@ use std::{ }; use linked_hash_map::LinkedHashMap; -#[cfg(with_metrics)] -use {linera_base::prometheus_util::register_int_counter_vec, prometheus::IntCounterVec}; use crate::{ batch::{Batch, WriteOperation}, @@ -26,6 +24,7 @@ use crate::{ #[cfg(with_testing)] use crate::{memory::MemoryStore, store::TestKeyValueStore}; +#[cfg(with_metrics)] mod metrics { use std::sync::LazyLock; diff --git a/linera-views/src/backends/rocks_db.rs b/linera-views/src/backends/rocks_db.rs index 9b9743931efc..faab417e19fc 100644 --- a/linera-views/src/backends/rocks_db.rs +++ b/linera-views/src/backends/rocks_db.rs @@ -620,7 +620,7 @@ impl RocksDbStoreConfig { }; RocksDbStoreConfig { inner_config, - cache_size: common_config.cache_size, + storage_cache_policy: common_config.storage_cache_policy, } } } diff --git a/linera-views/src/backends/scylla_db.rs b/linera-views/src/backends/scylla_db.rs index a3a8afa439cf..ea20f3e79184 100644 --- a/linera-views/src/backends/scylla_db.rs +++ b/linera-views/src/backends/scylla_db.rs @@ -872,8 +872,13 @@ impl TestKeyValueStore for JournalingKeyValueStore { /// The `ScyllaDbStore` composed type with metrics #[cfg(with_metrics)] -pub type ScyllaDbStore = - MeteredStore>>>>>; +pub type ScyllaDbStore = MeteredStore< + CachingStore< + MeteredStore< + ValueSplittingStore>>, + >, + >, +>; /// The `ScyllaDbStore` composed type #[cfg(not(with_metrics))] @@ -892,7 +897,7 @@ impl ScyllaDbStoreConfig { }; ScyllaDbStoreConfig { inner_config, - cache_size: common_config.cache_size, + storage_cache_policy: common_config.storage_cache_policy, } } } diff --git a/linera-views/src/test_utils/mod.rs b/linera-views/src/test_utils/mod.rs index 20645eb71f29..3641e5f02c60 100644 --- a/linera-views/src/test_utils/mod.rs +++ b/linera-views/src/test_utils/mod.rs @@ -590,6 +590,38 @@ pub async fn run_lru_related_test2(store: &S) { } } +/// Reading many keys at a time could trigger an error. This needs to be tested. +pub async fn big_read_multi_values( + config: C::Config, + value_size: usize, + n_entries: usize, +) { + let mut rng = make_deterministic_rng(); + let namespace = generate_test_namespace(); + let root_key = &[]; + // + let store = C::recreate_and_connect(&config, &namespace, root_key) + .await + .unwrap(); + let key_prefix = vec![42, 54]; + let mut batch = Batch::new(); + let mut keys = Vec::new(); + let mut values = Vec::new(); + for i in 0..n_entries { + let mut key = key_prefix.clone(); + bcs::serialize_into(&mut key, &i).unwrap(); + let value = get_random_byte_vector(&mut rng, &[], value_size); + batch.put_key_value_bytes(key.clone(), value.clone()); + keys.push(key); + values.push(Some(value)); + } + store.write_batch(batch).await.unwrap(); + // We reconnect so that the read is not using the cache. + let store = C::connect(&config, &namespace, root_key).await.unwrap(); + let values_read = store.read_multi_values_bytes(keys).await.unwrap(); + assert_eq!(values, values_read); +} + /// That test is especially challenging for ScyllaDB. /// In its default settings, Scylla has a limitation to 10000 tombstones. /// A tombstone is an indication that the data has been deleted. That diff --git a/linera-views/tests/store_tests.rs b/linera-views/tests/store_tests.rs index 103fa14d6b40..0b7ac28b6078 100644 --- a/linera-views/tests/store_tests.rs +++ b/linera-views/tests/store_tests.rs @@ -9,8 +9,9 @@ use linera_views::{ random::make_deterministic_rng, store::TestKeyValueStore as _, test_utils::{ - get_random_test_scenarios, run_big_write_read, run_lru_related_test1, - run_lru_related_test2, run_reads, run_writes_from_blank, run_writes_from_state, + big_read_multi_values, get_random_test_scenarios, run_big_write_read, + run_lru_related_test1, run_lru_related_test2, run_reads, run_writes_from_blank, + run_writes_from_state, }, value_splitting::create_value_splitting_memory_store, };