hyperium / hyperium/hyper

response only available on next poll

Open
#3,237 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

A-ffi C-performance
Dominant language
Rust
Stars
16.3k
Forks
1.8k
Avg merge
1d 22h
Merged PRs (30d)
14

Description

Version
master

Platform
Darwin xxx 22.5.0 Darwin Kernel Version 22.5.0: Mon Apr 24 20:51:50 PDT 2023; root:xnu-

Description

See https://github.com/curl/curl/issues/11203 for the user report and find my analysis in the comments.

tl;dr

Calling hyper_executor_poll() triggers read of a response from the network IO layer, but does not return a HYPER_TASK_RESPONSE. Instead it returns HYPER_TASK_EMPTY.

The response sits undelivered inside the hyper stack. No socket activity is happening and curl's transfer loop checks much later again on the transfer, calling hyper_executor_poll() again. This does not do any network IO, but delivers the HYPER_TASK_RESPONSE right away.

This delays curls transfers significantly.

Please advice if you regard this as a bug in hyper or advice how curl shall reliably work around this behaviour. Thanks!

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the hyper_executor_poll() entry point and read the analysis and user report in issue 11203. Reproduce the sequence where polling reads network data but returns HYPER_TASK_EMPTY, then determine whether the fix belongs in hyper or requires a reliable curl workaround; done means the response is delivered without an extra poll.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.