Project

Profile

Help

Issue #5951

Updated by ipanova@redhat.com over 1 year ago

When multi-repo errata are used, publishing a repo may skip with "Repository content has not changed since last publish", even if erratum units in the repo have been changed since last publish.



## Steps to reproduce



In summary: put an advisory into multiple repos, publish the repos, then update the advisory via any single repo and publish repos again. All repos other than the one used for the update will skip publish, even though the erratum unit has actually changed.



Detailed steps:



0\. Ensure at least two RPM repos exist



e.g., assuming default dev-env setup:



~~~

pulp-admin rpm repo create --repo-id zoo2

~~~



1\. Create new erratum in repo 1



Upload an RPM for the advisory:



~~~

pulp-admin rpm repo uploads rpm --repo-id zoo --file devel/pulp_rpm/plugins/test/data/walrus-5.21-1.noarch.rpm

~~~



Then the advisory metadata:



~~~

echo walrus,5.21,1,0,noarch,walrus-5.21-1.noarch.rpm,e837a635cc99f967a70f34b268baa52e0f412c1502e08e924ff5b09f1f9573f2,sha256,walrus-5.21-1.src.rpm > walrus-pkglist.csv

pulp-admin rpm repo uploads erratum --repo-id zoo --erratum-id RHBA-4020:1234 --title test --description test --version 1 --release 1 --type bugfix --status test --updated 2019-01-01 --issued test --from test --pkglist-csv walrus-pkglist.csv

~~~



2\. Copy content into repo 2



~~~

pulp-admin rpm repo copy all --from-repo-id zoo --to-repo-id zoo2

~~~



3\. Publish repos



~~~

pulp-admin rpm repo publish run --repo-id zoo

pulp-admin rpm repo publish run --repo-id zoo2

~~~



4\. Verify erratum appears in repodata for both repos



Example:



~~~

$ sudo /bin/sh -c 'cd /var/lib/pulp/published/yum/master/yum_distributor/zoo/*/repodata; zcat $(egrep --only-matching "[^/]+updateinfo.xml.gz" ./repomd.xml)'

<?xml version="1.0" encoding="utf-8"?>

<updates>

<update status="test" from="test" version="1" type="bugfix">

<id>RHBA-4020:1234</id>

<issued date="test" />

<title>test</title>

<release>1</release>

<pushcount>1</pushcount>

<description>test</description>

<updated date="2019-01-01" />

<references />

<pkglist>

<collection short="zoo_0_default">

<name>zoo_0_default</name>

<package src="walrus-5.21-1.src.rpm" name="walrus" epoch="0" version="5.21" release="1" arch="noarch">

<filename>walrus-5.21-1.noarch.rpm</filename>

<sum type="sha256">e837a635cc99f967a70f34b268baa52e0f412c1502e08e924ff5b09f1f9573f2</sum>

</package>

</collection>

</pkglist>

</update>

</updates>



$ sudo /bin/sh -c 'cd /var/lib/pulp/published/yum/master/yum_distributor/zoo2/*/repodata; zcat $(egrep --only-matching "[^/]+updateinfo.xml.gz" ./repomd.xml)'

<?xml version="1.0" encoding="utf-8"?>

<updates>

<update status="test" from="test" version="1" type="bugfix">

<id>RHBA-4020:1234</id>

<issued date="test" />

<title>test</title>

<release>1</release>

<pushcount>1</pushcount>

<description>test</description>

<updated date="2019-01-01" />

<references />

<pkglist>

<collection short="zoo2_0_default">

<name>zoo2_0_default</name>

<package src="walrus-5.21-1.src.rpm" name="walrus" epoch="0" version="5.21" release="1" arch="noarch">

<filename>walrus-5.21-1.noarch.rpm</filename>

<sum type="sha256">e837a635cc99f967a70f34b268baa52e0f412c1502e08e924ff5b09f1f9573f2</sum>

</package>

</collection>

</pkglist>

</update>

</updates>

~~~



5\. Modify the erratum via repo 1



Here, description, version and updated are being changed.



~~~

pulp-admin rpm repo uploads erratum --repo-id zoo --erratum-id RHBA-4020:1234 --title test --description UPDATED --version 2 --release 1 --type bugfix --status test --updated 2020-01-01 --issued test --from test --pkglist-csv walrus-pkglist.csv

~~~



6\. Publish the repos again



~~~

pulp-admin rpm repo publish run --repo-id zoo

pulp-admin rpm repo publish run --repo-id zoo2

~~~



7\. Check repodata again



~~~

$ sudo /bin/sh -c 'cd /var/lib/pulp/published/yum/master/yum_distributor/zoo/*/repodata; zcat $(egrep --only-matching "[^/]+updateinfo.xml.gz" ./repomd.xml)'

<?xml version="1.0" encoding="utf-8"?>

<updates>

<update status="test" from="test" version="2" type="bugfix">

<id>RHBA-4020:1234</id>

<issued date="test" />

<title>test</title>

<release>1</release>

<pushcount>1</pushcount>

<description>UPDATED</description>

<updated date="2020-01-01" />

<references />

<pkglist>

<collection short="zoo_0_default">

<name>zoo_0_default</name>

<package src="walrus-5.21-1.src.rpm" name="walrus" epoch="0" version="5.21" release="1" arch="noarch">

<filename>walrus-5.21-1.noarch.rpm</filename>

<sum type="sha256">e837a635cc99f967a70f34b268baa52e0f412c1502e08e924ff5b09f1f9573f2</sum>

</package>

</collection>

</pkglist>

</update>

</updates>



$ sudo /bin/sh -c 'cd /var/lib/pulp/published/yum/master/yum_distributor/zoo2/*/repodata; zcat $(egrep --only-matching "[^/]+updateinfo.xml.gz" ./repomd.xml)'

<?xml version="1.0" encoding="utf-8"?>

<updates>

<update status="test" from="test" version="1" type="bugfix">

<id>RHBA-4020:1234</id>

<issued date="test" />

<title>test</title>

<release>1</release>

<pushcount>1</pushcount>

<description>test</description>

<updated date="2019-01-01" />

<references />

<pkglist>

<collection short="zoo2_0_default">

<name>zoo2_0_default</name>

<package src="walrus-5.21-1.src.rpm" name="walrus" epoch="0" version="5.21" release="1" arch="noarch">

<filename>walrus-5.21-1.noarch.rpm</filename>

<sum type="sha256">e837a635cc99f967a70f34b268baa52e0f412c1502e08e924ff5b09f1f9573f2</sum>

</package>

</collection>

</pkglist>

</update>

</updates>

~~~



## Actual behavior



updateinfo is only up to date in one of the published repos, even though publish was requested on both repos. Pulp skips publishing of the second repo.



## Expected behavior



Neither publish is skipped, updateinfo is up to date in both published repos.



## Additional info



For the upload use-case, it's possible for clients to work around this by explicitly importing the updated erratum into every repo containing the erratum (i.e. repeat step 5 for each repo containing the erratum). Although only the first import actually updates the units, the others will still reset last_unit_added on each repo, avoiding skipped publishes.



It seems possible that syncing would have the same problem (not tested).



Tested on current 2-master: bb9195f1dd30f51ed973024cbed8e087205749fc (pulp), cc35af04da2b9725db49290ebbc3253965951abf (pulp_rpm)

Back