mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-22 20:36:38 +00:00
fix: optimize RPC connection management and prevent race conditions (#252)
This commit is contained in:
@@ -39,14 +39,21 @@ pub async fn node_service_time_out_client(
|
|||||||
Box<dyn Error>,
|
Box<dyn Error>,
|
||||||
> {
|
> {
|
||||||
let token: MetadataValue<_> = "rustfs rpc".parse()?;
|
let token: MetadataValue<_> = "rustfs rpc".parse()?;
|
||||||
let channel = match GLOBAL_Conn_Map.read().await.get(addr) {
|
|
||||||
Some(channel) => channel.clone(),
|
let channel = { GLOBAL_Conn_Map.read().await.get(addr).cloned() };
|
||||||
|
|
||||||
|
let channel = match channel {
|
||||||
|
Some(channel) => channel,
|
||||||
None => {
|
None => {
|
||||||
let connector = Endpoint::from_shared(addr.to_string())?.connect_timeout(Duration::from_secs(60));
|
let connector = Endpoint::from_shared(addr.to_string())?.connect_timeout(Duration::from_secs(60));
|
||||||
connector.connect().await?
|
let channel = connector.connect().await?;
|
||||||
|
|
||||||
|
{
|
||||||
|
GLOBAL_Conn_Map.write().await.insert(addr.to_string(), channel.clone());
|
||||||
|
}
|
||||||
|
channel
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
GLOBAL_Conn_Map.write().await.insert(addr.to_string(), channel.clone());
|
|
||||||
|
|
||||||
// let timeout_channel = Timeout::new(channel, Duration::from_secs(60));
|
// let timeout_channel = Timeout::new(channel, Duration::from_secs(60));
|
||||||
Ok(NodeServiceClient::with_interceptor(
|
Ok(NodeServiceClient::with_interceptor(
|
||||||
|
|||||||
Reference in New Issue
Block a user