Fix what the Go 1.26 language bump breaks (#10794)

* worker: log the balance move stage through a constant format string

Go 1.26's printf analyzer now follows printf wrappers reached through an
interface, so passing the stage straight to Logger.Info is a vet failure.

* s3api: bracket the IPv6 host in the signature test URL

A bare IPv6 literal is legal in a Host header but never in a URL. Go 1.26
stopped parsing it leniently, so carry the two forms separately and set
r.Host to the value the client would actually have signed.

* mini: bracket IPv6 addresses in the readiness probe URLs

An IPv6-only host hands mini a bare literal, and %s:%d pasted it into a URL
unbracketed. Under Go 1.26 that URL no longer parses, so waiting for the
admin server never succeeds and mini refuses to start.
This commit is contained in:
Chris Lu authored and GitHub committed 2026-08-17 14:46:25 -07:00
1 parent 518da712b5
commit 5d5ea63b3f
3 files changed
+16 -5

No files matched your search

+12 -1
View File
@@ -423,6 +423,7 @@ func TestSignatureV4WithoutProxy(t *testing.T) {
tests := []struct {
name string
host string
urlHost string // request-URL form of host, when host is not valid in a URL
proto string
expectedHost string
}{
@@ -489,12 +490,14 @@ func TestSignatureV4WithoutProxy(t *testing.T) {
{
name: "IPv6 HTTP without port",
host: "::1",
urlHost: "[::1]",
proto: "http",
expectedHost: "::1",
},
{
name: "IPv6 HTTPS without port",
host: "::1",
urlHost: "[::1]",
proto: "https",
expectedHost: "::1",
},
@@ -504,11 +507,19 @@ func TestSignatureV4WithoutProxy(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
iam := newTestIAM()
// A bare IPv6 literal is legal in a Host header but not in a URL, so the
// two forms are carried separately.
urlHost := tt.urlHost
if urlHost == "" {
urlHost = tt.host
}
// Create a request
r, err := newTestRequest("GET", tt.proto+"://"+tt.host+"/test-bucket/test-object", 0, nil)
r, err := newTestRequest("GET", tt.proto+"://"+urlHost+"/test-bucket/test-object", 0, nil)
if err != nil {
t.Fatalf("Failed to create test request: %v", err)
}
r.Host = tt.host
// Set the mux variables manually since we're not going through the actual router
r = mux.SetURLVars(r, map[string]string{