Skip to content

Commit 8daeff3

Browse files
committed
Optimized request prefill error messages
Signed-off-by: learner0810 <zhongjun.li@daocloud.io>
1 parent 1519a28 commit 8daeff3

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

pkg/sidecar/proxy/connector_nixlv2.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,26 @@ func (s *Server) runNIXLProtocolV2(w http.ResponseWriter, r *http.Request, prefi
130130
)
131131

132132
if isHTTPError(pw.statusCode) {
133-
s.logger.Error(err, "request failed", "code", pw.statusCode)
133+
s.logger.Error(err, "request failed", "code", pw.statusCode, "body", pw.buffer.String())
134134
prefillSpan.SetStatus(codes.Error, "prefill request failed")
135135
prefillSpan.End()
136-
w.WriteHeader(pw.statusCode)
136+
137+
if shouldFallbackToDecode(pw) {
138+
s.logger.Info("fallback to decode", "request_id", uuidStr)
139+
r.Body = io.NopCloser(strings.NewReader(string(original)))
140+
s.decoderProxy.ServeHTTP(w, r)
141+
} else {
142+
for key, values := range pw.Header() {
143+
for _, v := range values {
144+
w.Header().Add(key, v)
145+
}
146+
}
147+
w.WriteHeader(pw.statusCode)
148+
_, err := w.Write([]byte(pw.buffer.String()))
149+
if err != nil {
150+
s.logger.Error(err, "failed to send error response to client")
151+
}
152+
}
137153
return
138154
}
139155
prefillSpan.End()

pkg/sidecar/proxy/proxy_helpers.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,11 @@ func (s *Server) createDecoderProxyHandler(decoderURL *url.URL, decoderInsecureS
142142
func isHTTPError(statusCode int) bool {
143143
return statusCode < http.StatusOK || statusCode >= http.StatusMultipleChoices
144144
}
145+
146+
// shouldFallbackToDecode returns false for client error 4xx status codes (400–451). For all other status codes, it returns true.
147+
func shouldFallbackToDecode(pw *bufferedResponseWriter) bool {
148+
if pw.statusCode >= http.StatusBadRequest && pw.statusCode <= http.StatusUnavailableForLegalReasons {
149+
return false
150+
}
151+
return true
152+
}

0 commit comments

Comments
 (0)