Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions apollo/migrations/20260318000000_add_updateinfo_perf_indexes.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
-- migrate:up
create index advisory_packages_advisory_repo_product_idx
on advisory_packages (advisory_id, repo_name, supported_product_id);

create index advisory_affected_products_spid_major_arch_idx
on advisory_affected_products (supported_product_id, major_version, arch);


-- migrate:down
drop index if exists advisory_packages_advisory_repo_product_idx;
drop index if exists advisory_affected_products_spid_major_arch_idx;
14 changes: 14 additions & 0 deletions apollo/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -1263,6 +1263,13 @@ CREATE INDEX advisory_affected_products_namex ON public.advisory_affected_produc
CREATE INDEX advisory_affected_products_supported_product_idx ON public.advisory_affected_products USING btree (supported_product_id);


--
-- Name: advisory_affected_products_spid_major_arch_idx; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX advisory_affected_products_spid_major_arch_idx ON public.advisory_affected_products USING btree (supported_product_id, major_version, arch);


--
-- Name: advisory_affected_products_variantx; Type: INDEX; Schema: public; Owner: -
--
Expand Down Expand Up @@ -1298,6 +1305,13 @@ CREATE INDEX advisory_fixes_ticket_id ON public.advisory_fixes USING btree (tick
CREATE INDEX advisory_packages_advisory_id ON public.advisory_packages USING btree (advisory_id);


--
-- Name: advisory_packages_advisory_repo_product_idx; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX advisory_packages_advisory_repo_product_idx ON public.advisory_packages USING btree (advisory_id, repo_name, supported_product_id);


--
-- Name: advisory_packages_checksumx; Type: INDEX; Schema: public; Owner: -
--
Expand Down
11 changes: 9 additions & 2 deletions apollo/server/routes/api_updateinfo.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
from fastapi import APIRouter, Response
from slugify import slugify

from apollo.db import AdvisoryAffectedProduct, SupportedProduct
from apollo.db import AdvisoryAffectedProduct, AdvisoryPackage, SupportedProduct
from tortoise.exceptions import DoesNotExist
from tortoise.queryset import Prefetch
from apollo.server.settings import COMPANY_NAME, MANAGING_EDITOR, UI_URL, get_setting
from apollo.server.validation import Architecture

Expand Down Expand Up @@ -451,7 +452,13 @@ async def get_updateinfo_v2(
"advisory",
"advisory__cves",
"advisory__fixes",
"advisory__packages",
Prefetch(
"advisory__packages",
queryset=AdvisoryPackage.filter(
repo_name=repo,
supported_product_id=supported_product.id,
),
),
"supported_product",
).all()

Expand Down
9 changes: 6 additions & 3 deletions apollo/tests/test_api_updateinfo.py
Original file line number Diff line number Diff line change
Expand Up @@ -475,7 +475,8 @@ def test_get_updateinfo_with_arch_filter(self, mock_aap, mock_get_setting):
@patch("apollo.server.routes.api_updateinfo.get_setting")
@patch("apollo.server.routes.api_updateinfo.SupportedProduct")
@patch("apollo.server.routes.api_updateinfo.AdvisoryAffectedProduct")
def test_get_updateinfo_v2_success(self, mock_aap, mock_sp, mock_get_setting):
@patch("apollo.server.routes.api_updateinfo.AdvisoryPackage")
def test_get_updateinfo_v2_success(self, mock_ap, mock_aap, mock_sp, mock_get_setting):
"""V2 endpoint returns valid XML with proper collection naming"""
mock_get_setting.side_effect = self._mock_get_setting

Expand Down Expand Up @@ -526,7 +527,8 @@ def test_get_updateinfo_v2_invalid_architecture(self, mock_sp):

@patch("apollo.server.routes.api_updateinfo.SupportedProduct")
@patch("apollo.server.routes.api_updateinfo.AdvisoryAffectedProduct")
def test_get_updateinfo_v2_no_advisories(self, mock_aap, mock_sp):
@patch("apollo.server.routes.api_updateinfo.AdvisoryPackage")
def test_get_updateinfo_v2_no_advisories(self, mock_ap, mock_aap, mock_sp):
"""V2 endpoint raises 404 when no advisories found"""
mock_product = Mock()
mock_product.id = 1
Expand All @@ -545,7 +547,8 @@ def test_get_updateinfo_v2_no_advisories(self, mock_aap, mock_sp):
@patch("apollo.server.routes.api_updateinfo.get_setting")
@patch("apollo.server.routes.api_updateinfo.SupportedProduct")
@patch("apollo.server.routes.api_updateinfo.AdvisoryAffectedProduct")
def test_get_updateinfo_v2_with_minor_version(self, mock_aap, mock_sp, mock_get_setting):
@patch("apollo.server.routes.api_updateinfo.AdvisoryPackage")
def test_get_updateinfo_v2_with_minor_version(self, mock_ap, mock_aap, mock_sp, mock_get_setting):
"""V2 endpoint filters by optional minor_version parameter"""
mock_get_setting.side_effect = self._mock_get_setting

Expand Down
Loading