[Yum-devel] [PATCH] Speedup rpmdb.pkglist, roughly .35 of a second to .02.

seth vidal skvidal at fedoraproject.org
Thu Oct 7 18:14:08 UTC 2010


On Mon, 2010-10-04 at 15:55 -0400, James Antill wrote:
> This is roughly 15-20% of "list updates" time. Dito. yumex.
> 
>  We won't save any time here for an actual transaction, because we need
> to load the packages anyway. We could convert this data into packages,
> with more work ... and that might be worth it, but it's significantly
> bigger.
> ---
>  yum/rpmsack.py |   10 +++++++++-
>  1 files changed, 9 insertions(+), 1 deletions(-)
> 
> diff --git a/yum/rpmsack.py b/yum/rpmsack.py
> index 52e771b..1f44706 100644
> --- a/yum/rpmsack.py
> +++ b/yum/rpmsack.py
> @@ -204,6 +204,11 @@ class RPMDBPackageSack(PackageSackBase):
>          Returns a list of package tuples.
>          '''
>          if not self._simple_pkgtup_list:
> +            csumpkgtups = self.preloadPackageChecksums(load_packages=False)
> +            if csumpkgtups is not None:
> +                self._simple_pkgtup_list = csumpkgtups.keys()
> +
> +        if not self._simple_pkgtup_list:
>              for (hdr, mi) in self._all_packages():
>                  self._simple_pkgtup_list.append(self._hdr2pkgTuple(hdr))
>              
> @@ -880,7 +885,7 @@ class RPMDBPackageSack(PackageSackBase):
>          os.rename(self._cachedir + '/file-requires.tmp',
>                    self._cachedir + '/file-requires')
>  
> -    def preloadPackageChecksums(self):
> +    def preloadPackageChecksums(self, load_packages=True):
>          """ As simpleVersion() et. al. requires it, we "cache" this yumdb data
>              as part of our rpmdb cache. We cache it with rpmdb data, even
>              though someone _could_ use yumdb to alter it without changing the
> @@ -922,6 +927,9 @@ class RPMDBPackageSack(PackageSackBase):
>              self._deal_with_bad_rpmdbcache("pkg checksums")
>              return
>  
> +        if not load_packages:
> +             return checksum_data
> +
>          for pkgtup in checksum_data:
>              (n, a, e, v, r) = pkgtup
>              pkg = self.searchNevra(n, e, v, r, a)


ACK - but I reserve the right to revert all of the 'make yumdb data
faster' patches in the future due to nuking where yumdb stores data.

-sv




More information about the Yum-devel mailing list