diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2011-10-19 10:14:43 -0400 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2011-10-19 10:14:43 -0400 |
commit | c4154ca4d2b7b2a7bcc266d3f473ff1d247cac9f (patch) | |
tree | 6138db8063f0292037426e978311940a3d83b677 /src/lib/Server/Plugins/Packages/PackagesSources.py | |
parent | 826f385767ccf9f608fcfbe35e381a9dbc59db4b (diff) | |
download | bcfg2-c4154ca4d2b7b2a7bcc266d3f473ff1d247cac9f.tar.gz bcfg2-c4154ca4d2b7b2a7bcc266d3f473ff1d247cac9f.tar.bz2 bcfg2-c4154ca4d2b7b2a7bcc266d3f473ff1d247cac9f.zip |
Various Packages plugin fixes:
* Added bcfg2-yum-helper to offload Yum API calls to a short-lived
process. As absurd as this is, it appears to be the standard way to
get around Yum's atrocious memory handling (cf. yum-updatesd).
* Added SourceInitError for non-fatal errors instantiating new
sources.
* Fixed bug that caused all cached data to be removed on server
startup (reported by mikemccllstr on IRC).
* Fixed a number of overly aggressive caching issues.
* Fixed the way sources are loaded at server startup.
* Fixed handling of Yum package groups.
Diffstat (limited to 'src/lib/Server/Plugins/Packages/PackagesSources.py')
-rw-r--r-- | src/lib/Server/Plugins/Packages/PackagesSources.py | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/src/lib/Server/Plugins/Packages/PackagesSources.py b/src/lib/Server/Plugins/Packages/PackagesSources.py index 6d0b1d732..4fbccab30 100644 --- a/src/lib/Server/Plugins/Packages/PackagesSources.py +++ b/src/lib/Server/Plugins/Packages/PackagesSources.py @@ -3,10 +3,10 @@ import sys import lxml.etree import logging import Bcfg2.Server.Plugin +from Bcfg2.Server.Plugins.Packages.Source import SourceInitError logger = logging.getLogger("Packages") - class PackagesSources(Bcfg2.Server.Plugin.SingleXMLFileBacked, Bcfg2.Server.Plugin.StructFile): __identifier__ = None @@ -30,8 +30,19 @@ class PackagesSources(Bcfg2.Server.Plugin.SingleXMLFileBacked, # create cache directory if needed os.makedirs(self.cachepath) self.pkg_obj = packages + self.parsed = set() self.loaded = False + def HandleEvent(self, event=None): + Bcfg2.Server.Plugin.SingleXMLFileBacked.HandleEvent(self, event=event) + if event.filename != self.name: + self.parsed.add(os.path.basename(event.filename)) + + if sorted(list(self.parsed)) == sorted(self.extras): + logger.info("Reloading Packages plugin") + self.pkg_obj.Reload() + self.loaded = True + def Index(self): Bcfg2.Server.Plugin.SingleXMLFileBacked.Index(self) self.entries = [] @@ -40,9 +51,6 @@ class PackagesSources(Bcfg2.Server.Plugin.SingleXMLFileBacked, if source is not None: self.entries.append(source) - self.pkg_obj.Reload() - self.loaded = True - def source_from_xml(self, xsource): """ create a *Source object from its XML representation in sources.xml """ @@ -60,7 +68,20 @@ class PackagesSources(Bcfg2.Server.Plugin.SingleXMLFileBacked, logger.error("Packages: Unknown source type %s" % stype) return None - return cls(self.cachepath, xsource, self.config) + try: + source = cls(self.cachepath, xsource, self.config) + except SourceInitError: + err = sys.exc_info()[1] + logger.error("Packages: %s" % err) + source = None + + return source def __getitem__(self, key): return self.entries[key] + + def __repr__(self): + return "PackagesSources: %s" % repr(self.entries) + + def __str__(self): + return "PackagesSources: %s" % str(self.entries) |