Unverified Commit a27475de authored by MatejKosec's avatar MatejKosec Committed by GitHub
Browse files

fix: call inflight.mark_error() in media handler error paths (#7917)


Signed-off-by: default avatarMatej Kosec <mkosec@nvidia.com>
parent e24b25f8
......@@ -1998,7 +1998,9 @@ async fn images(
.metrics_clone()
.inc_rejection(&model, super::metrics::Endpoint::Images);
}
ErrorMessage::from_anyhow(e, "Failed to generate images")
let err_response = ErrorMessage::from_anyhow(e, "Failed to generate images");
inflight.mark_error(extract_error_type_from_response(&err_response));
err_response
})?;
// Process stream to collect metrics and drop http_queue_guard on first response
......@@ -2018,7 +2020,9 @@ async fn images(
.await
.map_err(|e| {
tracing::error!("Failed to fold images stream for {}: {:?}", request_id, e);
ErrorMessage::internal_server_error("Failed to fold images stream")
let err_response = ErrorMessage::internal_server_error("Failed to fold images stream");
inflight.mark_error(extract_error_type_from_response(&err_response));
err_response
})?;
inflight.mark_ok();
......@@ -2085,7 +2089,9 @@ async fn videos(
.metrics_clone()
.inc_rejection(&model, super::metrics::Endpoint::Videos);
}
ErrorMessage::from_anyhow(e, "Failed to generate videos")
let err_response = ErrorMessage::from_anyhow(e, "Failed to generate videos");
inflight.mark_error(extract_error_type_from_response(&err_response));
err_response
})?;
// Process stream to collect metrics and drop http_queue_guard on first token
......@@ -2105,7 +2111,9 @@ async fn videos(
.await
.map_err(|e| {
tracing::error!("Failed to fold videos stream for {}: {:?}", request_id, e);
ErrorMessage::internal_server_error("Failed to fold videos stream")
let err_response = ErrorMessage::internal_server_error("Failed to fold videos stream");
inflight.mark_error(extract_error_type_from_response(&err_response));
err_response
})?;
inflight.mark_ok();
......@@ -2150,7 +2158,9 @@ async fn video_stream(
.metrics_clone()
.inc_rejection(&model, super::metrics::Endpoint::Videos);
}
ErrorMessage::from_anyhow(e, "Failed to start video stream")
let err_response = ErrorMessage::from_anyhow(e, "Failed to start video stream");
inflight.mark_error(extract_error_type_from_response(&err_response));
err_response
})?;
// Capture the context to cancel the stream if the client disconnects.
......@@ -2234,6 +2244,7 @@ async fn video_stream(
}
_ = ctx.stopped() => {
tracing::trace!("Context stopped; breaking MJPEG stream");
inflight.mark_error(ErrorType::Cancelled);
break;
}
}
......@@ -2249,6 +2260,8 @@ async fn video_stream(
.body(Body::from_stream(monitored_stream))
.map(|r| r.into_response())
.map_err(|e| {
// inflight is already owned by the monitored_stream which handles
// mark_ok (stream end) and mark_error (cancellation).
ErrorMessage::internal_server_error(&format!("Failed to build MJPEG response: {e}"))
})
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment