Browse Source

chore(hybrid-cloud): Adds silo modes to most unmarked tasks (#54086)

Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
Gabe Villalobos 1 year ago
parent
commit
2d2c17b0a8

+ 9 - 1
src/sentry/data_export/tasks.py

@@ -7,6 +7,8 @@ from hashlib import sha1
 import celery
 import sentry_sdk
 
+from sentry.silo import SiloMode
+
 # XXX(mdtro): backwards compatible imports for celery 4.4.7, remove after upgrade to 5.2.7
 if celery.version_info >= (5, 2):
     from celery import current_task
@@ -53,6 +55,7 @@ logger = logging.getLogger(__name__)
     default_retry_delay=60,
     max_retries=3,
     acks_late=True,
+    silo_mode=SiloMode.REGION,
 )
 def assemble_download(
     data_export_id,
@@ -297,7 +300,12 @@ def store_export_chunk_as_blob(data_export, bytes_written, fileobj, blob_size=DE
         return 0
 
 
-@instrumented_task(name="sentry.data_export.tasks.merge_blobs", queue="data_export", acks_late=True)
+@instrumented_task(
+    name="sentry.data_export.tasks.merge_blobs",
+    queue="data_export",
+    acks_late=True,
+    silo_mode=SiloMode.REGION,
+)
 def merge_export_blobs(data_export_id, **kwargs):
     with sentry_sdk.start_span(op="merge"):
         try:

+ 3 - 0
src/sentry/dynamic_sampling/tasks/boost_low_volume_projects.py

@@ -56,6 +56,7 @@ from sentry.dynamic_sampling.tasks.utils import (
 )
 from sentry.models import Organization, Project
 from sentry.sentry_metrics import indexer
+from sentry.silo import SiloMode
 from sentry.snuba.dataset import Dataset, EntityKey
 from sentry.snuba.metrics.naming_layer.mri import TransactionMRI
 from sentry.snuba.referrer import Referrer
@@ -71,6 +72,7 @@ from sentry.utils.snuba import raw_snql_query
     max_retries=5,
     soft_time_limit=2 * 60 * 60,
     time_limit=2 * 60 * 60 + 5,
+    silo_mode=SiloMode.REGION,
 )
 @dynamic_sampling_task_with_context(max_task_execution=MAX_TASK_SECONDS)
 def boost_low_volume_projects(context: TaskContext) -> None:
@@ -91,6 +93,7 @@ def boost_low_volume_projects(context: TaskContext) -> None:
     max_retries=5,
     soft_time_limit=25 * 60,
     time_limit=2 * 60 + 5,
+    silo_mode=SiloMode.REGION,
 )
 @dynamic_sampling_task
 def boost_low_volume_projects_of_org(

+ 3 - 0
src/sentry/dynamic_sampling/tasks/boost_low_volume_transactions.py

@@ -48,6 +48,7 @@ from sentry.dynamic_sampling.tasks.utils import (
 )
 from sentry.models import Organization
 from sentry.sentry_metrics import indexer
+from sentry.silo import SiloMode
 from sentry.snuba.dataset import Dataset, EntityKey
 from sentry.snuba.metrics.naming_layer.mri import TransactionMRI
 from sentry.snuba.referrer import Referrer
@@ -92,6 +93,7 @@ class ProjectTransactionsTotals(TypedDict, total=True):
     max_retries=5,
     soft_time_limit=2 * 60 * 60,
     time_limit=2 * 60 * 60 + 5,
+    silo_mode=SiloMode.REGION,
 )
 @dynamic_sampling_task_with_context(max_task_execution=MAX_TASK_SECONDS)
 def boost_low_volume_transactions(context: TaskContext) -> None:
@@ -146,6 +148,7 @@ def boost_low_volume_transactions(context: TaskContext) -> None:
     max_retries=5,
     soft_time_limit=25 * 60,
     time_limit=2 * 60 + 5,
+    silo_mode=SiloMode.REGION,
 )
 @dynamic_sampling_task
 def boost_low_volume_transactions_of_project(project_transactions: ProjectTransactions) -> None:

+ 2 - 0
src/sentry/dynamic_sampling/tasks/collect_orgs.py

@@ -6,6 +6,7 @@ from sentry.dynamic_sampling.tasks.constants import MAX_PROJECTS_PER_QUERY, MAX_
 from sentry.dynamic_sampling.tasks.logging import log_task_execution, log_task_timeout
 from sentry.dynamic_sampling.tasks.task_context import TaskContext
 from sentry.dynamic_sampling.tasks.utils import dynamic_sampling_task
+from sentry.silo import SiloMode
 from sentry.tasks.base import instrumented_task
 
 
@@ -16,6 +17,7 @@ from sentry.tasks.base import instrumented_task
     max_retries=5,
     soft_time_limit=2 * 60 * 60,
     time_limit=2 * 60 * 60 + 5,
+    silo_mode=SiloMode.REGION,
 )
 @dynamic_sampling_task
 def collect_orgs() -> None:

+ 2 - 0
src/sentry/dynamic_sampling/tasks/recalibrate_orgs.py

@@ -30,6 +30,7 @@ from sentry.dynamic_sampling.tasks.logging import (
 )
 from sentry.dynamic_sampling.tasks.task_context import TaskContext
 from sentry.dynamic_sampling.tasks.utils import dynamic_sampling_task_with_context
+from sentry.silo import SiloMode
 from sentry.tasks.base import instrumented_task
 
 # Since we are using a granularity of 60 (minute granularity), we want to have a higher time upper limit for executing
@@ -51,6 +52,7 @@ class RecalibrationError(Exception):
     max_retries=5,
     soft_time_limit=2 * 60 * 60,  # 2hours
     time_limit=2 * 60 * 60 + 5,
+    silo_mode=SiloMode.REGION,
 )
 @dynamic_sampling_task_with_context(max_task_execution=MAX_TASK_SECONDS)
 def recalibrate_orgs(context: TaskContext) -> None:

+ 2 - 0
src/sentry/dynamic_sampling/tasks/sliding_window.py

@@ -41,6 +41,7 @@ from sentry.dynamic_sampling.tasks.logging import log_query_timeout
 from sentry.dynamic_sampling.tasks.task_context import TaskContext
 from sentry.dynamic_sampling.tasks.utils import dynamic_sampling_task_with_context
 from sentry.sentry_metrics import indexer
+from sentry.silo import SiloMode
 from sentry.snuba.dataset import Dataset, EntityKey
 from sentry.snuba.metrics.naming_layer.mri import TransactionMRI
 from sentry.snuba.referrer import Referrer
@@ -57,6 +58,7 @@ from sentry.utils.snuba import raw_snql_query
     max_retries=5,
     soft_time_limit=2 * 60 * 60,  # 2 hours
     time_limit=2 * 60 * 60 + 5,
+    silo_mode=SiloMode.REGION,
 )
 @dynamic_sampling_task_with_context(max_task_execution=MAX_TASK_SECONDS)
 def sliding_window(context: TaskContext) -> None:

+ 2 - 0
src/sentry/dynamic_sampling/tasks/sliding_window_org.py

@@ -20,6 +20,7 @@ from sentry.dynamic_sampling.tasks.helpers.sliding_window import (
 )
 from sentry.dynamic_sampling.tasks.task_context import TaskContext
 from sentry.dynamic_sampling.tasks.utils import dynamic_sampling_task_with_context
+from sentry.silo import SiloMode
 from sentry.tasks.base import instrumented_task
 
 
@@ -30,6 +31,7 @@ from sentry.tasks.base import instrumented_task
     max_retries=5,
     soft_time_limit=2 * 60 * 60,  # 2 hours
     time_limit=2 * 60 * 60 + 5,
+    silo_mode=SiloMode.REGION,
 )
 @dynamic_sampling_task_with_context(max_task_execution=MAX_TASK_SECONDS)
 def sliding_window_org(context: TaskContext) -> None:

+ 8 - 1
src/sentry/incidents/tasks.py

@@ -21,6 +21,7 @@ from sentry.incidents.utils.types import SubscriptionUpdate
 from sentry.models import Project
 from sentry.services.hybrid_cloud.user import RpcUser
 from sentry.services.hybrid_cloud.user.service import user_service
+from sentry.silo import SiloMode
 from sentry.snuba.dataset import Dataset
 from sentry.snuba.models import QuerySubscription
 from sentry.snuba.query_subscriptions.consumer import register_subscriber
@@ -36,7 +37,11 @@ INCIDENT_SNAPSHOT_BATCH_SIZE = 50
 SUBSCRIPTION_METRICS_LOGGER = "subscription_metrics_logger"
 
 
-@instrumented_task(name="sentry.incidents.tasks.send_subscriber_notifications", queue="incidents")
+@instrumented_task(
+    name="sentry.incidents.tasks.send_subscriber_notifications",
+    queue="incidents",
+    silo_mode=SiloMode.REGION,
+)
 def send_subscriber_notifications(activity_id: int) -> None:
     from sentry.incidents.logic import get_incident_subscribers, unsubscribe_from_incident
 
@@ -172,6 +177,7 @@ def handle_snuba_query_update(
     queue="incidents",
     default_retry_delay=60,
     max_retries=5,
+    silo_mode=SiloMode.REGION,
 )
 def handle_trigger_action(
     action_id: int,
@@ -218,6 +224,7 @@ def handle_trigger_action(
     queue="incidents",
     default_retry_delay=60,
     max_retries=2,
+    silo_mode=SiloMode.REGION,
 )
 def auto_resolve_snapshot_incidents(alert_rule_id: int, **kwargs: Any) -> None:
     from sentry.incidents.logic import update_incident_status

+ 2 - 0
src/sentry/issues/forecasts.py

@@ -15,6 +15,7 @@ from sentry.issues.escalating import (
 from sentry.issues.escalating_group_forecast import EscalatingGroupForecast
 from sentry.issues.escalating_issues_alg import generate_issue_forecast, standard_version
 from sentry.models import Group
+from sentry.silo import SiloMode
 from sentry.tasks.base import instrumented_task
 
 logger = logging.getLogger(__name__)
@@ -65,6 +66,7 @@ def generate_and_save_forecasts(groups: Sequence[Group]) -> None:
 @instrumented_task(
     name="sentry.tasks.weekly_escalating_forecast.generate_and_save_missing_forecasts",
     queue="weekly_escalating_forecast",
+    silo_mode=SiloMode.REGION,
 )
 def generate_and_save_missing_forecasts(group_id: int) -> None:
     """

+ 13 - 2
src/sentry/monitors/tasks.py

@@ -3,6 +3,7 @@ import logging
 from django.utils import timezone
 
 from sentry.constants import ObjectStatus
+from sentry.silo import SiloMode
 from sentry.tasks.base import instrumented_task
 from sentry.utils import metrics
 
@@ -40,7 +41,12 @@ CHECKINS_LIMIT = 10_000
 SUBTITLE_DATETIME_FORMAT = "%b %d, %I:%M %p"
 
 
-@instrumented_task(name="sentry.monitors.tasks.check_missing", time_limit=15, soft_time_limit=10)
+@instrumented_task(
+    name="sentry.monitors.tasks.check_missing",
+    time_limit=15,
+    soft_time_limit=10,
+    silo_mode=SiloMode.REGION,
+)
 def check_missing(current_datetime=None):
     if current_datetime is None:
         current_datetime = timezone.now()
@@ -106,7 +112,12 @@ def check_missing(current_datetime=None):
             logger.exception("Exception in check_monitors - mark missed")
 
 
-@instrumented_task(name="sentry.monitors.tasks.check_timeout", time_limit=15, soft_time_limit=10)
+@instrumented_task(
+    name="sentry.monitors.tasks.check_timeout",
+    time_limit=15,
+    soft_time_limit=10,
+    silo_mode=SiloMode.REGION,
+)
 def check_timeout(current_datetime=None):
     if current_datetime is None:
         current_datetime = timezone.now()

Some files were not shown because too many files changed in this diff