From 6ac2473099fd4661488352a1c43b9e2aa7b9070d Mon Sep 17 00:00:00 2001 From: "3371392206@qq.com" <3371392206@qq.com> Date: Sat, 3 Oct 2026 16:13:47 +0800 Subject: [PATCH] =?UTF-8?q?fix(volcano):=20PostStream=20=E5=AF=B9=E6=9C=AA?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=20client=20=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E8=80=8C=E4=B8=8D=E6=98=AF=20panic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Synthesis 里 client 是包级 volcanoClient,只在启动时赋值。不经过 main 的调用路径拿到 nil client 时,(*HTTPClient).PostStream 在 h.client.Do 处 nil 解引用崩溃。 装配错误应该让这一次请求以上游不可用失败:controller 会归一成 5xx 并记日志,而不是拖垮整个进程。 --- adapter/volcano/client.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/adapter/volcano/client.go b/adapter/volcano/client.go index ef128ae..2775c3a 100644 --- a/adapter/volcano/client.go +++ b/adapter/volcano/client.go @@ -29,7 +29,14 @@ func NewHTTPClient() *HTTPClient { // PostStream 发送一次流式请求,返回带上下文的 *http.Response。 // 调用方负责关闭 resp.Body。 +// +// 空接收者(nil *HTTPClient)安全:返回错误而不是 panic。未初始化的 client 属于 +// 装配错误,应当让该次请求以"上游不可用"失败(controller 归一成 5xx 并记日志), +// 而不是让整个进程崩掉。 func (h *HTTPClient) PostStream(ctx context.Context, url string, headers map[string]string, body []byte) (*http.Response, error) { + if h == nil || h.client == nil { + return nil, fmt.Errorf("volcano: HTTPClient 未初始化,无法发起上游请求") + } if ctx == nil { ctx = context.Background() }