mirror of
https://github.com/rustfs/rustfs.git
synced 2026-09-06 12:09:12 +00:00
feat(scanner): coordinate usage and workload boundaries (#7093)
* test(scanner): wire usage and heal rebuild gates * docs(scanner): define usage authority protocol * docs(heal): clarify scanner and ecstore boundaries * refactor(scanner): split metrics from contracts * feat(scanner): use shared workload snapshots * fix(ecstore): recheck capacity before decommission drain
This commit is contained in:
+1
-1
@@ -227,7 +227,7 @@ rustfs-heal = { workspace = true }
|
||||
rustfs-audit = { workspace = true }
|
||||
rustfs-common = { workspace = true }
|
||||
rustfs-heal-contracts = { workspace = true }
|
||||
rustfs-scanner-contracts = { workspace = true }
|
||||
rustfs-scanner-metrics = { workspace = true }
|
||||
rustfs-config = { workspace = true, features = ["notify", "server-config-model"] }
|
||||
rustfs-crypto = { workspace = true }
|
||||
rustfs-credentials = { workspace = true }
|
||||
|
||||
@@ -29,10 +29,8 @@ use rustfs_config::MAX_ADMIN_REQUEST_BODY_SIZE;
|
||||
use rustfs_credentials::Credentials;
|
||||
use rustfs_policy::policy::action::{Action, AdminAction};
|
||||
#[cfg(test)]
|
||||
use rustfs_scanner_contracts::metrics::ScannerLifecycleTransitionSnapshot;
|
||||
use rustfs_scanner_contracts::metrics::{
|
||||
ScannerLifecycleExpirySnapshot, ScannerMaintenanceControlSnapshot, ScannerMetricsReport,
|
||||
};
|
||||
use rustfs_scanner_metrics::metrics::ScannerLifecycleTransitionSnapshot;
|
||||
use rustfs_scanner_metrics::metrics::{ScannerLifecycleExpirySnapshot, ScannerMaintenanceControlSnapshot, ScannerMetricsReport};
|
||||
use s3s::header::CONTENT_TYPE;
|
||||
use s3s::{Body, S3Error, S3ErrorCode, S3Request, S3Response, S3Result, s3_error};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
@@ -125,7 +125,7 @@ pub(crate) mod runtime_sources {
|
||||
pub(crate) type DailyAllTierStats = super::DailyAllTierStats;
|
||||
pub(crate) type ECStore = super::ECStore;
|
||||
pub(crate) type NotificationSys = super::NotificationSys;
|
||||
pub(crate) type ScannerMetricsReport = rustfs_scanner_contracts::metrics::ScannerMetricsReport;
|
||||
pub(crate) type ScannerMetricsReport = rustfs_scanner_metrics::metrics::ScannerMetricsReport;
|
||||
pub(crate) type StorageClassConfig = crate::storage::storage_api::ecstore_config::storageclass::Config;
|
||||
pub(crate) type TierConfigMgr = crate::storage::storage_api::TierConfigMgr;
|
||||
}
|
||||
|
||||
@@ -148,7 +148,7 @@ pub(crate) mod runtime {
|
||||
pub(crate) type NotificationSys = crate::storage::storage_api::NotificationSys;
|
||||
pub(crate) type ObjectStoreResolver = crate::storage::storage_api::ObjectStoreResolver;
|
||||
pub(crate) type ReplicationStats = crate::storage::storage_api::ReplicationStats;
|
||||
pub(crate) type ScannerMetricsReport = rustfs_scanner_contracts::metrics::ScannerMetricsReport;
|
||||
pub(crate) type ScannerMetricsReport = rustfs_scanner_metrics::metrics::ScannerMetricsReport;
|
||||
pub(crate) type StorageClassConfig = crate::storage::storage_api::ecstore_config::storageclass::Config;
|
||||
pub(crate) type TierConfigMgr = crate::storage::storage_api::TierConfigMgr;
|
||||
pub(crate) type TransitionState = crate::storage::storage_api::TransitionState;
|
||||
@@ -224,7 +224,7 @@ pub(crate) mod runtime {
|
||||
}
|
||||
|
||||
pub(crate) async fn collect_scanner_metrics_report() -> ScannerMetricsReport {
|
||||
rustfs_scanner_contracts::metrics::global_metrics().report().await
|
||||
rustfs_scanner_metrics::metrics::global_metrics().report().await
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
@@ -25,7 +25,7 @@ use crate::storage_api::cluster::control_plane::{
|
||||
use crate::workload_admission::workload_admission_registry_snapshot;
|
||||
use rustfs_concurrency::{AdmissionState, WorkloadAdmissionRegistrySnapshot};
|
||||
use rustfs_io_metrics::internode_metrics::{InternodeMetricsSnapshot, global_internode_metrics};
|
||||
use rustfs_scanner_contracts::metrics::{ScannerMetricsReport, global_metrics};
|
||||
use rustfs_scanner_metrics::metrics::{ScannerMetricsReport, global_metrics};
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct ClusterReadOnlySnapshot {
|
||||
|
||||
@@ -59,6 +59,7 @@ pub(crate) async fn init_background_service_runtime(store: Arc<ECStore>) -> Resu
|
||||
let workload_provider: Arc<dyn WorkloadAdmissionSnapshotProvider + Send + Sync> =
|
||||
Arc::new(RustFsWorkloadAdmissionSnapshotProvider);
|
||||
let _ = set_workload_admission_snapshot_provider(workload_provider.clone());
|
||||
rustfs_scanner::set_scanner_workload_admission_snapshot_provider(workload_provider.clone());
|
||||
|
||||
if enable_heal || enable_scanner {
|
||||
let heal_storage = Arc::new(ECStoreHealStorage::new(store.clone()));
|
||||
|
||||
@@ -55,7 +55,7 @@ pub(crate) async fn publish_server_addr(addr: &str) {
|
||||
}
|
||||
|
||||
pub(crate) async fn publish_init_time_now() {
|
||||
rustfs_scanner_contracts::set_global_init_time_now().await;
|
||||
rustfs_scanner_metrics::set_global_init_time_now().await;
|
||||
}
|
||||
|
||||
pub(crate) fn init_kms_service_manager() -> Arc<KmsServiceManager> {
|
||||
|
||||
Reference in New Issue
Block a user