Skip to content

Commit 0eb11bd

Browse files
committed
rebased main
1 parent 0054d34 commit 0eb11bd

File tree

1 file changed

+22
-26
lines changed

1 file changed

+22
-26
lines changed

pkg/relayer/proxy/sync.go

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -324,28 +324,10 @@ func (server *relayMinerHTTPServer) serveSyncRequest(
324324
// Capture the service call request duration metric.
325325
relayer.CaptureServiceDuration(serviceId, serviceCallStartTime, httpResponse.StatusCode)
326326

327-
// Serialize the service response to be sent back to the client.
328-
// This will include the status code, headers, and body.
329-
wrappedHTTPResponse, responseBz, err := SerializeHTTPResponse(logger, httpResponse, server.serverConfig.MaxBodySize)
330-
if err != nil {
331-
logger.Error().Err(err).Msg("❌ Failed serializing the service response")
332-
return relayRequest, err
333-
}
334-
335-
// Pass through all backend responses including errors.
336-
// Allows clients to see real HTTP status codes from backend service.
337-
// Log non-2XX status codes for monitoring but don't block response.
338-
if httpResponse.StatusCode >= http.StatusMultipleChoices {
339-
logger.Error().
340-
Int("status_code", httpResponse.StatusCode).
341-
Str("request_url", httpRequest.URL.String()).
342-
Str("request_payload_first_bytes", polylog.Preview(string(relayRequest.Payload))).
343-
Str("response_payload_first_bytes", polylog.Preview(string(wrappedHTTPResponse.BodyBz))).
344-
Msg("backend service returned a non-2XX status code. Passing it through to the client.")
345-
}
346-
347327
// Check if the response is a stream
348328
streamThis := IsStreamingResponse(httpResponse)
329+
// Capture the time after response time for the relay.
330+
responsePreparationEnd := time.Now()
349331
// Create empty relay response
350332
relayResponse := &types.RelayResponse{
351333
Meta: types.RelayResponseMetadata{SessionHeader: meta.SessionHeader},
@@ -366,16 +348,28 @@ func (server *relayMinerHTTPServer) serveSyncRequest(
366348

367349
// Serialize the service response to be sent back to the client.
368350
// This will include the status code, headers, and body.
369-
_, responseBz, err := SerializeHTTPResponse(logger, httpResponse, server.serverConfig.MaxBodySize)
351+
wrappedHTTPResponse, responseBz, err := SerializeHTTPResponse(logger, httpResponse, server.serverConfig.MaxBodySize)
370352
if err != nil {
371353
logger.Error().Err(err).Msg("❌ Failed serializing the service response")
372354
return relayRequest, err
373355
}
374356

357+
// Pass through all backend responses including errors.
358+
// Allows clients to see real HTTP status codes from backend service.
359+
// Log non-2XX status codes for monitoring but don't block response.
360+
if httpResponse.StatusCode >= http.StatusMultipleChoices {
361+
logger.Error().
362+
Int("status_code", httpResponse.StatusCode).
363+
Str("request_url", httpRequest.URL.String()).
364+
Str("request_payload_first_bytes", polylog.Preview(string(relayRequest.Payload))).
365+
Str("response_payload_first_bytes", polylog.Preview(string(wrappedHTTPResponse.BodyBz))).
366+
Msg("backend service returned a non-2XX status code. Passing it through to the client.")
367+
}
368+
375369
logger.Debug().
376370
Str("relay_request_session_header", meta.SessionHeader.String()).
377371
Msg("building relay response protobuf from service response")
378-
372+
379373
// Check context cancellation before building relay response to prevent signature race conditions
380374
if ctxErr := ctxWithDeadline.Err(); ctxErr != nil {
381375
logger.Warn().Err(ctxErr).Msg("⚠️ Context canceled before building relay response - preventing signature race condition")
@@ -398,7 +392,7 @@ func (server *relayMinerHTTPServer) serveSyncRequest(
398392
}
399393

400394
// Capture the time after response time for the relay.
401-
responsePreparationEnd := time.Now()
395+
responsePreparationEnd = time.Now()
402396
// Add response preparation duration to the logger such that any log before errors will have
403397
// as much request duration information as possible.
404398
logger = logger.With(
@@ -408,11 +402,14 @@ func (server *relayMinerHTTPServer) serveSyncRequest(
408402
relayer.CaptureResponsePreparationDuration(serviceId, backendServiceProcessingEnd)
409403

410404
// Send the relay response to the client.
411-
if err = server.sendRelayResponse(relay.Res, writer); err != nil {
405+
err = server.sendRelayResponse(relayResponse, writer)
406+
logger = logger.With("send_response_duration", time.Since(responsePreparationEnd).String())
407+
if err != nil {
412408
// If the originHost cannot be parsed, reply with an internal error so that
413409
// the original error is not exposed to the client.
414410
clientError := ErrRelayerProxyInternalError.Wrap(err.Error())
415-
logger.Warn().Err(err).Msg("❌ Failed sending relay response")
411+
// Log current time to highlight writer i/o timeout errors.
412+
logger.Warn().Err(err).Time("current_time", time.Now()).Msg("❌ Failed sending relay response")
416413
return relayRequest, clientError
417414
}
418415

@@ -424,7 +421,6 @@ func (server *relayMinerHTTPServer) serveSyncRequest(
424421
// Create the relay response
425422
relay := &types.Relay{Req: relayRequest, Res: relayResponse}
426423

427-
428424
logger.ProbabilisticDebugInfo(polylog.ProbabilisticDebugInfoProb).Msg("relay request served successfully")
429425

430426
relayer.RelaysSuccessTotal.With("service_id", serviceId).Add(1)

0 commit comments

Comments
 (0)