Drop unused source readiness policy

This commit is contained in:
andrussal 2026-03-08 13:45:39 +01:00
parent 3f8e287c68
commit 3ea3fffd1f
6 changed files with 10 additions and 71 deletions

View File

@ -6,7 +6,6 @@ use tracing::{debug, info};
use super::{ use super::{
Application, AttachSource, DeploymentPolicy, DynError, ExternalNodeSource, Application, AttachSource, DeploymentPolicy, DynError, ExternalNodeSource,
HttpReadinessRequirement, NodeControlCapability, ObservabilityCapability, ScenarioSources, HttpReadinessRequirement, NodeControlCapability, ObservabilityCapability, ScenarioSources,
SourceReadinessPolicy,
builder_ops::CoreBuilderAccess, builder_ops::CoreBuilderAccess,
expectation::Expectation, expectation::Expectation,
runtime::{ runtime::{
@ -44,7 +43,6 @@ pub struct Scenario<E: Application, Caps = ()> {
expectation_cooldown: Duration, expectation_cooldown: Duration,
deployment_policy: DeploymentPolicy, deployment_policy: DeploymentPolicy,
sources: ScenarioSources, sources: ScenarioSources,
source_readiness_policy: SourceReadinessPolicy,
source_orchestration_plan: SourceOrchestrationPlan, source_orchestration_plan: SourceOrchestrationPlan,
capabilities: Caps, capabilities: Caps,
} }
@ -58,7 +56,6 @@ impl<E: Application, Caps> Scenario<E, Caps> {
expectation_cooldown: Duration, expectation_cooldown: Duration,
deployment_policy: DeploymentPolicy, deployment_policy: DeploymentPolicy,
sources: ScenarioSources, sources: ScenarioSources,
source_readiness_policy: SourceReadinessPolicy,
source_orchestration_plan: SourceOrchestrationPlan, source_orchestration_plan: SourceOrchestrationPlan,
capabilities: Caps, capabilities: Caps,
) -> Self { ) -> Self {
@ -70,7 +67,6 @@ impl<E: Application, Caps> Scenario<E, Caps> {
expectation_cooldown, expectation_cooldown,
deployment_policy, deployment_policy,
sources, sources,
source_readiness_policy,
source_orchestration_plan, source_orchestration_plan,
capabilities, capabilities,
} }
@ -116,15 +112,6 @@ impl<E: Application, Caps> Scenario<E, Caps> {
self.deployment_policy self.deployment_policy
} }
#[must_use]
/// Selected source readiness policy.
///
/// This is currently reserved for future mixed-source orchestration and
/// does not change runtime behavior yet.
pub const fn source_readiness_policy(&self) -> SourceReadinessPolicy {
self.source_readiness_policy
}
#[must_use] #[must_use]
pub fn sources(&self) -> &ScenarioSources { pub fn sources(&self) -> &ScenarioSources {
&self.sources &self.sources
@ -151,7 +138,6 @@ pub struct Builder<E: Application, Caps = ()> {
expectation_cooldown: Option<Duration>, expectation_cooldown: Option<Duration>,
deployment_policy: DeploymentPolicy, deployment_policy: DeploymentPolicy,
sources: ScenarioSources, sources: ScenarioSources,
source_readiness_policy: SourceReadinessPolicy,
capabilities: Caps, capabilities: Caps,
} }
@ -256,11 +242,6 @@ macro_rules! impl_common_builder_methods {
self.map_core_builder(|builder| builder.with_external_node(node)) self.map_core_builder(|builder| builder.with_external_node(node))
} }
#[must_use]
pub fn with_source_readiness_policy(self, policy: SourceReadinessPolicy) -> Self {
self.map_core_builder(|builder| builder.with_source_readiness_policy(policy))
}
#[must_use] #[must_use]
pub fn with_external_only_sources(self) -> Self { pub fn with_external_only_sources(self) -> Self {
self.map_core_builder(|builder| builder.with_external_only_sources()) self.map_core_builder(|builder| builder.with_external_only_sources())
@ -350,7 +331,6 @@ impl<E: Application, Caps: Default> Builder<E, Caps> {
expectation_cooldown: None, expectation_cooldown: None,
deployment_policy: DeploymentPolicy::default(), deployment_policy: DeploymentPolicy::default(),
sources: ScenarioSources::default(), sources: ScenarioSources::default(),
source_readiness_policy: SourceReadinessPolicy::default(),
capabilities: Caps::default(), capabilities: Caps::default(),
} }
} }
@ -453,7 +433,6 @@ impl<E: Application, Caps> Builder<E, Caps> {
expectation_cooldown, expectation_cooldown,
deployment_policy, deployment_policy,
sources, sources,
source_readiness_policy,
.. ..
} = self; } = self;
@ -466,7 +445,6 @@ impl<E: Application, Caps> Builder<E, Caps> {
expectation_cooldown, expectation_cooldown,
deployment_policy, deployment_policy,
sources, sources,
source_readiness_policy,
capabilities, capabilities,
} }
} }
@ -579,16 +557,6 @@ impl<E: Application, Caps> Builder<E, Caps> {
self self
} }
#[must_use]
/// Configure source readiness policy metadata.
///
/// This is currently reserved for future mixed-source orchestration and
/// does not change runtime behavior yet.
pub fn with_source_readiness_policy(mut self, policy: SourceReadinessPolicy) -> Self {
self.source_readiness_policy = policy;
self
}
#[must_use] #[must_use]
pub fn with_external_only_sources(mut self) -> Self { pub fn with_external_only_sources(mut self) -> Self {
self.sources = self.sources.into_external_only(); self.sources = self.sources.into_external_only();
@ -612,8 +580,7 @@ impl<E: Application, Caps> Builder<E, Caps> {
let descriptors = parts.resolve_deployment()?; let descriptors = parts.resolve_deployment()?;
let run_plan = parts.run_plan(); let run_plan = parts.run_plan();
let run_metrics = RunMetrics::new(run_plan.duration); let run_metrics = RunMetrics::new(run_plan.duration);
let source_orchestration_plan = let source_orchestration_plan = build_source_orchestration_plan(parts.sources())?;
build_source_orchestration_plan(parts.sources(), parts.source_readiness_policy)?;
initialize_components( initialize_components(
&descriptors, &descriptors,
@ -640,7 +607,6 @@ impl<E: Application, Caps> Builder<E, Caps> {
run_plan.expectation_cooldown, run_plan.expectation_cooldown,
parts.deployment_policy, parts.deployment_policy,
parts.sources, parts.sources,
parts.source_readiness_policy,
source_orchestration_plan, source_orchestration_plan,
parts.capabilities, parts.capabilities,
)) ))
@ -661,7 +627,6 @@ struct BuilderParts<E: Application, Caps> {
expectation_cooldown: Option<Duration>, expectation_cooldown: Option<Duration>,
deployment_policy: DeploymentPolicy, deployment_policy: DeploymentPolicy,
sources: ScenarioSources, sources: ScenarioSources,
source_readiness_policy: SourceReadinessPolicy,
capabilities: Caps, capabilities: Caps,
} }
@ -676,7 +641,6 @@ impl<E: Application, Caps> BuilderParts<E, Caps> {
expectation_cooldown, expectation_cooldown,
deployment_policy, deployment_policy,
sources, sources,
source_readiness_policy,
capabilities, capabilities,
.. ..
} = builder; } = builder;
@ -690,7 +654,6 @@ impl<E: Application, Caps> BuilderParts<E, Caps> {
expectation_cooldown, expectation_cooldown,
deployment_policy, deployment_policy,
sources, sources,
source_readiness_policy,
capabilities, capabilities,
} }
} }
@ -715,10 +678,8 @@ impl<E: Application, Caps> BuilderParts<E, Caps> {
fn build_source_orchestration_plan( fn build_source_orchestration_plan(
sources: &ScenarioSources, sources: &ScenarioSources,
readiness_policy: SourceReadinessPolicy,
) -> Result<SourceOrchestrationPlan, ScenarioBuildError> { ) -> Result<SourceOrchestrationPlan, ScenarioBuildError> {
SourceOrchestrationPlan::try_from_sources(sources, readiness_policy) SourceOrchestrationPlan::try_from_sources(sources).map_err(source_plan_error_to_build_error)
.map_err(source_plan_error_to_build_error)
} }
fn source_plan_error_to_build_error(error: SourceOrchestrationPlanError) -> ScenarioBuildError { fn source_plan_error_to_build_error(error: SourceOrchestrationPlanError) -> ScenarioBuildError {

View File

@ -51,7 +51,7 @@ pub use runtime::{
wait_for_http_ports_with_host_and_requirement, wait_for_http_ports_with_requirement, wait_for_http_ports_with_host_and_requirement, wait_for_http_ports_with_requirement,
wait_http_readiness, wait_until_stable, wait_http_readiness, wait_until_stable,
}; };
pub use sources::{AttachSource, ExternalNodeSource, ScenarioSources, SourceReadinessPolicy}; pub use sources::{AttachSource, ExternalNodeSource, ScenarioSources};
pub use workload::Workload; pub use workload::Workload;
pub use crate::env::Application; pub use crate::env::Application;

View File

@ -1,4 +1,4 @@
use crate::scenario::{AttachSource, ExternalNodeSource, ScenarioSources, SourceReadinessPolicy}; use crate::scenario::{AttachSource, ExternalNodeSource, ScenarioSources};
/// Explicit descriptor for managed node sourcing. /// Explicit descriptor for managed node sourcing.
#[derive(Clone, Copy, Debug, Eq, PartialEq)] #[derive(Clone, Copy, Debug, Eq, PartialEq)]
@ -33,7 +33,6 @@ pub(crate) enum SourceOrchestrationMode {
#[derive(Clone, Debug, Eq, PartialEq)] #[derive(Clone, Debug, Eq, PartialEq)]
pub struct SourceOrchestrationPlan { pub struct SourceOrchestrationPlan {
mode: SourceOrchestrationMode, mode: SourceOrchestrationMode,
readiness_policy: SourceReadinessPolicy,
} }
/// Validation failure while building orchestration plan from sources. /// Validation failure while building orchestration plan from sources.
@ -46,14 +45,10 @@ pub enum SourceOrchestrationPlanError {
impl SourceOrchestrationPlan { impl SourceOrchestrationPlan {
pub fn try_from_sources( pub fn try_from_sources(
sources: &ScenarioSources, sources: &ScenarioSources,
readiness_policy: SourceReadinessPolicy,
) -> Result<Self, SourceOrchestrationPlanError> { ) -> Result<Self, SourceOrchestrationPlanError> {
let mode = mode_from_sources(sources); let mode = mode_from_sources(sources);
Ok(Self { Ok(Self { mode })
mode,
readiness_policy,
})
} }
#[must_use] #[must_use]
@ -74,14 +69,13 @@ impl SourceOrchestrationPlan {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::{SourceOrchestrationMode, SourceOrchestrationPlan}; use super::{SourceOrchestrationMode, SourceOrchestrationPlan};
use crate::scenario::{AttachSource, ScenarioSources, SourceReadinessPolicy}; use crate::scenario::{AttachSource, ScenarioSources};
#[test] #[test]
fn attached_sources_are_planned() { fn attached_sources_are_planned() {
let sources = ScenarioSources::attached(AttachSource::compose(vec!["node-0".to_string()])); let sources = ScenarioSources::attached(AttachSource::compose(vec!["node-0".to_string()]));
let plan = let plan = SourceOrchestrationPlan::try_from_sources(&sources)
SourceOrchestrationPlan::try_from_sources(&sources, SourceReadinessPolicy::AllReady) .expect("attached sources should build a source orchestration plan");
.expect("attached sources should build a source orchestration plan");
assert!(matches!( assert!(matches!(
plan.mode(), plan.mode(),

View File

@ -41,10 +41,7 @@ pub enum SourceResolveError {
pub fn build_source_orchestration_plan<E: Application, Caps>( pub fn build_source_orchestration_plan<E: Application, Caps>(
scenario: &Scenario<E, Caps>, scenario: &Scenario<E, Caps>,
) -> Result<SourceOrchestrationPlan, SourceOrchestrationPlanError> { ) -> Result<SourceOrchestrationPlan, SourceOrchestrationPlanError> {
SourceOrchestrationPlan::try_from_sources( SourceOrchestrationPlan::try_from_sources(scenario.sources())
scenario.sources(),
scenario.source_readiness_policy(),
)
} }
/// Resolves runtime source nodes via unified providers from orchestration plan. /// Resolves runtime source nodes via unified providers from orchestration plan.

View File

@ -1,3 +1,3 @@
mod model; mod model;
pub use model::{AttachSource, ExternalNodeSource, ScenarioSources, SourceReadinessPolicy}; pub use model::{AttachSource, ExternalNodeSource, ScenarioSources};

View File

@ -70,19 +70,6 @@ impl ExternalNodeSource {
} }
} }
/// Planned readiness strategy for mixed managed/attached/external sources.
#[derive(Clone, Copy, Debug, Eq, PartialEq, Default)]
pub enum SourceReadinessPolicy {
/// Phase 1 default: require every known node to pass readiness checks.
#[default]
AllReady,
/// Optional relaxed policy for large/partial environments.
Quorum,
/// Future policy for per-source constraints (for example managed minimum
/// plus overall quorum).
SourceAware,
}
/// Source model that makes invalid managed+attached combinations /// Source model that makes invalid managed+attached combinations
/// unrepresentable by type. /// unrepresentable by type.
#[derive(Clone, Debug, Eq, PartialEq)] #[derive(Clone, Debug, Eq, PartialEq)]