Bug 1530081

Summary: repoclosure --best broken on multilib arches
Product: [Fedora] Fedora Reporter: Paul Howarth <paul>
Component: dnf-plugins-coreAssignee: Marek Blaha <mblaha>
Status: CLOSED RAWHIDE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 27CC: dmach, jmracek, packaging-team-maint, rpm-software-management, vmukhame
Target Milestone: ---Keywords: Triaged
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2018-06-28 08:33:26 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Paul Howarth 2018-01-01 19:42:57 UTC
Description of problem:
Since upgrading from Fedora 25 to Fedora 27 I have an issue running repoquery against multilib x86_64 repository sets with --best. The set of packages checked against now only includes one of the multilib arches instead of both.

Version-Release number of selected component (if applicable):
dnf-plugins-core-2.1.5-1.fc27.noarch

How reproducible:
Pretty easy.

Steps to Reproduce:
1. Use a Fedora 27 x86_64 system
2. Run "dnf repoclosure --check=updates --best"

Actual results:
Lots of errors about missing libraries, among other things, because only one of glibc.x86_64 and glibc.i686 will be checked against.
e.g.:
package: 389-ds-base-1.3.7.8-1.fc27.x86_64 from updates
  unresolved deps:
    libdb-5.3.so()(64bit)
    libdl.so.2(GLIBC_2.2.5)(64bit)
    libpthread.so.0(GLIBC_2.2.5)(64bit)
    libc.so.6(GLIBC_2.17)(64bit)
    libnspr4.so()(64bit)
    libnss3.so()(64bit)
    libnss3.so(NSS_3.9.2)(64bit)
    libns-dshttpd-1.3.7.8.so()(64bit)
    libssl3.so(NSS_3.14)(64bit)
    libssl3.so(NSS_3.2)(64bit)
    libssl3.so(NSS_3.7.4)(64bit)
    libcrypt.so.1()(64bit)
    libcrypt.so.1(GLIBC_2.2.5)(64bit)
    libdl.so.2()(64bit)
    libcom_err.so.2()(64bit)
    libldap_r-2.4.so.2()(64bit)
    libnss3.so(NSS_3.3)(64bit)
    libnss3.so(NSS_3.2)(64bit)
    liblber-2.4.so.2()(64bit)
    libldap-2.4.so.2()(64bit)
    libk5crypto.so.3()(64bit)
    libplc4.so()(64bit)
    libplds4.so()(64bit)
    libkrb5.so.3()(64bit)
    libssl3.so()(64bit)
    libpthread.so.0()(64bit)
    libnss3.so(NSS_3.12)(64bit)
    libnss3.so(NSS_3.4)(64bit)
    libsasl2.so.3()(64bit)

Expected results:
A much smaller list, consisting only of actual broken dependencies.

Additional info:
I believe this is due to an underlying change in the dnf query filter API, in which query.filter(latest=True) now only picks the one latest version of a package across all repos and arches (arbitrarily picking one arch when there are multiple with the same NEVR). The previous behavior can be obtained by using query.filter(latest_per_arch=True), which fixes this problem.

Whilst debugging this issue I also came across another change. It appears that query.latest() now behaves the same as query.filter(latest_per_arch=True), which finds the latest package per arch across all repos, whereas it used to find the latest package per arch in each repo. The result of this is that repoclosure --newest and repoclosure --best now do the same thing.

Comment 1 Jaroslav Mracek 2018-06-28 08:33:26 UTC
The issue is solved by dnf-plugins-core-3.0.1-1 that was released into rawhide.