extras-buildsys/server ArchJob.py, 1.4, 1.5 Builder.py, 1.4, 1.5 CONFIG.py, 1.16, 1.17
Daniel Williams (dcbw)
fedora-extras-commits at redhat.com
Mon Jul 11 00:30:38 UTC 2005
Author: dcbw
Update of /cvs/fedora/extras-buildsys/server
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv18033/server
Modified Files:
ArchJob.py Builder.py CONFIG.py
Log Message:
- Add some locking around most calls to xmlrpc servers since Python is
is flakey here with threads
Index: ArchJob.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/ArchJob.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ArchJob.py 8 Jul 2005 17:23:45 -0000 1.4
+++ ArchJob.py 11 Jul 2005 00:30:36 -0000 1.5
@@ -106,6 +106,7 @@
del attrdict
def _send_repo_unlocked(self):
+ self.builder.xmlrpc_lock_acquire()
try:
self._server.repo_unlocked(self.jobid)
except socket.error, e:
@@ -114,9 +115,11 @@
self.par_job.package, self.arch, self.bci.address(), e)
except xmlrpclib.ProtocolError, e:
pass
+ self.builder.xmlrpc_lock_release()
def _dl_files(self):
files = []
+ self.builder.xmlrpc_lock_acquire()
try:
files = self._server.files(self.jobid)
except socket.error, e:
@@ -125,6 +128,7 @@
self.par_job.package, self.arch, self.bci.address(), e)
except xmlrpclib.ProtocolError, e:
pass
+ self.builder.xmlrpc_lock_release()
return files
def process(self):
@@ -234,7 +238,9 @@
def die(self):
if self.status == 'initialize' or self.status == 'running':
+ self.builder.xmlrpc_lock_acquire()
self._server.die(self.jobid)
+ self.builder.xmlrpc_lock_release()
self._set_status('done')
Index: Builder.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/Builder.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Builder.py 10 Jul 2005 03:44:37 -0000 1.4
+++ Builder.py 11 Jul 2005 00:30:36 -0000 1.5
@@ -37,6 +37,11 @@
certs['peer_ca_cert'] = config_opts['ca_cert']
+# Python's xmlrpclib & httplib are a bit dodgy with
+# threads, so lets lock xmlrpc operations
+builder_xmlrpc_lock = threading.Lock()
+
+
class Builder(threading.Thread):
""" Tracks all jobs on a builder instance """
@@ -51,10 +56,13 @@
self._server = XMLRPCServerProxy.PlgXMLRPCServerProxy(self._address, None)
self._unavail_count = 0
self._arches = []
+ builder_xmlrpc_lock.acquire()
try:
self._arches = self._server.supported_arches()
except socket.error:
+ builder_xmlrpc_lock.release()
raise RuntimeError
+ builder_xmlrpc_lock.release()
self._alive = True
self._arches.append('noarch')
self._server_lock = threading.Lock()
@@ -62,6 +70,12 @@
self._prepping_jobs = False
threading.Thread.__init__(self)
+ def xmlrpc_lock_acquire(self):
+ builder_xmlrpc_lock.acquire()
+
+ def xmlrpc_lock_release(self):
+ builder_xmlrpc_lock.release()
+
def arches(self):
return self._arches
@@ -83,12 +97,14 @@
if not arch in self._arches or not self.available():
raise RuntimeError
+ builder_xmlrpc_lock.acquire()
self._server_lock.acquire()
try:
jobid = self._server.start(target, arch, srpm_url)
except (socket.error, xmlrpclib.ProtocolError):
jobid = 0
self._server_lock.release()
+ builder_xmlrpc_lock.release()
if jobid == 0:
raise RuntimeError
@@ -102,6 +118,7 @@
def _update_cur_job(self):
cur_jobid = None
+ builder_xmlrpc_lock.acquire()
self._server_lock.acquire()
try:
(jobid, status) = self._server.get_cur_job()
@@ -110,6 +127,7 @@
else:
self._unavail_count = 0
self._server_lock.release()
+ builder_xmlrpc_lock.release()
# Update the current job's status
if self._unavail_count == 0:
Index: CONFIG.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/CONFIG.py,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- CONFIG.py 6 Jul 2005 21:21:00 -0000 1.16
+++ CONFIG.py 11 Jul 2005 00:30:36 -0000 1.17
@@ -87,6 +87,6 @@
# Builder Clients
-config_opts['builders'] = [ 'http://127.0.0.1:8888' ]
+config_opts['builders'] = [ 'https://127.0.0.1:8888' ]
More information about the fedora-extras-commits
mailing list