Browse Source

fix(workflow): release query needs org id (#23899)

Chris Fuller 4 years ago
parent
commit
acd2b8fc1d

+ 6 - 1
src/sentry/api/serializers/models/release.py

@@ -230,13 +230,18 @@ class ReleaseSerializer(Serializer):
         if project is not None:
             project_ids = [project.id]
             specialized = True
+            organization_id = project.organization_id
         else:
             project_ids, specialized = self.__get_project_id_list(item_list)
+            organization_id = item_list[0].organization_id
 
         first_seen = {}
         last_seen = {}
         tag_values = tagstore.get_release_tags(
-            project_ids, environment_id=None, versions=[o.version for o in item_list]
+            organization_id,
+            project_ids,
+            environment_id=None,
+            versions=[o.version for o in item_list],
         )
         for tv in tag_values:
             first_val = first_seen.get(tv.value)

+ 1 - 1
src/sentry/tagstore/base.py

@@ -264,7 +264,7 @@ class TagStorage(Service):
         """
         raise NotImplementedError
 
-    def get_release_tags(self, project_ids, environment_id, versions):
+    def get_release_tags(self, organization_id, project_ids, environment_id, versions):
         """
         >>> get_release_tags([1, 2], 3, ["1", "2"])
         """

+ 6 - 4
src/sentry/tagstore/snuba/backend.py

@@ -543,7 +543,7 @@ class SnubaTagStorage(TagStorage):
     def get_last_release(self, project_id, group_id):
         return self.__get_release(project_id, group_id, False)
 
-    def get_release_tags(self, project_ids, environment_id, versions):
+    def get_release_tags(self, organization_id, project_ids, environment_id, versions):
         filters = {"project_id": project_ids}
         if environment_id:
             filters["environment"] = [environment_id]
@@ -558,7 +558,7 @@ class SnubaTagStorage(TagStorage):
             ["min", SEEN_COLUMN, "first_seen"],
             ["max", SEEN_COLUMN, "last_seen"],
         ]
-        start = self.get_min_start_date(project_ids, environment_id, versions)
+        start = self.get_min_start_date(organization_id, project_ids, environment_id, versions)
         result = snuba.query(
             start=start,
             groupby=["project_id", col],
@@ -576,9 +576,11 @@ class SnubaTagStorage(TagStorage):
 
         return set(values)
 
-    def get_min_start_date(self, project_ids, environment_id, versions):
+    def get_min_start_date(self, organization_id, project_ids, environment_id, versions):
         rpe = ReleaseProjectEnvironment.objects.filter(
-            project_id__in=project_ids, release__version__in=versions
+            project_id__in=project_ids,
+            release__version__in=versions,
+            release__organization_id=organization_id,
         ).order_by("first_seen")
 
         if environment_id:

+ 17 - 15
tests/snuba/tagstore/test_tagstore_backend.py

@@ -375,7 +375,9 @@ class TagStorageTest(TestCase, SnubaTestCase):
         assert result[0].last_seen == self.now - timedelta(seconds=2)
 
     def test_get_release_tags(self):
-        tags = list(self.ts.get_release_tags([self.proj1.id], None, ["100"]))
+        tags = list(
+            self.ts.get_release_tags(self.proj1.organization_id, [self.proj1.id], None, ["100"])
+        )
 
         assert len(tags) == 1
         one_second_ago = self.now - timedelta(seconds=1)
@@ -385,7 +387,9 @@ class TagStorageTest(TestCase, SnubaTestCase):
         assert tags[0].key == "sentry:release"
 
     def test_get_release_tags_uses_release_project_environment(self):
-        tags = list(self.ts.get_release_tags([self.proj1.id], None, ["100"]))
+        tags = list(
+            self.ts.get_release_tags(self.proj1.organization_id, [self.proj1.id], None, ["100"])
+        )
 
         assert len(tags) == 1
         one_second_ago = self.now - timedelta(seconds=1)
@@ -409,6 +413,15 @@ class TagStorageTest(TestCase, SnubaTestCase):
             },
             project_id=self.proj1.id,
         )
+
+        release = Release.objects.create(version="100", organization=self.organization)
+        ReleaseProjectEnvironment.objects.create(
+            release_id=release.id,
+            project_id=self.proj1.id,
+            environment_id=self.env3.id,
+            first_seen=one_day_ago,
+        )
+
         self.store_event(
             data={
                 "event_id": "6" * 32,
@@ -423,20 +436,9 @@ class TagStorageTest(TestCase, SnubaTestCase):
             },
             project_id=self.proj1.id,
         )
-
-        tags = list(self.ts.get_release_tags([self.proj1.id], None, ["100"]))
-        assert tags[0].last_seen == one_second_ago
-        assert tags[0].first_seen == two_days_ago
-        assert tags[0].times_seen == 3
-
-        release = Release.objects.create(version="100", organization=self.organization)
-        ReleaseProjectEnvironment.objects.create(
-            release_id=release.id,
-            project_id=self.proj1.id,
-            environment_id=self.env3.id,
-            first_seen=one_day_ago,
+        tags = list(
+            self.ts.get_release_tags(self.proj1.organization_id, [self.proj1.id], None, ["100"])
         )
-        tags = list(self.ts.get_release_tags([self.proj1.id], None, ["100"]))
         assert tags[0].last_seen == one_second_ago
         assert tags[0].first_seen == one_day_ago
         assert (