Skip to content

Commit

Permalink
fix: return a throttled response if org is being synced for the first…
Browse files Browse the repository at this point in the history
… time during auth (#5374)

Related to grafana/oncall-private#2826

When Terraform triggers multiple requests and org needs to be synced in
OnCall, the first request will wait for sync to complete but others will
get an immediate response, before a 403, with these changes a 429
indicating to retry (Terraform
[client](https://github.com/grafana/amixr-api-go-client/blob/main/client.go#L310)
will handle the response and perform a retry).
  • Loading branch information
matiasb authored Dec 18, 2024
1 parent c36761e commit cc7e5e2
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 2 deletions.
3 changes: 3 additions & 0 deletions engine/apps/auth_token/auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,9 @@ def get_organization(self, request, auth):
# if organization exists, we are good)
setup_organization(url, auth)
organization = Organization.objects.filter(grafana_url=url).first()
if organization is None:
# sync may still be in progress, client should retry
raise exceptions.Throttled(detail="Organization being synced, please retry.")
return organization

if settings.LICENSE == settings.CLOUD_LICENSE_NAME:
Expand Down
4 changes: 2 additions & 2 deletions engine/apps/auth_token/tests/test_grafana_auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,9 +110,9 @@ def test_grafana_authentication_no_org_grafana_url():
request_sync_url = f"{grafana_url}/api/plugins/{PluginID.ONCALL}/resources/plugin/sync?wait=true&force=true"
httpretty.register_uri(httpretty.POST, request_sync_url, status=404)

with pytest.raises(exceptions.AuthenticationFailed) as exc:
with pytest.raises(exceptions.Throttled) as exc:
GrafanaServiceAccountAuthentication().authenticate(request)
assert exc.value.detail == "Organization not found."
assert exc.value.detail == "Organization being synced, please retry."


@pytest.mark.parametrize("grafana_url", ["null;", "foo", ""])
Expand Down

0 comments on commit cc7e5e2

Please sign in to comment.