Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

stream not found to dispose on v1.0: is this expected under some load? #373

Open
squillace opened this issue Feb 9, 2024 · 5 comments
Open

Comments

@squillace
Copy link

a wasi v0.2.0 module build using tinygo has no problem on wasmtime nor spin (which is wasmtime) at 10,000 requests over 10 connections, but jco 1.0 can only handle about 9,000 before the following error appears:

squillace@idiopath:~/work/hello-wasi-http-go$ jco serve main.component.wasm
Server listening on 8000...
file:///home/squillace/.nvm/versions/node/v21.5.0/lib/node_modules/@bytecodealliance/jco/node_modules/@bytecodealliance/preview2-shim/lib/synckit/index.js:85
      if (error instanceof Error) throw Object.assign(error, properties);
                                  ^

Error: wasi-io trap: stream not found to dispose
    at handle (file:///home/squillace/.nvm/versions/node/v21.5.0/lib/node_modules/@bytecodealliance/jco/node_modules/@bytecodealliance/preview2-shim/lib/io/worker-thread.js:397:15)
    at file:///home/squillace/.nvm/versions/node/v21.5.0/lib/node_modules/@bytecodealliance/jco/node_modules/@bytecodealliance/preview2-shim/lib/synckit/index.js:105:38
    at MessagePort.<anonymous> (file:///home/squillace/.nvm/versions/node/v21.5.0/lib/node_modules/@bytecodealliance/jco/node_modules/@bytecodealliance/preview2-shim/lib/synckit/index.js:112:9)
    at [nodejs.internal.kHybridDispatch] (node:internal/event_target:822:20)
    at exports.emitMessage (node:internal/per_context/messageport:23:28)

Node.js v21.5.0```

Module built using the 06d197d6e608ac52da8ad39a5b6e5b41270fb773 commit of https://github.com/mossaka/hello-wasi-http-go. Again, like #335, Dan's rust hello world works fine under load, but the tinygo fails out. 

WSL2, Ubuntu 22.04.3 LTS, Windows 11, JCO 1.0.0
@squillace
Copy link
Author

@Mossaka heads up.

@guybedford
Copy link
Collaborator

Thanks for posting, can you share the example component to replicate this? Would be great to resolve. We could just ignore these errors but it's quite important to catch disposal invariant breaks.

@squillace
Copy link
Author

I'll repro today.

@squillace
Copy link
Author

OK! Back to this finally. I'm using Dan's rust component for jco serve. Same happens with go and python components.

jco version: 1.0.2
node: Node.js v21.6.2

Error occurs only after whacking it reasonably heavily:

squillace@dellsquill:~/work/squillace/hello-wasi-http$ jco serve target/wasm32-wasi/debug/hello_wasi_http.wasm
Server listening on 8000...
file:///usr/lib/node_modules/@bytecodealliance/jco/node_modules/@bytecodealliance/preview2-shim/lib/synckit/index.js:85
      if (error instanceof Error) throw Object.assign(error, properties);
                                  ^

Error: wasi-io trap: stream not found to dispose
    at handle (file:///usr/lib/node_modules/@bytecodealliance/jco/node_modules/@bytecodealliance/preview2-shim/lib/io/worker-thread.js:397:15)
    at file:///usr/lib/node_modules/@bytecodealliance/jco/node_modules/@bytecodealliance/preview2-shim/lib/synckit/index.js:105:38
    at MessagePort.<anonymous> (file:///usr/lib/node_modules/@bytecodealliance/jco/node_modules/@bytecodealliance/preview2-shim/lib/synckit/index.js:112:9)
    at [nodejs.internal.kHybridDispatch] (node:internal/event_target:822:20)
    at exports.emitMessage (node:internal/per_context/messageport:23:28)

Node.js v21.6.2

Here's the run that hurts it. I can run with ONE connection and it'll get a bit farther, but still collapses.

squillace@dellsquill:~$ hey -n 10000 -c 20 http://localhost:8000

Summary:
  Total:        4.9213 secs
  Slowest:      0.0241 secs
  Fastest:      0.0032 secs
  Average:      0.0122 secs
  Requests/sec: 2031.9800


Response time histogram:
  0.003 [1]     |
  0.005 [1]     |
  0.007 [1]     |
  0.009 [92]    |■
  0.012 [3330]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.014 [3097]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.016 [1166]  |■■■■■■■■■■■■■■
  0.018 [216]   |■■■
  0.020 [48]    |■
  0.022 [17]    |
  0.024 [31]    |


Latency distribution:
  10% in 0.0103 secs
  25% in 0.0109 secs
  50% in 0.0119 secs
  75% in 0.0131 secs
  90% in 0.0145 secs
  95% in 0.0155 secs
  99% in 0.0183 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0000 secs, 0.0032 secs, 0.0241 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0016 secs
  req write:    0.0000 secs, 0.0000 secs, 0.0008 secs
  resp wait:    0.0119 secs, 0.0016 secs, 0.0237 secs
  resp read:    0.0003 secs, 0.0000 secs, 0.0026 secs

Status code distribution:
  [200] 8000 responses

Error distribution:
  [2000]        Get "http://localhost:8000": dial tcp 127.0.0.1:8000: connect: connection refused

@guybedford
Copy link
Collaborator

@squillace thanks for the follow-up here - could you try test this out on the latest 1.0.3 version and let me know if it is still happening there? If so, please share the component and I'll look into it further.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants