summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNarayan Desai <desai@mcs.anl.gov>2009-06-19 21:03:03 +0000
committerNarayan Desai <desai@mcs.anl.gov>2009-06-19 21:03:03 +0000
commit148aba1a51fc096ba9d76065d78df39f44095377 (patch)
tree95ef88836fd210eaf893739645fb827120ceb2f4
parentac469d9514d491f7e9583504ddb1fe1282111275 (diff)
downloadbcfg2-148aba1a51fc096ba9d76065d78df39f44095377.tar.gz
bcfg2-148aba1a51fc096ba9d76065d78df39f44095377.tar.bz2
bcfg2-148aba1a51fc096ba9d76065d78df39f44095377.zip
Packages: add parse-caching support for YumSources
This commit caches the result of startup parsing, reducing startup time for YumSources. bcfg2-info startup time on my repo was reduced by 60%. git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@5285 ce84e21b-d406-0410-9b95-82705330c041
-rw-r--r--src/lib/Server/Plugins/Packages.py7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/lib/Server/Plugins/Packages.py b/src/lib/Server/Plugins/Packages.py
index b4bc01d2c..7ed28b8b1 100644
--- a/src/lib/Server/Plugins/Packages.py
+++ b/src/lib/Server/Plugins/Packages.py
@@ -172,7 +172,9 @@ class YUMSource(Source):
cache.close()
def load_state(self):
- data = cPickle.loads(file())
+ data = file(self.cachefile)
+ (self.packages, self.deps, self.provides, \
+ self.filemap) = cPickle.load(data)
def get_urls(self):
usettings = [{'version': self.version, 'component':comp, 'arch':arch}
@@ -197,12 +199,10 @@ class YUMSource(Source):
def read_files(self):
for fname in [f for f in self.files if f.endswith('primary.xml.gz')]:
- print fname
farch = fname.split('@')[-3]
fdata = lxml.etree.parse(fname).getroot()
self.parse_primary(fdata, farch)
for fname in [f for f in self.files if f.endswith('filelists.xml.gz')]:
- print fname
farch = fname.split('@')[-3]
fdata = lxml.etree.parse(fname).getroot()
self.parse_filelist(fdata, farch)
@@ -216,6 +216,7 @@ class YUMSource(Source):
if key == 'global':
continue
self.packages[key] = self.packages['global'].difference(self.packages[key])
+ self.save_state()
def parse_filelist(self, data, arch):
for pkg in data.findall(self.fl + 'package'):