mcp: throttle rapid stream session polls
This commit is contained in:
@@ -811,7 +811,7 @@ async fn handle_session_start_call(
|
||||
batch_size,
|
||||
}),
|
||||
expires_at,
|
||||
last_poll_at: Some(now),
|
||||
last_poll_at: None,
|
||||
created_at: now,
|
||||
closed_at: None,
|
||||
};
|
||||
@@ -996,6 +996,24 @@ async fn handle_session_poll_call(
|
||||
);
|
||||
}
|
||||
|
||||
let poll_after_ms = streaming.poll_interval_ms.unwrap_or(1_000);
|
||||
let remaining_delay_ms = loaded.remaining_poll_delay_ms(now, poll_after_ms);
|
||||
if remaining_delay_ms > 0 {
|
||||
return tool_error_response(
|
||||
message,
|
||||
response_mode,
|
||||
&session.protocol_version,
|
||||
"stream_session_poll_rate_limited",
|
||||
format!(
|
||||
"stream session {} must wait before the next poll",
|
||||
control.session_id
|
||||
),
|
||||
Some(json!({
|
||||
"poll_after_ms": remaining_delay_ms
|
||||
})),
|
||||
);
|
||||
}
|
||||
|
||||
let mut state_payload: StoredSessionState = match serde_json::from_value(loaded.state.clone()) {
|
||||
Ok(value) => value,
|
||||
Err(error) => {
|
||||
|
||||
Reference in New Issue
Block a user