Skip to content

Conversation

@rvolosatovs
Copy link
Member

Follow-up to #11221 #11440 #11636
Closes #11632

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>
@rvolosatovs rvolosatovs moved this to In progress in Ship WASIp3 Sep 9, 2025
Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>
@rvolosatovs rvolosatovs force-pushed the feat/wasip3-http-follow-up branch from 1f30f7e to aaa5901 Compare September 9, 2025 10:22
@github-actions github-actions bot added the wasi Issues pertaining to WASI label Sep 9, 2025
Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>
@rvolosatovs rvolosatovs force-pushed the feat/wasip3-http-follow-up branch from 2852821 to 233a6bf Compare September 9, 2025 13:50
@rvolosatovs rvolosatovs marked this pull request as ready for review September 9, 2025 13:50
@rvolosatovs rvolosatovs requested a review from a team as a code owner September 9, 2025 13:50
@rvolosatovs rvolosatovs added this pull request to the merge queue Sep 9, 2025
Merged via the queue into bytecodealliance:main with commit d1139ae Sep 9, 2025
44 checks passed
@rvolosatovs rvolosatovs deleted the feat/wasip3-http-follow-up branch September 9, 2025 15:44
@github-project-automation github-project-automation bot moved this from In progress to Done in Ship WASIp3 Sep 9, 2025
alexcrichton pushed a commit to alexcrichton/wasmtime that referenced this pull request Sep 9, 2025
* p3: refactor future producers/consumers

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* p3-http: tie lifetime of the spawned task to the bodies

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* p3-http: improve docs

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

---------

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>
alexcrichton added a commit that referenced this pull request Sep 9, 2025
* support non-async `{stream,future}.cancel-{read,write}` (#11625)

* support non-async `{stream,future}.cancel-{read,write}`

During my earlier stream API refactoring, I had forgotten to support or test
synchronous cancellation; this commit does both.  In the process, I realized the
future API ought to be updated to support blocking cancellation just like the
stream API, so I made that change as well.

This also adds `{Source,Destination}::reborrow` functions, allowing instances of
those types to be reborrowed, such that they may be passed as parameters but
also used again.

Note that I had to move some functions from `impl ConcurrentState` to `impl
Instance` in order to access the store and suspend the current fiber when
synchronously cancelling.

Signed-off-by: Joel Dice <joel.dice@fermyon.com>

* reduce code duplication

Signed-off-by: Joel Dice <joel.dice@fermyon.com>

---------

Signed-off-by: Joel Dice <joel.dice@fermyon.com>

* support and test synchronous `{stream,future}.cancel-{read,write}` (#11645)

* support and test synchronous `{stream,future}.cancel-{read,write}`

Previously, we only supported async calls to those intrinsics; now we support
blocking, synchronous calls as well.

Signed-off-by: Joel Dice <joel.dice@fermyon.com>

* update future-read.wast test

Signed-off-by: Joel Dice <joel.dice@fermyon.com>

---------

Signed-off-by: Joel Dice <joel.dice@fermyon.com>

* p3-http: finish `wasi:http@0.3` implementation (#11636)

* refactor(p3-http): use trappable errors

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* feat(p3-http): implement `content-length` handling

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* refactor(p3-http): remove a few resource utilities

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* remove unused test import

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* fix(p3-http): close stream handles on drop

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* test(p3-http): stream responses back

This is something we've been doing in wasip3, but I forgot to port this
over

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* doc(p3-http): add missing docs, internalize more, simplify

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* refactor(p3-http): extract `Body::consume`

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* refactor(p3-http): clean-up `content-length` error reporting

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* refactor(p3-http): drop elided lifetime

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* fix(p3-http): avoid guest body deadlock hazard

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* refactor(p3-http): add more docs, clean-up

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* doc(p3-http): add more docs

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* fix(p3-http): rework result future handling

Most importantly this avoids a race condition between `content-length` error observed by `GuestBody`
and hyper I/O driver

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* add new imports after rebase

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* clean-up `poll_consume`

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* assert content-length `handle` results

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* relax `content_length` test `handle` assert

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

---------

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* p3-http: implementation follow-up (#11649)

* p3: refactor future producers/consumers

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* p3-http: tie lifetime of the spawned task to the bodies

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* p3-http: improve docs

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

---------

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* Ignore a wasip3 http test temporarily (#11657)

Filed #11656 to track the eventual resolution.

* don't delete sync-lowered subtasks unless they've exited (#11655)

Previously, we were unconditionally deleting the callee subtask once it returned
a value to a sync-lowered call, but that's only appropriate if the subtask has
exited.  Otherwise, it needs to keep running and only be deleted once it
actually exits.

Thanks to Luke for the `sync-streams.wast` test that uncovered this, which I've
copied from the `component-model` repo.

This also makes a couple of debug logging tweaks that proved useful while
investigating the above issue.

Signed-off-by: Joel Dice <joel.dice@fermyon.com>

---------

Signed-off-by: Joel Dice <joel.dice@fermyon.com>
Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>
Co-authored-by: Joel Dice <joel.dice@fermyon.com>
Co-authored-by: Roman Volosatovs <rvolosatovs@users.noreply.github.com>
bongjunj pushed a commit to prosyslab/wasmtime that referenced this pull request Oct 20, 2025
* p3: refactor future producers/consumers

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* p3-http: tie lifetime of the spawned task to the bodies

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

* p3-http: improve docs

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>

---------

Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

wasi Issues pertaining to WASI

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

wasip3: HTTP Apply follow-up feedback from review

2 participants