Repository navigation
Commit 0692d6b
committed
feat(stack-guest-abi): a step loop, so a guest operation pauses on its HTTP requests instead of blocking
A guest export that reaches ZeroKMS blocked on the host's synchronous
transport_send import. A host whose HTTP client cannot block — fetch in a
JavaScript edge runtime — cannot satisfy that import, and in Go the client
held its lock for the whole round trip.
The new `step` module runs an operation's work as a future polled once.
A request the work makes is recorded and the future stays pending; the
operation is kept in a table under a handle and its requests are handed to
the host. The host performs them and resumes the operation with the
responses, in order, until it is done; or it aborts it, which drops the
future and wipes everything it held. Each request stores the waker it was
polled with and resuming wakes it first, so combinators that poll an inner
future only when woken (buffered, as the ZeroKMS client's 500-key chunking
uses) do not stall. Handles are issued in increasing order and never
reused, at most 64 operations may be paused, an unknown handle is
STATUS_STATE, and work that pauses with nothing to wait on is
STATUS_INTERNAL.
STATUS_NEEDS_IO (29) is how an export says it paused. It is not a failure:
call::run records no error for it. The module holds no encoding; each guest
decides how a step's requests and responses cross. Refs #1064.1 parent 2aaab14 commit 0692d6b
7 files changed
Lines changed: 689 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
135 | 135 | | |
136 | 136 | | |
137 | 137 | | |
| 138 | + | |
138 | 139 | | |
139 | 140 | | |
140 | 141 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| 19 | + | |
19 | 20 | | |
20 | 21 | | |
21 | 22 | | |
| |||
34 | 35 | | |
35 | 36 | | |
36 | 37 | | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
37 | 43 | | |
38 | 44 | | |
39 | 45 | | |
| |||
93 | 99 | | |
94 | 100 | | |
95 | 101 | | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
96 | 114 | | |
97 | 115 | | |
98 | 116 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
104 | 104 | | |
105 | 105 | | |
106 | 106 | | |
| 107 | + | |
107 | 108 | | |
108 | 109 | | |
109 | 110 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
18 | | - | |
19 | | - | |
| 18 | + | |
| 19 | + | |
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| |||
122 | 122 | | |
123 | 123 | | |
124 | 124 | | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
125 | 131 | | |
126 | 132 | | |
127 | 133 | | |
128 | | - | |
| 134 | + | |
129 | 135 | | |
130 | 136 | | |
131 | 137 | | |
| |||
164 | 170 | | |
165 | 171 | | |
166 | 172 | | |
| 173 | + | |
167 | 174 | | |
168 | 175 | | |
169 | 176 | | |
| |||
0 commit comments