From a058d6e21dd30110806d1260e5126df5725bbc53 Mon Sep 17 00:00:00 2001 From: Samuel McBroom Date: Thu, 17 Apr 2025 20:07:25 -0700 Subject: [PATCH] Do not autoscale up on status requests (#388) --- Dockerfile | 2 +- mcproto/types.go | 4 ++++ server/connector.go | 9 +++++---- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6e230bd..1623ef4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.22 AS builder +FROM golang:1.23 AS builder WORKDIR /build diff --git a/mcproto/types.go b/mcproto/types.go index 5ca7c0d..ffd0715 100644 --- a/mcproto/types.go +++ b/mcproto/types.go @@ -56,6 +56,10 @@ type Handshake struct { NextState int } +const ( + StateStatus State = 1 +) + type LegacyServerListPing struct { ProtocolVersion int ServerAddress string diff --git a/server/connector.go b/server/connector.go index 6119f0b..8e8f1a1 100644 --- a/server/connector.go +++ b/server/connector.go @@ -223,8 +223,9 @@ func (c *Connector) HandleConnection(ctx context.Context, frontendConn net.Conn) Debug("Got handshake") serverAddress := handshake.ServerAddress + nextState := mcproto.State(handshake.NextState) - c.findAndConnectBackend(ctx, frontendConn, clientAddr, inspectionBuffer, serverAddress) + c.findAndConnectBackend(ctx, frontendConn, clientAddr, inspectionBuffer, serverAddress, nextState) } else if packet.PacketID == mcproto.PacketIdLegacyServerListPing { handshake, ok := packet.Data.(*mcproto.LegacyServerListPing) if !ok { @@ -243,7 +244,7 @@ func (c *Connector) HandleConnection(ctx context.Context, frontendConn net.Conn) serverAddress := handshake.ServerAddress - c.findAndConnectBackend(ctx, frontendConn, clientAddr, inspectionBuffer, serverAddress) + c.findAndConnectBackend(ctx, frontendConn, clientAddr, inspectionBuffer, serverAddress, mcproto.StateStatus) } else { logrus. WithField("client", clientAddr). @@ -255,10 +256,10 @@ func (c *Connector) HandleConnection(ctx context.Context, frontendConn net.Conn) } func (c *Connector) findAndConnectBackend(ctx context.Context, frontendConn net.Conn, - clientAddr net.Addr, preReadContent io.Reader, serverAddress string) { + clientAddr net.Addr, preReadContent io.Reader, serverAddress string, nextState mcproto.State) { backendHostPort, resolvedHost, waker := Routes.FindBackendForServerAddress(ctx, serverAddress) - if waker != nil { + if waker != nil && nextState > mcproto.StateStatus { if err := waker(ctx); err != nil { logrus.WithFields(logrus.Fields{"serverAddress": serverAddress}).WithError(err).Error("failed to wake up backend") c.metrics.Errors.With("type", "wakeup_failed").Add(1)