bytecodealliance / bytecodealliance/wac

Error: resource types are not the same when composing components

Open
#149 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
208
Forks
41
Avg merge
2d 7h
Merged PRs (30d)
3

Description

I'm trying to wrap a component that implments wasi:http/incoming-handler into a different api. The way I'm trying to accomplish this is by having two different components that will be composed with it.

1. Exports the wasi:http/types interface + some extensions. This will be composed with (2) and (3) and has otherwise no imports (except other wasi interfaces)
2. The wrapped component. This imports wasi:http/types and exports wasi:http/incoming-handler.
3. A component providing the new api. This imports wasi:http/types, wasi:http/incoming-handler, the extensions from (1) and exports the new api.

---

Problem is that when I try composing the wasm, it errors with:

```
❯ wac plug adapter.wasm --plug types.wasm -o adapter-plugged.wasm
error: encoding produced a component that failed validation

Caused by:
type mismatch for import `wasi:http/incoming-handler@0.2.3`
type mismatch in instance export `incoming-request`
resource types are not the same (ResourceId { globally_unique_id: 2, contextually_unique_id: 8 } vs. ResourceId { globally_unique_id: 2, contextually_unique_id: 57 }) (at offset 0x4e0399)
```

This error shows up both for `wac plug` and `wac compose`.

---

Wits look as follows:
Component 1:

```
package poc:types;

interface extensions {
use wasi:http/types@0.2.3.{method, scheme, status-code, incoming-request, response-outparam};

type fields = list>>;

type body = list;

record body-and-trailers {
body: body,
trailers: option
}

record request {
method: method,
path-with-query: string,
scheme: scheme,
authority: string,
headers: fields,
body-and-trailers: option
}

record response {
status: status-code,
body: option
}

resource response-outparam-proxy {
constructor();

new-outparam: func() -> response-outparam;
get-response: func() -> response;
}

new-wasi-http-request: func(request: request) -> incoming-request;
}

world api {
export wasi:http/types@0.2.3;
export extensions
}
```

Component 2:

```
package poc:handler;

world api {
import wasi:http/types@0.2.3;
export wasi:http/incoming-handler@0.2.3;
}
```

Component 3:

```
package poc:adapter;

interface adapted-api {
use poc:types/extensions.{request, response};

handle: func(request: request) -> response;
}

world api {
import wasi:http/incoming-handler@0.2.3;
import wasi:http/types@0.2.3;
import poc:types/extensions;

export adapted-api;
}
```

---

I suspect this is a similiar error to https://github.com/bytecodealliance/wasm-tools/issues/1565. [This comment](https://github.com/bytecodealliance/wasm-tools/issues/1565#issuecomment-2377631296) provided a reproduction that fails with the same error.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.