use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExecutionConfig {
pub general: GeneralExecutionConfig,
pub resource_allocation: ResourceAllocationConfig,
pub scheduling: SchedulingConfig,
pub monitoring: MonitoringConfig,
pub security: SecurityConfig,
pub fault_tolerance: FaultToleranceConfig,
pub load_balancing: LoadBalancingConfig,
pub hardware: HardwareConfig,
pub cleanup: CleanupConfig,
pub advanced: AdvancedExecutionConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GeneralExecutionConfig {
pub max_concurrent_executions: usize,
pub default_timeout: Duration,
pub enable_distributed: bool,
pub enable_async_execution: bool,
pub operation_mode: OperationMode,
pub priority_handling: PriorityHandling,
pub queue_management: QueueManagement,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceAllocationConfig {
pub allocation_strategy: ResourceAllocationStrategy,
pub memory_allocation: MemoryAllocationConfig,
pub cpu_allocation: CpuAllocationConfig,
pub gpu_allocation: GpuAllocationConfig,
pub reservation_policy: ReservationPolicy,
pub sharing_config: ResourceSharingConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SchedulingConfig {
pub algorithm: SchedulingAlgorithm,
pub priority_queue: PriorityQueueConfig,
pub time_slicing: TimeSlicingConfig,
pub deadline_management: DeadlineManagementConfig,
pub preemption_policy: PreemptionPolicy,
pub load_balancing: SchedulingLoadBalancingConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MonitoringConfig {
pub level: MonitoringLevel,
pub metrics_collection: MetricsCollectionConfig,
pub performance_tracking: PerformanceTrackingConfig,
pub realtime_monitoring: RealtimeMonitoringConfig,
pub history_retention: HistoryRetentionConfig,
pub alerting: AlertingConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SecurityConfig {
pub level: SecurityLevel,
pub authentication: AuthenticationConfig,
pub authorization: AuthorizationConfig,
pub encryption: EncryptionConfig,
pub audit_logging: AuditLoggingConfig,
pub access_control: AccessControlConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FaultToleranceConfig {
pub enabled: bool,
pub retry: RetryConfig,
pub checkpointing: CheckpointConfig,
pub recovery: RecoveryConfig,
pub health_checking: HealthCheckingConfig,
pub circuit_breaker: CircuitBreakerConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LoadBalancingConfig {
pub strategy: LoadBalancingStrategy,
pub worker_pool: WorkerPoolConfig,
pub distribution: DistributionConfig,
pub health_monitoring: LoadBalancingHealthConfig,
pub dynamic_scaling: DynamicScalingConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HardwareConfig {
pub detection: HardwareDetectionConfig,
pub gpu_config: GpuHardwareConfig,
pub cpu_config: CpuHardwareConfig,
pub memory_config: MemoryHierarchyConfig,
pub optimization: HardwareOptimizationConfig,
pub thermal_management: ThermalManagementConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CleanupConfig {
pub resource_cleanup: ResourceCleanupPolicy,
pub automatic_cleanup: AutomaticCleanupConfig,
pub memory_cleanup: MemoryCleanupConfig,
pub log_cleanup: LogCleanupConfig,
pub garbage_collection: GarbageCollectionConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AdvancedExecutionConfig {
pub enable_experimental: bool,
pub ml_optimizations: MlOptimizationConfig,
pub adaptive_behavior: AdaptiveBehaviorConfig,
pub profiling: ProfilingConfig,
pub plugin_support: PluginSupportConfig,
pub advanced_scheduling: AdvancedSchedulingConfig,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum OperationMode {
HighPerformance,
Balanced,
PowerEfficient,
Debug,
Custom,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum PriorityHandling {
Strict,
WeightedFair,
RoundRobinBiased,
DeadlineAware,
Dynamic,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum QueueManagement {
FIFO,
LIFO,
Priority,
ShortestJobFirst,
EarliestDeadlineFirst,
MultilevelFeedback,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ResourceAllocationStrategy {
FirstFit,
BestFit,
WorstFit,
Dynamic,
Predictive,
MachineLearning,
Custom,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MemoryAllocationConfig {
pub pool_size: usize,
pub enable_pool: bool,
pub alignment: usize,
pub fragmentation_threshold: f64,
pub pressure_handling: MemoryPressureHandling,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CpuAllocationConfig {
pub worker_threads: usize,
pub cpu_affinity: CpuAffinityConfig,
pub thread_priority: ThreadPriorityConfig,
pub numa_aware: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GpuAllocationConfig {
pub device_selection: GpuDeviceSelection,
pub memory_strategy: GpuMemoryStrategy,
pub compute_capability: ComputeCapabilityConfig,
pub multi_gpu: MultiGpuConfig,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum SchedulingAlgorithm {
RoundRobin,
Priority,
ShortestRemainingTime,
CompletelyFair,
MultilevelFeedback,
Lottery,
ProportionalShare,
RealTime,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum MonitoringLevel {
Minimal,
Standard,
Detailed,
Comprehensive,
Debug,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum SecurityLevel {
Disabled,
Basic,
Standard,
High,
Maximum,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum LoadBalancingStrategy {
RoundRobin,
LeastConnections,
WeightedRoundRobin,
LeastResponseTime,
ResourceBased,
Adaptive,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ResourceCleanupPolicy {
Immediate,
Deferred,
Lazy,
Manual,
Adaptive,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RetryConfig {
pub max_retries: usize,
pub delay_strategy: RetryDelayStrategy,
pub base_delay: Duration,
pub max_delay: Duration,
pub jitter: f32,
pub retry_condition: RetryCondition,
pub backoff_multiplier: f64,
pub retry_on_errors: Vec<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum RetryDelayStrategy {
Fixed,
Linear,
Exponential,
Fibonacci,
RandomJitter,
Custom,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum RetryCondition {
Always,
Never,
TransientErrorsOnly,
ErrorTypeBased,
Custom,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CheckpointConfig {
pub enabled: bool,
pub interval: Duration,
pub max_checkpoints: usize,
pub storage_location: String,
pub compression_enabled: bool,
pub validation_enabled: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum MemoryPressureHandling {
FailOnPressure,
QueueOnPressure,
SpillToDisk,
Compress,
MemoryMap,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CpuAffinityConfig {
pub enabled: bool,
pub cpu_cores: Vec<usize>,
pub numa_node: Option<usize>,
pub binding_strategy: ThreadBindingStrategy,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ThreadBindingStrategy {
None,
CoreBinding,
NumaAware,
Spread,
Compact,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GpuDeviceSelection {
pub device_ids: Vec<usize>,
pub auto_select: bool,
pub min_compute_capability: (u32, u32),
pub min_memory_gb: f64,
}
pub struct ExecutionConfigBuilder {
config: ExecutionConfig,
}
impl ExecutionConfigBuilder {
pub fn new() -> Self {
Self {
config: ExecutionConfig::default(),
}
}
pub fn max_concurrent_executions(mut self, count: usize) -> Self {
self.config.general.max_concurrent_executions = count;
self
}
pub fn default_timeout(mut self, timeout: Duration) -> Self {
self.config.general.default_timeout = timeout;
self
}
pub fn enable_distributed(mut self, enabled: bool) -> Self {
self.config.general.enable_distributed = enabled;
self
}
pub fn resource_strategy(mut self, strategy: ResourceAllocationStrategy) -> Self {
self.config.resource_allocation.allocation_strategy = strategy;
self
}
pub fn scheduling_algorithm(mut self, algorithm: SchedulingAlgorithm) -> Self {
self.config.scheduling.algorithm = algorithm;
self
}
pub fn monitoring_level(mut self, level: MonitoringLevel) -> Self {
self.config.monitoring.level = level;
self
}
pub fn security_level(mut self, level: SecurityLevel) -> Self {
self.config.security.level = level;
self
}
pub fn enable_fault_tolerance(mut self, enabled: bool) -> Self {
self.config.fault_tolerance.enabled = enabled;
self
}
pub fn load_balancing_strategy(mut self, strategy: LoadBalancingStrategy) -> Self {
self.config.load_balancing.strategy = strategy;
self
}
pub fn build(self) -> ExecutionConfig {
self.config
}
}
impl Default for ExecutionConfig {
fn default() -> Self {
Self {
general: GeneralExecutionConfig::default(),
resource_allocation: ResourceAllocationConfig::default(),
scheduling: SchedulingConfig::default(),
monitoring: MonitoringConfig::default(),
security: SecurityConfig::default(),
fault_tolerance: FaultToleranceConfig::default(),
load_balancing: LoadBalancingConfig::default(),
hardware: HardwareConfig::default(),
cleanup: CleanupConfig::default(),
advanced: AdvancedExecutionConfig::default(),
}
}
}
impl Default for GeneralExecutionConfig {
fn default() -> Self {
Self {
max_concurrent_executions: 8,
default_timeout: Duration::from_secs(300), enable_distributed: false,
enable_async_execution: true,
operation_mode: OperationMode::Balanced,
priority_handling: PriorityHandling::WeightedFair,
queue_management: QueueManagement::Priority,
}
}
}
impl Default for ResourceAllocationConfig {
fn default() -> Self {
Self {
allocation_strategy: ResourceAllocationStrategy::Dynamic,
memory_allocation: MemoryAllocationConfig::default(),
cpu_allocation: CpuAllocationConfig::default(),
gpu_allocation: GpuAllocationConfig::default(),
reservation_policy: ReservationPolicy::default(),
sharing_config: ResourceSharingConfig::default(),
}
}
}
impl Default for MemoryAllocationConfig {
fn default() -> Self {
Self {
pool_size: 1024 * 1024 * 1024, enable_pool: true,
alignment: 256,
fragmentation_threshold: 0.3,
pressure_handling: MemoryPressureHandling::QueueOnPressure,
}
}
}
impl Default for RetryConfig {
fn default() -> Self {
Self {
max_retries: 3,
delay_strategy: RetryDelayStrategy::Exponential,
base_delay: Duration::from_millis(100),
max_delay: Duration::from_secs(30),
jitter: 0.1,
retry_condition: RetryCondition::TransientErrorsOnly,
backoff_multiplier: 2.0,
retry_on_errors: vec![
"NetworkError".to_string(),
"TemporaryResourceUnavailable".to_string(),
"TransientFailure".to_string(),
],
}
}
}
impl ExecutionConfig {
pub fn high_performance() -> Self {
ExecutionConfigBuilder::new()
.max_concurrent_executions(16)
.default_timeout(Duration::from_secs(600))
.resource_strategy(ResourceAllocationStrategy::MachineLearning)
.scheduling_algorithm(SchedulingAlgorithm::CompletelyFair)
.monitoring_level(MonitoringLevel::Standard)
.security_level(SecurityLevel::Basic)
.enable_fault_tolerance(true)
.load_balancing_strategy(LoadBalancingStrategy::Adaptive)
.build()
}
pub fn balanced() -> Self {
ExecutionConfig::default()
}
pub fn power_efficient() -> Self {
ExecutionConfigBuilder::new()
.max_concurrent_executions(4)
.default_timeout(Duration::from_secs(900))
.resource_strategy(ResourceAllocationStrategy::BestFit)
.scheduling_algorithm(SchedulingAlgorithm::Priority)
.monitoring_level(MonitoringLevel::Minimal)
.security_level(SecurityLevel::Standard)
.enable_fault_tolerance(false)
.load_balancing_strategy(LoadBalancingStrategy::RoundRobin)
.build()
}
pub fn debug() -> Self {
ExecutionConfigBuilder::new()
.max_concurrent_executions(2)
.default_timeout(Duration::from_secs(1200))
.resource_strategy(ResourceAllocationStrategy::FirstFit)
.scheduling_algorithm(SchedulingAlgorithm::RoundRobin)
.monitoring_level(MonitoringLevel::Debug)
.security_level(SecurityLevel::High)
.enable_fault_tolerance(true)
.load_balancing_strategy(LoadBalancingStrategy::LeastConnections)
.build()
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReservationPolicy {
pub enable_reservations: bool,
pub reservation_timeout: Duration,
pub overbooking_factor: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceSharingConfig {
pub enable_sharing: bool,
pub sharing_policy: String,
pub isolation_level: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PriorityQueueConfig {
pub max_priority_levels: usize,
pub starvation_prevention: bool,
pub aging_factor: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TimeSlicingConfig {
pub time_slice_duration: Duration,
pub enable_preemption: bool,
pub quantum_adjustment: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeadlineManagementConfig {
pub enable_deadlines: bool,
pub deadline_miss_action: String,
pub deadline_prediction: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum PreemptionPolicy {
None,
TimeSliced,
PriorityBased,
DeadlineBased,
Cooperative,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SchedulingLoadBalancingConfig {
pub enable_load_balancing: bool,
pub rebalancing_interval: Duration,
pub load_threshold: f64,
}
impl Default for ReservationPolicy {
fn default() -> Self {
Self {
enable_reservations: false,
reservation_timeout: Duration::from_secs(60),
overbooking_factor: 1.2,
}
}
}
impl Default for ResourceSharingConfig {
fn default() -> Self {
Self {
enable_sharing: true,
sharing_policy: "fair".to_string(),
isolation_level: "process".to_string(),
}
}
}
impl Default for CpuAllocationConfig {
fn default() -> Self {
Self {
worker_threads: num_cpus::get(),
cpu_affinity: CpuAffinityConfig::default(),
thread_priority: ThreadPriorityConfig::default(),
numa_aware: true,
}
}
}
impl Default for CpuAffinityConfig {
fn default() -> Self {
Self {
enabled: false,
cpu_cores: Vec::new(),
numa_node: None,
binding_strategy: ThreadBindingStrategy::None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ThreadPriorityConfig {
pub base_priority: i32,
pub priority_boost: i32,
pub dynamic_adjustment: bool,
}
impl Default for ThreadPriorityConfig {
fn default() -> Self {
Self {
base_priority: 0,
priority_boost: 0,
dynamic_adjustment: false,
}
}
}
impl Default for GpuAllocationConfig {
fn default() -> Self {
Self {
device_selection: GpuDeviceSelection::default(),
memory_strategy: GpuMemoryStrategy::default(),
compute_capability: ComputeCapabilityConfig::default(),
multi_gpu: MultiGpuConfig::default(),
}
}
}
impl Default for GpuDeviceSelection {
fn default() -> Self {
Self {
device_ids: Vec::new(),
auto_select: true,
min_compute_capability: (3, 5),
min_memory_gb: 2.0,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GpuMemoryStrategy {
pub allocation_method: String,
pub memory_pool_size: usize,
pub enable_unified_memory: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ComputeCapabilityConfig {
pub minimum_major: u32,
pub minimum_minor: u32,
pub preferred_architecture: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MultiGpuConfig {
pub enable_multi_gpu: bool,
pub synchronization_method: String,
pub load_balancing: bool,
}
impl Default for GpuMemoryStrategy {
fn default() -> Self {
Self {
allocation_method: "dynamic".to_string(),
memory_pool_size: 512 * 1024 * 1024, enable_unified_memory: false,
}
}
}
impl Default for ComputeCapabilityConfig {
fn default() -> Self {
Self {
minimum_major: 3,
minimum_minor: 5,
preferred_architecture: "auto".to_string(),
}
}
}
impl Default for MultiGpuConfig {
fn default() -> Self {
Self {
enable_multi_gpu: false,
synchronization_method: "explicit".to_string(),
load_balancing: true,
}
}
}
impl Default for SchedulingConfig {
fn default() -> Self {
Self {
algorithm: SchedulingAlgorithm::CompletelyFair,
priority_queue: PriorityQueueConfig::default(),
time_slicing: TimeSlicingConfig::default(),
deadline_management: DeadlineManagementConfig::default(),
preemption_policy: PreemptionPolicy::TimeSliced,
load_balancing: SchedulingLoadBalancingConfig::default(),
}
}
}
impl Default for PriorityQueueConfig {
fn default() -> Self {
Self {
max_priority_levels: 10,
starvation_prevention: true,
aging_factor: 1.1,
}
}
}
impl Default for TimeSlicingConfig {
fn default() -> Self {
Self {
time_slice_duration: Duration::from_millis(20),
enable_preemption: true,
quantum_adjustment: true,
}
}
}
impl Default for DeadlineManagementConfig {
fn default() -> Self {
Self {
enable_deadlines: true,
deadline_miss_action: "reschedule".to_string(),
deadline_prediction: false,
}
}
}
impl Default for SchedulingLoadBalancingConfig {
fn default() -> Self {
Self {
enable_load_balancing: true,
rebalancing_interval: Duration::from_secs(30),
load_threshold: 0.8,
}
}
}
impl Default for MonitoringConfig {
fn default() -> Self {
Self {
level: MonitoringLevel::Standard,
metrics_collection: MetricsCollectionConfig::default(),
performance_tracking: PerformanceTrackingConfig::default(),
realtime_monitoring: RealtimeMonitoringConfig::default(),
history_retention: HistoryRetentionConfig::default(),
alerting: AlertingConfig::default(),
}
}
}
impl Default for SecurityConfig {
fn default() -> Self {
Self {
level: SecurityLevel::Standard,
authentication: AuthenticationConfig::default(),
authorization: AuthorizationConfig::default(),
encryption: EncryptionConfig::default(),
audit_logging: AuditLoggingConfig::default(),
access_control: AccessControlConfig::default(),
}
}
}
impl Default for FaultToleranceConfig {
fn default() -> Self {
Self {
enabled: true,
retry: RetryConfig::default(),
checkpointing: CheckpointConfig::default(),
recovery: RecoveryConfig::default(),
health_checking: HealthCheckingConfig::default(),
circuit_breaker: CircuitBreakerConfig::default(),
}
}
}
impl Default for LoadBalancingConfig {
fn default() -> Self {
Self {
strategy: LoadBalancingStrategy::RoundRobin,
worker_pool: WorkerPoolConfig::default(),
distribution: DistributionConfig::default(),
health_monitoring: LoadBalancingHealthConfig::default(),
dynamic_scaling: DynamicScalingConfig::default(),
}
}
}
impl Default for HardwareConfig {
fn default() -> Self {
Self {
detection: HardwareDetectionConfig::default(),
gpu_config: GpuHardwareConfig::default(),
cpu_config: CpuHardwareConfig::default(),
memory_config: MemoryHierarchyConfig::default(),
optimization: HardwareOptimizationConfig::default(),
thermal_management: ThermalManagementConfig::default(),
}
}
}
impl Default for CleanupConfig {
fn default() -> Self {
Self {
resource_cleanup: ResourceCleanupPolicy::Deferred,
automatic_cleanup: AutomaticCleanupConfig::default(),
memory_cleanup: MemoryCleanupConfig::default(),
log_cleanup: LogCleanupConfig::default(),
garbage_collection: GarbageCollectionConfig::default(),
}
}
}
impl Default for AdvancedExecutionConfig {
fn default() -> Self {
Self {
enable_experimental: false,
ml_optimizations: MlOptimizationConfig::default(),
adaptive_behavior: AdaptiveBehaviorConfig::default(),
profiling: ProfilingConfig::default(),
plugin_support: PluginSupportConfig::default(),
advanced_scheduling: AdvancedSchedulingConfig::default(),
}
}
}
impl Default for CheckpointConfig {
fn default() -> Self {
Self {
enabled: false,
interval: Duration::from_secs(300),
max_checkpoints: 5,
storage_location: std::env::temp_dir().join("checkpoints").display().to_string(),
compression_enabled: true,
validation_enabled: true,
}
}
}
macro_rules! default_placeholder_config {
($type_name:ident) => {
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct $type_name {
pub enabled: bool,
pub configuration: HashMap<String, String>,
}
impl Default for $type_name {
fn default() -> Self {
Self {
enabled: true,
configuration: HashMap::new(),
}
}
}
};
}
use std::collections::HashMap;
default_placeholder_config!(MetricsCollectionConfig);
default_placeholder_config!(PerformanceTrackingConfig);
default_placeholder_config!(RealtimeMonitoringConfig);
default_placeholder_config!(HistoryRetentionConfig);
default_placeholder_config!(AlertingConfig);
default_placeholder_config!(AuthenticationConfig);
default_placeholder_config!(AuthorizationConfig);
default_placeholder_config!(EncryptionConfig);
default_placeholder_config!(AuditLoggingConfig);
default_placeholder_config!(AccessControlConfig);
default_placeholder_config!(RecoveryConfig);
default_placeholder_config!(HealthCheckingConfig);
default_placeholder_config!(CircuitBreakerConfig);
default_placeholder_config!(WorkerPoolConfig);
default_placeholder_config!(DistributionConfig);
default_placeholder_config!(LoadBalancingHealthConfig);
default_placeholder_config!(DynamicScalingConfig);
default_placeholder_config!(HardwareDetectionConfig);
default_placeholder_config!(GpuHardwareConfig);
default_placeholder_config!(CpuHardwareConfig);
default_placeholder_config!(MemoryHierarchyConfig);
default_placeholder_config!(HardwareOptimizationConfig);
default_placeholder_config!(ThermalManagementConfig);
default_placeholder_config!(AutomaticCleanupConfig);
default_placeholder_config!(MemoryCleanupConfig);
default_placeholder_config!(LogCleanupConfig);
default_placeholder_config!(GarbageCollectionConfig);
default_placeholder_config!(MlOptimizationConfig);
default_placeholder_config!(AdaptiveBehaviorConfig);
default_placeholder_config!(ProfilingConfig);
default_placeholder_config!(PluginSupportConfig);
default_placeholder_config!(AdvancedSchedulingConfig);
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GpuConfig {}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ThermalConfig {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_execution_config() {
let config = ExecutionConfig::default();
assert_eq!(config.general.max_concurrent_executions, 8);
assert_eq!(config.general.operation_mode, OperationMode::Balanced);
assert_eq!(
config.resource_allocation.allocation_strategy,
ResourceAllocationStrategy::Dynamic
);
assert_eq!(config.monitoring.level, MonitoringLevel::Standard);
}
#[test]
fn test_config_builder() {
let config = ExecutionConfigBuilder::new()
.max_concurrent_executions(16)
.enable_distributed(true)
.monitoring_level(MonitoringLevel::Comprehensive)
.build();
assert_eq!(config.general.max_concurrent_executions, 16);
assert!(config.general.enable_distributed);
assert_eq!(config.monitoring.level, MonitoringLevel::Comprehensive);
}
#[test]
fn test_preset_configurations() {
let high_perf = ExecutionConfig::high_performance();
assert_eq!(high_perf.general.max_concurrent_executions, 16);
assert_eq!(
high_perf.resource_allocation.allocation_strategy,
ResourceAllocationStrategy::MachineLearning
);
let power_efficient = ExecutionConfig::power_efficient();
assert_eq!(power_efficient.general.max_concurrent_executions, 4);
assert_eq!(power_efficient.monitoring.level, MonitoringLevel::Minimal);
let debug = ExecutionConfig::debug();
assert_eq!(debug.monitoring.level, MonitoringLevel::Debug);
assert_eq!(debug.security.level, SecurityLevel::High);
}
#[test]
fn test_retry_config() {
let retry_config = RetryConfig::default();
assert_eq!(retry_config.max_retries, 3);
assert_eq!(retry_config.delay_strategy, RetryDelayStrategy::Exponential);
assert_eq!(
retry_config.retry_condition,
RetryCondition::TransientErrorsOnly
);
}
#[test]
fn test_memory_allocation_config() {
let mem_config = MemoryAllocationConfig::default();
assert!(mem_config.enable_pool);
assert_eq!(mem_config.alignment, 256);
assert_eq!(
mem_config.pressure_handling,
MemoryPressureHandling::QueueOnPressure
);
}
#[test]
fn test_serialization() {
let config = ExecutionConfig::default();
let serialized = serde_json::to_string(&config).expect("Serialization failed");
let deserialized: ExecutionConfig =
serde_json::from_str(&serialized).expect("Deserialization failed");
assert_eq!(
config.general.max_concurrent_executions,
deserialized.general.max_concurrent_executions
);
assert_eq!(config.monitoring.level, deserialized.monitoring.level);
}
}