From 970f70c38c04a188bdc29c5e96babf826728d842 Mon Sep 17 00:00:00 2001 From: Mark Story Date: Wed, 26 Nov 2025 16:49:14 -0500 Subject: [PATCH 1/3] chore(hybridcloud) Align keys used for organization snowflakeids Using two different keys for organization snowflakeids results in duplicate sequence values when both are used. We end up using both as organizations created by `Factories.create_organization()` use the key from `Organization` while organizations created via the API endpoint use the module level key. Having the same key allows monolith mode deployments (and tests) that use a shared redis to not generate overlapping sequence values. Refs #103967 --- .../services/control_organization_provisioning/impl.py | 7 ++----- src/sentry/testutils/factories.py | 5 +++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/sentry/hybridcloud/services/control_organization_provisioning/impl.py b/src/sentry/hybridcloud/services/control_organization_provisioning/impl.py index 2909a158779944..0df1b35184b499 100644 --- a/src/sentry/hybridcloud/services/control_organization_provisioning/impl.py +++ b/src/sentry/hybridcloud/services/control_organization_provisioning/impl.py @@ -14,6 +14,7 @@ serialize_slug_reservation, ) from sentry.hybridcloud.services.organization_mapping.serial import serialize_organization_mapping +from sentry.models.organization import Organization from sentry.models.organizationmapping import OrganizationMapping from sentry.models.organizationmember import OrganizationMember from sentry.models.organizationmembermapping import OrganizationMemberMapping @@ -63,9 +64,6 @@ class InvalidOrganizationProvisioningException(Exception): pass -REDIS_KEY_PREFIX = "control_org" - - class DatabaseBackedControlOrganizationProvisioningService( ControlOrganizationProvisioningRpcService ): @@ -95,8 +93,7 @@ def _validate_organization_mapping_belongs_to_user( @staticmethod def _generate_org_snowflake_id(region_name: str) -> int: - redis_key = f"{REDIS_KEY_PREFIX}_{region_name}" - return generate_snowflake_id(redis_key) + return generate_snowflake_id(Organization.snowflake_redis_key) @staticmethod def _generate_org_slug(region_name: str, slug: str) -> str: diff --git a/src/sentry/testutils/factories.py b/src/sentry/testutils/factories.py index 588564f7fb1609..798159b0ff4499 100644 --- a/src/sentry/testutils/factories.py +++ b/src/sentry/testutils/factories.py @@ -404,6 +404,11 @@ def create_organization(name=None, owner=None, region: Region | str | None = Non category=OutboxCategory.ORGANIZATION_UPDATE, ).drain_shard() + with assume_test_silo_mode(SiloMode.CONTROL): + # Remove the reservation now that we're done with it. + # print('remove slug reservation in factories') + OrganizationSlugReservation.objects.filter(organization_id=org.id).delete() + if owner: Factories.create_member(organization=org, user_id=owner.id, role="owner") return org From a1d574c083f80ea3781b91ed83e600a981fecf30 Mon Sep 17 00:00:00 2001 From: Mark Story Date: Wed, 26 Nov 2025 16:54:04 -0500 Subject: [PATCH 2/3] Remove print() --- src/sentry/testutils/factories.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/sentry/testutils/factories.py b/src/sentry/testutils/factories.py index 798159b0ff4499..bf79d3a77dd4c3 100644 --- a/src/sentry/testutils/factories.py +++ b/src/sentry/testutils/factories.py @@ -406,7 +406,6 @@ def create_organization(name=None, owner=None, region: Region | str | None = Non with assume_test_silo_mode(SiloMode.CONTROL): # Remove the reservation now that we're done with it. - # print('remove slug reservation in factories') OrganizationSlugReservation.objects.filter(organization_id=org.id).delete() if owner: From 68c418afba47890a706be8ab69373d0e38b5c118 Mon Sep 17 00:00:00 2001 From: Mark Story Date: Wed, 26 Nov 2025 17:38:04 -0500 Subject: [PATCH 3/3] Remove change to create_organization() This was more disruptive than I would have liked. --- src/sentry/testutils/factories.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/sentry/testutils/factories.py b/src/sentry/testutils/factories.py index bf79d3a77dd4c3..588564f7fb1609 100644 --- a/src/sentry/testutils/factories.py +++ b/src/sentry/testutils/factories.py @@ -404,10 +404,6 @@ def create_organization(name=None, owner=None, region: Region | str | None = Non category=OutboxCategory.ORGANIZATION_UPDATE, ).drain_shard() - with assume_test_silo_mode(SiloMode.CONTROL): - # Remove the reservation now that we're done with it. - OrganizationSlugReservation.objects.filter(organization_id=org.id).delete() - if owner: Factories.create_member(organization=org, user_id=owner.id, role="owner") return org