[yum-cvs] yum yum-updatesd.py,1.30,1.31
James Bowes
jbowes at linux.duke.edu
Tue Jan 9 03:57:49 UTC 2007
Update of /home/groups/yum/cvs/yum
In directory login1.linux.duke.edu:/tmp/cvs-serv17205
Modified Files:
yum-updatesd.py
Log Message:
Move header downloading into the child threads for yum-updatesd
Index: yum-updatesd.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum-updatesd.py,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- yum-updatesd.py 19 Dec 2006 03:43:31 -0000 1.30
+++ yum-updatesd.py 9 Jan 2007 03:57:47 -0000 1.31
@@ -237,40 +237,56 @@
syslog_ident = Option("yum-updatesd")
yum_config = Option("/etc/yum.conf")
-class UpdateDownloadThread(threading.Thread):
- def __init__(self, updd, dlpkgs):
+
+class UpdateBuildTransactionThread(threading.Thread):
+ def __init__(self. updd, name):
self.updd = updd
- self.dlpkgs = dlpkgs
- threading.Thread.__init__(self, name="UpdateDownloadThread")
+ threading.Thread.__init__(self, name=name)
def run(self):
- self.updd.downloadPkgs(self.dlpkgs)
+ self.updd.tsInfo.makelists()
+ try:
+ (result, msgs) = self.updd.buildTransaction()
+ except yum.Errors.RepoError, errmsg: # error downloading hdrs
+ msgs = ["Error downloading headers"]
+ self.updd.emitUpdateFailed(msgs)
+ return
+
+ dlpkgs = map(lambda x: x.po, filter(lambda txmbr:
+ txmbr.ts_state in ("i", "u"),
+ self.updd.tsInfo.getMembers()))
+ self.updd.downloadPkgs(dlpkgs)
+ self.processPkgs(dlpkgs)
+
+
+class UpdateDownloadThread(UpdateBuildTransactionThread):
+ def __init__(self, updd):
+ UpdateBuildTransactionThread.__init__(self, updd,
+ name="UpdateDownloadThread")
+
+ def processPkgs(self, dlpkgs):
self.updd.emitAvailable()
- self.updd.closeRpmDB()
- self.updd.doUnlock()
+ self.updd.releaseLocks()
-class UpdateInstallThread(threading.Thread):
- def __init__(self, updd, dlpkgs):
- self.updd = updd
- self.dlpkgs = dlpkgs
- threading.Thread.__init__(self, name="UpdateInstallThread")
+
+class UpdateInstallThread(UpdateBuildTransactionThread):
+ def __init__(self, updd):
+ UpdateBuildTransactionThread.__init__(self, updd,
+ name="UpdateInstallThread")
def failed(self, msgs):
self.updd.emitUpdateFailed(msgs)
- self.updd.closeRpmDB()
- self.updd.doUnlock()
+ self.updd.releaseLocks()
def success(self):
self.updd.emitUpdateApplied()
- self.updd.closeRpmDB()
- self.updd.doUnlock()
+ self.updd.releaseLocks()
self.updd.updateInfo = None
self.updd.updateInfoTime = None
- def run(self):
- self.updd.downloadPkgs(self.dlpkgs)
- for po in self.dlpkgs:
+ def processPkgs(self, dlpkgs):
+ for po in dlpkgs:
result, err = self.updd.sigCheckPkg(po)
if result == 0:
continue
@@ -330,9 +346,7 @@
try:
self.doRepoSetup()
self.doSackSetup()
- self.doTsSetup()
- self.doRpmDBSetup()
- self.doUpdateSetup()
+ self.updateCheckSetup()
except Exception, e:
syslog.syslog(syslog.LOG_WARNING,
"error getting update info: %s" %(e,))
@@ -428,45 +442,21 @@
self.populateTsInfo()
self.populateUpdates()
- # FIXME: this needs to be done in the download/install threads
- if self.opts.do_update or self.opts.do_download_deps:
- self.tsInfo.makelists()
- try:
- (result, msgs) = self.buildTransaction()
- except yum.Errors.RepoError: # error downloading hdrs
- (result, msgs) = (1, ["Error downloading headers"])
-
- dlpkgs = map(lambda x: x.po, filter(lambda txmbr:
- txmbr.ts_state in ("i", "u"),
- self.tsInfo.getMembers()))
-
- close = True
if self.opts.do_update:
- # we already resolved deps above
- if result == 1:
- self.emitUpdateFailed(msgs)
- else:
- uit = UpdateInstallThread(self, dlpkgs)
- uit.start()
- close = False
+ uit = UpdateInstallThread(self, dlpkgs)
+ uit.start()
elif self.opts.do_download:
self.emitDownloading()
dl = UpdateDownloadThread(self, dlpkgs)
dl.start()
- close = False
else:
# just notify about things being available
self.emitAvailable()
+ self.releaseLocks()
except Exception, e:
self.emitCheckFailed("%s" %(e,))
self.doUnlock()
- # FIXME: this is kind of ugly in that I want to do it sometimes
- # and yet not others and it's from threads that it matters. aiyee!
- if close:
- self.closeRpmDB()
- self.doUnlock()
-
return True
def getUpdateInfo(self):
@@ -494,19 +484,25 @@
return []
try:
- self.doTsSetup()
- self.doRpmDBSetup()
- self.doUpdateSetup()
+ self.updateCheckSetup()
self.populateUpdates()
- self.closeRpmDB()
- self.doUnlock()
+ self.releaseLocks()
except:
self.doUnlock()
return self.updateInfo
+ def updateCheckSetup(self):
+ self.doTsSetup()
+ self.doRpmDBSetup()
+ self.doUpdateSetup()
+
+ def releaseLocks(self):
+ self.closeRpmDB()
+ self.doUnlock()
+
def emitAvailable(self):
"""method to emit a notice about updates"""
map(lambda x: x.updatesAvailable(self.updateInfo), self.emitters)
@@ -526,7 +522,7 @@
def emitCheckFailed(self, error):
"""method to emit a notice when checking for updates failed"""
map(lambda x: x.checkFailed(error), self.emitters)
-
+
class YumDbusListener(dbus.service.Object):
def __init__(self, updd, bus_name, object_path='/Updatesd',
More information about the Yum-cvs-commits
mailing list