Fix affinity monitoring CI checks

This commit is contained in:
RWDai
2026-05-07 15:24:17 +08:00
parent cb9d9944e3
commit 44c2534f46

View File

@@ -2,7 +2,6 @@ use super::cache_types::AdminMonitoringCacheAffinityRecord;
use crate::cache::SchedulerAffinityTarget;
use crate::handlers::admin::request::AdminAppState;
use crate::GatewayError;
use aether_ai_formats::FormatId;
use std::time::Duration;
#[derive(Debug, Clone, Copy)]
@@ -35,7 +34,7 @@ fn split_admin_monitoring_api_format_and_model(
.map(|segment| segment.trim())
.collect::<Vec<_>>()
.join(":");
if FormatId::parse(&candidate).is_some() {
if is_known_admin_monitoring_api_format(&candidate) {
let model_name = segments[segment_count..]
.iter()
.map(|segment| segment.trim())
@@ -99,6 +98,27 @@ fn is_known_admin_monitoring_api_format_family(value: &str) -> bool {
)
}
fn is_known_admin_monitoring_api_format(value: &str) -> bool {
matches!(
value.trim().to_ascii_lowercase().as_str(),
"openai:chat"
| "openai:responses"
| "openai:responses:compact"
| "openai:image"
| "openai:video"
| "openai:embedding"
| "openai:rerank"
| "claude:messages"
| "gemini:generate_content"
| "gemini:video"
| "gemini:files"
| "gemini:embedding"
| "jina:embedding"
| "jina:rerank"
| "doubao:embedding"
)
}
fn parse_admin_monitoring_cache_affinity_key(
raw_key: &str,
) -> Option<ParsedAdminMonitoringAffinityKey> {
@@ -380,6 +400,55 @@ pub(super) fn clear_admin_monitoring_scheduler_affinity_entries(
}
}
#[cfg(test)]
pub(super) fn delete_admin_monitoring_cache_affinity_entries_for_tests(
state: &AdminAppState<'_>,
raw_keys: &[String],
) -> usize {
state
.as_ref()
.remove_admin_monitoring_cache_affinity_entries_for_tests(raw_keys)
}
#[cfg(not(test))]
pub(super) fn delete_admin_monitoring_cache_affinity_entries_for_tests(
_state: &AdminAppState<'_>,
_raw_keys: &[String],
) -> usize {
0
}
pub(super) async fn delete_admin_monitoring_cache_affinity_raw_keys(
state: &AdminAppState<'_>,
raw_keys: &[String],
) -> Result<usize, GatewayError> {
if raw_keys.is_empty() {
return Ok(0);
}
if let Some(runner) = state.redis_kv_runner() {
let mut connection = runner
.client()
.get_multiplexed_async_connection()
.await
.map_err(|err| {
GatewayError::Internal(format!("admin monitoring redis connect failed: {err}"))
})?;
let deleted = redis::cmd("DEL")
.arg(raw_keys)
.query_async::<i64>(&mut connection)
.await
.map_err(|err| {
GatewayError::Internal(format!("admin monitoring redis delete failed: {err}"))
})?;
return Ok(usize::try_from(deleted).unwrap_or(0));
}
Ok(delete_admin_monitoring_cache_affinity_entries_for_tests(
state, raw_keys,
))
}
#[cfg(test)]
mod tests {
use super::{
@@ -508,52 +577,3 @@ mod tests {
assert!(record.request_count_known);
}
}
#[cfg(test)]
pub(super) fn delete_admin_monitoring_cache_affinity_entries_for_tests(
state: &AdminAppState<'_>,
raw_keys: &[String],
) -> usize {
state
.as_ref()
.remove_admin_monitoring_cache_affinity_entries_for_tests(raw_keys)
}
#[cfg(not(test))]
pub(super) fn delete_admin_monitoring_cache_affinity_entries_for_tests(
_state: &AdminAppState<'_>,
_raw_keys: &[String],
) -> usize {
0
}
pub(super) async fn delete_admin_monitoring_cache_affinity_raw_keys(
state: &AdminAppState<'_>,
raw_keys: &[String],
) -> Result<usize, GatewayError> {
if raw_keys.is_empty() {
return Ok(0);
}
if let Some(runner) = state.redis_kv_runner() {
let mut connection = runner
.client()
.get_multiplexed_async_connection()
.await
.map_err(|err| {
GatewayError::Internal(format!("admin monitoring redis connect failed: {err}"))
})?;
let deleted = redis::cmd("DEL")
.arg(raw_keys)
.query_async::<i64>(&mut connection)
.await
.map_err(|err| {
GatewayError::Internal(format!("admin monitoring redis delete failed: {err}"))
})?;
return Ok(usize::try_from(deleted).unwrap_or(0));
}
Ok(delete_admin_monitoring_cache_affinity_entries_for_tests(
state, raw_keys,
))
}