From 7e569b9f67ad314410f9ac82cbd2f3f54e24512b Mon Sep 17 00:00:00 2001 From: Vlad Lazar Date: Thu, 24 Apr 2025 16:24:08 +0200 Subject: [PATCH] storage_controller: make address for peers mandatory --- storage_controller/src/http.rs | 28 ++++++++++++---------------- storage_controller/src/leadership.rs | 23 ++++++++--------------- storage_controller/src/service.rs | 2 +- 3 files changed, 21 insertions(+), 32 deletions(-) diff --git a/storage_controller/src/http.rs b/storage_controller/src/http.rs index fb4530d0d2..1b3da2ffbc 100644 --- a/storage_controller/src/http.rs +++ b/storage_controller/src/http.rs @@ -1762,23 +1762,19 @@ async fn maybe_forward(req: Request) -> ForwardOutcome { }; let cfg = state.service.get_config(); - if let Some(ref self_addr) = cfg.address_for_peers { - let leader_addr = match Uri::from_str(leader.address.as_str()) { - Ok(uri) => uri, - Err(err) => { - return ForwardOutcome::Forwarded(Err(ApiError::InternalServerError( - anyhow::anyhow!( - "Failed to parse leader uri for forwarding while in stepped down state: {err}" - ), - ))); - } - }; - - if *self_addr == leader_addr { - return ForwardOutcome::Forwarded(Err(ApiError::ResourceUnavailable( - "Leader is stepped down instance".into(), - ))); + let leader_addr = match Uri::from_str(leader.address.as_str()) { + Ok(uri) => uri, + Err(err) => { + return ForwardOutcome::Forwarded(Err(ApiError::InternalServerError(anyhow::anyhow!( + "Failed to parse leader uri for forwarding while in stepped down state: {err}" + )))); } + }; + + if cfg.address_for_peers == leader_addr { + return ForwardOutcome::Forwarded(Err(ApiError::ResourceUnavailable( + "Leader is stepped down instance".into(), + ))); } tracing::info!("Forwarding {} to leader at {}", uri, leader.address); diff --git a/storage_controller/src/leadership.rs b/storage_controller/src/leadership.rs index 39c28d60a9..2ab3fa21ec 100644 --- a/storage_controller/src/leadership.rs +++ b/storage_controller/src/leadership.rs @@ -62,22 +62,15 @@ impl Leadership { &self, current_leader: Option, ) -> Result<()> { - if let Some(address_for_peers) = &self.config.address_for_peers { - // TODO: `address-for-peers` can become a mandatory cli arg - // after we update the k8s setup - let proposed_leader = ControllerPersistence { - address: address_for_peers.to_string(), - started_at: chrono::Utc::now(), - }; + let proposed_leader = ControllerPersistence { + address: self.config.address_for_peers.to_string(), + started_at: chrono::Utc::now(), + }; - self.persistence - .update_leader(current_leader, proposed_leader) - .await - .map_err(Error::Database) - } else { - tracing::info!("No address-for-peers provided. Skipping leader persistence."); - Ok(()) - } + self.persistence + .update_leader(current_leader, proposed_leader) + .await + .map_err(Error::Database) } async fn current_leader(&self) -> DatabaseResult> { diff --git a/storage_controller/src/service.rs b/storage_controller/src/service.rs index 860fc4f6ab..54863e7fa3 100644 --- a/storage_controller/src/service.rs +++ b/storage_controller/src/service.rs @@ -429,7 +429,7 @@ pub struct Config { pub heartbeat_interval: Duration, - pub address_for_peers: Option, + pub address_for_peers: Uri, pub start_as_candidate: bool,