h2: switch to legacy feature

to avoid upgrading to hyper 1 / http 1 right now. this is a Debian/Proxmox
specific workaround.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
This commit is contained in:
Fabian Grünbichler 2025-03-13 11:34:30 +01:00
parent 2c9f3a63d5
commit 168ed37026
6 changed files with 19 additions and 17 deletions

View File

@ -124,7 +124,7 @@ env_logger = "0.11"
flate2 = "1.0" flate2 = "1.0"
foreign-types = "0.3" foreign-types = "0.3"
futures = "0.3" futures = "0.3"
h2 = { version = "0.4", features = [ "stream" ] } h2 = { version = "0.4", features = [ "legacy", "stream" ] }
handlebars = "3.0" handlebars = "3.0"
hex = "0.4.3" hex = "0.4.3"
hyper = { version = "0.14", features = [ "full" ] } hyper = { version = "0.14", features = [ "full" ] }

View File

@ -10,7 +10,7 @@ use tokio::net::TcpStream;
// Simple H2 client to test H2 download speed using h2server.rs // Simple H2 client to test H2 download speed using h2server.rs
struct Process { struct Process {
body: h2::RecvStream, body: h2::legacy::RecvStream,
trailers: bool, trailers: bool,
bytes: usize, bytes: usize,
} }
@ -50,7 +50,7 @@ impl Future for Process {
} }
fn send_request( fn send_request(
mut client: h2::client::SendRequest<bytes::Bytes>, mut client: h2::legacy::client::SendRequest<bytes::Bytes>,
) -> impl Future<Output = Result<usize, Error>> { ) -> impl Future<Output = Result<usize, Error>> {
println!("sending request"); println!("sending request");
@ -78,7 +78,7 @@ async fn run() -> Result<(), Error> {
let conn = TcpStream::connect(std::net::SocketAddr::from(([127, 0, 0, 1], 8008))).await?; let conn = TcpStream::connect(std::net::SocketAddr::from(([127, 0, 0, 1], 8008))).await?;
conn.set_nodelay(true).unwrap(); conn.set_nodelay(true).unwrap();
let (client, h2) = h2::client::Builder::new() let (client, h2) = h2::legacy::client::Builder::new()
.initial_connection_window_size(1024 * 1024 * 1024) .initial_connection_window_size(1024 * 1024 * 1024)
.initial_window_size(1024 * 1024 * 1024) .initial_window_size(1024 * 1024 * 1024)
.max_frame_size(4 * 1024 * 1024) .max_frame_size(4 * 1024 * 1024)

View File

@ -10,7 +10,7 @@ use tokio::net::TcpStream;
// Simple H2 client to test H2 download speed using h2s-server.rs // Simple H2 client to test H2 download speed using h2s-server.rs
struct Process { struct Process {
body: h2::RecvStream, body: h2::legacy::RecvStream,
trailers: bool, trailers: bool,
bytes: usize, bytes: usize,
} }
@ -50,7 +50,7 @@ impl Future for Process {
} }
fn send_request( fn send_request(
mut client: h2::client::SendRequest<bytes::Bytes>, mut client: h2::legacy::client::SendRequest<bytes::Bytes>,
) -> impl Future<Output = Result<usize, Error>> { ) -> impl Future<Output = Result<usize, Error>> {
println!("sending request"); println!("sending request");
@ -94,7 +94,7 @@ async fn run() -> Result<(), Error> {
.await .await
.map_err(|err| format_err!("connect failed - {}", err))?; .map_err(|err| format_err!("connect failed - {}", err))?;
let (client, h2) = h2::client::Builder::new() let (client, h2) = h2::legacy::client::Builder::new()
.initial_connection_window_size(1024 * 1024 * 1024) .initial_connection_window_size(1024 * 1024 * 1024)
.initial_window_size(1024 * 1024 * 1024) .initial_window_size(1024 * 1024 * 1024)
.max_frame_size(4 * 1024 * 1024) .max_frame_size(4 * 1024 * 1024)

View File

@ -56,7 +56,7 @@ pub struct UploadOptions {
} }
struct ChunkUploadResponse { struct ChunkUploadResponse {
future: h2::client::ResponseFuture, future: h2::legacy::client::ResponseFuture,
size: usize, size: usize,
} }
@ -143,7 +143,7 @@ impl BackupWriter {
param: Option<Value>, param: Option<Value>,
content_type: &str, content_type: &str,
data: Vec<u8>, data: Vec<u8>,
) -> Result<h2::client::ResponseFuture, Error> { ) -> Result<h2::legacy::client::ResponseFuture, Error> {
let request = let request =
H2Client::request_builder("localhost", method, path, param, Some(content_type)) H2Client::request_builder("localhost", method, path, param, Some(content_type))
.unwrap(); .unwrap();
@ -514,7 +514,7 @@ impl BackupWriter {
} }
fn response_queue() -> ( fn response_queue() -> (
mpsc::Sender<h2::client::ResponseFuture>, mpsc::Sender<h2::legacy::client::ResponseFuture>,
oneshot::Receiver<Result<(), Error>>, oneshot::Receiver<Result<(), Error>>,
) { ) {
let (verify_queue_tx, verify_queue_rx) = mpsc::channel(100); let (verify_queue_tx, verify_queue_rx) = mpsc::channel(100);
@ -537,7 +537,7 @@ impl BackupWriter {
tokio::spawn( tokio::spawn(
ReceiverStream::new(verify_queue_rx) ReceiverStream::new(verify_queue_rx)
.map(Ok::<_, Error>) .map(Ok::<_, Error>)
.try_for_each(move |response: h2::client::ResponseFuture| { .try_for_each(move |response: h2::legacy::client::ResponseFuture| {
response response
.map_err(Error::from) .map_err(Error::from)
.and_then(H2Client::h2api_response) .and_then(H2Client::h2api_response)

View File

@ -791,7 +791,7 @@ impl HttpClient {
let max_window_size = (1 << 31) - 2; let max_window_size = (1 << 31) - 2;
let (h2, connection) = h2::client::Builder::new() let (h2, connection) = h2::legacy::client::Builder::new()
.initial_connection_window_size(max_window_size) .initial_connection_window_size(max_window_size)
.initial_window_size(max_window_size) .initial_window_size(max_window_size)
.max_frame_size(4 * 1024 * 1024) .max_frame_size(4 * 1024 * 1024)
@ -936,11 +936,11 @@ impl Drop for HttpClient {
#[derive(Clone)] #[derive(Clone)]
pub struct H2Client { pub struct H2Client {
h2: h2::client::SendRequest<bytes::Bytes>, h2: h2::legacy::client::SendRequest<bytes::Bytes>,
} }
impl H2Client { impl H2Client {
pub fn new(h2: h2::client::SendRequest<bytes::Bytes>) -> Self { pub fn new(h2: h2::legacy::client::SendRequest<bytes::Bytes>) -> Self {
Self { h2 } Self { h2 }
} }
@ -1020,7 +1020,7 @@ impl H2Client {
&self, &self,
request: Request<()>, request: Request<()>,
data: Option<bytes::Bytes>, data: Option<bytes::Bytes>,
) -> impl Future<Output = Result<h2::client::ResponseFuture, Error>> { ) -> impl Future<Output = Result<h2::legacy::client::ResponseFuture, Error>> {
self.h2 self.h2
.clone() .clone()
.ready() .ready()
@ -1037,7 +1037,9 @@ impl H2Client {
}) })
} }
pub async fn h2api_response(response: Response<h2::RecvStream>) -> Result<Value, Error> { pub async fn h2api_response(
response: Response<h2::legacy::RecvStream>,
) -> Result<Value, Error> {
let status = response.status(); let status = response.status();
let (_head, mut body) = response.into_parts(); let (_head, mut body) = response.into_parts();

View File

@ -8,7 +8,7 @@ use std::task::{Context, Poll};
use anyhow::{format_err, Error}; use anyhow::{format_err, Error};
use bytes::Bytes; use bytes::Bytes;
use futures::{ready, Future}; use futures::{ready, Future};
use h2::SendStream; use h2::legacy::SendStream;
pub struct PipeToSendStream { pub struct PipeToSendStream {
body_tx: SendStream<Bytes>, body_tx: SendStream<Bytes>,