invalidate reservations after release cleanup failure

This commit is contained in:
user 2026-04-30 14:48:55 -07:00
parent 719e891c3a
commit 8311456cfc
2 changed files with 21 additions and 1 deletions

View file

@ -443,6 +443,14 @@ async def _update_database_and_spend_counters(
verbose_proxy_logger.exception(
"Failed to release budget reservation after database update failed"
)
try:
await _invalidate_budget_reservation_counters(
budget_reservation=budget_reservation
)
except Exception:
verbose_proxy_logger.exception(
"Failed to invalidate budget reservation counters after release failed"
)
raise
try:

View file

@ -338,6 +338,11 @@ async def test_update_database_and_spend_counters_preserves_db_exception_when_re
patch(
"litellm.proxy.hooks.proxy_track_cost_callback.verbose_proxy_logger.exception",
) as mock_log_exception,
patch(
"litellm.proxy.hooks.proxy_track_cost_callback._invalidate_budget_reservation_counters",
new_callable=AsyncMock,
side_effect=RuntimeError("invalidate unavailable"),
) as mock_invalidate_budget_reservation_counters,
):
with pytest.raises(RuntimeError) as exc_info:
await _update_database_and_spend_counters(
@ -360,9 +365,16 @@ async def test_update_database_and_spend_counters_preserves_db_exception_when_re
mock_release_budget_reservation.assert_awaited_once_with(
budget_reservation=budget_reservation,
)
mock_log_exception.assert_called_once_with(
mock_invalidate_budget_reservation_counters.assert_awaited_once_with(
budget_reservation=budget_reservation,
)
assert mock_log_exception.call_count == 2
mock_log_exception.assert_any_call(
"Failed to release budget reservation after database update failed"
)
mock_log_exception.assert_any_call(
"Failed to invalidate budget reservation counters after release failed"
)
increment_spend_counters.assert_not_awaited()