From 596914d7dc3db6403a12e37dc1b78d95763fa5b1 Mon Sep 17 00:00:00 2001 From: Brooks Townsend Date: Mon, 25 Nov 2024 10:04:29 -0500 Subject: [PATCH] fix(host): remove export joinset Signed-off-by: Brooks Townsend --- crates/host/src/wasmbus/mod.rs | 50 ++++++++----------- .../components/http-hello-world/src/lib.rs | 1 + .../http-hello-world/wasmcloud.lock | 2 +- 3 files changed, 23 insertions(+), 30 deletions(-) diff --git a/crates/host/src/wasmbus/mod.rs b/crates/host/src/wasmbus/mod.rs index 5e3ee44a70..0e43b805e6 100644 --- a/crates/host/src/wasmbus/mod.rs +++ b/crates/host/src/wasmbus/mod.rs @@ -28,7 +28,7 @@ use serde::{Deserialize, Serialize}; use serde_json::json; use tokio::io::{AsyncWrite, AsyncWriteExt}; use tokio::sync::{broadcast, mpsc, watch, RwLock, Semaphore}; -use tokio::task::{JoinHandle, JoinSet}; +use tokio::task::JoinHandle; use tokio::time::{interval_at, Instant}; use tokio::{process, select, spawn}; use tokio_stream::wrappers::IntervalStream; @@ -1259,39 +1259,31 @@ impl Host { async move { join!( async move { - let mut tasks = JoinSet::new(); let mut exports = stream::select_all(exports); loop { let permits = Arc::clone(&permits); - select! { - Some(fut) = exports.next() => { - match fut { - Ok(fut) => { - debug!("accepted invocation, acquiring permit"); - let permit = permits.acquire_owned().await; - tasks.spawn(async move { - let _permit = permit; - debug!("handling invocation"); - match fut.await { - Ok(()) => { - debug!("successfully handled invocation"); - Ok(()) - }, - Err(err) => { - warn!(?err, "failed to handle invocation"); - Err(err) - }, + if let Some(fut) = exports.next().await { + match fut { + Ok(fut) => { + debug!("accepted invocation, acquiring permit"); + let permit = permits.acquire_owned().await; + spawn(async move { + let _permit = permit; + debug!("handling invocation"); + match fut.await { + Ok(()) => { + debug!("successfully handled invocation"); + Ok(()) } - }); - } - Err(err) => { - warn!(?err, "failed to accept invocation") - } + Err(err) => { + warn!(?err, "failed to handle invocation"); + Err(err) + } + } + }); } - } - Some(res) = tasks.join_next() => { - if let Err(err) = res { - error!(?err, "export serving task failed"); + Err(err) => { + warn!(?err, "failed to accept invocation") } } } diff --git a/examples/rust/components/http-hello-world/src/lib.rs b/examples/rust/components/http-hello-world/src/lib.rs index 507029d1c8..46f88d7235 100644 --- a/examples/rust/components/http-hello-world/src/lib.rs +++ b/examples/rust/components/http-hello-world/src/lib.rs @@ -8,6 +8,7 @@ impl http::Server for Component { fn handle( _request: http::IncomingRequest, ) -> http::Result> { + std::thread::sleep(std::time::Duration::from_secs(1)); Ok(http::Response::new("Hello from Rust!\n")) } } diff --git a/examples/rust/components/http-hello-world/wasmcloud.lock b/examples/rust/components/http-hello-world/wasmcloud.lock index 98e71fb4ab..32104997dc 100644 --- a/examples/rust/components/http-hello-world/wasmcloud.lock +++ b/examples/rust/components/http-hello-world/wasmcloud.lock @@ -4,7 +4,7 @@ version = 1 [[packages]] name = "wasi:http" -registry = "another.com" +registry = "wasi.dev" [[packages.versions]] requirement = "=0.2.2"