mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-07 18:07:47 +08:00
fix(pool): keep schedulable keys when stale inactive scores exist
- delete pool member scores when a provider key is deactivated - fall through to the catalog key scan when the pool score page is empty - log skipped local candidates with a skip_reason for diagnosis - add regressions for inactive keys with stale available scores
This commit is contained in:
@@ -804,12 +804,43 @@ impl AppState {
|
||||
if updated.is_some() {
|
||||
self.invalidate_provider_routing_caches();
|
||||
}
|
||||
if let Some(key) = updated.as_ref().filter(|key| !key.is_active) {
|
||||
self.delete_inactive_provider_catalog_key_pool_scores(
|
||||
key.provider_id.as_str(),
|
||||
key.id.as_str(),
|
||||
)
|
||||
.await;
|
||||
}
|
||||
match updated {
|
||||
Some(key) => self.open_provider_catalog_key(key).await.map(Some),
|
||||
None => Ok(None),
|
||||
}
|
||||
}
|
||||
|
||||
async fn delete_inactive_provider_catalog_key_pool_scores(
|
||||
&self,
|
||||
provider_id: &str,
|
||||
key_id: &str,
|
||||
) {
|
||||
if let Err(err) = self
|
||||
.data
|
||||
.delete_pool_member_scores_for_member(
|
||||
&pool_scores::PoolMemberIdentity::provider_api_key(
|
||||
provider_id.to_string(),
|
||||
key_id.to_string(),
|
||||
),
|
||||
)
|
||||
.await
|
||||
{
|
||||
warn!(
|
||||
provider_id,
|
||||
key_id,
|
||||
error = ?err,
|
||||
"gateway provider catalog key deactivate: failed to delete pool member scores"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) async fn compare_and_update_provider_catalog_key_admin_state(
|
||||
&self,
|
||||
update: &provider_catalog::ProviderCatalogKeyAdminCasUpdate,
|
||||
@@ -843,6 +874,15 @@ impl AppState {
|
||||
if updated.as_ref().is_some_and(|keys| !keys.is_empty()) {
|
||||
self.invalidate_provider_routing_caches();
|
||||
}
|
||||
if let Some(keys) = updated.as_ref() {
|
||||
for key in keys.iter().filter(|key| !key.is_active) {
|
||||
self.delete_inactive_provider_catalog_key_pool_scores(
|
||||
key.provider_id.as_str(),
|
||||
key.id.as_str(),
|
||||
)
|
||||
.await;
|
||||
}
|
||||
}
|
||||
match updated {
|
||||
Some(keys) => self.open_provider_catalog_keys(keys).await.map(Some),
|
||||
None => Ok(None),
|
||||
|
||||
Reference in New Issue
Block a user