BerriAI/litellm · error · RuntimeError
Mavvrik FOCUS destination: connector is disconnected (410).
Error message
Mavvrik FOCUS destination: connector is disconnected (410). Re-enable the connection in the Mavvrik dashboard.
What it means
On first delivery, the destination POSTs to the Mavvrik agent endpoint to register the connector (body {"name": connection_id}). A 410 Gone response means Mavvrik knows this connector but it has been disabled/deleted on their side, so the destination refuses to proceed and tells the user to re-enable it. self._registered stays False so the next attempt retries registration.
Source
Thrown at litellm/integrations/focus/destinations/mavvrik_destination.py:123
Returns metricsMarker from the Mavvrik response — the last date index
Mavvrik has successfully processed. Used by the logger to catch up any
dates that were missed due to previous export failures.
Returns None if the connector was already registered (cached).
"""
if self._registered:
return None
resp: Final = await self._http.client.request(
method="POST",
url=self._agent_url,
headers=self._auth_headers,
json={"name": self.connection_id},
timeout=30.0,
)
if resp.status_code == 410:
self._registered = False
raise RuntimeError(
"Mavvrik FOCUS destination: connector is disconnected (410). "
"Re-enable the connection in the Mavvrik dashboard."
)
if resp.status_code >= 400:
raise RuntimeError(f"Mavvrik FOCUS destination: register failed ({resp.status_code}): {resp.text[:200]}")
self._registered = True
metrics_marker: Final = resp.json().get("metricsMarker", 0)
verbose_logger.debug(
"Mavvrik FOCUS destination: connector registered (metricsMarker=%s)",
metrics_marker,
)
return metrics_marker
async def _get_signed_url(self, date_str: str) -> str:
"""GET upload-url endpoint → GCS signed URL for the given date."""
params: Final = {"name": date_str, "type": "metrics", "datetime": date_str}
resp: Final = await self._http.client.request(
method="GET",View on GitHub (pinned to 6c2dcb801b)
Solutions
- Open the Mavvrik dashboard, find the connection, and re-enable it (or create a new one).
- If you created a new connector, update MAVVRIK_CONNECTION_ID to the new ID and restart/recreate the destination.
- Verify the connector is enabled before redeploying: the register call should then return 2xx and a metricsMarker.
- Alert on this error — it never self-heals without dashboard action.
Defensive patterns
Strategy: try-catch
Try / catch
try:
await mavvrik_dest.deliver(content=csv, time_window=tw, filename="f.csv")
except RuntimeError as e:
if "disconnected (410)" in str(e):
page_oncall("Mavvrik connector disabled — re-enable in Mavvrik dashboard")
# do NOT retry-loop: requires human action in Mavvrik
raise Prevention
- Alert (don't retry) on 410: it requires dashboard action and never self-heals.
- Periodically verify the connector is still enabled in Mavvrik during ops reviews.
- Keep a runbook entry: re-enable connector or create a new one and update MAVVRIK_CONNECTION_ID.
When it happens
Trigger: Calling deliver() (or the register step) when the Mavvrik connection identified by MAVVRIK_CONNECTION_ID was disconnected in the Mavvrik dashboard — expired trial, manually disabled integration, or deleted connector with a reused ID.
Common situations: The connector was disabled by an admin during cleanup; tenant subscription lapsed; connection deleted and recreated with the same name but stale server-side state; long-running LiteLLM deployment whose connector was retired months earlier.
Related errors
- MAVVRIK_API_ENDPOINT must be an HTTPS URL
- MAVVRIK_API_ENDPOINT host must be a Mavvrik domain (e.g. htt
- Mavvrik FOCUS destination: {label} must be HTTPS, got scheme
- Mavvrik FOCUS destination: {label} must be a GCS endpoint (s
- MAVVRIK_API_KEY must be provided for Mavvrik FOCUS destinati
AI-assisted analysis of BerriAI/litellm@6c2dcb801b (2026-08-15).
Data as JSON: /api/errors/b02c6e15b6dc800b.
Report an issue: GitHub.