Skip to content

Conversation

cmanallen
Copy link
Member

@cmanallen cmanallen commented Oct 8, 2025

msgspec allows us to partially deserialize a JSON payload. By removing the requirement to deserialize full and incremental snapshots, we a significantly increase the performance of the deserialization and significantly reduce the memory consumption.

This is particularly important as our consumer suffers from memory usage issue and our single-threaded processing logic is a bottleneck to throughput improvements. Experiments demonstrated a 10x performance uplift and memory usage declined to, essentially, nil.

There is a downside. We can no longer read data from incremental snapshots or full snapshots. To do so would require allocating memory and defeat the purpose of this PR. Presently we don't do anything with those events except log some canvas events which, I think, are unimportant enough we can remove them.

@github-actions github-actions bot added the Scope: Backend Automatically applied to PRs that change backend components label Oct 8, 2025
Copy link

codecov bot commented Oct 8, 2025

❌ 21 Tests Failed:

Tests completed Failed Passed Skipped
121 21 100 2
View the top 3 failed test(s) by shortest run time
::tests.sentry.api.endpoints.secret_scanning.test_github
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../endpoints/secret_scanning/test_github.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../endpoints/secret_scanning/test_github.py#x1B[0m:18: in <module>
    class SecretScanningGitHubTest(TestCase):
#x1B[1m#x1B[.../endpoints/secret_scanning/test_github.py#x1B[0m:19: in SecretScanningGitHubTest
    path = reverse("sentry-api-0-secret-scanning-github")
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/base.py#x1B[0m:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:749: in _reverse_with_prefix
    self._populate()
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:548: in _populate
    for url_pattern in reversed(self.url_patterns):
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:711: in urlconf_module
    return import_module(self.urlconf_name)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/conf/urls.py#x1B[0m:3: in <module>
    from sentry.web.urls import urlpatterns
#x1B[1m#x1B[.../sentry/web/urls.py#x1B[0m:168: in <module>
    include("sentry.api.urls"),
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/conf.py#x1B[0m:39: in include
    urlconf_module = import_module(urlconf_module)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:490: in <module>
    from sentry.replays.endpoints.project_replay_summary import ProjectReplaySummaryEndpoint
#x1B[1m#x1B[.../replays/endpoints/project_replay_summary.py#x1B[0m:22: in <module>
    from sentry.replays.usecases.summarize import (
#x1B[1m#x1B[.../replays/usecases/summarize.py#x1B[0m:20: in <module>
    from sentry.replays.usecases.ingest.event_parser import EventType
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.api.endpoints.test_api_tokens
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../api/endpoints/test_api_tokens.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../api/endpoints/test_api_tokens.py#x1B[0m:160: in <module>
    class ApiTokensSuperuserTest(APITestCase):
#x1B[1m#x1B[.../api/endpoints/test_api_tokens.py#x1B[0m:161: in ApiTokensSuperuserTest
    url = reverse("sentry-api-0-api-tokens")
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/base.py#x1B[0m:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:749: in _reverse_with_prefix
    self._populate()
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:548: in _populate
    for url_pattern in reversed(self.url_patterns):
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:711: in urlconf_module
    return import_module(self.urlconf_name)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/conf/urls.py#x1B[0m:3: in <module>
    from sentry.web.urls import urlpatterns
#x1B[1m#x1B[.../sentry/web/urls.py#x1B[0m:168: in <module>
    include("sentry.api.urls"),
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/conf.py#x1B[0m:39: in include
    urlconf_module = import_module(urlconf_module)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:490: in <module>
    from sentry.replays.endpoints.project_replay_summary import ProjectReplaySummaryEndpoint
#x1B[1m#x1B[.../replays/endpoints/project_replay_summary.py#x1B[0m:22: in <module>
    from sentry.replays.usecases.summarize import (
#x1B[1m#x1B[.../replays/usecases/summarize.py#x1B[0m:20: in <module>
    from sentry.replays.usecases.ingest.event_parser import EventType
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.api.endpoints.test_system_options
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../api/endpoints/test_system_options.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../api/endpoints/test_system_options.py#x1B[0m:9: in <module>
    class SystemOptionsTest(APITestCase):
#x1B[1m#x1B[.../api/endpoints/test_system_options.py#x1B[0m:10: in SystemOptionsTest
    url = reverse("sentry-api-0-system-options")
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/base.py#x1B[0m:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:749: in _reverse_with_prefix
    self._populate()
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:548: in _populate
    for url_pattern in reversed(self.url_patterns):
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:711: in urlconf_module
    return import_module(self.urlconf_name)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/conf/urls.py#x1B[0m:3: in <module>
    from sentry.web.urls import urlpatterns
#x1B[1m#x1B[.../sentry/web/urls.py#x1B[0m:168: in <module>
    include("sentry.api.urls"),
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/conf.py#x1B[0m:39: in include
    urlconf_module = import_module(urlconf_module)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:490: in <module>
    from sentry.replays.endpoints.project_replay_summary import ProjectReplaySummaryEndpoint
#x1B[1m#x1B[.../replays/endpoints/project_replay_summary.py#x1B[0m:22: in <module>
    from sentry.replays.usecases.summarize import (
#x1B[1m#x1B[.../replays/usecases/summarize.py#x1B[0m:20: in <module>
    from sentry.replays.usecases.ingest.event_parser import EventType
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.hybridcloud.apigateway.test_apigateway
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../hybridcloud/apigateway/test_apigateway.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../hybridcloud/apigateway/test_apigateway.py#x1B[0m:11: in <module>
    from sentry.testutils.helpers.apigateway import ApiGatewayTestCase, verify_request_params
#x1B[1m#x1B[.../testutils/helpers/apigateway.py#x1B[0m:14: in <module>
    import sentry.api.urls as api_urls
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:490: in <module>
    from sentry.replays.endpoints.project_replay_summary import ProjectReplaySummaryEndpoint
#x1B[1m#x1B[.../replays/endpoints/project_replay_summary.py#x1B[0m:22: in <module>
    from sentry.replays.usecases.summarize import (
#x1B[1m#x1B[.../replays/usecases/summarize.py#x1B[0m:20: in <module>
    from sentry.replays.usecases.ingest.event_parser import EventType
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.hybridcloud.apigateway.test_apigateway_helpers
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../hybridcloud/apigateway/test_apigateway_helpers.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../hybridcloud/apigateway/test_apigateway_helpers.py#x1B[0m:6: in <module>
    from sentry.testutils.helpers.apigateway import ApiGatewayTestCase, verify_request_body
#x1B[1m#x1B[.../testutils/helpers/apigateway.py#x1B[0m:14: in <module>
    import sentry.api.urls as api_urls
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:490: in <module>
    from sentry.replays.endpoints.project_replay_summary import ProjectReplaySummaryEndpoint
#x1B[1m#x1B[.../replays/endpoints/project_replay_summary.py#x1B[0m:22: in <module>
    from sentry.replays.usecases.summarize import (
#x1B[1m#x1B[.../replays/usecases/summarize.py#x1B[0m:20: in <module>
    from sentry.replays.usecases.ingest.event_parser import EventType
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.hybridcloud.apigateway.test_proxy
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../hybridcloud/apigateway/test_proxy.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../hybridcloud/apigateway/test_proxy.py#x1B[0m:9: in <module>
    from sentry.testutils.helpers.apigateway import (
#x1B[1m#x1B[.../testutils/helpers/apigateway.py#x1B[0m:14: in <module>
    import sentry.api.urls as api_urls
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:490: in <module>
    from sentry.replays.endpoints.project_replay_summary import ProjectReplaySummaryEndpoint
#x1B[1m#x1B[.../replays/endpoints/project_replay_summary.py#x1B[0m:22: in <module>
    from sentry.replays.usecases.summarize import (
#x1B[1m#x1B[.../replays/usecases/summarize.py#x1B[0m:20: in <module>
    from sentry.replays.usecases.ingest.event_parser import EventType
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.integrations.msteams.test_webhook
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../integrations/msteams/test_webhook.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../integrations/msteams/test_webhook.py#x1B[0m:35: in <module>
    webhook_url = reverse("sentry-integration-msteams-webhooks")
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/base.py#x1B[0m:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:749: in _reverse_with_prefix
    self._populate()
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:548: in _populate
    for url_pattern in reversed(self.url_patterns):
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:711: in urlconf_module
    return import_module(self.urlconf_name)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/conf/urls.py#x1B[0m:3: in <module>
    from sentry.web.urls import urlpatterns
#x1B[1m#x1B[.../sentry/web/urls.py#x1B[0m:168: in <module>
    include("sentry.api.urls"),
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/conf.py#x1B[0m:39: in include
    urlconf_module = import_module(urlconf_module)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:490: in <module>
    from sentry.replays.endpoints.project_replay_summary import ProjectReplaySummaryEndpoint
#x1B[1m#x1B[.../replays/endpoints/project_replay_summary.py#x1B[0m:22: in <module>
    from sentry.replays.usecases.summarize import (
#x1B[1m#x1B[.../replays/usecases/summarize.py#x1B[0m:20: in <module>
    from sentry.replays.usecases.ingest.event_parser import EventType
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.middleware.integrations.parsers.test_github
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../integrations/parsers/test_github.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../integrations/parsers/test_github.py#x1B[0m:27: in <module>
    class GithubRequestParserTest(TestCase):
#x1B[1m#x1B[.../integrations/parsers/test_github.py#x1B[0m:29: in GithubRequestParserTest
    path = reverse("sentry-integration-github-webhook")
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/base.py#x1B[0m:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:749: in _reverse_with_prefix
    self._populate()
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:548: in _populate
    for url_pattern in reversed(self.url_patterns):
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:711: in urlconf_module
    return import_module(self.urlconf_name)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/conf/urls.py#x1B[0m:3: in <module>
    from sentry.web.urls import urlpatterns
#x1B[1m#x1B[.../sentry/web/urls.py#x1B[0m:168: in <module>
    include("sentry.api.urls"),
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/conf.py#x1B[0m:39: in include
    urlconf_module = import_module(urlconf_module)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:490: in <module>
    from sentry.replays.endpoints.project_replay_summary import ProjectReplaySummaryEndpoint
#x1B[1m#x1B[.../replays/endpoints/project_replay_summary.py#x1B[0m:22: in <module>
    from sentry.replays.usecases.summarize import (
#x1B[1m#x1B[.../replays/usecases/summarize.py#x1B[0m:20: in <module>
    from sentry.replays.usecases.ingest.event_parser import EventType
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.middleware.integrations.parsers.test_github_enterprise
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../integrations/parsers/test_github_enterprise.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../integrations/parsers/test_github_enterprise.py#x1B[0m:23: in <module>
    class GithubEnterpriseRequestParserTest(TestCase):
#x1B[1m#x1B[.../integrations/parsers/test_github_enterprise.py#x1B[0m:25: in GithubEnterpriseRequestParserTest
    path = reverse("sentry-integration-github-enterprise-webhook")
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/base.py#x1B[0m:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:749: in _reverse_with_prefix
    self._populate()
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:548: in _populate
    for url_pattern in reversed(self.url_patterns):
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:711: in urlconf_module
    return import_module(self.urlconf_name)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/conf/urls.py#x1B[0m:3: in <module>
    from sentry.web.urls import urlpatterns
#x1B[1m#x1B[.../sentry/web/urls.py#x1B[0m:168: in <module>
    include("sentry.api.urls"),
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/conf.py#x1B[0m:39: in include
    urlconf_module = import_module(urlconf_module)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:490: in <module>
    from sentry.replays.endpoints.project_replay_summary import ProjectReplaySummaryEndpoint
#x1B[1m#x1B[.../replays/endpoints/project_replay_summary.py#x1B[0m:22: in <module>
    from sentry.replays.usecases.summarize import (
#x1B[1m#x1B[.../replays/usecases/summarize.py#x1B[0m:20: in <module>
    from sentry.replays.usecases.ingest.event_parser import EventType
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.middleware.integrations.parsers.test_vercel
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../integrations/parsers/test_vercel.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../integrations/parsers/test_vercel.py#x1B[0m:13: in <module>
    class VercelRequestParserTest(TestCase):
#x1B[1m#x1B[.../integrations/parsers/test_vercel.py#x1B[0m:16: in VercelRequestParserTest
    factory.get(reverse("sentry-extensions-vercel-configure")),
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/base.py#x1B[0m:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:749: in _reverse_with_prefix
    self._populate()
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:548: in _populate
    for url_pattern in reversed(self.url_patterns):
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/utils/functional.py#x1B[0m:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/resolvers.py#x1B[0m:711: in urlconf_module
    return import_module(self.urlconf_name)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/conf/urls.py#x1B[0m:3: in <module>
    from sentry.web.urls import urlpatterns
#x1B[1m#x1B[.../sentry/web/urls.py#x1B[0m:168: in <module>
    include("sentry.api.urls"),
#x1B[1m#x1B[31m.venv/lib/python3.13.../django/urls/conf.py#x1B[0m:39: in include
    urlconf_module = import_module(urlconf_module)
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1........./x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../sentry/api/urls.py#x1B[0m:490: in <module>
    from sentry.replays.endpoints.project_replay_summary import ProjectReplaySummaryEndpoint
#x1B[1m#x1B[.../replays/endpoints/project_replay_summary.py#x1B[0m:22: in <module>
    from sentry.replays.usecases.summarize import (
#x1B[1m#x1B[.../replays/usecases/summarize.py#x1B[0m:20: in <module>
    from sentry.replays.usecases.ingest.event_parser import EventType
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.replays.consumers.test_recording
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../replays/consumers/test_recording.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../replays/consumers/test_recording.py#x1B[0m:16: in <module>
    from sentry.replays.consumers.recording import ProcessReplayRecordingStrategyFactory
#x1B[1m#x1B[.../replays/consumers/recording.py#x1B[0m:18: in <module>
    from sentry.replays.usecases.ingest import (
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.replays.endpoints.test_project_replay_summary
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../replays/endpoints/test_project_replay_summary.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../replays/endpoints/test_project_replay_summary.py#x1B[0m:13: in <module>
    from sentry.replays.endpoints.project_replay_summary import (
#x1B[1m#x1B[.../replays/endpoints/project_replay_summary.py#x1B[0m:22: in <module>
    from sentry.replays.usecases.summarize import (
#x1B[1m#x1B[.../replays/usecases/summarize.py#x1B[0m:20: in <module>
    from sentry.replays.usecases.ingest.event_parser import EventType
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.replays.integration.consumers.test_recording
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../integration/consumers/test_recording.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../integration/consumers/test_recording.py#x1B[0m:14: in <module>
    from sentry.replays.consumers.recording import ProcessReplayRecordingStrategyFactory
#x1B[1m#x1B[.../replays/consumers/recording.py#x1B[0m:18: in <module>
    from sentry.replays.usecases.ingest import (
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.replays.unit.consumers.test_recording
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../unit/consumers/test_recording.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../unit/consumers/test_recording.py#x1B[0m:7: in <module>
    from sentry.replays.consumers.recording import (
#x1B[1m#x1B[.../replays/consumers/recording.py#x1B[0m:18: in <module>
    from sentry.replays.usecases.ingest import (
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.replays.unit.test_event_logger
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../replays/unit/test_event_logger.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../replays/unit/test_event_logger.py#x1B[0m:11: in <module>
    from sentry.replays.usecases.ingest.event_logger import (
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.replays.unit.test_event_parser
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../replays/unit/test_event_parser.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../replays/unit/test_event_parser.py#x1B[0m:6: in <module>
    from sentry.replays.usecases.ingest.event_parser import (
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.replays.unit.test_ingest
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../replays/unit/test_ingest.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../replays/unit/test_ingest.py#x1B[0m:5: in <module>
    from sentry.replays.usecases.ingest import (
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.replays.unit.test_issue_creation
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../replays/unit/test_issue_creation.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../replays/unit/test_issue_creation.py#x1B[0m:5: in <module>
    from sentry.replays.usecases.ingest.issue_creation import (
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.replays.usecases.test_summarize
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../replays/usecases/test_summarize.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../replays/usecases/test_summarize.py#x1B[0m:16: in <module>
    from sentry.replays.usecases.ingest.event_parser import get_timestamp_unit, which
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.sentry.seer.endpoints.test_seer_rpc
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../seer/endpoints/test_seer_rpc.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../seer/endpoints/test_seer_rpc.py#x1B[0m:18: in <module>
    from sentry.seer.endpoints.seer_rpc import (
#x1B[1m#x1B[.../seer/endpoints/seer_rpc.py#x1B[0m:62: in <module>
    from sentry.replays.usecases.summarize import rpc_get_replay_summary_logs
#x1B[1m#x1B[.../replays/usecases/summarize.py#x1B[0m:20: in <module>
    from sentry.replays.usecases.ingest.event_parser import EventType
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m
::tests.snuba.api.endpoints.test_seer_attributes
Stack Traces | 0s run time
#x1B[31mImportError while importing test module '.../api/endpoints/test_seer_attributes.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
#x1B[1m#x1B[.../hostedtoolcache/Python/3.13.1.../x64/lib/python3.13/importlib/__init__.py#x1B[0m:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
#x1B[1m#x1B[.../api/endpoints/test_seer_attributes.py#x1B[0m:5: in <module>
    from sentry.seer.endpoints.seer_rpc import (
#x1B[1m#x1B[.../seer/endpoints/seer_rpc.py#x1B[0m:62: in <module>
    from sentry.replays.usecases.summarize import rpc_get_replay_summary_logs
#x1B[1m#x1B[.../replays/usecases/summarize.py#x1B[0m:20: in <module>
    from sentry.replays.usecases.ingest.event_parser import EventType
#x1B[1m#x1B[.../usecases/ingest/__init__.py#x1B[0m:8: in <module>
    import msgspec
#x1B[1m#x1B[31mE   ModuleNotFoundError: No module named 'msgspec'#x1B[0m#x1B[0m

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

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.

1 participant