[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