|
16 | 16 | def backfill_hash_values(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor) -> None: |
17 | 17 | ApiToken = apps.get_model("sentry", "ApiToken") |
18 | 18 | ControlOutbox = apps.get_model("sentry", "ControlOutbox") |
| 19 | + OrganizationMemberMapping = apps.get_model("sentry", "OrganizationMemberMapping") |
| 20 | + OrganizationMapping = apps.get_model("sentry", "OrganizationMapping") |
| 21 | + |
19 | 22 | try: |
| 23 | + from collections.abc import Container |
| 24 | + |
| 25 | + from django.conf import settings |
| 26 | + |
20 | 27 | from sentry.models.outbox import OutboxCategory, OutboxScope |
| 28 | + from sentry.services.hybrid_cloud.util import control_silo_function |
| 29 | + from sentry.silo.base import SiloMode |
21 | 30 | from sentry.silo.safety import unguarded_write |
22 | | - from sentry.types.region import find_regions_for_user |
23 | 31 | except ImportError: |
24 | 32 | logger.exception("Cannot execute migration. Required symbols could not be imported") |
25 | 33 | return |
26 | 34 |
|
| 35 | + @control_silo_function |
| 36 | + def _find_orgs_for_user(user_id: int) -> set[int]: |
| 37 | + return { |
| 38 | + m["organization_id"] |
| 39 | + for m in OrganizationMemberMapping.objects.filter(user_id=user_id).values( |
| 40 | + "organization_id" |
| 41 | + ) |
| 42 | + } |
| 43 | + |
| 44 | + @control_silo_function |
| 45 | + def find_regions_for_orgs(org_ids: Container[int]) -> set[str]: |
| 46 | + |
| 47 | + if SiloMode.get_current_mode() == SiloMode.MONOLITH: |
| 48 | + return {settings.SENTRY_MONOLITH_REGION} |
| 49 | + else: |
| 50 | + return set( |
| 51 | + OrganizationMapping.objects.filter(organization_id__in=org_ids).values_list( |
| 52 | + "region_name", flat=True |
| 53 | + ) |
| 54 | + ) |
| 55 | + |
| 56 | + @control_silo_function |
| 57 | + def find_regions_for_user(user_id: int) -> set[str]: |
| 58 | + if SiloMode.get_current_mode() == SiloMode.MONOLITH: |
| 59 | + return {settings.SENTRY_MONOLITH_REGION} |
| 60 | + |
| 61 | + org_ids = _find_orgs_for_user(user_id) |
| 62 | + return find_regions_for_orgs(org_ids) |
| 63 | + |
27 | 64 | for api_token in RangeQuerySetWrapperWithProgressBar(ApiToken.objects.all()): |
28 | 65 | hashed_token = None |
29 | 66 | if api_token.hashed_token is None: |
|
0 commit comments