From 39599fa7f7ce1905aceb66ec7477668b04f6a5f8 Mon Sep 17 00:00:00 2001 From: Alexander Weaver Date: Mon, 23 Oct 2023 10:28:40 -0500 Subject: [PATCH] Alerting: Alert rule constraint violations return as 400s in provisioning API (#76396) Constraint violations become 400s --- pkg/services/ngalert/api/api_provisioning.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkg/services/ngalert/api/api_provisioning.go b/pkg/services/ngalert/api/api_provisioning.go index edfb8b1b248..a7bec82dd88 100644 --- a/pkg/services/ngalert/api/api_provisioning.go +++ b/pkg/services/ngalert/api/api_provisioning.go @@ -330,6 +330,9 @@ func (srv *ProvisioningSrv) RoutePostAlertRule(c *contextmodel.ReqContext, ar de return ErrResp(http.StatusBadRequest, err, "") } if err != nil { + if errors.Is(err, alerting_models.ErrAlertRuleUniqueConstraintViolation) { + return ErrResp(http.StatusBadRequest, err, "") + } if errors.Is(err, store.ErrOptimisticLock) { return ErrResp(http.StatusConflict, err, "") } @@ -352,6 +355,9 @@ func (srv *ProvisioningSrv) RoutePutAlertRule(c *contextmodel.ReqContext, ar def updated.UID = UID provenance := determineProvenance(c) updatedAlertRule, err := srv.alertRules.UpdateAlertRule(c.Req.Context(), updated, alerting_models.Provenance(provenance)) + if errors.Is(err, alerting_models.ErrAlertRuleUniqueConstraintViolation) { + return ErrResp(http.StatusBadRequest, err, "") + } if errors.Is(err, alerting_models.ErrAlertRuleNotFound) { return response.Empty(http.StatusNotFound) } @@ -473,6 +479,9 @@ func (srv *ProvisioningSrv) RoutePutAlertRuleGroup(c *contextmodel.ReqContext, a } provenance := determineProvenance(c) err = srv.alertRules.ReplaceRuleGroup(c.Req.Context(), c.SignedInUser.GetOrgID(), groupModel, c.UserID, alerting_models.Provenance(provenance)) + if errors.Is(err, alerting_models.ErrAlertRuleUniqueConstraintViolation) { + return ErrResp(http.StatusBadRequest, err, "") + } if errors.Is(err, alerting_models.ErrAlertRuleFailedValidation) { return ErrResp(http.StatusBadRequest, err, "") }