Skip to content

Commit 6bdd7dd

Browse files
fix(hc): Truncates organization names that exceed the max field length (#87136)
1 parent 0c2287e commit 6bdd7dd

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

src/sentry/hybridcloud/services/region_organization_provisioning/impl.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
RegionOrganizationProvisioningRpcService,
1414
)
1515
from sentry.issues.streamline import apply_streamline_rollout_group
16-
from sentry.models.organization import Organization
16+
from sentry.models.organization import ORGANIZATION_NAME_MAX_LENGTH, Organization
1717
from sentry.models.organizationmember import OrganizationMember
1818
from sentry.models.organizationmemberteam import OrganizationMemberTeam
1919
from sentry.models.organizationslugreservation import OrganizationSlugReservationType
@@ -52,8 +52,9 @@ def _create_organization_and_team(
5252
assert (user_id is None and email) or (
5353
user_id and email is None
5454
), "Must set either user_id or email"
55+
truncated_name = organization_name[:ORGANIZATION_NAME_MAX_LENGTH]
5556
org = Organization.objects.create(
56-
id=organization_id, name=organization_name, slug=slug, is_test=is_test
57+
id=organization_id, name=truncated_name, slug=slug, is_test=is_test
5758
)
5859

5960
apply_streamline_rollout_group(organization=org)

src/sentry/models/organization.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545

4646
SENTRY_USE_SNOWFLAKE = getattr(settings, "SENTRY_USE_SNOWFLAKE", False)
4747
NON_MEMBER_SCOPES = frozenset(["org:write", "project:write", "team:write"])
48+
ORGANIZATION_NAME_MAX_LENGTH = 64
4849

4950

5051
class OrganizationStatus(IntEnum):
@@ -154,7 +155,7 @@ class Organization(ReplicatedRegionModel):
154155
replication_version = 4
155156

156157
__relocation_scope__ = RelocationScope.Organization
157-
name = models.CharField(max_length=64)
158+
name = models.CharField(max_length=ORGANIZATION_NAME_MAX_LENGTH)
158159
slug: models.Field[str, str] = SentryOrgSlugField(unique=True)
159160
status = BoundedPositiveIntegerField(
160161
choices=OrganizationStatus.as_choices(), default=OrganizationStatus.ACTIVE.value

tests/sentry/hybridcloud/services/test_region_organization_provisioning.py

+13
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,19 @@ def test_does_not_provision_and_returns_false_when_multiple_orgs_conflict(self)
139139
)
140140
assert not provisioning_user_memberships.exists()
141141

142+
def test_truncates_name_when_too_long(self) -> None:
143+
user = self.create_user()
144+
provision_options = self.get_provisioning_args(user)
145+
provision_options.provision_options.name = "a" * 128
146+
result = region_organization_provisioning_rpc_service.create_organization_in_region(
147+
organization_id=42, provision_payload=provision_options, region_name="us"
148+
)
149+
150+
assert result is True
151+
with assume_test_silo_mode(SiloMode.REGION):
152+
org: Organization = Organization.objects.get(id=42)
153+
assert org.name == "a" * 64
154+
142155
def test_does_not_provision_and_returns_false_when_conflicting_org_with_different_owner(
143156
self,
144157
) -> None:

0 commit comments

Comments
 (0)