Skip to content

Commit b724596

Browse files
committed
Only log errors on response, do not interfere with upstream response message
Signed-off-by: Kellen Swain <[email protected]>
1 parent a305d7a commit b724596

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

Diff for: pkg/epp/handlers/server.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,14 @@ func (s *Server) Process(srv extProcPb.ExternalProcessor_ProcessServer) error {
117117
resp, err = s.HandleResponseHeaders(ctx, reqCtx, req)
118118
loggerVerbose.Info("Request context after HandleResponseHeaders", "context", reqCtx)
119119
case *extProcPb.ProcessingRequest_ResponseBody:
120-
resp, err = s.HandleResponseBody(ctx, reqCtx, req)
121-
if err == nil && reqCtx.ResponseComplete {
120+
// Don't send a 500 on a response error. Just let the message passthrough and log our error for debugging purposes.
121+
// We assume the body is valid JSON, err messages are not guaranteed to be json, and so capturing and sending a 500 obfuscates the response message.
122+
// using the standard 'err' var will send an immediate error response back to the caller.
123+
var responseErr error
124+
resp, responseErr = s.HandleResponseBody(ctx, reqCtx, req)
125+
if responseErr != nil {
126+
logger.V(logutil.DEFAULT).Error(responseErr, "Failed to process response body", "request", req)
127+
} else if reqCtx.ResponseComplete {
122128
reqCtx.ResponseCompleteTimestamp = time.Now()
123129
metrics.RecordRequestLatencies(ctx, reqCtx.Model, reqCtx.ResolvedTargetModel, reqCtx.RequestReceivedTimestamp, reqCtx.ResponseCompleteTimestamp)
124130
metrics.RecordResponseSizes(reqCtx.Model, reqCtx.ResolvedTargetModel, reqCtx.ResponseSize)

Diff for: pkg/epp/handlers/streamingserver.go

+11-5
Original file line numberDiff line numberDiff line change
@@ -192,15 +192,21 @@ func (s *StreamingServer) Process(srv extProcPb.ExternalProcessor_ProcessServer)
192192

193193
// Message is buffered, we can read and decode.
194194
if v.ResponseBody.EndOfStream {
195-
err = decoder.Decode(&responseBody)
196-
if err != nil {
197-
logger.V(logutil.DEFAULT).Error(err, "Error unmarshaling request body")
195+
// Don't send a 500 on a response error. Just let the message passthrough and log our error for debugging purposes.
196+
// We assume the body is valid JSON, err messages are not guaranteed to be json, and so capturing and sending a 500 obfuscates the response message.
197+
// using the standard 'err' var will send an immediate error response back to the caller.
198+
var responseErr error
199+
responseErr = decoder.Decode(&responseBody)
200+
if responseErr != nil {
201+
logger.V(logutil.DEFAULT).Error(responseErr, "Error unmarshaling request body")
198202
}
199203
// Body stream complete. Close the reader pipe.
200204
reader.Close()
201205

202-
reqCtx, err = s.HandleResponseBody(ctx, reqCtx, responseBody)
203-
if err == nil && reqCtx.ResponseComplete {
206+
reqCtx, responseErr = s.HandleResponseBody(ctx, reqCtx, responseBody)
207+
if responseErr != nil {
208+
logger.V(logutil.DEFAULT).Error(responseErr, "Failed to process response body", "request", req)
209+
} else if reqCtx.ResponseComplete {
204210
reqCtx.ResponseCompleteTimestamp = time.Now()
205211
metrics.RecordRequestLatencies(ctx, reqCtx.Model, reqCtx.ResolvedTargetModel, reqCtx.RequestReceivedTimestamp, reqCtx.ResponseCompleteTimestamp)
206212
metrics.RecordResponseSizes(reqCtx.Model, reqCtx.ResolvedTargetModel, reqCtx.ResponseSize)

0 commit comments

Comments
 (0)