On Wed, 2012-03-28 at 17:06 +0200, Zdeněk Pavlas wrote:
> Metadata are downloaded in parallel just before postreposetup.
> This implements the reverting behavior.
> ---
> yum/repos.py | 26 ++++++++++++++++++++++++++
> 1 files changed, 26 insertions(+), 0 deletions(-)
>
> diff --git a/yum/repos.py b/yum/repos.py
> index 3793bad..9679974 100644
> --- a/yum/repos.py
> +++ b/yum/repos.py
> @@ -22,6 +22,7 @@ import misc
>
> import Errors
> from packageSack import MetaSack
> +import urlgrabber.grabber
>
> from weakref import proxy as weakref
>
> @@ -67,6 +68,30 @@ class RepoStorage:
> self._cache_enabled_repos = []
> self.quick_enable_disable = {}
>
> + def retrievAllMD(self):
> + """ Download metadata for all enabled repositories,
> + based on mdpolicy.
> + """
> +
> + if not hasattr(urlgrabber.grabber, 'parallel_wait'):
> + return
> + repos = []
> + for repo in self.listEnabled():
> + if repo.async and repo._commonLoadRepoXML(repo):
> + mdtypes = repo._mdpolicy2mdtypes()
> + downloading = repo._commonRetrieveDataMD_list(mdtypes)
> + repos.append([repo, downloading, False])
> + def failfunc(obj, r=repos[-1]):
> + r[2] = True
> + for (ndata, nmdtype) in downloading:
> + repo._retrieveMD(nmdtype, async=True, failfunc=failfunc)
> + urlgrabber.grabber.parallel_wait()
> + for repo, downloading, error in repos:
> + if error: # some MD failed?
> + repo._revertOldRepoXML()
> + else:
> + repo._commonRetrieveDataMD_done(downloading)
> +
> def doSetup(self, thisrepo = None):
>
> self.ayum.plugins.run('prereposetup')
> @@ -89,6 +114,7 @@ class RepoStorage:
> self.disableRepo(repo.id)
>
> self._setup = True
> + self.retrievAllMD()
ACK.
I'm not sure doSetup() is the best place for this, it kind of feels
wrong in that I thought there were code paths that ran doSetup which
didn't want the metadata downloading ... but a quick test shows that it
isn't triggered on a plain repos.listEnabled(), so I can't think of how
you'd want more than that but not to have the MD downloading.
> self.ayum.plugins.run('postreposetup')
>
> def __str__(self):
_______________________________________________
Yum-devel mailing list
[email protected]
http://lists.baseurl.org/mailman/listinfo/yum-devel