fix: bound fleet rebuilds and enable OTLP exporter retries

This commit is contained in:
lda committed 2026-10-11 18:01:24 +07:00 Verified
1 parent 69691fda47
commit aff090a822
10 files changed
+271 -64

No files matched your search

@@ -51,6 +51,21 @@ async fn fleet_view(state: &AppState) -> anyhow::Result<std::sync::Arc<Vec<Fleet
const REFRESH_CONCURRENCY: usize = 8;
fn fleet_error(err: anyhow::Error, fallback_code: &str) -> ApiError {
if err.is::<crate::runtime::view_cache::RebuildLimit>() {
return ApiError::new(
StatusCode::SERVICE_UNAVAILABLE,
"fleet_busy",
err.to_string(),
);
}
ApiError::new(
StatusCode::INTERNAL_SERVER_ERROR,
fallback_code,
err.to_string(),
)
}
#[tracing::instrument(name = "fleet_list", skip_all)]
pub async fn list_fleet_devices(
State(state): State<AppState>,
@@ -60,11 +75,7 @@ pub async fn list_fleet_devices(
Ok(devices) => Ok((StatusCode::OK, Json(devices))),
Err(err) => {
warn!(error = %err, "failed to list fleet devices");
Err(ApiError::new(
StatusCode::INTERNAL_SERVER_ERROR,
"list_fleet_devices_failed",
err.to_string(),
))
Err(fleet_error(err, "list_fleet_devices_failed"))
}
}
}
@@ -226,11 +237,7 @@ pub async fn wake_fleet_device(
};
let devices = load_fleet_devices(&state, &query).await.map_err(|err| {
warn!(error = %err, "failed loading fleet devices for wake");
ApiError::new(
StatusCode::INTERNAL_SERVER_ERROR,
"load_fleet_devices_failed",
err.to_string(),
)
fleet_error(err, "load_fleet_devices_failed")
})?;
let device = devices
@@ -12,6 +12,22 @@ use super::normalize_refresh_agent_ids;
use super::types::ListFleetDevicesQuery;
use crate::state::{AgentDeviceRow, AgentDeviceWithChildren, DeviceIdentifier, KnownDevice};
#[test]
fn cache_rebuild_limit_is_retryable_but_db_failures_keep_their_error_code() {
let busy = super::fleet_error(
crate::runtime::view_cache::RebuildLimit.into(),
"list_fleet_devices_failed",
);
assert_eq!(busy.status, axum::http::StatusCode::SERVICE_UNAVAILABLE);
assert_eq!(busy.code, "fleet_busy");
let failed = super::fleet_error(
anyhow::anyhow!("database failed"),
"list_fleet_devices_failed",
);
assert_eq!(failed.status, axum::http::StatusCode::INTERNAL_SERVER_ERROR);
assert_eq!(failed.code, "list_fleet_devices_failed");
}
#[tokio::test]
async fn fleet_cache_tracks_store_edits_and_connections_without_caching_filters() {
use crate::runtime::{AgentSession, AppState};