Browse Source

feat(hybrid-cloud): Remove cross-silo calls for issue migration (#54485)

Remove cross silo calls for issue migration for Jira/Jira Sever plugins.
Noticed this while scoping some work the OpsGenie project.
Leander Rodrigues 1 year ago
parent
commit
cbeb42c5f7
1 changed files with 11 additions and 14 deletions
  1. 11 14
      src/sentry/tasks/integrations/migrate_issues.py

+ 11 - 14
src/sentry/tasks/integrations/migrate_issues.py

@@ -1,19 +1,12 @@
 from django.db import IntegrityError, router, transaction
 
-from sentry.models import (
-    ExternalIssue,
-    GroupLink,
-    GroupMeta,
-    Integration,
-    OrganizationIntegration,
-    Project,
-)
+from sentry.models import ExternalIssue, GroupLink, GroupMeta, Integration, Project
 from sentry.plugins.base import plugins
+from sentry.services.hybrid_cloud.integration.service import integration_service
 from sentry.tasks.base import instrumented_task, retry
 from sentry.tasks.integrations import logger
 
 
-# TODO(hybrid-cloud): Fix the cross-silo model accesses
 @instrumented_task(
     name="sentry.tasks.integrations.migrate_issues",
     queue="integrations",
@@ -24,7 +17,12 @@ from sentry.tasks.integrations import logger
 def migrate_issues(integration_id: int, organization_id: int) -> None:
     from sentry_plugins.jira.plugin import JiraPlugin
 
-    integration = Integration.objects.get(id=integration_id)
+    integration, organization_integration = integration_service.get_organization_context(
+        organization_id=organization_id, integration_id=integration_id
+    )
+    if not integration:
+        raise Integration.DoesNotExist
+
     for project in Project.objects.filter(organization_id=organization_id):
         plugin = None
         for p in plugins.for_project(project):
@@ -75,9 +73,6 @@ def migrate_issues(integration_id: int, organization_id: int) -> None:
 
             plugin_ignored_fields = plugin.get_option("ignored_fields", project)
             if plugin_ignored_fields:
-                organization_integration = OrganizationIntegration.objects.get(
-                    integration_id=integration_id
-                )
                 config = organization_integration.config
                 integration_ignored_fields = organization_integration.config.get(
                     "issues_ignored_fields"
@@ -93,7 +88,9 @@ def migrate_issues(integration_id: int, organization_id: int) -> None:
                 else:
                     update_data = list(formatted_plugin_ignored_fields)
                 config.update({"issues_ignored_fields": update_data})
-                organization_integration.update(config=config)
+                integration_service.update_organization_integration(
+                    org_integration_id=organization_integration.id, config=config
+                )
                 logger.info(
                     "plugin_ignored_fields.migrated",
                     extra={