Skip to content

Commit 4d61a35

Browse files
Alternative errata package processing for erratas created by us (#1115)
Only look for packages in ALBS and not in production Fixes: AlmaLinux/build-system#378 Fixes: AlmaLinux/build-system#415
1 parent 116d96d commit 4d61a35

File tree

2 files changed

+41
-22
lines changed

2 files changed

+41
-22
lines changed

alws/crud/errata.py

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -672,8 +672,9 @@ async def update_errata_record(
672672
async def get_matching_albs_packages(
673673
db: AsyncSession,
674674
errata_package: models.NewErrataPackage,
675-
prod_repos_cache,
676-
module,
675+
prod_repos_cache: typing.Dict,
676+
module: Optional[str] = None,
677+
build_id: Optional[int] = None,
677678
) -> Tuple[List[models.NewErrataToALBSPackage], dict]:
678679
package_type = {}
679680
items_to_insert = []
@@ -723,13 +724,19 @@ async def get_matching_albs_packages(
723724
# inside the ALBS, this is, build_task_artifacts.
724725
name_query = f"{errata_package.name}-{errata_package.version}"
725726

727+
conditions = [
728+
models.BuildTaskArtifact.type == "rpm",
729+
models.BuildTaskArtifact.name.startswith(name_query),
730+
]
731+
if build_id:
732+
conditions.append(
733+
models.BuildTask.build_id == build_id
734+
)
726735
query = (
727736
select(models.BuildTaskArtifact)
737+
.join(models.BuildTaskArtifact.build_task)
728738
.where(
729-
and_(
730-
models.BuildTaskArtifact.type == "rpm",
731-
models.BuildTaskArtifact.name.startswith(name_query),
732-
)
739+
and_(*conditions)
733740
)
734741
.options(
735742
selectinload(models.BuildTaskArtifact.build_task),
@@ -739,13 +746,15 @@ async def get_matching_albs_packages(
739746
# only packages that belong to the right module:stream
740747
if module:
741748
module_name, module_stream = module.split(":")
749+
filters = [
750+
models.RpmModule.name == module_name,
751+
models.RpmModule.stream == module_stream,
752+
]
753+
742754
query = (
743755
query.join(models.BuildTaskArtifact.build_task)
744756
.join(models.BuildTask.rpm_modules)
745-
.filter(
746-
models.RpmModule.name == module_name,
747-
models.RpmModule.stream == module_stream,
748-
)
757+
.filter(*filters)
749758
)
750759

751760
result = (await db.execute(query)).scalars().all()
@@ -880,15 +889,18 @@ async def process_new_errata_packages(
880889
db_errata: models.NewErrataRecord,
881890
platform: models.Platform,
882891
):
883-
packages = []
892+
db_packages = []
884893
pkg_types = []
894+
prod_repos_cache = {}
895+
885896
search_params = prepare_search_params(errata)
886-
prod_repos_cache = await load_platform_packages(
887-
platform,
888-
search_params,
889-
False,
890-
db_errata.module,
891-
)
897+
if not errata.is_issued_by_almalinux:
898+
prod_repos_cache = await load_platform_packages(
899+
platform,
900+
search_params,
901+
False,
902+
db_errata.module,
903+
)
892904
for package in errata.packages:
893905
# Just in case
894906
if package.arch == "src":
@@ -904,14 +916,14 @@ async def process_new_errata_packages(
904916
reboot_suggested=False,
905917
)
906918
db_errata.packages.append(db_package)
907-
packages.append(db_package)
919+
db_packages.append(db_package)
908920
# Create ErrataToAlbsPackages
909921
matching_packages, pkg_type = await get_matching_albs_packages(
910-
db, db_package, prod_repos_cache, db_errata.module
922+
db, db_package, prod_repos_cache, db_errata.module, package.build_id
911923
)
912-
packages.extend(matching_packages)
924+
db_packages.extend(matching_packages)
913925
pkg_types.append(pkg_type)
914-
return packages, pkg_types
926+
return db_packages, pkg_types
915927

916928

917929
async def create_new_errata_record(errata: typing.Dict):

alws/schemas/errata_schema.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import datetime
2+
import re
23
from typing import Any, List, Optional
34

4-
from pydantic import BaseModel, field_validator
5+
from pydantic import BaseModel, field_validator, computed_field
56

67
from alws.constants import ErrataReleaseStatus, ErrataPackageStatus
78

@@ -43,6 +44,7 @@ class BaseErrataPackage(BaseModel):
4344
epoch: int
4445
arch: str
4546
reboot_suggested: bool
47+
build_id: Optional[int] = None
4648

4749
class Config:
4850
from_attributes = True
@@ -101,6 +103,11 @@ class BaseErrataRecord(BaseModel):
101103
references: List[BaseErrataReference]
102104
packages: List[BaseErrataPackage]
103105

106+
@computed_field
107+
@property
108+
def is_issued_by_almalinux(self) -> bool:
109+
return bool(re.search(r"AL[BES]A-\d{4}:A", self.id))
110+
104111

105112
class ErrataRecord(BaseErrataRecord):
106113
references: List[ErrataReference]

0 commit comments

Comments
 (0)