Hi!

After doing several optimizations on the depsolver I think we got most of the easy stuff fixed. What now really needs to be done is removing all linear searches from the mytscheck code. Which can be found in:

 * _provideToPkg()
 * _checkInstall()
 * _checkRemove()
 * _requiredByPkg()

Look for "self.tsInfo.getMembersWithState(None," and "self.tsInfo.getMembersWithState(output_states =".

There are two possible solutions:

1. Build in memory hashes

Simply push all TS_INSTALL_STATES pkgs into a PackageSack and use it for searching. The PackageSack would have to be extended to keep its hashes uptodate (if build yet) so we don't need to rebuild them from scratch after every change.

2. Use the repositories

self.whatProvides and a still to implement self.whatRequires can be used to get a list of what pkgs might be of interest. They could then be filtered to those that are really in the transaction. This is very similar to the code already in place for the not yet deleted pkgs that are searched in the rpmdb and then filtered by the transaction. In fact _provideToPkg more or less contains all the code needed. It currently just has to do a linear search for the localinstall cases as these pkgs may not be found in the repositories. Some other places of the code also mix searches within the repository with linear search.

To make this work with local installs local pkgs have to be put into a PackagesSack to be able to search them. But as they are given once the PackageSack doesn't need to update its hashes. May be we can just join them to the regular repository using a MetaSack

I suggest to use option 2 as it uses less memory, doesn't touch unneeded data is comparably close to the current code and has proven to be fast enough.

I'd suggest to implement a whatProvides and whatProvides for the transaction that returns the matches from the pkgs going to be installed or being installed and not removed. Those would combine searches in the rpmdb and the repository and filter both (but in different ways) to the transactionInfo.
These methods will allow to simply _checkInstall and _checkRemove a lot.

OK, this is just a short wrap up. Feel free to ask questions or bug me on IRC.

I plan to start this as soon as we reach consensus that this is the way to go and the 3.2 branch is open.

Florian
_______________________________________________
Yum-devel mailing list
[email protected]
https://lists.dulug.duke.edu/mailman/listinfo/yum-devel

Reply via email to