diff --git a/src/sentry/integrations/jira/integration.py b/src/sentry/integrations/jira/integration.py index 015c240be2c16e..dbf63972c63fce 100644 --- a/src/sentry/integrations/jira/integration.py +++ b/src/sentry/integrations/jira/integration.py @@ -34,6 +34,7 @@ from sentry.shared_integrations.exceptions import ( ApiError, ApiHostError, + ApiInvalidRequestError, ApiRateLimitedError, ApiUnauthorized, IntegrationError, @@ -1053,7 +1054,12 @@ def sync_status_outbound( logger.warning("jira.status-sync-fail", extra=log_context) return - client.transition_issue(external_issue.key, transition["id"]) + try: + client.transition_issue(external_issue.key, transition["id"]) + except ApiInvalidRequestError: + raise + except ApiError as e: + self.raise_error(e) def _get_done_statuses(self): client = self.get_client() diff --git a/src/sentry/integrations/tasks/sync_status_outbound.py b/src/sentry/integrations/tasks/sync_status_outbound.py index a418b0a922caff..50695679ba12ba 100644 --- a/src/sentry/integrations/tasks/sync_status_outbound.py +++ b/src/sentry/integrations/tasks/sync_status_outbound.py @@ -8,6 +8,7 @@ ) from sentry.integrations.services.integration import integration_service from sentry.models.group import Group, GroupStatus +from sentry.shared_integrations.exceptions import ApiInvalidRequestError, IntegrationError from sentry.silo.base import SiloMode from sentry.tasks.base import instrumented_task, retry, track_group_async_operation from sentry.taskworker.config import TaskworkerConfig @@ -68,9 +69,16 @@ def sync_status_outbound(group_id: int, external_issue_id: int) -> bool | None: "status": group.status, } ) - installation.sync_status_outbound( - external_issue, group.status == GroupStatus.RESOLVED, group.project_id - ) + try: + installation.sync_status_outbound( + external_issue, group.status == GroupStatus.RESOLVED, group.project_id + ) + except ApiInvalidRequestError: + raise + except IntegrationError as e: + lifecycle.record_halt(halt_reason=e) + return None + analytics.record( "integration.issue.status.synced", provider=integration.provider,