Skip to content

feat(HTTPConfig): expose config to force-attempt HTTP/2 - #266

Merged
GiedriusS merged 2 commits into
thanos-io:mainfrom
francoposa:francoposa/expose-config-force-attempt-http2
Aug 17, 2026
Merged

feat(HTTPConfig): expose config to force-attempt HTTP/2#266
GiedriusS merged 2 commits into
thanos-io:mainfrom
francoposa:francoposa/expose-config-force-attempt-http2

Conversation

@francoposa

@francoposa francoposa commented Jul 30, 2026

Copy link
Copy Markdown
Contributor
  • I added CHANGELOG entry for this change.
  • Change is not relevant to the end user.

Changes

Added flag to pass through ForceAttemptHTTP2 - we are experiencing extremely high tail latencies with GCS that can be mitigated in part by HTTP/2, at least in our benchmarks so far.

This deals with the Go http.Transport's design choice of silently downgrading to HTTP/1.1 when a custom Transport is used:

	// ForceAttemptHTTP2 controls whether HTTP/2 is enabled when a non-zero
	// Dial, DialTLS, or DialContext func or TLSClientConfig is provided.
	// By default, use of any those fields conservatively disables HTTP/2.
	// To use a custom dialer or TLS config and still attempt HTTP/2
	// upgrades, set this to true.
	ForceAttemptHTTP2 [bool](https://pkg.go.dev/builtin#bool)

Verification

Test are added for config parsing & validation - we verified the performance difference in a benchmark here where we just hardcoded the flag in objstore/exthttp/transport.go.

Signed-off-by: francoposa <franco@francoposa.io>
@francoposa
francoposa force-pushed the francoposa/expose-config-force-attempt-http2 branch from fd905e2 to aaf0154 Compare July 30, 2026 20:41
Signed-off-by: francoposa <franco@francoposa.io>
@francoposa
francoposa marked this pull request as ready for review July 30, 2026 21:00
@francoposa
francoposa force-pushed the francoposa/expose-config-force-attempt-http2 branch from 1e2870b to 44bf504 Compare August 14, 2026 17:32
francoposa added a commit to grafana/mimir that referenced this pull request Aug 15, 2026
… object storage clients (#16385)

This option fixes extreme object storage tail latency in GCS due to GCS
killing connections and the reconnect storm blocking the head of the
line.

Unfortunately this must from my personal fork for now because Thanos is
unresponsive to PRs on `thanos-io/objstore` and the Grafana GitHub org
has disabled any ability to effectively use public forks - the
`grafana/objstore` fork is too far out of date and cannot be synced with
upstream.

Upstream PR is sitting at the same commit hash
([44bf504](thanos-io/objstore@44bf504))
- thanos-io/objstore#266

<!--  Thanks for sending a pull request!  Before submitting:

1. Read our CONTRIBUTING.md guide
2. Rebase your PR if it gets out of sync with main
-->

#### What this PR does

#### Which issue(s) this PR fixes or relates to

Fixes #<issue number>

#### Checklist

- [ ] Tests updated.
- [x] Documentation added.
- [x] `CHANGELOG.md` updated - the order of entries should be
`[CHANGE]`, `[FEATURE]`, `[ENHANCEMENT]`, `[BUGFIX]`. If changelog entry
is not needed, please add the `changelog-not-needed` label to the PR.
- [ ]
[`about-versioning.md`](https://github.com/grafana/mimir/blob/main/docs/sources/mimir/configure/about-versioning.md)
updated with experimental features.
@GiedriusS
GiedriusS merged commit e42d91c into thanos-io:main Aug 17, 2026
12 checks passed
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

Successfully merging this pull request may close these issues.

2 participants