Skip to content

chore(alerts): Remove PUT and POST legacy paths for metric alerts#116017

Merged
ceorourke merged 5 commits into
masterfrom
ceorourke/rm-put-post-metric-code
May 21, 2026
Merged

chore(alerts): Remove PUT and POST legacy paths for metric alerts#116017
ceorourke merged 5 commits into
masterfrom
ceorourke/rm-put-post-metric-code

Conversation

@ceorourke
Copy link
Copy Markdown
Member

@ceorourke ceorourke commented May 21, 2026

Remove legacy path code using the old serializer for metric alert PUT and POST endpoints.

@github-actions github-actions Bot added the Scope: Backend Automatically applied to PRs that change backend components label May 21, 2026
@ceorourke ceorourke changed the title chore(alerts): Remove unused workflow engine legacy metric alerts code chore(alerts): Remove PUT and POST legacy paths for metric alerts May 21, 2026
@ceorourke ceorourke force-pushed the ceorourke/rm-put-post-metric-code branch from ef88a4e to 8316025 Compare May 21, 2026 17:08
@ceorourke ceorourke marked this pull request as ready for review May 21, 2026 17:13
@ceorourke ceorourke requested a review from a team as a code owner May 21, 2026 17:13
@ceorourke ceorourke requested a review from a team May 21, 2026 17:14
Copy link
Copy Markdown
Contributor

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 8316025. Configure here.

return Response(
serialize(detector, request.user, WorkflowEngineDetectorSerializer()),
status=status.HTTP_200_OK,
)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PUT 500 without detector link

High Severity

A successful metric alert PUT can now return a 500. The endpoint unconditionally attempts to load a Detector after an update. If dual_update_alert_rule didn't create a corresponding Detector for a legacy rule, this raises an uncaught Detector.DoesNotExist.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 8316025. Configure here.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The flag is GA'd so if that is actually happening it's already been happening.

Comment thread src/sentry/incidents/endpoints/organization_alert_rule_index.py
Comment on lines +211 to +212
detector = Detector.objects.get(alertruledetector__alert_rule_id=alert_rule.id)
return Response(
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Updating an old metric alert rule causes an unhandled Detector.DoesNotExist exception because the endpoint assumes a related Detector object always exists after an update.
Severity: HIGH

Suggested Fix

The endpoint code should handle the Detector.DoesNotExist exception, for example by using a try...except block around the Detector.objects.get() call or by using Detector.objects.filter(...).first() and then checking if the result is None before proceeding.

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent. Verify if this is a real issue. If it is, propose a fix; if not, explain why it's
not valid.

Location: src/sentry/incidents/endpoints/organization_alert_rule_index.py#L211-L212

Potential issue: When updating a metric alert rule created before the dual-write system
was implemented, the PUT endpoint will fail with a 500 error. The
`dual_update_alert_rule` function handles the missing `AlertRuleDetector` for these old
rules by returning `None` after the update. However, the endpoint code then
unconditionally attempts to fetch this non-existent `Detector` via
`Detector.objects.get(alertruledetector__alert_rule_id=updated_rule.id)`. This query
raises an unhandled `Detector.DoesNotExist` exception, causing the request to fail for
any user attempting to modify an older metric alert rule.

Did we get this right? 👍 / 👎 to inform future reviews.

@ceorourke ceorourke requested a review from a team as a code owner May 21, 2026 17:39
Comment thread src/sentry/incidents/endpoints/project_alert_rule_task_details.py
Comment on lines +211 to +212
detector = Detector.objects.get(alertruledetector__alert_rule_id=alert_rule.id)
return Response(
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Removing the try/except Detector.DoesNotExist block when fetching a Detector for an alert rule can cause unhandled exceptions and 500 errors if the dual-write failed.
Severity: HIGH

Suggested Fix

Reinstate the try/except Detector.DoesNotExist block around the Detector.objects.get(...) calls in both the POST and PUT endpoints. In the except block, fall back to serializing the AlertRule directly, preserving the previous behavior.

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent. Verify if this is a real issue. If it is, propose a fix; if not, explain why it's
not valid.

Location: src/sentry/incidents/endpoints/organization_alert_rule_index.py#L211-L212

Potential issue: In both the alert rule creation (POST) and update (PUT) endpoints, the
`try/except Detector.DoesNotExist` block has been removed. The code now directly queries
for a `Detector` via `Detector.objects.get(alertruledetector__alert_rule_id=...)`. If
the dual-write mechanism fails to create the corresponding `AlertRuleDetector` link,
this query will raise an unhandled `Detector.DoesNotExist` exception, causing a 500
Internal Server Error and preventing the user from creating or updating the alert rule.
Historical data, including previous data migrations, indicates that the dual-write was
not always reliable, making this a realistic failure scenario, particularly for older
alert rules being updated.

Also affects:

  • src/sentry/incidents/endpoints/organization_alert_rule_details.py:120

@github-actions
Copy link
Copy Markdown
Contributor

Backend Test Failures

Failures on faa69e3 in this run:

tests/sentry/sentry_apps/tasks/test_sentry_apps.py::TestDisabledSentryAppWebhooks::test_send_metric_alert_webhook_blocked_for_disabled_applog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/testutils/cases.py:404: in _pre_setup
    super()._pre_setup()
src/sentry/utils/db.py:64: in _enter
    return original_enter(self)
           ^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/transaction.py:211: in __enter__
    sid = connection.savepoint()
          ^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/utils/asyncio.py:26: in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/backends/base/base.py:400: in savepoint
    self._savepoint(sid)
.venv/lib/python3.13/site-packages/django/db/backends/base/base.py:367: in _savepoint
    cursor.execute(self.ops.savepoint_create_sql(sid))
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:122: in execute
    return super().execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/utils.py:1887: in runner
    return original_function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:79: in execute
    return self._execute_with_wrappers(
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:92: in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:70: in _execute__include_sql_in_error
    return execute(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:58: in _execute__clean_params
    return execute(sql, clean_bad_params(params), many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/hybrid_cloud.py:129: in __call__
    raise CrossTransactionAssertionError(
E   sentry.testutils.hybrid_cloud.CrossTransactionAssertionError: Transaction opened for db {'default'}, but command running against db control
E   SQL: SAVEPOINT "s140712538938240_x9460"
tests/sentry/sentry_apps/tasks/test_sentry_apps.py::TestDisabledSentryAppWebhooks::test_workflow_notification_blocked_for_disabled_applog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/testutils/cases.py:404: in _pre_setup
    super()._pre_setup()
src/sentry/utils/db.py:64: in _enter
    return original_enter(self)
           ^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/transaction.py:211: in __enter__
    sid = connection.savepoint()
          ^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/utils/asyncio.py:26: in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/backends/base/base.py:400: in savepoint
    self._savepoint(sid)
.venv/lib/python3.13/site-packages/django/db/backends/base/base.py:367: in _savepoint
    cursor.execute(self.ops.savepoint_create_sql(sid))
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:122: in execute
    return super().execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/utils.py:1887: in runner
    return original_function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:79: in execute
    return self._execute_with_wrappers(
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:92: in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:70: in _execute__include_sql_in_error
    return execute(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:58: in _execute__clean_params
    return execute(sql, clean_bad_params(params), many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/hybrid_cloud.py:129: in __call__
    raise CrossTransactionAssertionError(
E   sentry.testutils.hybrid_cloud.CrossTransactionAssertionError: Transaction opened for db {'default'}, but command running against db control
E   SQL: SAVEPOINT "s140712538938240_x9466"
tests/sentry/snuba/test_discover_timeseries_query.py::DiscoverTimeseriesQueryTest::test_comparison_aggregate_function_invalidlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/sentry/snuba/test_discover_timeseries_query.py:32: in setUp
    project_id=self.project.id,
               ^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
                                         ^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/fixtures.py:122: in project
    return self.create_project(name="Bar", slug="bar", teams=[self.team])
                                                              ^^^^^^^^^
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
                                         ^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/contextlib.py:85: in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/fixtures.py:113: in team
    team = self.create_team(organization=self.organization, name="foo", slug="foo")
                                         ^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
                                         ^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/fixtures.py:108: in organization
    return self.create_organization(name="baz", slug="baz", owner=self.user)
                                                                  ^^^^^^^^^
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
                                         ^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/fixtures.py:94: in user
    return self.create_user(
src/sentry/testutils/fixtures.py:313: in create_user
    return Factories.create_user(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/contextlib.py:85: in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/factories.py:1098: in create_user
    user.save(is_test_user=is_test_user)
src/sentry/silo/base.py:157: in override
    return original_method(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/users/models/user.py:244: in save
    with outbox_context(transaction.atomic(using=router.db_for_write(User))):
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/contextlib.py:141: in __enter__
    return next(self.gen)
           ^^^^^^^^^^^^^^
src/sentry/hybridcloud/models/outbox.py:552: in outbox_context
    with unguarded_write(using=inner.using), enforce_constraints(inner):
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
... (26 more lines)
tests/sentry/snuba/test_errors.py::ErrorsQueryIntegrationTest::test_auto_fields_aggregateslog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/testutils/cases.py:404: in _pre_setup
    super()._pre_setup()
src/sentry/utils/db.py:64: in _enter
    return original_enter(self)
           ^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/transaction.py:211: in __enter__
    sid = connection.savepoint()
          ^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/utils/asyncio.py:26: in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/backends/base/base.py:400: in savepoint
    self._savepoint(sid)
.venv/lib/python3.13/site-packages/django/db/backends/base/base.py:367: in _savepoint
    cursor.execute(self.ops.savepoint_create_sql(sid))
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:122: in execute
    return super().execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/utils.py:1887: in runner
    return original_function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:79: in execute
    return self._execute_with_wrappers(
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:92: in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:70: in _execute__include_sql_in_error
    return execute(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:58: in _execute__clean_params
    return execute(sql, clean_bad_params(params), many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/hybrid_cloud.py:129: in __call__
    raise CrossTransactionAssertionError(
E   sentry.testutils.hybrid_cloud.CrossTransactionAssertionError: Transaction opened for db {'default'}, but command running against db control
E   SQL: SAVEPOINT "s140712538938240_x9489"
tests/sentry/snuba/test_errors.py::ErrorsQueryIntegrationTest::test_project_mappinglog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/testutils/cases.py:404: in _pre_setup
    super()._pre_setup()
src/sentry/utils/db.py:64: in _enter
    return original_enter(self)
           ^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/transaction.py:211: in __enter__
    sid = connection.savepoint()
          ^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/utils/asyncio.py:26: in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/backends/base/base.py:400: in savepoint
    self._savepoint(sid)
.venv/lib/python3.13/site-packages/django/db/backends/base/base.py:367: in _savepoint
    cursor.execute(self.ops.savepoint_create_sql(sid))
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:122: in execute
    return super().execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/utils.py:1887: in runner
    return original_function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:79: in execute
    return self._execute_with_wrappers(
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:92: in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:70: in _execute__include_sql_in_error
    return execute(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:58: in _execute__clean_params
    return execute(sql, clean_bad_params(params), many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/hybrid_cloud.py:129: in __call__
    raise CrossTransactionAssertionError(
E   sentry.testutils.hybrid_cloud.CrossTransactionAssertionError: Transaction opened for db {'default'}, but command running against db control
E   SQL: SAVEPOINT "s140712538938240_x9495"
tests/sentry/tasks/test_commits.py::FetchCommitsTest::test_github_compare_commits_cache_key_avoids_ambiguous_id_collisionslog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/testutils/cases.py:411: in _post_teardown
    super()._post_teardown()
.venv/lib/python3.13/site-packages/django/db/backends/postgresql/base.py:482: in check_constraints
    cursor.execute("SET CONSTRAINTS ALL IMMEDIATE")
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:122: in execute
    return super().execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/utils.py:1887: in runner
    return original_function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:79: in execute
    return self._execute_with_wrappers(
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:92: in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:70: in _execute__include_sql_in_error
    return execute(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:58: in _execute__clean_params
    return execute(sql, clean_bad_params(params), many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/hybrid_cloud.py:129: in __call__
    raise CrossTransactionAssertionError(
E   sentry.testutils.hybrid_cloud.CrossTransactionAssertionError: Transaction opened for db {'secondary'}, but command running against db control
E   SQL: SET CONSTRAINTS ALL IMMEDIATE
tests/sentry/utils/test_event_frames.py::FlutterFilenameMungingTestCase::test_abs_path_not_present_not_mungedlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/testutils/cases.py:411: in _post_teardown
    super()._post_teardown()
.venv/lib/python3.13/site-packages/django/db/backends/postgresql/base.py:482: in check_constraints
    cursor.execute("SET CONSTRAINTS ALL IMMEDIATE")
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:122: in execute
    return super().execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/utils.py:1887: in runner
    return original_function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:79: in execute
    return self._execute_with_wrappers(
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:92: in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:70: in _execute__include_sql_in_error
    return execute(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:58: in _execute__clean_params
    return execute(sql, clean_bad_params(params), many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/hybrid_cloud.py:129: in __call__
    raise CrossTransactionAssertionError(
E   sentry.testutils.hybrid_cloud.CrossTransactionAssertionError: Transaction opened for db {'secondary'}, but command running against db control
E   SQL: SET CONSTRAINTS ALL IMMEDIATE
tests/sentry/utils/test_event_frames.py::FlutterFilenameMungingTestCase::test_no_package_not_mungedlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/testutils/cases.py:411: in _post_teardown
    super()._post_teardown()
.venv/lib/python3.13/site-packages/django/db/backends/postgresql/base.py:482: in check_constraints
    cursor.execute("SET CONSTRAINTS ALL IMMEDIATE")
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:122: in execute
    return super().execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/utils.py:1887: in runner
    return original_function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:79: in execute
    return self._execute_with_wrappers(
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:92: in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:70: in _execute__include_sql_in_error
    return execute(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:58: in _execute__clean_params
    return execute(sql, clean_bad_params(params), many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/hybrid_cloud.py:129: in __call__
    raise CrossTransactionAssertionError(
E   sentry.testutils.hybrid_cloud.CrossTransactionAssertionError: Transaction opened for db {'secondary'}, but command running against db control
E   SQL: SET CONSTRAINTS ALL IMMEDIATE
tests/sentry/utils/test_query.py::RangeQuerySetWrapperTest::test_order_by_non_unique_failslog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/testutils/cases.py:411: in _post_teardown
    super()._post_teardown()
.venv/lib/python3.13/site-packages/django/db/backends/postgresql/base.py:482: in check_constraints
    cursor.execute("SET CONSTRAINTS ALL IMMEDIATE")
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:122: in execute
    return super().execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/utils.py:1887: in runner
    return original_function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:79: in execute
    return self._execute_with_wrappers(
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:92: in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:70: in _execute__include_sql_in_error
    return execute(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:58: in _execute__clean_params
    return execute(sql, clean_bad_params(params), many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/hybrid_cloud.py:129: in __call__
    raise CrossTransactionAssertionError(
E   sentry.testutils.hybrid_cloud.CrossTransactionAssertionError: Transaction opened for db {'secondary'}, but command running against db control
E   SQL: SET CONSTRAINTS ALL IMMEDIATE
tests/sentry/utils/test_sdk.py::SDKUtilsTest::test_context_scope_merge_no_existing_contextlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/testutils/cases.py:411: in _post_teardown
    super()._post_teardown()
.venv/lib/python3.13/site-packages/django/db/backends/postgresql/base.py:482: in check_constraints
    cursor.execute("SET CONSTRAINTS ALL IMMEDIATE")
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:122: in execute
    return super().execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/utils.py:1887: in runner
    return original_function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:79: in execute
    return self._execute_with_wrappers(
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:92: in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:70: in _execute__include_sql_in_error
    return execute(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:58: in _execute__clean_params
    return execute(sql, clean_bad_params(params), many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/hybrid_cloud.py:129: in __call__
    raise CrossTransactionAssertionError(
E   sentry.testutils.hybrid_cloud.CrossTransactionAssertionError: Transaction opened for db {'secondary'}, but command running against db control
E   SQL: SET CONSTRAINTS ALL IMMEDIATE
tests/sentry/workflow_engine/receivers/test_project_detectors.py::TestDisableDefaultDetectorCreation::test_context_manager_reconnects_on_exceptionlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/testutils/cases.py:411: in _post_teardown
    super()._post_teardown()
.venv/lib/python3.13/site-packages/django/db/backends/postgresql/base.py:482: in check_constraints
    cursor.execute("SET CONSTRAINTS ALL IMMEDIATE")
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:122: in execute
    return super().execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/utils.py:1887: in runner
    return original_function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:79: in execute
    return self._execute_with_wrappers(
.venv/lib/python3.13/site-packages/django/db/backends/utils.py:92: in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:70: in _execute__include_sql_in_error
    return execute(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/db/postgres/base.py:58: in _execute__clean_params
    return execute(sql, clean_bad_params(params), many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/hybrid_cloud.py:129: in __call__
    raise CrossTransactionAssertionError(
E   sentry.testutils.hybrid_cloud.CrossTransactionAssertionError: Transaction opened for db {'secondary'}, but command running against db control
E   SQL: SET CONSTRAINTS ALL IMMEDIATE
tests/snuba/api/endpoints/test_organization_group_index_stats.py::GroupListTest::test_issue_platform_mixed_issue_not_titlelog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/snuba/api/endpoints/test_organization_group_index_stats.py:119: in test_issue_platform_mixed_issue_not_title
    _, group_info = self.process_occurrence(
tests/sentry/issues/test_utils.py:86: in process_occurrence
    return process_event_and_issue_occurrence(occurrence_data, event_data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/issues/occurrence_consumer.py:166: in process_event_and_issue_occurrence
    return save_issue_occurrence(occurrence_data, event)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/issues/ingest.py:57: in save_issue_occurrence
    occurrence = IssueOccurrence.from_dict(occurrence_data)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/issue_occurrence.py:170: in from_dict
    get_group_type_by_type_id(data["type"]),
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:355: in get_group_type_by_type_id
    return registry.get_by_type_id(id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:180: in get_by_type_id
    raise InvalidGroupTypeError(id_)
E   sentry.issues.grouptype.InvalidGroupTypeError: No group type with the id 2001 is registered.
tests/snuba/api/endpoints/test_project_event_details.py::ProjectEventDetailsTest::test_ignores_different_grouplog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/snuba/api/endpoints/test_project_event_details.py:13: in setUp
    self.setup_data()
tests/snuba/api/endpoints/test_project_event_details.py:21: in setup_data
    self.prev_event = self.store_event(
src/sentry/testutils/cases.py:1086: in store_event
    stored_event = Factories.store_event(*args, **kwargs)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/contextlib.py:85: in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/factories.py:1219: in store_event
    event = manager.save(project_id)
            ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:513: in save
    return self.save_error_events(
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:547: in save_error_events
    group_info = assign_event_to_group(event=job["event"], job=job, metric_tags=metric_tags)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1358: in assign_event_to_group
    group_info = create_group_with_grouphashes(job, all_grouphashes)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1531: in create_group_with_grouphashes
    group = _create_group(project, event, **_get_group_processing_kwargs(job))
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1633: in _create_group
    create_open_period(group=group, start_time=group.first_seen, event_id=event.event_id)
src/sentry/models/groupopenperiod.py:211: in create_open_period
    if get_group_type_by_type_id(group.type).detector_settings is not None:
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:355: in get_group_type_by_type_id
    return registry.get_by_type_id(id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:180: in get_by_type_id
    raise InvalidGroupTypeError(id_)
E   sentry.issues.grouptype.InvalidGroupTypeError: No group type with the id 1 is registered.
tests/snuba/api/endpoints/test_project_event_details.py::ProjectEventDetailsTest::test_snuba_filtered_nextlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/snuba/api/endpoints/test_project_event_details.py:13: in setUp
    self.setup_data()
tests/snuba/api/endpoints/test_project_event_details.py:21: in setup_data
    self.prev_event = self.store_event(
src/sentry/testutils/cases.py:1086: in store_event
    stored_event = Factories.store_event(*args, **kwargs)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/contextlib.py:85: in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/factories.py:1219: in store_event
    event = manager.save(project_id)
            ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:513: in save
    return self.save_error_events(
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:547: in save_error_events
    group_info = assign_event_to_group(event=job["event"], job=job, metric_tags=metric_tags)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1358: in assign_event_to_group
    group_info = create_group_with_grouphashes(job, all_grouphashes)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1531: in create_group_with_grouphashes
    group = _create_group(project, event, **_get_group_processing_kwargs(job))
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1633: in _create_group
    create_open_period(group=group, start_time=group.first_seen, event_id=event.event_id)
src/sentry/models/groupopenperiod.py:211: in create_open_period
    if get_group_type_by_type_id(group.type).detector_settings is not None:
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:355: in get_group_type_by_type_id
    return registry.get_by_type_id(id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:180: in get_by_type_id
    raise InvalidGroupTypeError(id_)
E   sentry.issues.grouptype.InvalidGroupTypeError: No group type with the id 1 is registered.
tests/snuba/api/endpoints/test_project_group_index.py::GroupListTest::test_lookup_by_short_idlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/snuba/api/endpoints/test_project_group_index.py:258: in test_lookup_by_short_id
    assert response.status_code == 200
E   assert 500 == 200
E    +  where 500 = <Response status_code=500, "application/json">.status_code
tests/snuba/api/endpoints/test_project_group_index.py::GroupUpdateTest::test_set_unresolved_with_integrationlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/snuba/api/endpoints/test_project_group_index.py:602: in test_set_unresolved_with_integration
    assert response.status_code == 200
E   assert 500 == 200
E    +  where 500 = <Response status_code=500, "application/json">.status_code
tests/snuba/models/test_group.py::GroupTestSnubaPerformanceIssue::test_oldest_eventlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/snuba/models/test_group.py:386: in setUp
    self.group: Group = Group.objects.get()
                        ^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/models/manager.py:87: in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/models/query.py:635: in get
    raise self.model.DoesNotExist(
E   sentry.models.group.Group.DoesNotExist: Group matching query does not exist.
tests/snuba/search/test_backend.py::EventsSnubaSearchTest::test_bookmarked_by_with_environmentlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/snuba/search/test_backend.py:117: in setUp
    self.event1 = self.store_event(
tests/snuba/search/test_backend.py:96: in store_event
    event = super().store_event(data, *args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/cases.py:1086: in store_event
    stored_event = Factories.store_event(*args, **kwargs)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/contextlib.py:85: in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/factories.py:1219: in store_event
    event = manager.save(project_id)
            ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:513: in save
    return self.save_error_events(
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:547: in save_error_events
    group_info = assign_event_to_group(event=job["event"], job=job, metric_tags=metric_tags)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1358: in assign_event_to_group
    group_info = create_group_with_grouphashes(job, all_grouphashes)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1531: in create_group_with_grouphashes
    group = _create_group(project, event, **_get_group_processing_kwargs(job))
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1633: in _create_group
    create_open_period(group=group, start_time=group.first_seen, event_id=event.event_id)
src/sentry/models/groupopenperiod.py:211: in create_open_period
    if get_group_type_by_type_id(group.type).detector_settings is not None:
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:355: in get_group_type_by_type_id
    return registry.get_by_type_id(id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:180: in get_by_type_id
    raise InvalidGroupTypeError(id_)
E   sentry.issues.grouptype.InvalidGroupTypeError: No group type with the id 1 is registered.
tests/snuba/search/test_backend.py::EventsSnubaSearchTest::test_optimizer_enabledlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/snuba/search/test_backend.py:117: in setUp
    self.event1 = self.store_event(
tests/snuba/search/test_backend.py:96: in store_event
    event = super().store_event(data, *args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/cases.py:1086: in store_event
    stored_event = Factories.store_event(*args, **kwargs)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/contextlib.py:85: in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/factories.py:1219: in store_event
    event = manager.save(project_id)
            ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:513: in save
    return self.save_error_events(
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:547: in save_error_events
    group_info = assign_event_to_group(event=job["event"], job=job, metric_tags=metric_tags)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1358: in assign_event_to_group
    group_info = create_group_with_grouphashes(job, all_grouphashes)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1531: in create_group_with_grouphashes
    group = _create_group(project, event, **_get_group_processing_kwargs(job))
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1633: in _create_group
    create_open_period(group=group, start_time=group.first_seen, event_id=event.event_id)
src/sentry/models/groupopenperiod.py:211: in create_open_period
    if get_group_type_by_type_id(group.type).detector_settings is not None:
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:355: in get_group_type_by_type_id
    return registry.get_by_type_id(id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:180: in get_by_type_id
    raise InvalidGroupTypeError(id_)
E   sentry.issues.grouptype.InvalidGroupTypeError: No group type with the id 1 is registered.
tests/snuba/search/test_backend.py::EventsSnubaSearchTest::test_sort_with_environmentlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/snuba/search/test_backend.py:117: in setUp
    self.event1 = self.store_event(
tests/snuba/search/test_backend.py:96: in store_event
    event = super().store_event(data, *args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/cases.py:1086: in store_event
    stored_event = Factories.store_event(*args, **kwargs)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/contextlib.py:85: in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/factories.py:1219: in store_event
    event = manager.save(project_id)
            ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:513: in save
    return self.save_error_events(
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:547: in save_error_events
    group_info = assign_event_to_group(event=job["event"], job=job, metric_tags=metric_tags)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1358: in assign_event_to_group
    group_info = create_group_with_grouphashes(job, all_grouphashes)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1531: in create_group_with_grouphashes
    group = _create_group(project, event, **_get_group_processing_kwargs(job))
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1633: in _create_group
    create_open_period(group=group, start_time=group.first_seen, event_id=event.event_id)
src/sentry/models/groupopenperiod.py:211: in create_open_period
    if get_group_type_by_type_id(group.type).detector_settings is not None:
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:355: in get_group_type_by_type_id
    return registry.get_by_type_id(id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:180: in get_by_type_id
    raise InvalidGroupTypeError(id_)
E   sentry.issues.grouptype.InvalidGroupTypeError: No group type with the id 1 is registered.
tests/snuba/search/test_backend.py::EventsSnubaSearchTest::test_too_many_candidates_with_selective_postgres_filterlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/snuba/search/test_backend.py:117: in setUp
    self.event1 = self.store_event(
tests/snuba/search/test_backend.py:96: in store_event
    event = super().store_event(data, *args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/cases.py:1086: in store_event
    stored_event = Factories.store_event(*args, **kwargs)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/contextlib.py:85: in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/factories.py:1219: in store_event
    event = manager.save(project_id)
            ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:513: in save
    return self.save_error_events(
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:547: in save_error_events
    group_info = assign_event_to_group(event=job["event"], job=job, metric_tags=metric_tags)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1358: in assign_event_to_group
    group_info = create_group_with_grouphashes(job, all_grouphashes)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1531: in create_group_with_grouphashes
    group = _create_group(project, event, **_get_group_processing_kwargs(job))
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1633: in _create_group
    create_open_period(group=group, start_time=group.first_seen, event_id=event.event_id)
src/sentry/models/groupopenperiod.py:211: in create_open_period
    if get_group_type_by_type_id(group.type).detector_settings is not None:
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:355: in get_group_type_by_type_id
    return registry.get_by_type_id(id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:180: in get_by_type_id
    raise InvalidGroupTypeError(id_)
E   sentry.issues.grouptype.InvalidGroupTypeError: No group type with the id 1 is registered.
tests/snuba/search/test_backend.py::EventsTrendsTest::test_trends_mixed_group_typeslog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/snuba/search/test_backend.py:3021: in test_trends_mixed_group_types
    error_event = self.store_event(
tests/snuba/search/test_backend.py:96: in store_event
    event = super().store_event(data, *args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/cases.py:1086: in store_event
    stored_event = Factories.store_event(*args, **kwargs)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/contextlib.py:85: in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/factories.py:1219: in store_event
    event = manager.save(project_id)
            ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:513: in save
    return self.save_error_events(
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:547: in save_error_events
    group_info = assign_event_to_group(event=job["event"], job=job, metric_tags=metric_tags)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1358: in assign_event_to_group
    group_info = create_group_with_grouphashes(job, all_grouphashes)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1531: in create_group_with_grouphashes
    group = _create_group(project, event, **_get_group_processing_kwargs(job))
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1633: in _create_group
    create_open_period(group=group, start_time=group.first_seen, event_id=event.event_id)
src/sentry/models/groupopenperiod.py:211: in create_open_period
    if get_group_type_by_type_id(group.type).detector_settings is not None:
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:355: in get_group_type_by_type_id
    return registry.get_by_type_id(id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:180: in get_by_type_id
    raise InvalidGroupTypeError(id_)
E   sentry.issues.grouptype.InvalidGroupTypeError: No group type with the id 1 is registered.
tests/sentry/backup/test_imports.py::CollisionTests::test_colliding_org_auth_tokenlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/sentry/backup/test_imports.py:1519: in test_colliding_org_auth_token
    self.create_exhaustive_organization("some-org", owner, invited, [member])
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/contextlib.py:85: in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/helpers/backups.py:701: in create_exhaustive_organization
    detector = self.create_detector(project=project, type=MetricIssue.slug)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/fixtures.py:727: in create_detector
    return Factories.create_detector(project=project, type=type, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/contextlib.py:85: in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/factories.py:2362: in create_detector
    return Detector.objects.create(
src/sentry/silo/base.py:157: in override
    return original_method(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/models/manager.py:87: in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/silo/base.py:157: in override
    return original_method(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/models/query.py:665: in create
    obj.save(force_insert=True, using=self.db)
src/sentry/silo/base.py:157: in override
    return original_method(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/models/base.py:902: in save
    self.save_base(
src/sentry/silo/base.py:157: in override
    return original_method(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/db/models/base.py:988: in save_base
    pre_save.send(
src/sentry/testutils/pytest/stale_database_reads.py:101: in send
    return old_send(self, sender, **named)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/workflow_engine/receivers/detector.py:29: in enforce_config_schema_signal
    instance.enforce_config_schema()
src/sentry/workflow_engine/models/detector.py:223: in enforce_config_schema
    group_type = self.group_type
                 ^^^^^^^^^^^^^^^
src/sentry/workflow_engine/models/detector.py:145: in group_type
... (2 more lines)
tests/snuba/api/endpoints/test_organization_events_trace.py::OrganizationEventsTraceEndpointTest::test_with_mixup_of_orphan_errors_with_simple_trace_datalog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/snuba/api/endpoints/test_organization_events_trace.py:1315: in test_with_mixup_of_orphan_errors_with_simple_trace_data
    error = self.store_event(error_data, project_id=self.project.id)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/cases.py:1086: in store_event
    stored_event = Factories.store_event(*args, **kwargs)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/contextlib.py:85: in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
src/sentry/testutils/factories.py:1219: in store_event
    event = manager.save(project_id)
            ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:513: in save
    return self.save_error_events(
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:547: in save_error_events
    group_info = assign_event_to_group(event=job["event"], job=job, metric_tags=metric_tags)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13/site-packages/sentry_sdk/tracing_utils.py:1109: in sync_wrapper
    result = f(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1358: in assign_event_to_group
    group_info = create_group_with_grouphashes(job, all_grouphashes)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1531: in create_group_with_grouphashes
    group = _create_group(project, event, **_get_group_processing_kwargs(job))
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/event_manager.py:1633: in _create_group
    create_open_period(group=group, start_time=group.first_seen, event_id=event.event_id)
src/sentry/models/groupopenperiod.py:211: in create_open_period
    if get_group_type_by_type_id(group.type).detector_settings is not None:
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:355: in get_group_type_by_type_id
    return registry.get_by_type_id(id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sentry/issues/grouptype.py:180: in get_by_type_id
    raise InvalidGroupTypeError(id_)
E   sentry.issues.grouptype.InvalidGroupTypeError: No group type with the id 1 is registered.

@ceorourke ceorourke merged commit 3af3d48 into master May 21, 2026
120 of 124 checks passed
@ceorourke ceorourke deleted the ceorourke/rm-put-post-metric-code branch May 21, 2026 20:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Scope: Backend Automatically applied to PRs that change backend components

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants