Skip to content

fix(dmsg): restore proxyproto USE policy (v0.15 REQUIRE default broke dmsg data-plane fleet-wide)#3510

Merged
0pcom merged 1 commit into
skycoin:developfrom
0pcom:fix/proxyproto-require-regression
Jul 17, 2026
Merged

fix(dmsg): restore proxyproto USE policy (v0.15 REQUIRE default broke dmsg data-plane fleet-wide)#3510
0pcom merged 1 commit into
skycoin:developfrom
0pcom:fix/proxyproto-require-regression

Conversation

@0pcom

@0pcom 0pcom commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator

Urgent — fleet-wide dmsg outage

go-proxyproto v0.15.0 (pulled in by the #3505 make update-dep bump) flipped the zero-value DefaultPolicy from lenient USE to REQUIRE. A bare proxyproto.Listener{Listener: ln} now fails the first Read/Write of any connection that doesn't open with a PROXY header (ErrNoProxyProtocol).

The client-facing dmsg data-plane listener (pkg/dmsg/dmsgserver/api.go) is exactly that: dmsg clients open with a raw Noise handshake, never a PROXY header. So as dmsg servers auto-updated onto develop, they began rejecting every visor connection — dmsg sessions can't establish, and anything needing dmsg (hypervisor init, route/transport setup) goes dark. The dmsg-discovery + tcpproxy HTTP listeners hit the same wall (health checks + their package tests get EOF — this is the develop linux-job red I flagged earlier).

Fix

Give all four proxyproto.Listener sites an explicit ConnPolicy returning USE — restoring pre-v0.15 behavior (honor a PROXY header if an upstream proxy sends one; also accept header-less direct connections). Explicit policy survives future dep bumps.

Sites: dmsgserver (data-plane + health), dmsg-discovery, tcpproxy.

Verified

  • pkg/services/dmsgdisc TestListenAndServe_Serves now passes (was failing on develop).
  • pkg/tcpproxy TestListenAndServe_ServesRequests now passes.
  • go build ./... clean.

Fixes the develop test breakage; unblocks the fleet.

… fleet-wide

go-proxyproto v0.15.0 (pulled in by the skycoin#3505 make update-dep bump) changed the
zero-value DefaultPolicy from the lenient USE to REQUIRE: a bare
`proxyproto.Listener{Listener: ln}` now fails the FIRST Read/Write of any
connection that does not open with a PROXY header (ErrNoProxyProtocol).

The client-facing dmsg data-plane listener (dmsgserver/api.go) is exactly such
a listener: dmsg clients open with a raw Noise handshake, never a PROXY header.
So as dmsg servers auto-updated onto develop, they began REJECTING every visor
connection — dmsg sessions couldn't establish, and anything that needs dmsg
(hypervisor init, route/transport setup) went dark. The dmsg-discovery + tcpproxy
HTTP listeners hit the same wall (health checks and the package tests get EOF),
which is why TestListenAndServe_Serves / tcpproxy TestListenAndServe_ServesRequests
were failing on develop.

Fix: give all four proxyproto.Listener sites an explicit ConnPolicy that returns
USE — restoring the pre-v0.15 behavior (honor a PROXY header if an upstream proxy
sends one, but ALSO accept header-less direct connections). Survives future
dep bumps, unlike leaving the default. Sites: dmsgserver (data-plane + health),
dmsg-discovery, tcpproxy.

Verified: pkg/services/dmsgdisc + pkg/tcpproxy tests now pass; go build ./... clean.
@0pcom
0pcom merged commit 0a9654f into skycoin:develop Jul 17, 2026
10 of 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.

1 participant