hive-sock-client, web proxy, HTTP clients: bound connect and response waits
hive-sock-client: each attempt now bounds connect (5s), write (10s) and the wait for the response (60s by default). The response bound is per call through the new `request_within`, which hive-agent's serve-loop `Recv` uses with its 180s long-poll plus 30s headroom. A response timeout is terminal rather than retried: the server holds the request, so a retry re-sends something it may still act on and multiplies the wait by the backoff schedule. Outbound HTTP: the matrix login/whoami clients in swarm-controller and hive-c0re's dashboard (5s connect, 30s request), the authelia-bridge client (5s/30s; ensuring an identity runs an argon2 hash first) and the ci-runner forge calls (5s/15s, config_pr_poll's forge budget) get a connect_timeout and a request timeout. Timeout errors name the bound that fired. hive-agent's unix-socket extra web proxy bounds the connect (5s) and the wait for the response head (30s, the http sibling's budget); the body read stays unbounded. Refs #4723
This commit is contained in:
parent
6fac00dcc5
commit
7b1fe5f9d3
7 changed files with 412 additions and 60 deletions
|
|
@ -48,6 +48,15 @@ const DEFAULT_SOCKET: &str = "/run/hive/mcp.sock";
|
|||
/// so a hive-c0re restart is worth waiting out rather than surfacing.
|
||||
const CONTROL_SOCKET_RETRY: Retry = Retry::RideOutRestart;
|
||||
|
||||
/// How long the serve loop's `Recv` asks the broker to park when the inbox
|
||||
/// is empty.
|
||||
const RECV_WAIT: Duration = Duration::from_mins(3);
|
||||
|
||||
/// Response deadline for that `Recv`: the park itself plus headroom for the
|
||||
/// broker to answer once it ends, so an idle poll never reads as a stuck
|
||||
/// hive-c0re.
|
||||
const RECV_RESPONSE_TIMEOUT: Duration = RECV_WAIT.saturating_add(Duration::from_secs(30));
|
||||
|
||||
/// Default web UI port — used when `HIVE_PORT` env is unset.
|
||||
const DEFAULT_WEB_PORT: u16 = 8042;
|
||||
|
||||
|
|
@ -389,13 +398,14 @@ impl Surface for AgentSurface {
|
|||
}
|
||||
|
||||
async fn recv_next(socket: &Path) -> RecvOutcome {
|
||||
let recv: Result<Response> = hive_sock_client::request(
|
||||
let recv: Result<Response> = hive_sock_client::request_within(
|
||||
socket,
|
||||
&Request::Recv {
|
||||
wait_seconds: Some(180),
|
||||
wait_seconds: Some(RECV_WAIT.as_secs()),
|
||||
max: None,
|
||||
},
|
||||
CONTROL_SOCKET_RETRY,
|
||||
RECV_RESPONSE_TIMEOUT,
|
||||
)
|
||||
.await;
|
||||
match recv {
|
||||
|
|
|
|||
Loading…
Reference in a new issue