From 8295b448a080e4177c3b8fb2deff007ba8928a62 Mon Sep 17 00:00:00 2001 From: David Pedersen Date: Sat, 19 Nov 2022 12:59:56 +0100 Subject: [PATCH 1/3] Update to axum 0.6.0 Draft until axum is out of release candidate mode. --- tonic/Cargo.toml | 2 +- tonic/src/transport/server/mod.rs | 10 +++++----- tonic/src/transport/service/router.rs | 14 +++++++++++--- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/tonic/Cargo.toml b/tonic/Cargo.toml index c138aa184..1f57d4392 100644 --- a/tonic/Cargo.toml +++ b/tonic/Cargo.toml @@ -81,7 +81,7 @@ tokio = {version = "1.0.1", features = ["net"], optional = true} tokio-stream = "0.1" tower = {version = "0.4.7", default-features = false, features = ["balance", "buffer", "discover", "limit", "load", "make", "timeout", "util"], optional = true} tracing-futures = {version = "0.2", optional = true} -axum = {version = "0.5.16", default_features = false, optional = true} +axum = {git = "https://github.com/tokio-rs/axum", default_features = false, optional = true} # rustls rustls-pemfile = { version = "1.0", optional = true } diff --git a/tonic/src/transport/server/mod.rs b/tonic/src/transport/server/mod.rs index 5fa003afa..37b8c2b35 100644 --- a/tonic/src/transport/server/mod.rs +++ b/tonic/src/transport/server/mod.rs @@ -589,7 +589,7 @@ impl Router { .map_err(super::Error::from_source)?; self.server .serve_with_shutdown::<_, _, future::Ready<()>, _, _, ResBody>( - self.routes, + self.routes.prepare(), incoming, None, ) @@ -618,7 +618,7 @@ impl Router { let incoming = TcpIncoming::new(addr, self.server.tcp_nodelay, self.server.tcp_keepalive) .map_err(super::Error::from_source)?; self.server - .serve_with_shutdown(self.routes, incoming, Some(signal)) + .serve_with_shutdown(self.routes.prepare(), incoming, Some(signal)) .await } @@ -644,7 +644,7 @@ impl Router { { self.server .serve_with_shutdown::<_, _, future::Ready<()>, _, _, ResBody>( - self.routes, + self.routes.prepare(), incoming, None, ) @@ -676,7 +676,7 @@ impl Router { ResBody::Error: Into, { self.server - .serve_with_shutdown(self.routes, incoming, Some(signal)) + .serve_with_shutdown(self.routes.prepare(), incoming, Some(signal)) .await } @@ -690,7 +690,7 @@ impl Router { ResBody: http_body::Body + Send + 'static, ResBody::Error: Into, { - self.server.service_builder.service(self.routes) + self.server.service_builder.service(self.routes.prepare()) } } diff --git a/tonic/src/transport/service/router.rs b/tonic/src/transport/service/router.rs index 5f5e10d18..9d3f143fa 100644 --- a/tonic/src/transport/service/router.rs +++ b/tonic/src/transport/service/router.rs @@ -2,7 +2,6 @@ use crate::{ body::{boxed, BoxBody}, transport::NamedService, }; -use axum::handler::Handler; use http::{Request, Response}; use hyper::Body; use pin_project::pin_project; @@ -33,7 +32,7 @@ impl Routes { S::Future: Send + 'static, S::Error: Into + Send, { - let router = axum::Router::new().fallback(unimplemented.into_service()); + let router = axum::Router::new().fallback(unimplemented); Self { router }.add_service(svc) } @@ -48,9 +47,18 @@ impl Routes { S::Error: Into + Send, { let svc = svc.map_response(|res| res.map(axum::body::boxed)); - self.router = self.router.route(&format!("/{}/*rest", S::NAME), svc); + self.router = self + .router + .route_service(&format!("/{}/*rest", S::NAME), svc); self } + + pub(crate) fn prepare(self) -> Self { + Self { + // this makes axum perform update some internals of the router that improves perf + router: self.router.with_state(()), + } + } } async fn unimplemented() -> impl axum::response::IntoResponse { From 859aa39386c68778361cb77e1a95c396bebfd6eb Mon Sep 17 00:00:00 2001 From: David Pedersen Date: Fri, 25 Nov 2022 14:21:01 +0100 Subject: [PATCH 2/3] use released version --- tonic/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tonic/Cargo.toml b/tonic/Cargo.toml index 1f57d4392..7e7744380 100644 --- a/tonic/Cargo.toml +++ b/tonic/Cargo.toml @@ -81,7 +81,7 @@ tokio = {version = "1.0.1", features = ["net"], optional = true} tokio-stream = "0.1" tower = {version = "0.4.7", default-features = false, features = ["balance", "buffer", "discover", "limit", "load", "make", "timeout", "util"], optional = true} tracing-futures = {version = "0.2", optional = true} -axum = {git = "https://github.com/tokio-rs/axum", default_features = false, optional = true} +axum = {version = "0.6", default_features = false, optional = true} # rustls rustls-pemfile = { version = "1.0", optional = true } From eab733b869d61045a58d202f6a354d9080e10971 Mon Sep 17 00:00:00 2001 From: David Pedersen Date: Fri, 25 Nov 2022 14:21:54 +0100 Subject: [PATCH 3/3] add note --- tonic/src/transport/service/router.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/tonic/src/transport/service/router.rs b/tonic/src/transport/service/router.rs index 9d3f143fa..b00fc3f24 100644 --- a/tonic/src/transport/service/router.rs +++ b/tonic/src/transport/service/router.rs @@ -56,6 +56,7 @@ impl Routes { pub(crate) fn prepare(self) -> Self { Self { // this makes axum perform update some internals of the router that improves perf + // see https://docs.rs/axum/latest/axum/routing/struct.Router.html#a-note-about-performance router: self.router.with_state(()), } }