From d970a49c279d2c7750a7ed4289233d012c36e16c Mon Sep 17 00:00:00 2001 From: Yahor Tsaryk Date: Mon, 18 Dec 2023 14:19:49 +0100 Subject: [PATCH] Operation mode for DDC Storage node type is added (#200) --- pallets/ddc-clusters/src/testing_utils.rs | 4 +++- pallets/ddc-clusters/src/tests.rs | 3 ++- pallets/ddc-nodes/src/benchmarking.rs | 3 ++- pallets/ddc-nodes/src/storage_node.rs | 6 +++++- pallets/ddc-nodes/src/testing_utils.rs | 4 +++- pallets/ddc-nodes/src/tests.rs | 8 +++++++- pallets/ddc-nodes/src/weights.rs | 16 ++++++++-------- pallets/ddc-staking/src/benchmarking.rs | 3 ++- pallets/ddc-staking/src/testing_utils.rs | 5 ++++- primitives/src/lib.rs | 12 ++++++++++++ 10 files changed, 48 insertions(+), 16 deletions(-) diff --git a/pallets/ddc-clusters/src/testing_utils.rs b/pallets/ddc-clusters/src/testing_utils.rs index 2f8cd1982..cc08a264c 100644 --- a/pallets/ddc-clusters/src/testing_utils.rs +++ b/pallets/ddc-clusters/src/testing_utils.rs @@ -1,7 +1,8 @@ //! DdcStaking pallet benchmarking. use ddc_primitives::{ - ClusterGovParams, ClusterId, ClusterParams, NodeParams, NodePubKey, StorageNodeParams, + ClusterGovParams, ClusterId, ClusterParams, NodeParams, NodePubKey, StorageNodeMode, + StorageNodeParams, }; pub use frame_benchmarking::{ account, benchmarks, impl_benchmark_test_suite, whitelist_account, whitelisted_caller, @@ -53,6 +54,7 @@ where { let cluster_params = ClusterParams { node_provider_auth_contract: Some(user.clone()) }; let storage_node_params = StorageNodeParams { + mode: StorageNodeMode::Storage, host: vec![1u8, 255], http_port: 35000u16, grpc_port: 25000u16, diff --git a/pallets/ddc-clusters/src/tests.rs b/pallets/ddc-clusters/src/tests.rs index aefe3a87d..86f4202de 100644 --- a/pallets/ddc-clusters/src/tests.rs +++ b/pallets/ddc-clusters/src/tests.rs @@ -2,7 +2,7 @@ use ddc_primitives::{ ClusterBondingParams, ClusterFeesParams, ClusterId, ClusterParams, ClusterPricingParams, - NodeParams, NodePubKey, StorageNodeParams, + NodeParams, NodePubKey, StorageNodeMode, StorageNodeParams, }; use ddc_traits::cluster::ClusterManager; use frame_support::{assert_noop, assert_ok, error::BadOrigin}; @@ -143,6 +143,7 @@ fn add_and_delete_node_works() { ); let storage_node_params = StorageNodeParams { + mode: StorageNodeMode::Storage, host: vec![1u8, 255], http_port: 35000u16, grpc_port: 25000u16, diff --git a/pallets/ddc-nodes/src/benchmarking.rs b/pallets/ddc-nodes/src/benchmarking.rs index 1e65c7ea0..451ef0c2a 100644 --- a/pallets/ddc-nodes/src/benchmarking.rs +++ b/pallets/ddc-nodes/src/benchmarking.rs @@ -1,6 +1,6 @@ //! DdcStaking pallet benchmarking. -use ddc_primitives::StorageNodePubKey; +use ddc_primitives::{StorageNodeMode, StorageNodePubKey}; pub use frame_benchmarking::{ account, benchmarks, impl_benchmark_test_suite, whitelist_account, whitelisted_caller, }; @@ -45,6 +45,7 @@ benchmarks! { assert_eq!(StorageNodes::::try_get( StorageNodePubKey::new([0; 32])).unwrap().props, StorageNodeProps { + mode: StorageNodeMode::Storage, host: vec![2u8, 255].try_into().unwrap(), http_port: 45000u16, grpc_port: 55000u16, diff --git a/pallets/ddc-nodes/src/storage_node.rs b/pallets/ddc-nodes/src/storage_node.rs index ce83664ef..c17d63dfa 100644 --- a/pallets/ddc-nodes/src/storage_node.rs +++ b/pallets/ddc-nodes/src/storage_node.rs @@ -1,5 +1,7 @@ use codec::{Decode, Encode}; -use ddc_primitives::{ClusterId, NodeParams, NodePubKey, NodeType, StorageNodePubKey}; +use ddc_primitives::{ + ClusterId, NodeParams, NodePubKey, NodeType, StorageNodeMode, StorageNodePubKey, +}; use frame_support::{parameter_types, BoundedVec}; use scale_info::TypeInfo; #[cfg(feature = "std")] @@ -30,6 +32,7 @@ pub struct StorageNodeProps { pub http_port: u16, pub grpc_port: u16, pub p2p_port: u16, + pub mode: StorageNodeMode, } impl StorageNode { @@ -45,6 +48,7 @@ impl StorageNode { pub_key, cluster_id: None, props: StorageNodeProps { + mode: node_params.mode, host: match node_params.host.try_into() { Ok(vec) => vec, Err(_) => return Err(NodeError::StorageHostLenExceedsLimit), diff --git a/pallets/ddc-nodes/src/testing_utils.rs b/pallets/ddc-nodes/src/testing_utils.rs index 67feb7142..858d5975c 100644 --- a/pallets/ddc-nodes/src/testing_utils.rs +++ b/pallets/ddc-nodes/src/testing_utils.rs @@ -1,6 +1,6 @@ //! Testing utils for ddc-staking. -use ddc_primitives::{NodeParams, StorageNodeParams, StorageNodePubKey}; +use ddc_primitives::{NodeParams, StorageNodeMode, StorageNodeParams, StorageNodePubKey}; use frame_benchmarking::account; use sp_std::vec; @@ -16,6 +16,7 @@ pub fn create_user_and_config( let user = account(string, n, SEED); let node = NodePubKey::StoragePubKey(StorageNodePubKey::new([0; 32])); let storage_node_params = NodeParams::StorageParams(StorageNodeParams { + mode: StorageNodeMode::Storage, host: vec![1u8, 255], http_port: 35000u16, grpc_port: 25000u16, @@ -23,6 +24,7 @@ pub fn create_user_and_config( }); let new_storage_node_params = NodeParams::StorageParams(StorageNodeParams { + mode: StorageNodeMode::Storage, host: vec![2u8, 255], http_port: 45000u16, grpc_port: 55000u16, diff --git a/pallets/ddc-nodes/src/tests.rs b/pallets/ddc-nodes/src/tests.rs index 192433e59..8b0b646ea 100644 --- a/pallets/ddc-nodes/src/tests.rs +++ b/pallets/ddc-nodes/src/tests.rs @@ -1,6 +1,6 @@ //! Tests for the module. -use ddc_primitives::{NodePubKey, StorageNodeParams}; +use ddc_primitives::{NodePubKey, StorageNodeMode, StorageNodeParams}; use frame_support::{assert_noop, assert_ok}; use sp_runtime::AccountId32; @@ -13,6 +13,7 @@ fn create_storage_node_works() { let bytes = [0u8; 32]; let node_pub_key = AccountId32::from(bytes); let storage_node_params = StorageNodeParams { + mode: StorageNodeMode::Storage, host: vec![1u8, 255], http_port: 35000u16, grpc_port: 25000u16, @@ -25,6 +26,7 @@ fn create_storage_node_works() { RuntimeOrigin::signed(1), NodePubKey::StoragePubKey(node_pub_key.clone()), NodeParams::StorageParams(StorageNodeParams { + mode: StorageNodeMode::Storage, host: vec![1u8; 256], http_port: 35000u16, grpc_port: 25000u16, @@ -77,6 +79,7 @@ fn create_storage_node_with_node_creator() { let bytes = [0u8; 32]; let node_pub_key = AccountId32::from(bytes); let storage_node_params = StorageNodeParams { + mode: StorageNodeMode::Storage, host: vec![1u8, 255], http_port: 35000u16, grpc_port: 25000u16, @@ -110,6 +113,7 @@ fn set_storage_node_params_works() { let bytes = [0u8; 32]; let node_pub_key = AccountId32::from(bytes); let storage_node_params = StorageNodeParams { + mode: StorageNodeMode::Storage, host: vec![1u8, 255], http_port: 35000u16, grpc_port: 25000u16, @@ -171,6 +175,7 @@ fn set_storage_node_params_works() { RuntimeOrigin::signed(1), NodePubKey::StoragePubKey(node_pub_key.clone()), NodeParams::StorageParams(StorageNodeParams { + mode: StorageNodeMode::Storage, host: vec![1u8; 256], http_port: 35000u16, grpc_port: 25000u16, @@ -196,6 +201,7 @@ fn delete_storage_node_works() { let bytes = [0u8; 32]; let node_pub_key = AccountId32::from(bytes); let storage_node_params = StorageNodeParams { + mode: StorageNodeMode::Storage, host: vec![1u8, 255], http_port: 35000u16, grpc_port: 25000u16, diff --git a/pallets/ddc-nodes/src/weights.rs b/pallets/ddc-nodes/src/weights.rs index 776e717a0..bc05729ba 100644 --- a/pallets/ddc-nodes/src/weights.rs +++ b/pallets/ddc-nodes/src/weights.rs @@ -1,7 +1,7 @@ //! Autogenerated weights for pallet_ddc_nodes //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-12-14, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-12-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! HOSTNAME: `Yahors-MacBook-Pro.local`, CPU: `` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 @@ -37,20 +37,20 @@ pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: DdcNodes StorageNodes (r:1 w:1) fn create_node() -> Weight { - Weight::from_ref_time(13_000_000_u64) + Weight::from_ref_time(12_000_000_u64) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: DdcNodes StorageNodes (r:1 w:1) // Storage: DdcStaking Nodes (r:1 w:0) fn delete_node() -> Weight { - Weight::from_ref_time(17_000_000_u64) + Weight::from_ref_time(16_000_000_u64) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: DdcNodes StorageNodes (r:1 w:1) fn set_node_params() -> Weight { - Weight::from_ref_time(16_000_000_u64) + Weight::from_ref_time(15_000_000_u64) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -60,21 +60,21 @@ impl WeightInfo for SubstrateWeight { impl WeightInfo for () { // Storage: DdcNodes StorageNodes (r:1 w:1) fn create_node() -> Weight { - Weight::from_ref_time(13_000_000_u64) + Weight::from_ref_time(12_000_000_u64) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } // Storage: DdcNodes StorageNodes (r:1 w:1) // Storage: DdcStaking Nodes (r:1 w:0) fn delete_node() -> Weight { - Weight::from_ref_time(17_000_000_u64) + Weight::from_ref_time(16_000_000_u64) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } // Storage: DdcNodes StorageNodes (r:1 w:1) fn set_node_params() -> Weight { - Weight::from_ref_time(16_000_000_u64) + Weight::from_ref_time(15_000_000_u64) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } -} \ No newline at end of file +} diff --git a/pallets/ddc-staking/src/benchmarking.rs b/pallets/ddc-staking/src/benchmarking.rs index 1ebf69ec3..2596c3f11 100644 --- a/pallets/ddc-staking/src/benchmarking.rs +++ b/pallets/ddc-staking/src/benchmarking.rs @@ -1,6 +1,6 @@ //! DdcStaking pallet benchmarking. -use ddc_primitives::{NodeParams, NodeType, StorageNodeParams, StorageNodePubKey}; +use ddc_primitives::{NodeParams, NodeType, StorageNodeMode, StorageNodeParams, StorageNodePubKey}; pub use frame_benchmarking::{ account, benchmarks, impl_benchmark_test_suite, whitelist_account, whitelisted_caller, }; @@ -26,6 +26,7 @@ benchmarks! { node.clone(), stash.clone(), NodeParams::StorageParams(StorageNodeParams { + mode: StorageNodeMode::Storage, host: vec![1u8, 255], http_port: 35000u16, grpc_port: 25000u16, diff --git a/pallets/ddc-staking/src/testing_utils.rs b/pallets/ddc-staking/src/testing_utils.rs index 7a4cdc7be..7851ba072 100644 --- a/pallets/ddc-staking/src/testing_utils.rs +++ b/pallets/ddc-staking/src/testing_utils.rs @@ -1,7 +1,8 @@ //! Testing utils for ddc-staking. use ddc_primitives::{ - ClusterGovParams, ClusterId, ClusterParams, NodeParams, StorageNodeParams, StorageNodePubKey, + ClusterGovParams, ClusterId, ClusterParams, NodeParams, StorageNodeMode, StorageNodeParams, + StorageNodePubKey, }; use frame_benchmarking::account; use frame_support::traits::Currency; @@ -60,6 +61,7 @@ pub fn create_stash_controller_node( node.clone(), stash.clone(), NodeParams::StorageParams(StorageNodeParams { + mode: StorageNodeMode::Storage, host: vec![1u8, 255], http_port: 35000u16, grpc_port: 25000u16, @@ -94,6 +96,7 @@ pub fn create_stash_controller_node_with_balance( ddc_primitives::NodePubKey::StoragePubKey(node_pub_key), stash.clone(), NodeParams::StorageParams(StorageNodeParams { + mode: StorageNodeMode::Storage, host: vec![1u8, 255], http_port: 35000u16, grpc_port: 25000u16, diff --git a/primitives/src/lib.rs b/primitives/src/lib.rs index 38fd21d3b..f0e9c1331 100644 --- a/primitives/src/lib.rs +++ b/primitives/src/lib.rs @@ -85,8 +85,20 @@ impl TryFrom for NodeType { } } +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Clone, Encode, Decode, RuntimeDebug, TypeInfo, PartialEq)] +pub enum StorageNodeMode { + /// DDC Storage node operates with enabled caching in RAM and stores data in Hard Drive + Full = 1, + /// DDC Storage node operates with disabled caching in RAM and stores data in Hard Drive + Storage = 2, + /// DDC Storage node operates with enabled caching in RAM and doesn't store data in Hard Drive + Cache = 3, +} + #[derive(Clone, Encode, Decode, RuntimeDebug, TypeInfo, PartialEq)] pub struct StorageNodeParams { + pub mode: StorageNodeMode, pub host: Vec, pub http_port: u16, pub grpc_port: u16,