Bug 236478
| Summary: | Pup handles network outages badly | ||
|---|---|---|---|
| Product: | [Fedora] Fedora | Reporter: | Jens Knutson <jensk.maps> |
| Component: | pirut | Assignee: | Jeremy Katz <katzj> |
| Status: | CLOSED RAWHIDE | QA Contact: | |
| Severity: | medium | Docs Contact: | |
| Priority: | medium | ||
| Version: | rawhide | CC: | michael_e_brown |
| Target Milestone: | --- | ||
| Target Release: | --- | ||
| Hardware: | All | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2007-04-30 20:53:02 UTC | Type: | --- |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
| Bug Depends On: | |||
| Bug Blocks: | 150226 | ||
Hrmm... it looks like this is because the dellsysid plugin does repo initialization really early and without any explicit request for the setup. Michael -- is there a reason that the plugin has to set up repos in its init hook? I'd look, but CVS seems down at the moment. I have asked for a 'yumvar' hook. This would vastly simplify my plugin, and eliminate the need for 'getRepos()'. With the current yum design, I *must* do this loop in order to update the cached copy of 'yumvars' that is held in each repo. I also must manually fixup the mirrorlist because my plugin runs too late. This all goes away if I get a 'yumvars' plugin hook, as described on the mailing list. If you can suggest an alternate way, I would be happy to also change the current
code. Current code does this:
repos = conduit.getRepos()
for repo in repos.findRepos('*'):
repo.yumvar.update(conf.yumvar)
# re-process mirrorlist (it isnt varReplaced like baseUrl is)
for repo in repos.findRepos('*'):
try:
# yum 3.0+
if repo.mirrorlist:
for (key, value) in conf.yumvar.items():
repo.mirrorlist = repo.mirrorlist.replace("$%s" % key, value)
except AttributeError:
pass
try:
# yum 2.4.3
if repo.mirrorlistfn:
for (key, value) in conf.yumvar.items():
repo.mirrorlistfn = repo.mirrorlistfn.replace("$%s" % key,
value)
except AttributeError:
pass
Added a hook for the plugin which should let the plugin do its setup differently and thus not set up repos before expected. |
Description of problem: Pup's handling of network unavailability is poor. When trying to run updates today, I didn't realize my network cable was unplugged, and Pup gave me the following error when I tried running it: Component: Software Updater Summary: TB429a3a99 yumRepo.py:593:setup:RepoError: Cannot open/read repomd.xml file for repository: extras-development Traceback (most recent call last): File "/usr/sbin/pup", line 647, in <module> main() File "/usr/sbin/pup", line 640, in main pup = PackageUpdater(not options.autoapply) File "/usr/sbin/pup", line 88, in __init__ GraphicalYumBase.__init__(self, False) File "/usr/lib/python2.5/site-packages/pirut/__init__.py", line 120, in __init__ plugin_types=(yum.plugins.TYPE_CORE,)) File "/usr/lib/python2.5/site-packages/yum/__init__.py", line 103, in doConfigSetup errorlevel=errorlevel) File "/usr/lib/python2.5/site-packages/yum/__init__.py", line 158, in _getConfig self.plugins.run('init') File "/usr/lib/python2.5/site-packages/yum/plugins.py", line 162, in run func(conduitcls(self, self.base, conf, **kwargs)) File "/usr/lib/yum-plugins/dellsysidplugin.py", line 40, in init_hook repos = conduit.getRepos() File "/usr/lib/python2.5/site-packages/yum/plugins.py", line 426, in getRepos return self._base.repos File "/usr/lib/python2.5/site-packages/yum/__init__.py", line 493, in <lambda> repos = property(fget=lambda self: self._getRepos(), File "/usr/lib/python2.5/site-packages/yum/__init__.py", line 335, in _getRepos repo.setup(self.conf.cache, self.mediagrabber) File "/usr/lib/python2.5/site-packages/yum/yumRepo.py", line 593, in setup raise Errors.RepoError, ('Cannot open/read repomd.xml file for repository: %s' % self) RepoError: Cannot open/read repomd.xml file for repository: extras-development Local variables in innermost frame: self: extras-development cache: 0 e: failure: repodata/repomd.xml from extras-development: [Errno 256] No more mirrors to try. mediafunc: None Version-Release number of selected component (if applicable): 1.3.6-1 How reproducible: 100% Steps to Reproduce: 1.Disconnect from the network 2.Run pup Actual results: Get user-worthless error message Expected results: A user-useful error message saying, "Your network connection appears to be offline - updates cannot be made while offline" or some such. Additional info: This is just a cheerleader aside, but it seems like Pirut and Pup get a lot of mud slung at them, so I wanted to say that the UNBELIEVABLE speed increases and actually-updating-UI in the recent pirut releases have been awesome. You guys rock! :)