extras-buildsys/server BuildMaster.py, 1.15, 1.16 Builder.py, 1.5, 1.6 PackageJob.py, 1.6, 1.7 UserInterface.py, 1.18, 1.19

Daniel Williams (dcbw) fedora-extras-commits at redhat.com
Thu Jul 14 19:12:06 UTC 2005


Author: dcbw

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

Modified Files:
	BuildMaster.py Builder.py PackageJob.py UserInterface.py 
Log Message:
2005-07-14  Dan Williams <dcbw at redhat.com>

    * builder/builder.py
        - Make the builder not hang if you interrupt it in the middle
            of a time.sleep()
        - Fix misdeclaration of log() which caused a traceback in some
            instances

    * server/Builder.py
        - Kill any job the builder is running when the server starts up

    * server/BuildMaster.py
        - Restart interrupted jobs when the server starts up
        - Remove old query queue code that's no longer used

    * server/PackageJob.py
      server/UserInterface.py
        - is_build_job_stage_valid -> is_package_job_stage_valid




Index: BuildMaster.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/BuildMaster.py,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- BuildMaster.py	13 Jul 2005 15:53:08 -0000	1.15
+++ BuildMaster.py	14 Jul 2005 19:12:04 -0000	1.16
@@ -111,9 +111,6 @@
         self._archjob_status_updates = {}
         self._archjob_status_updates_lock = threading.Lock()
 
-        self._query_queue = []
-        self._query_queue_lock = threading.Lock()
-
         self._building_jobs = []
         self._building_jobs_lock = threading.Lock()
 
@@ -125,11 +122,40 @@
         self.curs = self.dbcx.cursor()
         ensure_job_db_tables(self.dbcx)
 
+        self._restart_interrupted_jobs()
+
         threading.Thread.__init__(self)
 
     def __del__(self):
         self.dbcx.close()
 
+    def _restart_interrupted_jobs(self):
+        """ Restart interrupted jobs from our db. """
+        self.curs.execute('SELECT * FROM jobs WHERE (status!="needsign" AND status!="failed" AND status!="killed")')
+        self.dbcx.commit()
+        jobs = self.curs.fetchall()
+
+        if len(jobs) == 0:
+            return
+
+        for row in jobs:
+            uniqid = row[0]
+            # Kill any archjobs that are left around
+            self.curs.execute('DELETE FROM archjobs WHERE parent_uid=%d' % uniqid)
+            self.dbcx.commit()
+
+            # Now requeue the job
+            try:
+                repo = self.repos[row[4]]
+            except KeyError:
+                print "%s (%s): Target '%s' not found." % (uniqid, row[2], row[4])
+            else:
+                job = PackageJob.PackageJob(uniqid, row[1], row[2], row[3], repo, self, self.hostname)
+                print "%s (%s): Restarting '%s' on target '%s'" % (uniqid, row[2], row[3], row[4])
+                self._building_jobs_lock.acquire()
+                self._building_jobs.append(job)
+                self._building_jobs_lock.release()
+
     def stop(self):
         self.should_stop = True
         for repo in self.repos.values():
@@ -285,28 +311,6 @@
 
         self._new_queue_lock.release()
 
-    def queue_query(self, query):
-        self._query_queue_lock.acquire()
-        if query.sql:
-            self._query_queue.append(query)
-        self._query_queue_lock.release()
-
-    def _process_queries(self):
-        self._query_queue_lock.acquire()
-
-        for query in self._query_queue:
-            self.curs.execute(query.sql)
-            self.dbcx.commit()
-            data = self.curs.fetchall()
-            results = []
-            for row in data:
-                tempX = [ item for item in row ]
-                results.append(tempX)
-            query.result = results
-            query.done = True
-            self._query_queue.remove(query)
-        self._query_queue_lock.release()
-
     def _have_work(self):
         have_work = False
         self._new_queue_lock.acquire()
@@ -316,13 +320,6 @@
         if have_work:
             return True
 
-        self._query_queue_lock.acquire()
-        if len(self._query_queue) > 0:
-            have_work = True
-        self._query_queue_lock.release()
-        if have_work:
-            return True
-
         self._status_updates_lock.acquire()
         if len(self._status_updates) > 0:
             have_work = True
@@ -366,9 +363,6 @@
             # Start any new jobs
             self._start_new_jobs()
 
-            # Execute any queued queries from other threads
-            self._process_queries()
-
             last_time = time.time()
             while not self._have_work() and time.time() <= last_time + 5:
                 time.sleep(0.25)


Index: Builder.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/Builder.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- Builder.py	11 Jul 2005 00:30:36 -0000	1.5
+++ Builder.py	14 Jul 2005 19:12:04 -0000	1.6
@@ -54,6 +54,7 @@
             self._server = XMLRPCServerProxy.PlgXMLRPCServerProxy(self._address, certs)
         else:
             self._server = XMLRPCServerProxy.PlgXMLRPCServerProxy(self._address, None)
+        self._server_lock = threading.Lock()
         self._unavail_count = 0
         self._arches = []
         builder_xmlrpc_lock.acquire()
@@ -65,9 +66,19 @@
         builder_xmlrpc_lock.release()
         self._alive = True
         self._arches.append('noarch')
-        self._server_lock = threading.Lock()
         self._stop = False
         self._prepping_jobs = False
+
+        # Kill any jobs currently running on the builder
+        (jobid, status) = self._get_cur_job_and_status()
+        if jobid and jobid != 0:
+            builder_xmlrpc_lock.acquire()
+            try:
+                self._server.die(jobid)
+            except:
+                pass
+            builder_xmlrpc_lock.release()
+
         threading.Thread.__init__(self)
 
     def xmlrpc_lock_acquire(self):
@@ -115,8 +126,9 @@
 
         return job
 
-    def _update_cur_job(self):
-        cur_jobid = None
+    def _get_cur_job_and_status(self):
+        jobid = None
+        status = None
 
         builder_xmlrpc_lock.acquire()
         self._server_lock.acquire()
@@ -129,6 +141,11 @@
         self._server_lock.release()
         builder_xmlrpc_lock.release()
 
+        return (jobid, status)
+
+    def _update_cur_job(self):
+        (jobid, status) = self._get_cur_job_and_status()
+
         # Update the current job's status
         if self._unavail_count == 0:
             try:


Index: PackageJob.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/PackageJob.py,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- PackageJob.py	12 Jul 2005 20:12:32 -0000	1.6
+++ PackageJob.py	14 Jul 2005 19:12:04 -0000	1.7
@@ -86,12 +86,12 @@
             self._pkg_job.process()
 
 
-def is_build_job_stage_valid(stage):
+def is_package_job_stage_valid(stage):
     """
     Validate a job stage.
     """
 
-    stages = ['initialize', 'checkout', 'make_srpm', 'prep', 'waiting', 'building', 'failed', 'addtorepo', 'repodone', 'needsign', 'finished', 'killed']
+    stages = ['initialize', 'checkout', 'make_srpm', 'prep', 'waiting', 'building', 'finished', 'addtorepo', 'repodone', 'needsign', 'failed', 'killed']
     if stage in stages:
         return True
     return False


Index: UserInterface.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/UserInterface.py,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- UserInterface.py	10 Jul 2005 04:33:51 -0000	1.18
+++ UserInterface.py	14 Jul 2005 19:12:04 -0000	1.19
@@ -157,7 +157,7 @@
 
         if args_dict.has_key('status') and args_dict['status']:
             status = args_dict['status']
-            if PackageJob.is_build_job_stage_valid(status):
+            if PackageJob.is_package_job_stage_valid(status):
                 if first:
                     search = search +  " WHERE "
                     first = False




More information about the fedora-extras-commits mailing list