mirror of
https://github.com/rustfs/rustfs.git
synced 2026-07-27 16:48:58 +00:00
79ffecbf14
Co-authored-by: heihutu <heihutu@gmail.com>
172 lines
4.9 KiB
Rust
172 lines
4.9 KiB
Rust
// Copyright 2024 RustFS Team
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
//! # RustFS Concurrency Management
|
|
//!
|
|
//! This crate provides comprehensive concurrency management for RustFS,
|
|
//! including timeout control, lock optimization, deadlock detection,
|
|
//! backpressure management, and I/O scheduling.
|
|
//!
|
|
//! ## Features
|
|
//!
|
|
//! All features are controlled by feature flags and can be enabled/disabled at compile time:
|
|
//!
|
|
//! - **timeout**: Dynamic timeout calculation based on data size and transfer rate
|
|
//! - **lock**: Early lock release to reduce contention
|
|
//! - **deadlock**: Request tracking and cycle detection
|
|
//! - **backpressure**: Buffer-based flow control
|
|
//! - **scheduler**: Adaptive buffer sizing and priority queuing
|
|
//!
|
|
//! ## Architecture
|
|
//!
|
|
//! ```text
|
|
//! rustfs-concurrency (Business Layer)
|
|
//! ├── timeout (Timeout Control)
|
|
//! ├── lock (Lock Optimization)
|
|
//! ├── deadlock (Deadlock Detection)
|
|
//! ├── backpressure (Backpressure Management)
|
|
//! └── scheduler (I/O Scheduling)
|
|
//! │
|
|
//! ├── rustfs-io-core (Core Algorithms)
|
|
//! └── rustfs-io-metrics (Metrics Collection)
|
|
//! ```
|
|
//!
|
|
//! ## Usage
|
|
//!
|
|
//! ```rust,no_run
|
|
//! use rustfs_concurrency::{ConcurrencyConfig, ConcurrencyManager};
|
|
//!
|
|
//! # #[tokio::main]
|
|
//! # async fn main() {
|
|
//! // Create manager with all features enabled
|
|
//! let config = ConcurrencyConfig::default();
|
|
//! let manager = ConcurrencyManager::new(config);
|
|
//!
|
|
//! // Start services
|
|
//! manager.start().await;
|
|
//!
|
|
//! // Use timeout control (if enabled)
|
|
//! if manager.is_timeout_enabled() {
|
|
//! let timeout_manager = manager.timeout();
|
|
//! let _ = timeout_manager;
|
|
//! }
|
|
//!
|
|
//! // Use lock optimization (if enabled)
|
|
//! if manager.is_lock_enabled() {
|
|
//! let lock_manager = manager.lock();
|
|
//! let _ = lock_manager;
|
|
//! }
|
|
//!
|
|
//! // Stop services
|
|
//! manager.stop().await;
|
|
//! # }
|
|
//! ```
|
|
|
|
#![deny(missing_docs)]
|
|
#![deny(unsafe_code)]
|
|
#![cfg_attr(docsrs, feature(doc_cfg))]
|
|
|
|
// Re-export core types from io-core
|
|
pub use rustfs_io_core::{
|
|
// Backpressure types
|
|
BackpressureConfig as CoreBackpressureConfig,
|
|
BackpressureMonitor as CoreBackpressureMonitor,
|
|
BackpressureState,
|
|
|
|
// Deadlock types
|
|
DeadlockDetector as CoreDeadlockDetector,
|
|
IoLoadLevel,
|
|
IoLoadMetrics,
|
|
IoPriority,
|
|
// Scheduler types
|
|
IoScheduler,
|
|
IoSchedulingContext,
|
|
LockInfo,
|
|
LockOptimizer as CoreLockOptimizer,
|
|
|
|
// Lock types
|
|
LockStats as CoreLockStats,
|
|
LockType,
|
|
// Timeout types
|
|
OperationProgress,
|
|
TimeoutError,
|
|
TimeoutStats,
|
|
WaitGraphEdge,
|
|
|
|
calculate_adaptive_timeout,
|
|
estimate_bytes_per_second,
|
|
};
|
|
|
|
// Module declarations with feature gates
|
|
#[cfg(feature = "timeout")]
|
|
mod timeout;
|
|
|
|
#[cfg(feature = "lock")]
|
|
mod lock;
|
|
|
|
#[cfg(feature = "deadlock")]
|
|
mod deadlock;
|
|
|
|
#[cfg(feature = "backpressure")]
|
|
mod backpressure;
|
|
|
|
#[cfg(feature = "scheduler")]
|
|
mod scheduler;
|
|
|
|
// Public module exports with feature gates
|
|
#[cfg(feature = "timeout")]
|
|
pub use timeout::{TimeoutConfig, TimeoutGuard, TimeoutManager};
|
|
|
|
#[cfg(feature = "lock")]
|
|
pub use lock::{LockConfig, LockManager, LockScopeGuard, OptimizedLockGuard};
|
|
|
|
#[cfg(feature = "deadlock")]
|
|
pub use deadlock::{DeadlockConfig, DeadlockManager, RequestTracker};
|
|
|
|
#[cfg(feature = "backpressure")]
|
|
pub use backpressure::{BackpressureConfig, BackpressureManager, BackpressurePipe};
|
|
|
|
#[cfg(feature = "scheduler")]
|
|
pub use scheduler::{IoStrategy, SchedulerConfig, SchedulerManager};
|
|
|
|
// Configuration
|
|
mod config;
|
|
pub use config::{ConcurrencyConfig, ConcurrencyFeatures};
|
|
|
|
// Manager
|
|
mod manager;
|
|
pub use manager::{ConcurrencyManager, GetObjectQueueSnapshot};
|
|
|
|
// Prelude for convenient imports
|
|
pub mod prelude {
|
|
//! Prelude module for convenient imports
|
|
|
|
#[cfg(feature = "timeout")]
|
|
pub use crate::timeout::{TimeoutConfig, TimeoutGuard, TimeoutManager};
|
|
|
|
#[cfg(feature = "lock")]
|
|
pub use crate::lock::{LockConfig, LockManager, LockScopeGuard, OptimizedLockGuard};
|
|
|
|
#[cfg(feature = "deadlock")]
|
|
pub use crate::deadlock::{DeadlockConfig, DeadlockManager, RequestTracker};
|
|
|
|
#[cfg(feature = "backpressure")]
|
|
pub use crate::backpressure::{BackpressureConfig, BackpressureManager, BackpressurePipe};
|
|
|
|
#[cfg(feature = "scheduler")]
|
|
pub use crate::scheduler::{IoStrategy, SchedulerConfig, SchedulerManager};
|
|
|
|
pub use crate::{ConcurrencyConfig, ConcurrencyFeatures, ConcurrencyManager};
|
|
}
|