diff --git a/engine/artifacts/config-schema.json b/engine/artifacts/config-schema.json index d8eb690512..320ab0b625 100644 --- a/engine/artifacts/config-schema.json +++ b/engine/artifacts/config-schema.json @@ -709,22 +709,22 @@ "format": "uint64", "minimum": 0.0 }, - "runner_http_max_response_body_size": { - "description": "Max HTTP response body size in bytes from actors.", + "runner_lost_threshold": { + "description": "How long to wait after last ping before forcibly removing a runner from the database and deleting its workflow, evicting all actors.\n\nNote that the runner may still be running and can reconnect.\n\nUnit is in milliseconds.", "type": [ "integer", "null" ], - "format": "uint", - "minimum": 0.0 + "format": "int64" }, - "runner_lost_threshold": { - "description": "How long to wait after last ping before forcibly removing a runner from the database and deleting its workflow, evicting all actors.\n\nNote that the runner may still be running and can reconnect.\n\nUnit is in milliseconds.", + "runner_max_response_payload_body_size": { + "description": "Max response payload size in bytes from actors.", "type": [ "integer", "null" ], - "format": "int64" + "format": "uint", + "minimum": 0.0 }, "runner_pool_consecutive_successes_to_clear_error": { "description": "Number of consecutive successes required to clear an active runner pool error.\n\nThis prevents a single success from clearing an error during flapping conditions. Higher values provide more stability but slower recovery from transient errors.", @@ -763,7 +763,7 @@ "minimum": 0.0 }, "serverless_drain_grace_period": { - "description": "Drain grace period for serverless runners.\n\nThis time is subtracted from the configured request duration. Once `duration - grace` is reached, the runner is sent stop commands for all of its actors. After the grace period is over (i.e. the full duration is reached) the runner websocket is forcibly closed.\n\nDefault is 10 seconds.\n\nUnit is in milliseconds.", + "description": "Drain grace period for serverless runners.\n\nThis time is subtracted from the configured request duration. Once `duration - grace` is reached, the runner is sent stop commands for all of its actors. After the grace period is over (i.e. the full duration is reached) the runner websocket is forcibly closed.\n\nUnit is in milliseconds.", "type": [ "integer", "null" diff --git a/engine/packages/pegboard/src/workflows/serverless/conn.rs b/engine/packages/pegboard/src/workflows/serverless/conn.rs index b00031139c..2a75593da3 100644 --- a/engine/packages/pegboard/src/workflows/serverless/conn.rs +++ b/engine/packages/pegboard/src/workflows/serverless/conn.rs @@ -347,16 +347,13 @@ async fn outbound_req_inner( Err(sse::Error::StreamEnded) => { tracing::debug!("outbound req stopped early"); - // If stream ended before runner init, report error - if runner_id.is_none() { - report_error( - ctx, - input.namespace_id, - &input.runner_name, - RunnerPoolError::ServerlessStreamEndedEarly, - ) - .await; - } + report_error( + ctx, + input.namespace_id, + &input.runner_name, + RunnerPoolError::ServerlessStreamEndedEarly, + ) + .await; return Ok(()); } diff --git a/frontend/src/components/actors/actor-status-label.tsx b/frontend/src/components/actors/actor-status-label.tsx index a2fec6cb51..51c3cf07c0 100644 --- a/frontend/src/components/actors/actor-status-label.tsx +++ b/frontend/src/components/actors/actor-status-label.tsx @@ -165,7 +165,7 @@ export function RunnerPoolError({ error }: { error: RivetActorError }) {
Internal error occurred in runner pool
)) .with("serverless_stream_ended_early", () => ( -Connection terminated unexpectedly
+Connection terminated before runner stopped. Ensure that the Rivet provider request lifespan is configured to match the max duration of your serverless provider.
)) .otherwise(() =>Unknown runner pool error
), )