Browse Source

feat(Snowflake): Added feature flags to toggle snowflake ids (#38037)

Richard Ma 2 years ago
parent
commit
263118edbf

+ 2 - 0
src/sentry/conf/server.py

@@ -1168,6 +1168,8 @@ SENTRY_FEATURES = {
     "organizations:team-insights": True,
     # Enable setting team-level roles and receiving permissions from them
     "organizations:team-roles": False,
+    # Enable snowflake ids
+    "organizations:enable-snowflake-id": False,
     # Adds additional filters and a new section to issue alert rules.
     "projects:alert-filters": True,
     # Enable functionality to specify custom inbound filters on events.

+ 1 - 0
src/sentry/features/__init__.py

@@ -148,6 +148,7 @@ default_manager.add("organizations:unified-span-view", OrganizationFeature, True
 default_manager.add("organizations:widget-library", OrganizationFeature, True)
 default_manager.add("organizations:widget-viewer-modal", OrganizationFeature, True)
 default_manager.add("organizations:widget-viewer-modal-minimap", OrganizationFeature, True)
+default_manager.add("organizations:enable-snowflake-id", OrganizationFeature, True)
 # NOTE: Don't add features down here! Add them to their specific group and sort
 #       them alphabetically! The order features are registered is not important.
 

+ 1 - 1
src/sentry/models/organization.py

@@ -200,7 +200,7 @@ class Organization(Model, SnowflakeIdMixin):
                 slugify_target = slugify_target.replace("_", "-").strip("-")
                 slugify_instance(self, slugify_target, reserved=RESERVED_ORGANIZATION_SLUGS)
 
-        if SENTRY_USE_SNOWFLAKE:
+        if SENTRY_USE_SNOWFLAKE or features.has("organizations:enable-snowflake-id", self):
             snowflake_redis_key = "organization_snowflake_key"
             self.save_with_snowflake_id(
                 snowflake_redis_key, lambda: super(Organization, self).save(*args, **kwargs)

+ 4 - 2
src/sentry/models/project.py

@@ -17,7 +17,7 @@ from django.utils.http import urlencode
 from django.utils.translation import ugettext_lazy as _
 
 from bitfield import BitField
-from sentry import projectoptions
+from sentry import features, projectoptions
 from sentry.constants import RESERVED_PROJECT_SLUGS, ObjectStatus
 from sentry.db.mixin import PendingDeletionMixin, delete_pending_deletion_option
 from sentry.db.models import (
@@ -180,7 +180,9 @@ class Project(Model, PendingDeletionMixin, SnowflakeIdMixin):
                     max_length=50,
                 )
 
-        if SENTRY_USE_SNOWFLAKE:
+        if SENTRY_USE_SNOWFLAKE or features.has(
+            "organizations:enable-snowflake-id", self.organization
+        ):
             snowflake_redis_key = "project_snowflake_key"
             self.save_with_snowflake_id(
                 snowflake_redis_key, lambda: super(Project, self).save(*args, **kwargs)