James Antill wrote:
 Sometime recently yum-security in "list updates mode"[1] has started
causing backtraces and taking a huge amount of time.

 For those that don't know the way plugins exclude items frfom "list
updates" is to use the exclude_hook and call conduit.getPackages and the
conduit.delPackage for any that they don't want.

 The speed problem seems to be that conduit.delPackage() now takes about
a quarter of a second or so, combined with having to remove most/all of
the pacakges on the system.


 The traceback is due to the fact that yum-security just did:

  for pkg in conduit.getPackages():

...and this recurses into the function that calls the exclude plugins,
YumBase._getSacks(), and is protected from that being a problem by
doing:

        if self._pkgSack and thisrepo is None:

...but if you remove _all_ of the packages the above fails. This can be
fixed by just moving the getPackages to a variable before the for loop
like:

pkgs = conduit.getPackages()
for pkg in pkgs:

...however I fixed that and the speed problem by instead doing:

upds = conduit._base.doPackageLists(pkgnarrow='updates')
pkgs = upds.updates

...this feels a little hacky, but it takes the runtime on my machine
from about an hour to 5 seconds (so I feel a little justified :).
 Another way to go is if we could test if the package is an
update/installed etc, like:

pkgs = conduit.getPackages()
for pkg in pkgs:
   if <pkg isn't installed already>:
       # Do our normal work, incl. likely delPackage()

...but I don't think that's available at this point.

 Full patch against yum-utils is attached.

[1] Ie. yum list updates --security

I have added the patch.
Tim
_______________________________________________
Yum-devel mailing list
[email protected]
https://lists.dulug.duke.edu/mailman/listinfo/yum-devel

Reply via email to