extras-buildsys/server BuildMaster.py, 1.38, 1.39 DBManager.py, 1.6, 1.7 User.py, 1.9, 1.10 UserInterface.py, 1.61, 1.62

Daniel Williams (dcbw) fedora-extras-commits at redhat.com
Fri Mar 24 19:13:50 UTC 2006


Author: dcbw

Update of /cvs/fedora/extras-buildsys/server
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv20028/server

Modified Files:
	BuildMaster.py DBManager.py User.py UserInterface.py 
Log Message:
2006-03-24  Dan Williams  <dcbw at redhat.com>

    * server/DBManager.py
        - Close database connection on delete for PostgreSQL and MySQL.  Fixes
            leaking MySQL connection with Python 2.3 and MySQL-python 1.0.0,
            as seen on RHEL4.  #rh182441#

    * server/BuildMaster.py
        - Delete the database context when on stop

    * server/User.py
    * server/UserInterface.py
        - Clean up deletion of database contexts and cursors




Index: BuildMaster.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/BuildMaster.py,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -r1.38 -r1.39
--- BuildMaster.py	12 Mar 2006 13:43:40 -0000	1.38
+++ BuildMaster.py	24 Mar 2006 19:13:41 -0000	1.39
@@ -72,6 +72,9 @@
         threading.Thread.__init__(self)
         self.setName("BuildMaster")
 
+    def _cleanup(self):
+        del self._cursor, self._dbcx
+
     def _requeue_interrupted_jobs(self):
         """ Restart interrupted jobs from our db. """
         self._cursor.execute("SELECT uid FROM jobs WHERE (status!='needsign' AND status!='failed' AND status!='finished') ORDER BY uid")
@@ -416,3 +419,5 @@
             while not self._have_work() and time.time() <= last_time + 5:
                 time.sleep(0.25)
 
+        self._cleanup()
+


Index: DBManager.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/DBManager.py,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- DBManager.py	12 Mar 2006 13:43:40 -0000	1.6
+++ DBManager.py	24 Mar 2006 19:13:41 -0000	1.7
@@ -211,6 +211,10 @@
 
         return dbcx
 
+    def __del__(self):
+        self._dbcx.close()
+        del self._dbcx
+
 
 class mysqlEngineClass(BaseDBEngineClass):
 
@@ -263,6 +267,10 @@
 
         return dbcx
 
+    def __del__(self):
+        self._dbcx.close()
+        del self._dbcx
+
 
 db_engines = {
     'sqlite':   sqliteEngineClass,


Index: User.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/User.py,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- User.py	25 Nov 2005 22:45:56 -0000	1.9
+++ User.py	24 Mar 2006 19:13:41 -0000	1.10
@@ -46,8 +46,7 @@
             dbcx = self._db_manager.dbcx()
             curs = dbcx.cursor()
         except StandardError, e:
-            del curs
-            del dbcx
+            del curs, dbcx
             print "Unable to access user database: '%s'" % str(e)
             return None
         user = None
@@ -62,7 +61,6 @@
         else:
             if self._cfg.get_bool("UI", "guest_allowed"):
                 user = User('guest at guest', True)
-        del curs
-        del dbcx
+        del curs, dbcx
         return user
 


Index: UserInterface.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/UserInterface.py,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -r1.61 -r1.62
--- UserInterface.py	12 Mar 2006 13:43:40 -0000	1.61
+++ UserInterface.py	24 Mar 2006 19:13:41 -0000	1.62
@@ -181,6 +181,7 @@
             dbcx = self._db_manager.dbcx()
             curs = dbcx.cursor()
         except StandardError, e:
+            del curs, dbcx
             return (-1, "Unable to access job database: '%s'" % e)
         curs.execute(sql)
         job = dbcx.fetchone(curs)
@@ -193,9 +194,8 @@
             self._bm.requeue_job(uid)
             result = (0, "Success: Job %d has been requeued." % uid)
 
-        del curs
-        del dbcx
-        return result        
+        del curs, dbcx
+        return result
 
     def _kill_job(self, email, job, jobid):
         if not job:
@@ -315,6 +315,7 @@
             dbcx = self._db_manager.dbcx()
             curs = dbcx.cursor()
         except StandardError, e:
+            del curs, dbcx
             return (-1, "Unable to access job database: '%s'" % e, [])
         curs.execute(sql)
         data = dbcx.fetchall(curs)
@@ -363,8 +364,7 @@
                     if job['uid'] == ajrec['parent_uid']:
                         job['archjobs'].append(copy.deepcopy(ajrec))
 
-        del curs
-        del dbcx
+        del curs, dbcx
         return (0, "Success.", jobs)
 
 
@@ -384,12 +384,12 @@
             dbcx = self._db_manager.dbcx()
             curs = dbcx.cursor()
         except StandardError, e:
+            del curs, dbcx
             return (-1, "Unable to access job database: '%s'" % e, {})
         curs.execute(sql)
         job = dbcx.fetchone(curs)
         if not job:
-            del curs
-            del dbcx
+            del curs, dbcx
             return (-1, "Error: Invalid job UID.", {})
         jobrec = {}
         jobrec['uid'] = job['uid']
@@ -436,8 +436,7 @@
 
         ret_job = copy.deepcopy(jobrec)
 
-        del curs
-        del dbcx
+        del curs, dbcx
         return (0, "Success.", ret_job)
 
 
@@ -473,6 +472,13 @@
         return self._bm.is_paused()
 
     def finish(self, uid_list):
+        try:
+            dbcx = self._db_manager.dbcx()
+            curs = dbcx.cursor()
+        except StandardError, e:
+            del curs, dbcx
+            return (-1, "Unable to access job database: '%s'" % e)
+
         uids = ''
         for uid in uid_list:
             uid = validate_uid(uid)
@@ -486,16 +492,10 @@
         if len(uids):
             sql = "UPDATE jobs SET status='finished' WHERE %s" % uids
 
-            try:
-                dbcx = self._db_manager.dbcx()
-                curs = dbcx.cursor()
-            except StandardError, e:
-                return (-1, "Unable to access job database: '%s'" % e)
             curs.execute(sql)
             dbcx.commit()
-            del curs
-            del dbcx
 
+        del curs, dbcx
         return (0, "Success.")
 
     def srpm_upload_dir(self, target_alias):
@@ -538,6 +538,7 @@
             dbcx = self._db_manager.dbcx()
             curs = dbcx.cursor()
         except StandardError, e:
+            del curs, dbcx
             return (-1, "Unable to access job database: '%s'" % e)
 
         curs.execute(sql)
@@ -551,8 +552,7 @@
         else:
             result = UserInterface.requeue(self, uid)
 
-        del curs
-        del dbcx
+        del curs, dbcx
         return result
 
     def kill_job(self, email, jobid):
@@ -627,6 +627,7 @@
             dbcx = self._db_manager.dbcx()
             curs = dbcx.cursor()
         except StandardError, e:
+            del curs, dbcx
             return (-1, "Unable to access job database: '%s'" % e)
 
         curs.execute(sql)
@@ -656,8 +657,7 @@
 
             final_uid_list.append(uid)
 
-        del curs
-        del dbcx
+        del curs, dbcx
 
         if error:
             return error




More information about the fedora-extras-commits mailing list