mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-29 21:57:55 +00:00
Improve storage monitor API (#2899)
This removes the need to unnecessarily provide a very specific data structure `DatabaseSource` and removes huge `sc-client-db` dependency from storage monitor. It is now possible to use storage monitor with any path. P.S. I still strongly dislike that it pulls `clap` dependency for such a small feature, but many other crates do as well, so nothing special here.
This commit is contained in:
Generated
-1
@@ -16587,7 +16587,6 @@ dependencies = [
|
||||
"clap 4.4.14",
|
||||
"fs4",
|
||||
"log",
|
||||
"sc-client-db",
|
||||
"sp-core",
|
||||
"thiserror",
|
||||
"tokio",
|
||||
|
||||
@@ -256,11 +256,13 @@ where
|
||||
)
|
||||
.map(|full| full.task_manager)?;
|
||||
|
||||
sc_storage_monitor::StorageMonitorService::try_spawn(
|
||||
cli.storage_monitor,
|
||||
database_source,
|
||||
&task_manager.spawn_essential_handle(),
|
||||
)?;
|
||||
if let Some(path) = database_source.path() {
|
||||
sc_storage_monitor::StorageMonitorService::try_spawn(
|
||||
cli.storage_monitor,
|
||||
path.to_path_buf(),
|
||||
&task_manager.spawn_essential_handle(),
|
||||
)?;
|
||||
}
|
||||
|
||||
Ok(task_manager)
|
||||
})
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
title: Improve storage monitor API
|
||||
|
||||
doc:
|
||||
- audience: Node Dev
|
||||
description: |
|
||||
This removes the need to unnecessarily provide a very specific data structure DatabaseSource and removes huge
|
||||
sc-client-db dependency from storage monitor. It is now possible to use storage monitor with any path.
|
||||
|
||||
crates:
|
||||
- name: sc-storage-monitor
|
||||
@@ -38,7 +38,7 @@ use sc_transaction_pool_api::OffchainTransactionPoolFactory;
|
||||
use sp_api::ProvideRuntimeApi;
|
||||
use sp_core::crypto::Pair;
|
||||
use sp_runtime::{generic, traits::Block as BlockT, SaturatedConversion};
|
||||
use std::sync::Arc;
|
||||
use std::{path::Path, sync::Arc};
|
||||
|
||||
/// Host functions required for kitchensink runtime and Substrate node.
|
||||
#[cfg(not(feature = "runtime-benchmarks"))]
|
||||
@@ -769,16 +769,18 @@ pub fn new_full_base(
|
||||
/// Builds a new service for a full client.
|
||||
pub fn new_full(config: Configuration, cli: Cli) -> Result<TaskManager, ServiceError> {
|
||||
let mixnet_config = cli.mixnet_params.config(config.role.is_authority());
|
||||
let database_source = config.database.clone();
|
||||
let database_path = config.database.path().map(Path::to_path_buf);
|
||||
let task_manager = new_full_base(config, mixnet_config, cli.no_hardware_benchmarks, |_, _| ())
|
||||
.map(|NewFullBase { task_manager, .. }| task_manager)?;
|
||||
|
||||
sc_storage_monitor::StorageMonitorService::try_spawn(
|
||||
cli.storage_monitor,
|
||||
database_source,
|
||||
&task_manager.spawn_essential_handle(),
|
||||
)
|
||||
.map_err(|e| ServiceError::Application(e.into()))?;
|
||||
if let Some(database_path) = database_path {
|
||||
sc_storage_monitor::StorageMonitorService::try_spawn(
|
||||
cli.storage_monitor,
|
||||
database_path,
|
||||
&task_manager.spawn_essential_handle(),
|
||||
)
|
||||
.map_err(|e| ServiceError::Application(e.into()))?;
|
||||
}
|
||||
|
||||
Ok(task_manager)
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ workspace = true
|
||||
clap = { version = "4.4.14", features = ["derive", "string"] }
|
||||
log = "0.4.17"
|
||||
fs4 = "0.7.0"
|
||||
sc-client-db = { path = "../db", default-features = false }
|
||||
sp-core = { path = "../../primitives/core" }
|
||||
tokio = "1.22.0"
|
||||
tokio = { version = "1.22.0", features = ["time"] }
|
||||
thiserror = "1.0.48"
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
use clap::Args;
|
||||
use sc_client_db::DatabaseSource;
|
||||
use sp_core::traits::SpawnEssentialNamed;
|
||||
use std::{
|
||||
io,
|
||||
@@ -70,43 +69,37 @@ impl StorageMonitorService {
|
||||
/// Creates new StorageMonitorService for given client config
|
||||
pub fn try_spawn(
|
||||
parameters: StorageMonitorParams,
|
||||
database: DatabaseSource,
|
||||
path: PathBuf,
|
||||
spawner: &impl SpawnEssentialNamed,
|
||||
) -> Result<()> {
|
||||
Ok(match (parameters.threshold, database.path()) {
|
||||
(0, _) => {
|
||||
log::info!(
|
||||
target: LOG_TARGET,
|
||||
"StorageMonitorService: threshold `0` given, storage monitoring disabled",
|
||||
);
|
||||
},
|
||||
(_, None) => {
|
||||
log::warn!(
|
||||
target: LOG_TARGET,
|
||||
"StorageMonitorService: no database path to observe",
|
||||
);
|
||||
},
|
||||
(threshold, Some(path)) => {
|
||||
log::debug!(
|
||||
target: LOG_TARGET,
|
||||
"Initializing StorageMonitorService for db path: {path:?}",
|
||||
);
|
||||
if parameters.threshold == 0 {
|
||||
log::info!(
|
||||
target: LOG_TARGET,
|
||||
"StorageMonitorService: threshold `0` given, storage monitoring disabled",
|
||||
);
|
||||
} else {
|
||||
log::debug!(
|
||||
target: LOG_TARGET,
|
||||
"Initializing StorageMonitorService for db path: {}",
|
||||
path.display()
|
||||
);
|
||||
|
||||
Self::check_free_space(&path, threshold)?;
|
||||
Self::check_free_space(&path, parameters.threshold)?;
|
||||
|
||||
let storage_monitor_service = StorageMonitorService {
|
||||
path: path.to_path_buf(),
|
||||
threshold,
|
||||
polling_period: Duration::from_secs(parameters.polling_period.into()),
|
||||
};
|
||||
let storage_monitor_service = StorageMonitorService {
|
||||
path,
|
||||
threshold: parameters.threshold,
|
||||
polling_period: Duration::from_secs(parameters.polling_period.into()),
|
||||
};
|
||||
|
||||
spawner.spawn_essential(
|
||||
"storage-monitor",
|
||||
None,
|
||||
Box::pin(storage_monitor_service.run()),
|
||||
);
|
||||
},
|
||||
})
|
||||
spawner.spawn_essential(
|
||||
"storage-monitor",
|
||||
None,
|
||||
Box::pin(storage_monitor_service.run()),
|
||||
);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Main monitoring loop, intended to be spawned as essential task. Quits if free space drop
|
||||
|
||||
Reference in New Issue
Block a user