Conversation
wojtekmach
approved these changes
Jan 6, 2018
ericmj
added a commit
that referenced
this pull request
Apr 12, 2026
Stream request bodies:
`mix hex.publish` shows an upload progress bar by wrapping the tarball
in a producer function and passing a `progress_callback`. Previously
`Hex.HTTP.build_mint_request` collected the full stream into a binary
before sending, so the callback fired at gigabyte-per-second (reading
from memory) and then the actual upload ran silently with no progress
shown. Now `Hex.HTTP` passes `{:stream, fun, offset}` through to
`Pool.Conn`, which calls `Mint.HTTP.stream_request_body/3` chunk by
chunk — the callback fires as bytes actually go out on the wire.
IPv4/IPv6 fallback:
`Hex.HTTP.retry` swaps `:inet`/`:inet6` in `connect_opts` on
`:nxdomain`/`:ehostunreach` to recover from hosts that resolve on only
one IP family. The pool was keyed on `{scheme, host, port}` and reused
the first request's `connect_opts` forever, so the swapped opts never
reached a new connect. Include the inet variant in the Host registry
key so the fallback retry actually gets its own pool with the opposite
inet flags.
Vendor script:
Add a comment block at the top of `scripts/vendor_mint.sh` listing the
upstream Mint PRs that must be present in any source tree used for
re-vendoring (#478 Elixir ~> 1.12 support, already applied; #479 1xx
informational handling, still open), with links to the PRs and to the
fork branches if re-vendoring before merge.
ericmj
added a commit
that referenced
this pull request
Apr 12, 2026
Refactored the Mint HTTP/2 connection-window patch from a narrow
`:connection_window_size` connect option into a proper public API,
`Mint.HTTP2.set_window_size(conn, target, new_size)`, that supports
both `:connection` and `{:request, ref}` and can be called at any point
after connect. Tracks the receive window in a new `receive_window_size`
field (connection and stream); grow-only; validated to `1..2^31-1`.
This is the function shape that fills a longstanding, well-known gap in
Mint's public API — upstream issue #357 (2022, closed) asked for exactly
this, #432 (2024, still open) is a related enhancement. Ready to submit
upstream as a PR.
On the hex side:
* Re-vendor from the integration branch (ericmj/hex-vendor-integration)
which has PR #478 (Elixir 1.12), PR #479 (HTTP/1 1xx handling) and
the new set_window_size/3 commit all stacked.
* `Conn.do_connect` now calls `Hex.Mint.HTTP2.set_window_size(conn,
:connection, 8_000_000)` immediately after a successful HTTP/2 connect.
No-op on HTTP/1. TCP ordering guarantees the WINDOW_UPDATE reaches the
server before any request HEADERS, so there's no extra RTT.
* `:client_settings: [initial_window_size: 8_000_000]` still handles the
per-stream initial window via SETTINGS.
* Update `scripts/vendor_mint.sh` comment block to point at the
integration branch and list all three upstream Mint patches with
branch links.
ericmj
added a commit
that referenced
this pull request
Apr 13, 2026
Stream request bodies:
`mix hex.publish` shows an upload progress bar by wrapping the tarball
in a producer function and passing a `progress_callback`. Previously
`Hex.HTTP.build_mint_request` collected the full stream into a binary
before sending, so the callback fired at gigabyte-per-second (reading
from memory) and then the actual upload ran silently with no progress
shown. Now `Hex.HTTP` passes `{:stream, fun, offset}` through to
`Pool.Conn`, which calls `Mint.HTTP.stream_request_body/3` chunk by
chunk — the callback fires as bytes actually go out on the wire.
IPv4/IPv6 fallback:
`Hex.HTTP.retry` swaps `:inet`/`:inet6` in `connect_opts` on
`:nxdomain`/`:ehostunreach` to recover from hosts that resolve on only
one IP family. The pool was keyed on `{scheme, host, port}` and reused
the first request's `connect_opts` forever, so the swapped opts never
reached a new connect. Include the inet variant in the Host registry
key so the fallback retry actually gets its own pool with the opposite
inet flags.
Vendor script:
Add a comment block at the top of `scripts/vendor_mint.sh` listing the
upstream Mint PRs that must be present in any source tree used for
re-vendoring (#478 Elixir ~> 1.12 support, already applied; #479 1xx
informational handling, still open), with links to the PRs and to the
fork branches if re-vendoring before merge.
ericmj
added a commit
that referenced
this pull request
Apr 13, 2026
Refactored the Mint HTTP/2 connection-window patch from a narrow
`:connection_window_size` connect option into a proper public API,
`Mint.HTTP2.set_window_size(conn, target, new_size)`, that supports
both `:connection` and `{:request, ref}` and can be called at any point
after connect. Tracks the receive window in a new `receive_window_size`
field (connection and stream); grow-only; validated to `1..2^31-1`.
This is the function shape that fills a longstanding, well-known gap in
Mint's public API — upstream issue #357 (2022, closed) asked for exactly
this, #432 (2024, still open) is a related enhancement. Ready to submit
upstream as a PR.
On the hex side:
* Re-vendor from the integration branch (ericmj/hex-vendor-integration)
which has PR #478 (Elixir 1.12), PR #479 (HTTP/1 1xx handling) and
the new set_window_size/3 commit all stacked.
* `Conn.do_connect` now calls `Hex.Mint.HTTP2.set_window_size(conn,
:connection, 8_000_000)` immediately after a successful HTTP/2 connect.
No-op on HTTP/1. TCP ordering guarantees the WINDOW_UPDATE reaches the
server before any request HEADERS, so there's no extra RTT.
* `:client_settings: [initial_window_size: 8_000_000]` still handles the
per-stream initial window via SETTINGS.
* Update `scripts/vendor_mint.sh` comment block to point at the
integration branch and list all three upstream Mint patches with
branch links.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.