Skip to content

Commit

Permalink
Added ability to remove connection on Error
Browse files Browse the repository at this point in the history
  • Loading branch information
amigin committed Nov 22, 2024
1 parent 9c0e9fb commit ac84113
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 4 deletions.
30 changes: 26 additions & 4 deletions src/fl_url.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use hyper::Method;
use hyper::Version;
use my_http_client::http1::MyHttpClient;
use my_http_client::http1::MyHttpRequest;
use my_http_client::MyHttpClientError;
use rust_extensions::StrOrString;

use std::sync::Arc;
Expand Down Expand Up @@ -253,7 +254,9 @@ impl FlUrl {

let response = reused_connection
.do_request(request, self.request_timeout)
.await?;
.await;

let response = self.handle_http_response(response).await?;
FlUrlResponse::from_http1_response(self.url, response)
}
}
Expand All @@ -279,7 +282,8 @@ impl FlUrl {

let response = reused_connection
.do_request(request, self.request_timeout)
.await?;
.await;
let response = self.handle_http_response(response).await?;

FlUrlResponse::from_http1_response(self.url, response)
}
Expand Down Expand Up @@ -307,7 +311,9 @@ impl FlUrl {

let response = reused_connection
.do_request(request, self.request_timeout)
.await?;
.await;

let response = self.handle_http_response(response).await?;

FlUrlResponse::from_http1_response(self.url, response)
}
Expand All @@ -330,7 +336,8 @@ impl FlUrl {

let response = reused_connection
.do_request(request, self.request_timeout)
.await?;
.await;
let response = self.handle_http_response(response).await?;

let result = FlUrlResponse::from_http1_response(self.url, response);

Expand Down Expand Up @@ -429,4 +436,19 @@ impl FlUrl {
let request = self.compile_request(Method::GET, None);
self.execute(request).await
}

async fn handle_http_response<TResult>(
&self,
result: Result<TResult, MyHttpClientError>,
) -> Result<TResult, MyHttpClientError> {
match result {
Ok(result) => {
return Ok(result);
}
Err(err) => {
self.get_clients_cache().remove(&self.url).await;
Err(err)
}
}
}
}
16 changes: 16 additions & 0 deletions src/http_clients_cache.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,22 @@ impl HttpClientsCache {

Ok(new_one)
}

pub async fn remove(&self, url_builder: &UrlBuilder) {
let remote_endpoint = url_builder.get_remote_endpoint();

let mut write_access = self.inner.write().await;

let hash_map_key = get_https_key(remote_endpoint);

write_access.http.remove(hash_map_key.as_str());
write_access.https.remove(hash_map_key.as_str());
#[cfg(feature = "unix-socket")]
write_access.unix_socket.remove(hash_map_key.as_str());

#[cfg(feature = "with-ssh")]
write_access.ssh.remove(hash_map_key.as_str());
}
}

fn get_http_key(remote_endpoint: RemoteEndpoint) -> ShortString {
Expand Down

0 comments on commit ac84113

Please sign in to comment.