mirror of
https://git.proxmox.com/git/proxmox-backup
synced 2025-04-28 11:30:58 +00:00
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:
parent
2c9f3a63d5
commit
168ed37026
@ -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" ] }
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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();
|
||||||
|
@ -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>,
|
||||||
|
Loading…
Reference in New Issue
Block a user