From 6dc14f16dbfd0e0769e1606d1be30d315e913063 Mon Sep 17 00:00:00 2001 From: Wei Tang Date: Wed, 11 Apr 2018 21:25:50 +0800 Subject: [PATCH 1/5] Directly wait for future to resolve in a threadpool --- secret_store/src/listener/http_listener.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/secret_store/src/listener/http_listener.rs b/secret_store/src/listener/http_listener.rs index 7d4385ccc5b..089ea1a3ec1 100644 --- a/secret_store/src/listener/http_listener.rs +++ b/secret_store/src/listener/http_listener.rs @@ -105,7 +105,7 @@ impl KeyServerHttpListener { }); // TODO: Change this to tokio::spawn once hyper is Send. - current_thread::spawn(serve); + serve.wait(); future::ok(()) }); From 6fb6bf0d99d8172b9e0e09e27223aa7a333d6354 Mon Sep 17 00:00:00 2001 From: Wei Tang Date: Wed, 11 Apr 2018 21:28:12 +0800 Subject: [PATCH 2/5] Ignore return value --- secret_store/src/listener/http_listener.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/secret_store/src/listener/http_listener.rs b/secret_store/src/listener/http_listener.rs index 089ea1a3ec1..69f6e5bcecb 100644 --- a/secret_store/src/listener/http_listener.rs +++ b/secret_store/src/listener/http_listener.rs @@ -105,7 +105,7 @@ impl KeyServerHttpListener { }); // TODO: Change this to tokio::spawn once hyper is Send. - serve.wait(); + let _ = serve.wait(); future::ok(()) }); From 9252cb9842baed7ec7ebf6f08ec1d80932da0015 Mon Sep 17 00:00:00 2001 From: Wei Tang Date: Wed, 11 Apr 2018 21:50:31 +0800 Subject: [PATCH 3/5] Use path.starts_with instead of req_uri.is_absolute The later now means something else in hyper 0.11.. --- secret_store/src/listener/http_listener.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/secret_store/src/listener/http_listener.rs b/secret_store/src/listener/http_listener.rs index 69f6e5bcecb..c4f0e679990 100644 --- a/secret_store/src/listener/http_listener.rs +++ b/secret_store/src/listener/http_listener.rs @@ -20,7 +20,6 @@ use hyper::{self, header, Chunk, Uri, Request as HttpRequest, Response as HttpRe use hyper::server::Http; use serde::Serialize; use serde_json; -use tokio::executor::current_thread; use tokio::net::TcpListener; use tokio::runtime::Runtime; use tokio_service::Service; @@ -222,7 +221,7 @@ impl Service for KeyServerHttpHandler { Box::new(req.body().concat2().map(move |body| { let path = req_uri.path().to_string(); - if req_uri.is_absolute() { + if path.starts_with("/") { this.process(req_method, req_uri, &path, &body) } else { warn!(target: "secretstore", "Ignoring invalid {}-request {}", req_method, req_uri); From 35e2cb1a9e10eca4503072a233bd84e35478c2ce Mon Sep 17 00:00:00 2001 From: Wei Tang Date: Wed, 11 Apr 2018 22:05:31 +0800 Subject: [PATCH 4/5] Use tokio::spawn --- secret_store/src/listener/http_listener.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/secret_store/src/listener/http_listener.rs b/secret_store/src/listener/http_listener.rs index c4f0e679990..a5bcb997436 100644 --- a/secret_store/src/listener/http_listener.rs +++ b/secret_store/src/listener/http_listener.rs @@ -20,6 +20,7 @@ use hyper::{self, header, Chunk, Uri, Request as HttpRequest, Response as HttpRe use hyper::server::Http; use serde::Serialize; use serde_json; +use tokio; use tokio::net::TcpListener; use tokio::runtime::Runtime; use tokio_service::Service; @@ -103,9 +104,7 @@ impl KeyServerHttpListener { warn!("Key server handler error: {:?}", e); }); - // TODO: Change this to tokio::spawn once hyper is Send. - let _ = serve.wait(); - future::ok(()) + tokio::spawn(serve) }); runtime.spawn(server); @@ -202,11 +201,13 @@ impl KeyServerHttpHandler { } } +unsafe impl Send for KeyServerHttpHandler { } + impl Service for KeyServerHttpHandler { type Request = HttpRequest; type Response = HttpResponse; type Error = hyper::Error; - type Future = Box>; + type Future = Box + Send>; fn call(&self, req: HttpRequest) -> Self::Future { if req.headers().has::() { From 265b9a3926fb860d10b210c9c6d10b0fce3021b0 Mon Sep 17 00:00:00 2001 From: Wei Tang Date: Wed, 11 Apr 2018 22:13:19 +0800 Subject: [PATCH 5/5] typo: remove accidential unsafe impl --- secret_store/src/listener/http_listener.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/secret_store/src/listener/http_listener.rs b/secret_store/src/listener/http_listener.rs index a5bcb997436..bf293a44eb4 100644 --- a/secret_store/src/listener/http_listener.rs +++ b/secret_store/src/listener/http_listener.rs @@ -201,8 +201,6 @@ impl KeyServerHttpHandler { } } -unsafe impl Send for KeyServerHttpHandler { } - impl Service for KeyServerHttpHandler { type Request = HttpRequest; type Response = HttpResponse;