diff --git a/crates/ecstore/src/core/pools.rs b/crates/ecstore/src/core/pools.rs index 9780d0630..4973f6831 100644 --- a/crates/ecstore/src/core/pools.rs +++ b/crates/ecstore/src/core/pools.rs @@ -4407,19 +4407,8 @@ pub(crate) enum PoolMetaBootstrapAuthority { } impl PoolMetaBootstrapAuthority { - /// Merge per-pool format-load proofs into one cluster bootstrap proof. - /// - /// `None` means this pool did not prove bootstrap itself: it loaded an - /// already-written `format.json`, usually formatted by that pool's first-disk - /// peer. That must not cancel a `Fresh` or `LegacyAdoption` proof from another - /// pool. Two different proven authorities still collapse to `None`. pub(crate) fn combine_across_pools(self, other: Self) -> Self { - match (self, other) { - (Self::None, proven) | (proven, Self::None) => proven, - (Self::Fresh, Self::Fresh) => Self::Fresh, - (Self::LegacyAdoption, Self::LegacyAdoption) => Self::LegacyAdoption, - (Self::Fresh, Self::LegacyAdoption) | (Self::LegacyAdoption, Self::Fresh) => Self::None, - } + if self == other { self } else { Self::None } } fn is_proven(self) -> bool { @@ -4427,23 +4416,6 @@ impl PoolMetaBootstrapAuthority { } } -#[cfg(test)] -mod bootstrap_authority_combine_tests { - use super::PoolMetaBootstrapAuthority::*; - - #[test] - fn none_does_not_cancel_a_proven_pool() { - assert_eq!(Fresh.combine_across_pools(None), Fresh); - assert_eq!(None.combine_across_pools(Fresh), Fresh); - assert_eq!(LegacyAdoption.combine_across_pools(None), LegacyAdoption); - assert_eq!(None.combine_across_pools(LegacyAdoption), LegacyAdoption); - assert_eq!(Fresh.combine_across_pools(Fresh), Fresh); - assert_eq!(None.combine_across_pools(None), None); - assert_eq!(Fresh.combine_across_pools(LegacyAdoption), None); - assert_eq!(LegacyAdoption.combine_across_pools(Fresh), None); - } -} - impl PoolMetaWriteState { #[cfg(test)] pub(crate) fn for_startup(cluster_id: uuid::Uuid, fresh_bootstrap_proven: bool) -> Self { diff --git a/docs/testing/distributed-e2e.md b/docs/testing/distributed-e2e.md index cdced9f25..d1fe05a1a 100644 --- a/docs/testing/distributed-e2e.md +++ b/docs/testing/distributed-e2e.md @@ -15,7 +15,7 @@ The in-tree harness runs every node on `127.0.0.1` with a distinct port. That ma A pool striped across several localhost ports is not expressible (`RUSTFS_VOLUMES` host ellipses would collide on disk paths). Multi-host striped pools remain the hardware functional-chain / backlog #1313 / #1314 lane. -Decommission and rebalance POST currently 500 on localhost DistErasure multi-pool when pool.bin writes are fenced (`pool metadata writes remain blocked` / missing fleet capability proof). Those cases still assert object bytes and SHA-256; when the API starts they wait for completion and assert post-move integrity. They do not treat the fence as a successful move. +Decommission and rebalance POST currently 500 on localhost DistErasure multi-pool when pool.bin writes are fenced (`pool metadata writes remain blocked` / missing fleet capability proof). Those cases still assert object bytes and SHA-256; when the API starts they wait for completion and assert post-move integrity. They do not treat the fence as a successful move. This lane does not change production pool-meta bootstrap or write-fence logic; it only observes the current server behavior. ## What this lane covers