Browse Source

featu(search) Use snuba to fetch events by default (#13700)

featu(search) Use snuba to fetch events by default (#13700)

snuba.events-queries.enabled option is supposed to be already active in production. This commit activates it by default and fixes the tests that did not support it.
This step is needed in order to remove our dependency on PG events which is useful for issueless
events.
Filippo Pacifici 5 years ago
parent
commit
c2c97611c7

+ 0 - 1
src/sentry/api/endpoints/project_event_details.py

@@ -53,7 +53,6 @@ class ProjectEventDetailsEndpoint(ProjectEndpoint):
             return Response({'detail': 'Event not found'}, status=404)
 
         data = serialize(snuba_event)
-
         requested_environments = set(request.GET.getlist('environment'))
 
         next_event_id = snuba_event.next_event_id(environments=requested_environments)

+ 1 - 1
src/sentry/options/defaults.py

@@ -159,7 +159,7 @@ register('snuba.search.chunk-growth-rate', default=1.5)
 register('snuba.search.max-chunk-size', default=2000)
 register('snuba.search.max-total-chunk-time-seconds', default=30.0)
 register('snuba.search.hits-sample-size', default=100)
-register('snuba.events-queries.enabled', type=Bool, default=False)
+register('snuba.events-queries.enabled', type=Bool, default=True)
 register('snuba.track-outcomes-sample-rate', default=0.0)
 
 # Kafka Publisher

+ 3 - 4
tests/acceptance/test_issue_details.py

@@ -36,19 +36,18 @@ class IssueDetailsTest(AcceptanceTestCase, SnubaTestCase):
         # Only set these properties if we were given a time.
         # event processing will mark old time values as processing errors.
         if time:
-            event_data['timestamp'] = time.isoformat()
             event_data['received'] = time.isoformat()
 
         # We need a fallback datetime for the event
         if time is None:
-            time = datetime(2017, 9, 6, 0, 0)
+            time = (now - timedelta(days=1))
+
+        event_data['timestamp'] = time.isoformat()
         event = self.store_event(
             data=event_data,
             project_id=self.project.id,
             assert_no_errors=False,
         )
-        event.datetime = time
-        event.save()
         event.group.update(
             first_seen=datetime(2015, 8, 13, 3, 8, 25, tzinfo=timezone.utc),
             last_seen=time

+ 12 - 7
tests/integration/test_api.py

@@ -21,9 +21,11 @@ class AuthenticationTest(AuthProviderTestCase):
             user=user, organization=organization, teams=[team])
         setattr(member.flags, 'sso:linked', True)
         member.save()
-        group = self.create_group(project=project)
-        self.create_event(group=group)
-
+        event = self.store_event(
+            data={},
+            project_id=project.id,
+        )
+        group_id = event.group_id
         auth_provider = AuthProvider.objects.create(
             organization=organization,
             provider='dummy',
@@ -41,9 +43,9 @@ class AuthenticationTest(AuthProviderTestCase):
             u'/api/0/organizations/{}/'.format(organization.slug),
             u'/api/0/projects/{}/{}/'.format(organization.slug, project.slug),
             u'/api/0/teams/{}/{}/'.format(organization.slug, team.slug),
-            u'/api/0/issues/{}/'.format(group.id),
+            u'/api/0/issues/{}/'.format(group_id),
             # this uses the internal API, which once upon a time was broken
-            u'/api/0/issues/{}/events/latest/'.format(group.id),
+            u'/api/0/issues/{}/events/latest/'.format(group_id),
         )
 
         for path in paths:
@@ -78,8 +80,11 @@ class AuthenticationTest(AuthProviderTestCase):
             user=user, organization=organization, teams=[team])
         setattr(member.flags, 'sso:linked', True)
         member.save()
-        group = self.create_group(project=project)
-        self.create_event(group=group)
+
+        self.store_event(
+            data={},
+            project_id=project.id,
+        )
 
         auth_provider = AuthProvider.objects.create(
             organization=organization,

+ 13 - 10
tests/sentry/api/endpoints/test_event_attachment_details.py

@@ -2,7 +2,8 @@ from __future__ import absolute_import
 
 import six
 
-from datetime import datetime
+from datetime import timedelta
+from django.utils import timezone
 from six import BytesIO
 
 from sentry.models import EventAttachment, File
@@ -13,12 +14,14 @@ class CreateAttachmentMixin(object):
     def create_attachment(self):
         self.project = self.create_project()
         self.release = self.create_release(self.project, self.user)
-        self.group = self.create_group(project=self.project, first_release=self.release)
-        self.event = self.create_event(
-            event_id='a',
-            group=self.group,
-            datetime=datetime(2016, 8, 13, 3, 8, 25),
-            tags={'sentry:release': self.release.version}
+        min_ago = (timezone.now() - timedelta(minutes=1)).isoformat()[:19]
+        self.event = self.store_event(
+            data={
+                'fingerprint': ['group1'],
+                'timestamp': min_ago,
+                'tags': {'sentry:release': self.release.version},
+            },
+            project_id=self.project.id,
         )
 
         self.file = File.objects.create(
@@ -46,7 +49,7 @@ class EventAttachmentDetailsTest(APITestCase, CreateAttachmentMixin):
         path = u'/api/0/projects/{}/{}/events/{}/attachments/{}/'.format(
             self.organization.slug,
             self.project.slug,
-            self.event.id,
+            self.event.event_id,
             self.attachment.id,
         )
 
@@ -63,7 +66,7 @@ class EventAttachmentDetailsTest(APITestCase, CreateAttachmentMixin):
         path = u'/api/0/projects/{}/{}/events/{}/attachments/{}/?download'.format(
             self.organization.slug,
             self.project.slug,
-            self.event.id,
+            self.event.event_id,
             self.attachment.id,
         )
 
@@ -84,7 +87,7 @@ class EventAttachmentDetailsPermissionTest(PermissionTestCase, CreateAttachmentM
         self.path = u'/api/0/projects/{}/{}/events/{}/attachments/{}/?download'.format(
             self.organization.slug,
             self.project.slug,
-            self.event.id,
+            self.event.event_id,
             self.attachment.id,
         )
 

+ 16 - 18
tests/sentry/api/endpoints/test_event_attachments.py

@@ -2,7 +2,8 @@ from __future__ import absolute_import
 
 import six
 
-from datetime import datetime
+from datetime import timedelta
+from django.utils import timezone
 
 from sentry.models import EventAttachment, File
 from sentry.testutils import APITestCase
@@ -12,23 +13,20 @@ class EventAttachmentsTest(APITestCase):
     def test_simple(self):
         self.login_as(user=self.user)
 
-        project = self.create_project()
-
-        release = self.create_release(project, self.user)
-
-        group = self.create_group(project=project, first_release=release)
-
-        event1 = self.create_event(
-            event_id='a',
-            group=group,
-            datetime=datetime(2016, 8, 13, 3, 8, 25),
-            tags={'sentry:release': release.version}
+        min_ago = (timezone.now() - timedelta(minutes=1)).isoformat()[:19]
+        event1 = self.store_event(
+            data={
+                'fingerprint': ['group1'],
+                'timestamp': min_ago,
+            },
+            project_id=self.project.id,
         )
-        event2 = self.create_event(
-            event_id='b',
-            group=group,
-            datetime=datetime(2016, 8, 13, 3, 8, 25),
-            tags={'sentry:release': release.version}
+        event2 = self.store_event(
+            data={
+                'fingerprint': ['group1'],
+                'timestamp': min_ago,
+            },
+            project_id=self.project.id,
         )
 
         attachment1 = EventAttachment.objects.create(
@@ -56,7 +54,7 @@ class EventAttachmentsTest(APITestCase):
         path = u'/api/0/projects/{}/{}/events/{}/attachments/'.format(
             event1.project.organization.slug,
             event1.project.slug,
-            event1.id,
+            event1.event_id,
         )
 
         with self.feature('organizations:event-attachments'):

+ 33 - 36
tests/sentry/api/endpoints/test_event_committers.py

@@ -1,13 +1,17 @@
 from __future__ import absolute_import
 
-from datetime import datetime
+import copy
+
+from datetime import timedelta
+from django.utils import timezone
 from django.core.urlresolvers import reverse
 
-from sentry.models import Event
 from sentry.testutils import APITestCase
-
+from sentry.testutils.factories import DEFAULT_EVENT_DATA
 
 # TODO(dcramer): These tests rely too much on implicit fixtures
+
+
 class EventCommittersTest(APITestCase):
     def test_simple(self):
         self.login_as(user=self.user)
@@ -15,20 +19,21 @@ class EventCommittersTest(APITestCase):
         project = self.create_project()
 
         release = self.create_release(project, self.user)
-
-        group = self.create_group(project=project, first_release=release)
-
-        event = self.create_event(
-            event_id='a',
-            group=group,
-            datetime=datetime(2016, 8, 13, 3, 8, 25),
-            tags={'sentry:release': release.version}
+        min_ago = (timezone.now() - timedelta(minutes=1)).isoformat()[:19]
+        event = self.store_event(
+            data={
+                'fingerprint': ['group1'],
+                'timestamp': min_ago,
+                'release': release.version,
+                'stacktrace': copy.deepcopy(DEFAULT_EVENT_DATA['stacktrace']),
+            },
+            project_id=project.id,
         )
 
         url = reverse(
             'sentry-api-0-event-file-committers',
             kwargs={
-                'event_id': event.id,
+                'event_id': event.event_id,
                 'project_slug': event.project.slug,
                 'organization_slug': event.project.organization.slug,
             }
@@ -51,18 +56,21 @@ class EventCommittersTest(APITestCase):
     def test_no_release(self):
         self.login_as(user=self.user)
 
-        group = self.create_group()
+        project = self.create_project()
 
-        event = self.create_event(
-            event_id='a',
-            group=group,
-            datetime=datetime(2016, 8, 13, 3, 8, 25),
+        min_ago = (timezone.now() - timedelta(minutes=1)).isoformat()[:19]
+        event = self.store_event(
+            data={
+                'fingerprint': ['group1'],
+                'timestamp': min_ago,
+            },
+            project_id=project.id,
         )
 
         url = reverse(
             'sentry-api-0-event-file-committers',
             kwargs={
-                'event_id': event.id,
+                'event_id': event.event_id,
                 'project_slug': event.project.slug,
                 'organization_slug': event.project.organization.slug,
             }
@@ -82,24 +90,10 @@ class EventCommittersTest(APITestCase):
             self.user,
         )
 
-        group = self.create_group(
-            project=project,
-            first_release=release,
-        )
-
-        event = self.create_event(
-            event_id='a',
-            group=group,
-            datetime=datetime(2016, 8, 13, 3, 8, 25),
-            tags={'sentry:release': release.version}
-        )
-
-        event = Event.objects.create(
-            project_id=project.id,
-            group_id=group.id,
-            event_id='abcd',
-            message='hello 123456',
+        min_ago = (timezone.now() - timedelta(minutes=1)).isoformat()[:19]
+        event = self.store_event(
             data={
+                'fingerprint': ['group1'],
                 'environment': 'production',
                 'type': 'default',
                 'exception': {
@@ -116,13 +110,16 @@ class EventCommittersTest(APITestCase):
                     ['environment', 'production'],
                     ['sentry:release', release.version],
                 ],
+                'release': release.version,
+                'timestamp': min_ago,
             },
+            project_id=project.id,
         )
 
         url = reverse(
             'sentry-api-0-event-file-committers',
             kwargs={
-                'event_id': event.id,
+                'event_id': event.event_id,
                 'project_slug': event.project.slug,
                 'organization_slug': event.project.organization.slug,
             }

+ 3 - 0
tests/sentry/api/endpoints/test_group_events.py

@@ -18,6 +18,9 @@ class GroupEventsTest(APITestCase):
         super(GroupEventsTest, self).setUp()
         options.set('snuba.events-queries.enabled', False)
 
+    def tearDown(self):
+        options.set('snuba.events-queries.enabled', True)
+
     def test_simple(self):
         self.login_as(user=self.user)
 

+ 1 - 4
tests/sentry/api/endpoints/test_group_events_latest.py

@@ -20,7 +20,6 @@ class GroupEventsLatestTest(APITestCase):
 
         self.event1 = self.store_event(
             data={
-                'event_id': 'a' * 32,
                 'environment': 'staging',
                 'fingerprint': ['group_1'],
                 'timestamp': two_min_ago
@@ -30,7 +29,6 @@ class GroupEventsLatestTest(APITestCase):
 
         self.event2 = self.store_event(
             data={
-                'event_id': 'b' * 32,
                 'environment': 'production',
                 'fingerprint': ['group_1'],
                 'timestamp': min_ago
@@ -43,6 +41,5 @@ class GroupEventsLatestTest(APITestCase):
     def test_simple(self):
         url = u'/api/0/issues/{}/events/latest/'.format(self.group.id)
         response = self.client.get(url, format='json')
-
         assert response.status_code == 200
-        assert response.data['id'] == six.text_type(self.event2.id)
+        assert response.data['eventID'] == six.text_type(self.event2.event_id)

+ 1 - 3
tests/sentry/api/endpoints/test_group_events_oldest.py

@@ -20,7 +20,6 @@ class GroupEventsOldestTest(APITestCase):
 
         self.event1 = self.store_event(
             data={
-                'event_id': 'a' * 32,
                 'environment': 'staging',
                 'fingerprint': ['group_1'],
                 'timestamp': two_min_ago
@@ -30,7 +29,6 @@ class GroupEventsOldestTest(APITestCase):
 
         self.event2 = self.store_event(
             data={
-                'event_id': 'b' * 32,
                 'environment': 'production',
                 'fingerprint': ['group_1'],
                 'timestamp': min_ago
@@ -45,4 +43,4 @@ class GroupEventsOldestTest(APITestCase):
         response = self.client.get(url, format='json')
 
         assert response.status_code == 200
-        assert response.data['id'] == six.text_type(self.event1.id)
+        assert response.data['id'] == six.text_type(self.event1.event_id)

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