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