[PATCH] Properly retry package downloads (#924860)

Martin Kolman mkolman at redhat.com
Wed Feb 12 09:59:13 UTC 2014


On Wed, 2014-02-12 at 07:39 +0100, Vratislav Podzimek wrote:
> On Tue, 2014-02-11 at 21:33 +0100, Martin Kolman wrote:
> > There are basically two cases where package download can fail:
> > - when YUM is populating the transaction
> >   (this actually just checks the file exists)
> > - when the transaction is started and packages are downloaded and
> >   installed
> > 
> > Previously Anaconda did not attempt to retry the first one at all
> > and made an unlimited number of attempts in the second one.
> > 
> > This has been changed and Anaconda now does 10 retries separated
> > by a pause that progressively grows from 0.5 to 256 seconds for
> > the final wait before giving up. With this mechanism it should
> > be possible to successfully install even with a very shaky connection.
> > 
> > Signed-off-by: Martin Kolman <mkolman at redhat.com>
> > ---
> >  scripts/anaconda-yum | 105 +++++++++++++++++++++++++++++++++++++++++----------
> >  1 file changed, 86 insertions(+), 19 deletions(-)
> > 
> > diff --git a/scripts/anaconda-yum b/scripts/anaconda-yum
> > index 12a562f..259b0b7 100755
> > --- a/scripts/anaconda-yum
> > +++ b/scripts/anaconda-yum
> > @@ -22,6 +22,7 @@ import logging
> >  import os
> >  import sys
> >  import argparse
> > +import time
> >  import rpm
> >  import rpmUtils
> >  import yum
> > @@ -29,6 +30,19 @@ from urlgrabber.grabber import URLGrabError
> >  
> >  YUM_PLUGINS = ["fastestmirror", "langpacks"]
> >  
> > +MAX_DOWNLOAD_RETRIES = 10
> > +
> > +
> > +def get_retry_delay(retry_number):
> > +    """ The retry delay start short and gets longer as the
> > +        number of retries increases, for 10 retries, the delay increases
> > +        from 0.5 to 256 seconds for the final delay before giving up
> > +
> > +        :param int retry_number: retry counter
> > +        :returns float: time to wait in seconds
> > +    """
> > +    return 0.25*(2**retry_number)
> It's a bit out of the scope of this patch, but maybe this function could
> be turned into a generator and placed e.g. to pyanaconda/iutil.py so
> that it is reusable in other parts of the codebase as well (in future).
Oh, right, that sounds like a nice idea - I'll change it for the not yet
pushed version for master.



More information about the anaconda-patches mailing list