diff --git a/src/discovery.rs b/src/discovery.rs index 702fa9fdcc189f343e5620facbaabfeab3f6e2e1..789779d70b821e79d056f6da2be3adb21c2ed343 100644 --- a/src/discovery.rs +++ b/src/discovery.rs @@ -2,7 +2,6 @@ use ::tarantool::fiber::{mutex::MutexGuard, sleep, Mutex}; use ::tarantool::proc; use ::tarantool::uuid::Uuid; use serde::{Deserialize, Serialize}; -use std::borrow::Cow; use std::collections::BTreeSet; use std::error::Error as StdError; use std::time::{Duration, Instant}; @@ -194,11 +193,7 @@ pub fn wait_global() -> Role { } #[proc] -fn proc_discover<'a>( - #[inject(&mut discovery())] discovery: &'a mut Option<MutexGuard<'a, Discovery>>, - request: Request, - request_to: Address, -) -> Result<Cow<'a, Response>, Box<dyn StdError>> { +fn proc_discover<'a>(request: Request, request_to: Address) -> Result<Response, Box<dyn StdError>> { let ready_ids = traft::node::global().ok().and_then(|node| { let status = node.status(); status.leader_id.map(|leader_id| (leader_id, status.id)) @@ -207,13 +202,14 @@ fn proc_discover<'a>( let leader = traft::Storage::peer_by_raft_id(leader_id)?.ok_or_else(|| { format!("leader_id is present ({leader_id}) but it's address is unknown for node {id}") })?; - Ok(Cow::Owned(Response::Done(Role::new( + Ok(Response::Done(Role::new( leader.peer_address, leader_id == id, - )))) + ))) } else { + let mut discovery = discovery(); let discovery = discovery.as_mut().ok_or("discovery uninitialized")?; - Ok(Cow::Borrowed(discovery.handle_request(request, request_to))) + Ok(discovery.handle_request(request, request_to).clone()) } }