From 1195bb3aa80ffbc76c95fbc8538c57be616d2512 Mon Sep 17 00:00:00 2001 From: Mark Story Date: Tue, 16 Jun 2026 11:27:37 -0400 Subject: [PATCH] chore(cells) Update usage of SENTRY_MONOLITH_REGION Replace read operations for this setting with the new name. Refs INFRENG-308 --- bin/split-silo-database | 10 ++++----- src/apigw/config.py | 2 +- .../core/endpoints/organization_index.py | 2 +- .../feedback/endpoints/error_page_embed.py | 2 +- .../hybridcloud/apigateway/apigateway.py | 2 +- .../apigateway_async/apigateway.py | 2 +- src/sentry/hybridcloud/rpc/resolvers.py | 2 +- src/sentry/runner/commands/createorg.py | 2 +- src/sentry/testutils/cases.py | 2 +- src/sentry/types/cell.py | 22 +++++++++---------- src/sentry/web/client_config.py | 6 ++--- .../web/frontend/mailgun_inbound_webhook.py | 2 +- .../web/frontend/shared_group_details.py | 2 +- .../test_accept_organization_invite.py | 2 +- .../endpoints/test_error_page_embed.py | 2 +- .../services/test_organization.py | 12 +++++----- tests/sentry/seer/test_test_generation.py | 2 +- tests/sentry/web/test_client_config.py | 4 ++-- 18 files changed, 40 insertions(+), 40 deletions(-) diff --git a/bin/split-silo-database b/bin/split-silo-database index 790110561949f1..ef1ffd862d5d66 100755 --- a/bin/split-silo-database +++ b/bin/split-silo-database @@ -71,16 +71,16 @@ def split_database(tables: list[str], source: str, destination: str, reset: bool def revise_organization_mappings(legacy_region_name: str): - if settings.SENTRY_MONOLITH_REGION == legacy_region_name: + if settings.SENTRY_FALLBACK_CELL == legacy_region_name: click.echo( - "> No OrganizationMapping have been modified. Set 'SENTRY_MONOLITH_REGION' in sentry.conf.py to update monolith mappings." + "> No OrganizationMapping have been modified. Set 'SENTRY_FALLBACK_CELL' in sentry.conf.py to update monolith mappings." ) else: qs = OrganizationMapping.objects.filter(cell_name=legacy_region_name) record_count = len(qs) - qs.update(cell_name=settings.SENTRY_MONOLITH_REGION) + qs.update(cell_name=settings.SENTRY_FALLBACK_CELL) click.echo( - f"> {record_count} OrganizationMapping record(s) have been updated from '{legacy_region_name}' to '{settings.SENTRY_MONOLITH_REGION}'" + f"> {record_count} OrganizationMapping record(s) have been updated from '{legacy_region_name}' to '{settings.SENTRY_FALLBACK_CELL}'" ) @@ -88,7 +88,7 @@ def revise_organization_mappings(legacy_region_name: str): @click.option( "--legacy-region-name", default="--monolith--", - help="Previous value of settings.SENTRY_MONOLITH_REGION to overwrite in organization mappings", + help="Previous value of settings.SENTRY_FALLBACK_CELL to overwrite in organization mappings", ) @click.option("--verbose", default=False, is_flag=True, help="Enable verbose logging") @click.option( diff --git a/src/apigw/config.py b/src/apigw/config.py index f0929c28b807bf..4d2a70c99d62e7 100644 --- a/src/apigw/config.py +++ b/src/apigw/config.py @@ -80,4 +80,4 @@ def load_config(app: App) -> None: from django.conf import settings - app.config.cells.default = settings.SENTRY_MONOLITH_REGION + app.config.cells.default = settings.SENTRY_FALLBACK_CELL diff --git a/src/sentry/core/endpoints/organization_index.py b/src/sentry/core/endpoints/organization_index.py index 19614cc56d044b..a86273acd4027a 100644 --- a/src/sentry/core/endpoints/organization_index.py +++ b/src/sentry/core/endpoints/organization_index.py @@ -110,7 +110,7 @@ def validate(self, attrs): attrs["cell_name"] = resolve_provisioning_cell(locality_name) else: # TODO(cells) Remove this when cell silo compatibility is removed. - attrs["cell_name"] = settings.SENTRY_LOCAL_CELL or settings.SENTRY_MONOLITH_REGION + attrs["cell_name"] = settings.SENTRY_LOCAL_CELL or settings.SENTRY_FALLBACK_CELL return attrs diff --git a/src/sentry/feedback/endpoints/error_page_embed.py b/src/sentry/feedback/endpoints/error_page_embed.py index a4e17f2bab9e16..a2d405ead01f88 100644 --- a/src/sentry/feedback/endpoints/error_page_embed.py +++ b/src/sentry/feedback/endpoints/error_page_embed.py @@ -112,7 +112,7 @@ def resolve( if len(host_segments) - len(app_segments) < 3: # If we don't have a o123.ingest.{cell}.{app_host} style domain # we forward to the monolith cell - return get_cell_by_name(settings.SENTRY_MONOLITH_REGION) + return get_cell_by_name(settings.SENTRY_FALLBACK_CELL) try: cell_offset = len(app_segments) + 1 diff --git a/src/sentry/hybridcloud/apigateway/apigateway.py b/src/sentry/hybridcloud/apigateway/apigateway.py index 22ec1cc81e4625..0af098a9c0030a 100644 --- a/src/sentry/hybridcloud/apigateway/apigateway.py +++ b/src/sentry/hybridcloud/apigateway/apigateway.py @@ -87,7 +87,7 @@ def proxy_request_if_needed( request.resolver_match and request.resolver_match.url_name in settings.REGION_PINNED_URL_NAMES ): - cell = get_cell_by_name(settings.SENTRY_MONOLITH_REGION) + cell = get_cell_by_name(settings.SENTRY_FALLBACK_CELL) metrics.incr( "apigateway.proxy_request", tags={ diff --git a/src/sentry/hybridcloud/apigateway_async/apigateway.py b/src/sentry/hybridcloud/apigateway_async/apigateway.py index 17766d0c162e78..a17c02b89cea1e 100644 --- a/src/sentry/hybridcloud/apigateway_async/apigateway.py +++ b/src/sentry/hybridcloud/apigateway_async/apigateway.py @@ -99,7 +99,7 @@ async def proxy_request_if_needed( request.resolver_match and request.resolver_match.url_name in settings.REGION_PINNED_URL_NAMES ): - cell = get_cell_by_name(settings.SENTRY_MONOLITH_REGION) + cell = get_cell_by_name(settings.SENTRY_FALLBACK_CELL) metrics.incr( "apigateway.proxy_request", tags={ diff --git a/src/sentry/hybridcloud/rpc/resolvers.py b/src/sentry/hybridcloud/rpc/resolvers.py index a55611c357a13c..70036a0a2585d7 100644 --- a/src/sentry/hybridcloud/rpc/resolvers.py +++ b/src/sentry/hybridcloud/rpc/resolvers.py @@ -101,7 +101,7 @@ def resolve(self, arguments: ArgumentDict) -> Cell: OrganizationMapping.objects.all().values_list("cell_name", flat=True).distinct()[:2] ) if len(all_cell_names) == 0: - return get_cell_by_name(settings.SENTRY_MONOLITH_REGION) + return get_cell_by_name(settings.SENTRY_FALLBACK_CELL) if len(all_cell_names) != 1: raise CellResolutionError("Expected single-org environment to have only one cell") diff --git a/src/sentry/runner/commands/createorg.py b/src/sentry/runner/commands/createorg.py index ffb0622b33fce1..79d1fdee004bd5 100644 --- a/src/sentry/runner/commands/createorg.py +++ b/src/sentry/runner/commands/createorg.py @@ -57,7 +57,7 @@ def createorg( try: rpc_org = organization_provisioning_service.provision_organization_in_cell( - cell_name=settings.SENTRY_MONOLITH_REGION, + cell_name=settings.SENTRY_FALLBACK_CELL, provisioning_options=provision_args, ) except OrganizationProvisioningException as e: diff --git a/src/sentry/testutils/cases.py b/src/sentry/testutils/cases.py index abb7d0fa20acd1..0c5fdda5b8ae33 100644 --- a/src/sentry/testutils/cases.py +++ b/src/sentry/testutils/cases.py @@ -467,7 +467,7 @@ def request(**request: Any) -> Any: # TODO: Can we infer the correct region here? would need to package up the # the request dictionary into a higher level object, which also involves invoking # _base_environ and maybe other logic buried in Client..... - cell = get_cell_by_name(settings.SENTRY_MONOLITH_REGION) + cell = get_cell_by_name(settings.SENTRY_FALLBACK_CELL) with ( SingleProcessSiloModeState.exit(), SingleProcessSiloModeState.enter(mode, cell), diff --git a/src/sentry/types/cell.py b/src/sentry/types/cell.py index 04f8b7b1e7ef9a..eddc9843a13f58 100644 --- a/src/sentry/types/cell.py +++ b/src/sentry/types/cell.py @@ -123,7 +123,7 @@ def is_historic_monolith_region(self) -> bool: cases to ensure that legacy data is handled correctly. """ - return self.name == settings.SENTRY_MONOLITH_REGION + return self.name == settings.SENTRY_FALLBACK_CELL def api_serialize(self) -> dict[str, Any]: """Serialize a Cell into a JSON compatible dict""" @@ -232,10 +232,10 @@ def validate_all(self) -> None: # SENTRY_MONOLITH_REGION is resolved as a live cell at runtime # (historic monolith region lookups), so a dangling name should fail # here rather than at request time. - if settings.SENTRY_MONOLITH_REGION not in defined_cells: + if settings.SENTRY_FALLBACK_CELL not in defined_cells: raise CellConfigurationError( - "The SENTRY_MONOLITH_REGION setting must point to a cell name " - f"({settings.SENTRY_MONOLITH_REGION=!r}; " + "The SENTRY_FALLBACK_CELL setting must point to a cell name " + f"({settings.SENTRY_FALLBACK_CELL=!r}; " f"cell names = {sorted(defined_cells)!r})" ) @@ -258,10 +258,10 @@ def generate_monolith_cell_directory() -> CellDirectory: Monolith environments (single-tenant, self-hosted) don't define SENTRY_CELLS or SENTRY_LOCALITIES; they get a single cell named after - SENTRY_MONOLITH_REGION with a matching 1:1 locality. + SENTRY_FALLBACK_CELL with a matching 1:1 locality. """ cell = Cell( - name=settings.SENTRY_MONOLITH_REGION, + name=settings.SENTRY_FALLBACK_CELL, snowflake_id=0, address=options.get("system.url-prefix"), category=RegionCategory.MULTI_TENANT, @@ -425,7 +425,7 @@ def get_local_cell() -> Cell: """ if SiloMode.get_current_mode() == SiloMode.MONOLITH: - return get_cell_by_name(settings.SENTRY_MONOLITH_REGION) + return get_cell_by_name(settings.SENTRY_FALLBACK_CELL) if SiloMode.get_current_mode() != SiloMode.CELL: raise CellContextError("Not a cell silo") @@ -440,7 +440,7 @@ def get_local_cell() -> Cell: if not settings.SENTRY_LOCAL_CELL: if in_test_environment(): - return get_cell_by_name(settings.SENTRY_MONOLITH_REGION) + return get_cell_by_name(settings.SENTRY_FALLBACK_CELL) else: raise Exception("SENTRY_LOCAL_CELL must be set when server is in CELL silo mode") return get_cell_by_name(settings.SENTRY_LOCAL_CELL) @@ -461,7 +461,7 @@ def find_cells_for_orgs(org_ids: Iterable[int]) -> set[str]: from sentry.models.organizationmapping import OrganizationMapping if SiloMode.get_current_mode() == SiloMode.MONOLITH: - return {settings.SENTRY_MONOLITH_REGION} + return {settings.SENTRY_FALLBACK_CELL} else: return set( OrganizationMapping.objects.filter(organization_id__in=org_ids).values_list( @@ -473,7 +473,7 @@ def find_cells_for_orgs(org_ids: Iterable[int]) -> set[str]: @control_silo_function def find_cells_for_user(user_id: int) -> set[str]: if SiloMode.get_current_mode() == SiloMode.MONOLITH: - return {settings.SENTRY_MONOLITH_REGION} + return {settings.SENTRY_FALLBACK_CELL} org_ids = _find_orgs_for_user(user_id) return find_cells_for_orgs(org_ids) @@ -485,7 +485,7 @@ def find_cells_for_sentry_app(sentry_app: SentryApp) -> set[str]: from sentry.sentry_apps.models.sentry_app_installation import SentryAppInstallation if SiloMode.get_current_mode() == SiloMode.MONOLITH: - return {settings.SENTRY_MONOLITH_REGION} + return {settings.SENTRY_FALLBACK_CELL} organizations_with_installations = SentryAppInstallation.objects.filter( sentry_app=sentry_app diff --git a/src/sentry/web/client_config.py b/src/sentry/web/client_config.py index 44df60cbea13c0..bc6ea916e46ef8 100644 --- a/src/sentry/web/client_config.py +++ b/src/sentry/web/client_config.py @@ -128,7 +128,7 @@ def _get_public_dsn() -> str | None: result = cache.get(cache_key) if result is None: key = project_key_service.get_project_key_by_cell( - cell_name=settings.SENTRY_MONOLITH_REGION, + cell_name=settings.SENTRY_FALLBACK_CELL, project_id=project_id, role=ProjectKeyRole.store, ) @@ -370,7 +370,7 @@ def localities(self) -> list[Mapping[str, Any]]: if not locality_names: return [{"name": "default", "url": options.get("system.url-prefix")}] - monolith_locality = get_locality_name_for_cell(settings.SENTRY_MONOLITH_REGION) + monolith_locality = get_locality_name_for_cell(settings.SENTRY_FALLBACK_CELL) def region_display_order(region: Locality) -> tuple[bool, bool, str]: return ( @@ -395,7 +395,7 @@ def cells(self) -> list[Mapping[str, Any]]: def cell_display_order(cell: Cell) -> tuple[bool, bool, bool, str]: return ( - cell.name != settings.SENTRY_MONOLITH_REGION, # default historical cell comes first + cell.name != settings.SENTRY_FALLBACK_CELL, # default historical cell comes first cell.category != RegionCategory.MULTI_TENANT, # multi-tenant before single not cell.visible, # visible cells first cell.name, # then sort alphabetically diff --git a/src/sentry/web/frontend/mailgun_inbound_webhook.py b/src/sentry/web/frontend/mailgun_inbound_webhook.py index 5784ec44d75196..cef62a0bc42a5d 100644 --- a/src/sentry/web/frontend/mailgun_inbound_webhook.py +++ b/src/sentry/web/frontend/mailgun_inbound_webhook.py @@ -73,7 +73,7 @@ def post(self, request: HttpRequest) -> HttpResponse: org_mapping = OrganizationMapping.objects.get(organization_id=org_id) region_name = org_mapping.cell_name else: - region_name = settings.SENTRY_MONOLITH_REGION + region_name = settings.SENTRY_FALLBACK_CELL # Email replies cannot be coaleseced so we # need to generate unique object_identifier values. diff --git a/src/sentry/web/frontend/shared_group_details.py b/src/sentry/web/frontend/shared_group_details.py index 2b1d43748d800d..0592887d80b3be 100644 --- a/src/sentry/web/frontend/shared_group_details.py +++ b/src/sentry/web/frontend/shared_group_details.py @@ -19,7 +19,7 @@ def meta_tags( else: # Backwards compatibility for Self-hosted and single tenants group = issue_service.get_shared_for_cell( - cell_name=settings.SENTRY_MONOLITH_REGION, share_id=share_id + cell_name=settings.SENTRY_FALLBACK_CELL, share_id=share_id ) if not group: diff --git a/tests/sentry/api/endpoints/test_accept_organization_invite.py b/tests/sentry/api/endpoints/test_accept_organization_invite.py index d1399572d67bb4..cee71065345068 100644 --- a/tests/sentry/api/endpoints/test_accept_organization_invite.py +++ b/tests/sentry/api/endpoints/test_accept_organization_invite.py @@ -332,7 +332,7 @@ def test_member_already_exists_with_member_id_from_another_organization(self) -> self.login_as(user) Factories.create_member(user=user, organization=self.organization, role="member") - with override_settings(SENTRY_LOCAL_CELL=settings.SENTRY_MONOLITH_REGION): + with override_settings(SENTRY_LOCAL_CELL=settings.SENTRY_FALLBACK_CELL): other_organization = self.create_organization( owner=self.create_user("otherowner@example.com") ) diff --git a/tests/sentry/feedback/endpoints/test_error_page_embed.py b/tests/sentry/feedback/endpoints/test_error_page_embed.py index 2aa49a78fb964c..7908d89b71c658 100644 --- a/tests/sentry/feedback/endpoints/test_error_page_embed.py +++ b/tests/sentry/feedback/endpoints/test_error_page_embed.py @@ -433,7 +433,7 @@ def test_resolver_ignores_port_when_extracting_host(self) -> None: assert self._resolve(dsn) == ApiGatewayTestCase.CELL def test_resolver_falls_back_to_monolith_region(self) -> None: - monolith_cell = get_cell_by_name(settings.SENTRY_MONOLITH_REGION) + monolith_cell = get_cell_by_name(settings.SENTRY_FALLBACK_CELL) # Bare app host with no cell/ingest segments. bare_dsn = f"https://{self.primary_key.public_key}@{self.app_host}/1" diff --git a/tests/sentry/organizations/services/test_organization.py b/tests/sentry/organizations/services/test_organization.py index bc2262be65de9a..7826d77256ba12 100644 --- a/tests/sentry/organizations/services/test_organization.py +++ b/tests/sentry/organizations/services/test_organization.py @@ -89,7 +89,7 @@ def test_returns_org_id_when_exactly_one_match(self) -> None: assert ( organization_service.find_organization_id_by_option_value( - cell_name=settings.SENTRY_MONOLITH_REGION, + cell_name=settings.SENTRY_FALLBACK_CELL, key=self.KEY, value="acct_xyz", ) @@ -102,7 +102,7 @@ def test_returns_none_when_no_rows_match(self) -> None: assert ( organization_service.find_organization_id_by_option_value( - cell_name=settings.SENTRY_MONOLITH_REGION, + cell_name=settings.SENTRY_FALLBACK_CELL, key=self.KEY, value="acct_missing", ) @@ -119,7 +119,7 @@ def test_returns_lowest_org_id_when_multiple_match(self) -> None: self._set_option(org_b, self.KEY, "acct_collide") result = organization_service.find_organization_id_by_option_value( - cell_name=settings.SENTRY_MONOLITH_REGION, + cell_name=settings.SENTRY_FALLBACK_CELL, key=self.KEY, value="acct_collide", ) @@ -131,7 +131,7 @@ def test_value_match_is_exact_no_case_folding(self) -> None: assert ( organization_service.find_organization_id_by_option_value( - cell_name=settings.SENTRY_MONOLITH_REGION, + cell_name=settings.SENTRY_FALLBACK_CELL, key=self.KEY, value="acct_xyz", ) @@ -144,7 +144,7 @@ def test_value_match_does_not_strip_whitespace(self) -> None: assert ( organization_service.find_organization_id_by_option_value( - cell_name=settings.SENTRY_MONOLITH_REGION, + cell_name=settings.SENTRY_FALLBACK_CELL, key=self.KEY, value=" acct_xyz ", ) @@ -157,7 +157,7 @@ def test_returns_none_when_key_does_not_match(self) -> None: assert ( organization_service.find_organization_id_by_option_value( - cell_name=settings.SENTRY_MONOLITH_REGION, + cell_name=settings.SENTRY_FALLBACK_CELL, key=self.KEY, value="acct_xyz", ) diff --git a/tests/sentry/seer/test_test_generation.py b/tests/sentry/seer/test_test_generation.py index 7e767736855b75..cb93b0127a3ff1 100644 --- a/tests/sentry/seer/test_test_generation.py +++ b/tests/sentry/seer/test_test_generation.py @@ -14,7 +14,7 @@ def test_start_unit_test_generation(mock_request: MagicMock) -> None: mock_request.return_value.status = 200 mock_request.return_value.json.return_value = {} response = test_generation_service.start_unit_test_generation( - cell_name=settings.SENTRY_MONOLITH_REGION, + cell_name=settings.SENTRY_FALLBACK_CELL, github_org="some-org", repo="some-repo", pr_id=1, diff --git a/tests/sentry/web/test_client_config.py b/tests/sentry/web/test_client_config.py index 5958922fc7ad6b..3c67ccc286c8dd 100644 --- a/tests/sentry/web/test_client_config.py +++ b/tests/sentry/web/test_client_config.py @@ -165,7 +165,7 @@ def test_client_config_default_locality_data() -> None: assert len(result["localities"]) == 1 localities = result["localities"] - assert localities[0]["name"] == settings.SENTRY_MONOLITH_REGION + assert localities[0]["name"] == settings.SENTRY_FALLBACK_CELL assert localities[0]["url"] == options.get("system.url-prefix") assert len(result["cells"]) == 0, "No staff session" @@ -187,7 +187,7 @@ def test_client_config_empty_region_data() -> None: assert len(result["cells"]) == 0, "no staff session" assert len(result["localities"]) == 1 localities = result["localities"] - assert localities[0]["name"] == settings.SENTRY_MONOLITH_REGION + assert localities[0]["name"] == settings.SENTRY_FALLBACK_CELL assert localities[0]["url"] == options.get("system.url-prefix")