From 5de6bd7cbfea4aa3fbc8eb08bb96ea9717e448ff Mon Sep 17 00:00:00 2001 From: Noor Date: Wed, 11 Jun 2025 13:12:03 +0530 Subject: [PATCH] WIP fixed redirect returning internal error Refactors the `check_pubsub_node` function to return an `Option` to indicate whether a redirect is needed. --- src/grpc/mod.rs | 6 +++--- src/grpc/vm.rs | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/grpc/mod.rs b/src/grpc/mod.rs index 45f6187..39d103c 100644 --- a/src/grpc/mod.rs +++ b/src/grpc/mod.rs @@ -29,7 +29,7 @@ pub async fn check_pubsub_node( db: &Surreal, local_addr: &str, id: RecordId, -) -> Result { +) -> Result, db::Error> { dbg!(&local_addr); #[derive(Deserialize, Debug)] struct PubSubNode { @@ -44,13 +44,13 @@ pub async fn check_pubsub_node( dbg!(&local_addr, &node_endpoint); if local_addr == node_endpoint { - return Ok(node_endpoint); + return Ok(None); } let mut status = Status::new(tonic::Code::Unavailable, "moved"); status.metadata_mut().insert("location", node_endpoint.parse().unwrap()); - Err(status.into()) + Ok(Some(status)) } pub trait PubkeyGetter { diff --git a/src/grpc/vm.rs b/src/grpc/vm.rs index 7fe8949..2e2d594 100644 --- a/src/grpc/vm.rs +++ b/src/grpc/vm.rs @@ -225,10 +225,12 @@ impl BrainVmCli for VmCliServer { async fn new_vm(&self, req: Request) -> Result, Status> { let local_addr = req.local_addr().map(|addr| addr.to_string()).unwrap_or_default(); - let req = check_sig_from_req(req)?; let id = surrealdb::RecordId::from((VM_NODE, req.node_pubkey.clone())); - check_pubsub_node(&self.db, &local_addr, id).await?; + if let Some(redirect) = check_pubsub_node(&self.db, &local_addr, id).await? { + log::info!("redirect: {redirect}"); + return Err(redirect); + } // TODO: make it atleast 1 hour if req.locked_nano < 100 {