| 123456789101112131415161718192021222324252627282930313233343536373839 |
- """Orchestration configuration."""
- from dataclasses import dataclass
- from math import isfinite
- from typing import Optional
- @dataclass(frozen=True)
- class OrchestrationConfig:
- max_parallel_tasks: int = 4
- max_repair_continuations: int = 1
- default_worker_preset: str = "worker"
- default_validator_preset: str = "validator"
- worker_timeout_seconds: Optional[float] = None
- validator_timeout_seconds: Optional[float] = None
- stop_grace_seconds: float = 5.0
- def __post_init__(self) -> None:
- if isinstance(self.max_parallel_tasks, bool) or self.max_parallel_tasks < 1:
- raise ValueError("max_parallel_tasks must be at least 1")
- if (
- isinstance(self.max_repair_continuations, bool)
- or self.max_repair_continuations < 0
- ):
- raise ValueError("max_repair_continuations cannot be negative")
- for name, value in (
- ("worker_timeout_seconds", self.worker_timeout_seconds),
- ("validator_timeout_seconds", self.validator_timeout_seconds),
- ):
- if value is not None and (
- isinstance(value, bool) or not isfinite(value) or value <= 0
- ):
- raise ValueError(f"{name} must be positive when configured")
- if (
- isinstance(self.stop_grace_seconds, bool)
- or not isfinite(self.stop_grace_seconds)
- or self.stop_grace_seconds < 0
- ):
- raise ValueError("stop_grace_seconds must be finite and non-negative")
|