Ack. On Thu, 2012-02-09 at 13:44 +0100, Martin Gracik wrote: > Before displaying the error dialog, and waiting for user > interaction, retry the download for a few times. > This helps during some WAN install errors. > --- > constants.py | 4 ++++ > yuminstall.py | 38 ++++++++++++++++++++++++-------------- > 2 files changed, 28 insertions(+), 14 deletions(-) > > diff --git a/constants.py b/constants.py > index 7455322..5ccc0f6 100644 > --- a/constants.py > +++ b/constants.py > @@ -89,3 +89,7 @@ DD_FIRMWARE = "/tmp/DD/lib/firmware" > DD_RPMS = "/tmp/DD-*" > > TRANSLATIONS_UPDATE_DIR="/tmp/updates/po" > + > +# number of retries before displaying an error dialog > +YUM_DOWNLOAD_RETRIES = 3 > +YUM_DOWNLOAD_DELAY = 3 > diff --git a/yuminstall.py b/yuminstall.py > index 890ed83..e935a3f 100644 > --- a/yuminstall.py > +++ b/yuminstall.py > @@ -173,16 +173,18 @@ class AnacondaCallback: > self.instLog.flush() > self.openfile = None > > + trynumber = 0 > while self.openfile is None: > + trynumber += 1 > try: > fn = repo.getPackage(po) > > f = open(fn, 'r') > self.openfile = f > except yum.Errors.NoMoreMirrorsRepoError: > - self.ayum._handleFailure(po) > + self.ayum._handleFailure(po, trynumber) > except IOError: > - self.ayum._handleFailure(po) > + self.ayum._handleFailure(po, trynumber) > except yum.Errors.RepoError, e: > continue > self.inProgressPo = po > @@ -906,19 +908,21 @@ class AnacondaYum(YumSorter): > log.warning("failed to clean /boot/upgrade") > > def downloadHeader(self, po): > + trynumber = 0 > while True: > # retrying version of download header > + trynumber += 1 > try: > YumSorter.downloadHeader(self, po) > break > except yum.Errors.NoMoreMirrorsRepoError: > - self._handleFailure(po) > + self._handleFailure(po, trynumber) > except IOError: > - self._handleFailure(po) > + self._handleFailure(po, trynumber) > except yum.Errors.RepoError, e: > continue > > - def _handleFailure(self, package): > + def _handleFailure(self, package, trynumber=YUM_DOWNLOAD_RETRIES): > if not self.isodir and self.currentMedia: > buttons = [_("Re_boot"), _("_Eject")] > else: > @@ -932,15 +936,21 @@ class AnacondaYum(YumSorter): > > urlgrabber.grabber.reset_curl_obj() > > - rc = self.anaconda.intf.messageWindow(_("Error"), > - _("The file %s cannot be opened. This is due to a missing " > - "file, a corrupt package or corrupt media. Please " > - "verify your installation source.\n\n" > - "If you exit, your system will be left in an inconsistent " > - "state that will likely require reinstallation.\n\n") % > - (pkgFile,), > - type="custom", custom_icon="error", > - custom_buttons=buttons) > + # only show the retry window after 3 tries > + if trynumber < YUM_DOWNLOAD_RETRIES: > + log.warning('package download failure, retrying automatically') > + time.sleep(YUM_DOWNLOAD_DELAY * trynumber) > + rc = 1 > + else: > + rc = self.anaconda.intf.messageWindow(_("Error"), > + _("The file %s cannot be opened. This is due to a missing " > + "file, a corrupt package or corrupt media. Please " > + "verify your installation source.\n\n" > + "If you exit, your system will be left in an inconsistent " > + "state that will likely require reinstallation.\n\n") % > + (pkgFile,), > + type="custom", custom_icon="error", > + custom_buttons=buttons) > > if rc == 0: > sys.exit(0) -- Vratislav Podzimek Anaconda Rider | Red Hat, Inc. | Brno - Czech Republic _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list