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