mirror of
https://tangled.org/evan.jarrett.net/at-container-registry
synced 2026-09-23 10:44:16 +00:00
The admin crew tab renders one row per crew member and gives each row its own hx-get, so opening it on a hold with 551 crew issues 551 requests. Over HTTP/1.1 a browser runs at most ~6 per origin, so they queue six at a time and every other request to the same host queues behind them — which is why loading the relay page stalls while the crew rows are still resolving, and why the rows that lose the race come back as "Server error" toasts. The 504 behind that toast is the load balancer's, not the hold's: the hold logs those requests as 200. HTTP/2 multiplexes them over one connection and the queue disappears. It does not make the slow rows fast — that is a separate fix to the per-row identity lookup — but it stops one slow surface from blocking the rest of the panel. Two halves, because neither works alone. The load balancer terminates TLS and speaks cleartext to the origin, so ALPN never runs on the backend leg and net/http can only answer HTTP/1.1 there. Both servers now wrap their handler in h2c. The wrapper is opt-in per connection: it upgrades only for a client sending the h2c preface or "Upgrade: h2c", and passes everything else through untouched, so an HTTP/1.1 WebSocket upgrade is unaffected. Verified both directions against this wiring — HTTP/1.1 for a plain client, HTTP/2.0 with --http2-prior-knowledge. The frontend's http2_enabled was never set, so it sat at the UpCloud default of off. That is the half the browser actually sees. timeout_client is now stated explicitly at its current 10s rather than left implicit: it is the boundary that produces the 504s above, so it belongs somewhere visible. It is deliberately unchanged — raising it without fixing the slow lookup would only make a stalled row stall longer. The hold's *backend* stays on HTTP/1.1. It serves subscribeRepos over WebSocket to external relays and to the scanner, and WebSocket over HTTP/2 needs the RFC 8441 Extended CONNECT that Go's http2 server does not implement for Upgrade:. Routing that backend over h2 would break the firehose. The appview accepts no inbound WebSocket and has no such constraint. Both origins carry h2c regardless, so enabling it for the hold later is a config change, not a code change. createLoadBalancer only runs when there is no LB yet, so properties set there would reach a new deployment and never an existing one. ensureLBHTTP2 reconciles them onto an LB that already exists, following ensureLBForwardedHeaders: read what is there, change only what differs, report what it did, and no-op on a second run. Backend modifies carry the existing health check back, since Properties replaces the object wholesale. Also gofmt: provision.go was not gofmt-clean at HEAD, unrelated to this change. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TA9D4DjaLZTvzQ7dJbu4eg
221 lines
11 KiB
AMPL
221 lines
11 KiB
AMPL
module atcr.io
|
|
|
|
go 1.26.7
|
|
|
|
require (
|
|
github.com/aws/aws-sdk-go-v2 v1.45.1
|
|
github.com/aws/aws-sdk-go-v2/config v1.33.2
|
|
github.com/aws/aws-sdk-go-v2/credentials v1.20.2
|
|
github.com/aws/aws-sdk-go-v2/service/s3 v1.110.0
|
|
github.com/bluesky-social/indigo v0.0.0-20260901021441-b1f966883e38
|
|
github.com/charmbracelet/huh v1.0.0
|
|
github.com/charmbracelet/huh/spinner v0.0.0-20260223110133-9dc45e34a40b
|
|
github.com/charmbracelet/lipgloss v1.1.0
|
|
github.com/did-method-plc/go-didplc v0.2.2
|
|
github.com/distribution/distribution/v3 v3.1.1
|
|
github.com/distribution/reference v0.6.0
|
|
github.com/go-chi/chi/v5 v5.3.2
|
|
github.com/go-chi/render v1.0.3
|
|
github.com/go-viper/mapstructure/v2 v2.5.0
|
|
github.com/goki/freetype v1.0.5
|
|
github.com/golang-jwt/jwt/v5 v5.3.1
|
|
github.com/google/go-containerregistry v0.22.0
|
|
github.com/google/go-querystring v1.2.0
|
|
github.com/google/uuid v1.6.0
|
|
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674
|
|
github.com/ipfs/go-block-format v0.2.4
|
|
github.com/ipfs/go-cid v0.6.2
|
|
github.com/ipfs/go-ipfs-blockstore v1.3.1
|
|
github.com/ipfs/go-ipld-cbor v0.3.0
|
|
github.com/ipfs/go-ipld-format v0.6.4
|
|
github.com/ipld/go-car v0.6.3
|
|
github.com/johannesboyne/gofakes3 v1.2.0
|
|
github.com/klauspost/compress v1.19.2
|
|
github.com/microcosm-cc/bluemonday v1.0.27
|
|
github.com/multiformats/go-multihash v0.2.3
|
|
github.com/opencontainers/go-digest v1.0.0
|
|
github.com/opencontainers/image-spec v1.1.1
|
|
github.com/regclient/regclient v0.11.5
|
|
github.com/spf13/cobra v1.10.2
|
|
github.com/spf13/viper v1.21.0
|
|
github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c
|
|
github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef
|
|
github.com/stretchr/testify v1.12.1
|
|
github.com/stripe/stripe-go/v84 v84.4.1
|
|
github.com/tursodatabase/go-libsql v0.0.0-20260424063416-3051e37e6e04
|
|
github.com/whyrusleeping/cbor-gen v0.3.1
|
|
github.com/yuin/goldmark v1.8.5
|
|
go.opentelemetry.io/otel v1.46.0
|
|
go.yaml.in/yaml/v4 v4.0.0-rc.6
|
|
golang.org/x/crypto v0.55.0
|
|
golang.org/x/image v0.45.0
|
|
golang.org/x/net v0.58.0
|
|
golang.org/x/sys v0.47.0
|
|
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da
|
|
oras.land/oras-go/v2 v2.6.2
|
|
)
|
|
|
|
require (
|
|
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 // indirect
|
|
github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b // indirect
|
|
github.com/ajg/form v1.9.0 // indirect
|
|
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
|
|
github.com/atotto/clipboard v0.1.4 // indirect
|
|
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.20 // indirect
|
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.19.1 // indirect
|
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.5.1 // indirect
|
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.8.1 // indirect
|
|
github.com/aws/aws-sdk-go-v2/internal/v4a v1.5.1 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.19 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.11.1 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.14.1 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.20.1 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/signin v1.8.0 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/sso v1.36.0 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.41.0 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/sts v1.48.0 // indirect
|
|
github.com/aws/smithy-go v1.28.1 // indirect
|
|
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
|
|
github.com/aymerick/douceur v0.2.0 // indirect
|
|
github.com/beorn7/perks v1.0.1 // indirect
|
|
github.com/bshuster-repo/logrus-logstash-hook v1.1.0 // indirect
|
|
github.com/catppuccin/go v0.3.0 // indirect
|
|
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
|
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
|
github.com/charmbracelet/bubbles v1.0.0 // indirect
|
|
github.com/charmbracelet/bubbletea v1.3.10 // indirect
|
|
github.com/charmbracelet/colorprofile v0.4.3 // indirect
|
|
github.com/charmbracelet/x/ansi v0.11.8 // indirect
|
|
github.com/charmbracelet/x/cellbuf v0.0.15 // indirect
|
|
github.com/charmbracelet/x/exp/strings v0.1.0 // indirect
|
|
github.com/charmbracelet/x/term v0.2.2 // indirect
|
|
github.com/clipperhouse/displaywidth v0.11.0 // indirect
|
|
github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
|
|
github.com/coreos/go-systemd/v22 v22.7.0 // indirect
|
|
github.com/docker/cli v29.7.2+incompatible // indirect
|
|
github.com/docker/docker-credential-helpers v0.9.9 // indirect
|
|
github.com/docker/go-events v0.1.0 // indirect
|
|
github.com/docker/go-metrics v0.1.0 // indirect
|
|
github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 // indirect
|
|
github.com/dustin/go-humanize v1.0.1 // indirect
|
|
github.com/earthboundkid/versioninfo/v2 v2.24.1 // indirect
|
|
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
|
|
github.com/fatih/color v1.19.0 // indirect
|
|
github.com/felixge/httpsnoop v1.1.0 // indirect
|
|
github.com/fsnotify/fsnotify v1.10.1 // indirect
|
|
github.com/gammazero/chanqueue v1.1.2 // indirect
|
|
github.com/gammazero/deque v1.2.1 // indirect
|
|
github.com/go-jose/go-jose/v4 v4.1.4 // indirect
|
|
github.com/go-logr/logr v1.4.4 // indirect
|
|
github.com/go-logr/stdr v1.2.2 // indirect
|
|
github.com/gogo/protobuf v1.3.2 // indirect
|
|
github.com/golang/snappy v1.0.0 // indirect
|
|
github.com/gorilla/css v1.0.1 // indirect
|
|
github.com/gorilla/handlers v1.5.2 // indirect
|
|
github.com/gorilla/mux v1.8.1 // indirect
|
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.30.0 // indirect
|
|
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
|
github.com/hashicorp/go-retryablehttp v0.7.8 // indirect
|
|
github.com/hashicorp/golang-lru v1.0.2 // indirect
|
|
github.com/hashicorp/golang-lru/arc/v2 v2.0.7 // indirect
|
|
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
|
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
|
github.com/ipfs/bbloom v0.1.0 // indirect
|
|
github.com/ipfs/boxo v0.42.2 // indirect
|
|
github.com/ipfs/go-cidutil v0.1.2 // indirect
|
|
github.com/ipfs/go-datastore v0.9.2 // indirect
|
|
github.com/ipfs/go-dsqueue v0.2.0 // indirect
|
|
github.com/ipfs/go-ipfs-ds-help v1.1.1 // indirect
|
|
github.com/ipfs/go-ipld-legacy v0.3.0 // indirect
|
|
github.com/ipfs/go-log v1.0.5 // indirect
|
|
github.com/ipfs/go-log/v2 v2.9.2 // indirect
|
|
github.com/ipfs/go-metrics-interface v0.3.0 // indirect
|
|
github.com/ipld/go-codec-dagpb v1.7.0 // indirect
|
|
github.com/ipld/go-ipld-prime v0.24.0 // indirect
|
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
|
github.com/jinzhu/now v1.1.5 // indirect
|
|
github.com/klauspost/cpuid/v2 v2.4.0 // indirect
|
|
github.com/libsql/sqlite-antlr4-parser v0.0.0-20240721121621-c0bdc870f11c // indirect
|
|
github.com/lucasb-eyer/go-colorful v1.4.1 // indirect
|
|
github.com/mattn/go-isatty v0.0.24 // indirect
|
|
github.com/mattn/go-localereader v0.0.2-0.20220822084749-2491eb6c1c75 // indirect
|
|
github.com/mattn/go-runewidth v0.0.28 // indirect
|
|
github.com/minio/sha256-simd v1.0.1 // indirect
|
|
github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect
|
|
github.com/mr-tron/base58 v1.3.0 // indirect
|
|
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
|
|
github.com/muesli/cancelreader v0.2.2 // indirect
|
|
github.com/muesli/termenv v0.16.0 // indirect
|
|
github.com/multiformats/go-base32 v0.1.0 // indirect
|
|
github.com/multiformats/go-base36 v0.2.0 // indirect
|
|
github.com/multiformats/go-multibase v0.3.0 // indirect
|
|
github.com/multiformats/go-multicodec v0.10.0 // indirect
|
|
github.com/multiformats/go-varint v0.1.0 // indirect
|
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
|
github.com/opentracing/opentracing-go v1.2.0 // indirect
|
|
github.com/pelletier/go-toml/v2 v2.4.3 // indirect
|
|
github.com/polydawn/refmt v0.90.0 // indirect
|
|
github.com/prometheus/client_golang v1.24.1 // indirect
|
|
github.com/prometheus/client_model v0.6.3 // indirect
|
|
github.com/prometheus/common v0.71.0 // indirect
|
|
github.com/prometheus/otlptranslator v1.0.0 // indirect
|
|
github.com/prometheus/procfs v0.22.0 // indirect
|
|
github.com/redis/go-redis/extra/rediscmd/v9 v9.22.0 // indirect
|
|
github.com/redis/go-redis/extra/redisotel/v9 v9.22.0 // indirect
|
|
github.com/redis/go-redis/v9 v9.22.0 // indirect
|
|
github.com/rivo/uniseg v0.4.7 // indirect
|
|
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 // indirect
|
|
github.com/sagikazarmark/locafero v0.12.0 // indirect
|
|
github.com/sirupsen/logrus v1.10.2 // indirect
|
|
github.com/spaolacci/murmur3 v1.1.0 // indirect
|
|
github.com/spf13/afero v1.15.0 // indirect
|
|
github.com/spf13/cast v1.10.0 // indirect
|
|
github.com/spf13/pflag v1.0.10 // indirect
|
|
github.com/subosito/gotenv v1.6.0 // indirect
|
|
github.com/ulikunitz/xz v0.5.16 // indirect
|
|
github.com/xo/terminfo v1.0.0 // indirect
|
|
gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b // indirect
|
|
gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 // indirect
|
|
go.etcd.io/bbolt v1.4.3 // indirect
|
|
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
|
|
go.opentelemetry.io/contrib/bridges/prometheus v0.71.0 // indirect
|
|
go.opentelemetry.io/contrib/exporters/autoexport v0.71.0 // indirect
|
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0 // indirect
|
|
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.22.0 // indirect
|
|
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.22.0 // indirect
|
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.46.0 // indirect
|
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.46.0 // indirect
|
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.46.0 // indirect
|
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.46.0 // indirect
|
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.46.0 // indirect
|
|
go.opentelemetry.io/otel/exporters/prometheus v0.68.0 // indirect
|
|
go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.22.0 // indirect
|
|
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.46.0 // indirect
|
|
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.46.0 // indirect
|
|
go.opentelemetry.io/otel/log v0.22.0 // indirect
|
|
go.opentelemetry.io/otel/metric v1.46.0 // indirect
|
|
go.opentelemetry.io/otel/sdk v1.46.0 // indirect
|
|
go.opentelemetry.io/otel/sdk/log v0.22.0 // indirect
|
|
go.opentelemetry.io/otel/sdk/metric v1.46.0 // indirect
|
|
go.opentelemetry.io/otel/trace v1.46.0 // indirect
|
|
go.opentelemetry.io/proto/otlp v1.11.0 // indirect
|
|
go.shabbyrobe.org/gocovmerge v0.0.0-20230507111327-fa4f82cfbf4d // indirect
|
|
go.uber.org/atomic v1.11.0 // indirect
|
|
go.uber.org/multierr v1.11.0 // indirect
|
|
go.uber.org/zap v1.28.0 // indirect
|
|
go.yaml.in/yaml/v3 v3.0.5 // indirect
|
|
golang.org/x/exp v0.0.0-20260824195058-e88cd73687aa // indirect
|
|
golang.org/x/sync v0.22.0 // indirect
|
|
golang.org/x/text v0.41.0 // indirect
|
|
golang.org/x/time v0.15.0 // indirect
|
|
golang.org/x/tools v0.49.0 // indirect
|
|
google.golang.org/genproto/googleapis/api v0.0.0-20260831171406-18b4a7587f8a // indirect
|
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20260831171406-18b4a7587f8a // indirect
|
|
google.golang.org/grpc v1.83.2 // indirect
|
|
google.golang.org/protobuf v1.36.12 // indirect
|
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
|
gorm.io/gorm v1.31.2 // indirect
|
|
gotest.tools/v3 v3.5.2 // indirect
|
|
lukechampine.com/blake3 v1.4.1 // indirect
|
|
)
|