From: Matt Corallo Date: Thu, 30 Mar 2023 18:33:04 +0000 (+0000) Subject: Drop `futures` dependency from `lightning-block-sync` X-Git-Tag: v0.0.115~44^2~3 X-Git-Url: http://git.bitcoin.ninja/?a=commitdiff_plain;h=6b55df93fb60473349ec8a830c62a78a592729d2;p=rust-lightning Drop `futures` dependency from `lightning-block-sync` Some how I'd understood that `futures` had reasonable MSRV guarantees (e.g. at least Debian stable), but apparently that isn't actually the case, as they bumped it to upgrade to syn (with apparently no actual features or bugfixes added as a result?) with no minor version bump or any available alternative (unlike Tokio, which does LTS releases). Luckily its relatively easy to just drop the `futures` dependency - it means a new connection for each request, which is annoying, but certainly not the end of the world, and its easier than trying to deal with pinning `futures`. See https://github.com/rust-lang/futures-rs/pull/2733 --- diff --git a/lightning-block-sync/Cargo.toml b/lightning-block-sync/Cargo.toml index 9d42968d8..59f8c2356 100644 --- a/lightning-block-sync/Cargo.toml +++ b/lightning-block-sync/Cargo.toml @@ -20,7 +20,6 @@ rpc-client = [ "serde_json", "chunked_transfer" ] [dependencies] bitcoin = "0.29.0" lightning = { version = "0.0.114", path = "../lightning" } -futures-util = { version = "0.3" } tokio = { version = "1.0", features = [ "io-util", "net", "time" ], optional = true } serde_json = { version = "1.0", optional = true } chunked_transfer = { version = "1.4", optional = true } diff --git a/lightning-block-sync/src/rest.rs b/lightning-block-sync/src/rest.rs index c73b23b60..c2926b7a0 100644 --- a/lightning-block-sync/src/rest.rs +++ b/lightning-block-sync/src/rest.rs @@ -7,15 +7,12 @@ use crate::http::{BinaryResponse, HttpEndpoint, HttpClient, JsonResponse}; use bitcoin::hash_types::BlockHash; use bitcoin::hashes::hex::ToHex; -use futures_util::lock::Mutex; - use std::convert::TryFrom; use std::convert::TryInto; /// A simple REST client for requesting resources using HTTP `GET`. pub struct RestClient { endpoint: HttpEndpoint, - client: Mutex, } impl RestClient { @@ -23,8 +20,7 @@ impl RestClient { /// /// The endpoint should contain the REST path component (e.g., http://127.0.0.1:8332/rest). pub fn new(endpoint: HttpEndpoint) -> std::io::Result { - let client = Mutex::new(HttpClient::connect(&endpoint)?); - Ok(Self { endpoint, client }) + Ok(Self { endpoint }) } /// Requests a resource encoded in `F` format and interpreted as type `T`. @@ -32,7 +28,8 @@ impl RestClient { where F: TryFrom, Error = std::io::Error> + TryInto { let host = format!("{}:{}", self.endpoint.host(), self.endpoint.port()); let uri = format!("{}/{}", self.endpoint.path().trim_end_matches("/"), resource_path); - self.client.lock().await.get::(&uri, &host).await?.try_into() + let mut client = HttpClient::connect(&self.endpoint)?; + client.get::(&uri, &host).await?.try_into() } } diff --git a/lightning-block-sync/src/rpc.rs b/lightning-block-sync/src/rpc.rs index e1dc43c8f..521d94f3d 100644 --- a/lightning-block-sync/src/rpc.rs +++ b/lightning-block-sync/src/rpc.rs @@ -7,8 +7,6 @@ use crate::http::{HttpClient, HttpEndpoint, HttpError, JsonResponse}; use bitcoin::hash_types::BlockHash; use bitcoin::hashes::hex::ToHex; -use futures_util::lock::Mutex; - use serde_json; use std::convert::TryFrom; @@ -41,7 +39,6 @@ impl Error for RpcError {} pub struct RpcClient { basic_auth: String, endpoint: HttpEndpoint, - client: Mutex, id: AtomicUsize, } @@ -50,11 +47,9 @@ impl RpcClient { /// credentials should be a base64 encoding of a user name and password joined by a colon, as is /// required for HTTP basic access authentication. pub fn new(credentials: &str, endpoint: HttpEndpoint) -> std::io::Result { - let client = Mutex::new(HttpClient::connect(&endpoint)?); Ok(Self { basic_auth: "Basic ".to_string() + credentials, endpoint, - client, id: AtomicUsize::new(0), }) } @@ -73,7 +68,8 @@ impl RpcClient { "id": &self.id.fetch_add(1, Ordering::AcqRel).to_string() }); - let mut response = match self.client.lock().await.post::(&uri, &host, &self.basic_auth, content).await { + let mut client = HttpClient::connect(&self.endpoint)?; + let mut response = match client.post::(&uri, &host, &self.basic_auth, content).await { Ok(JsonResponse(response)) => response, Err(e) if e.kind() == std::io::ErrorKind::Other => { match e.get_ref().unwrap().downcast_ref::() {