extras-buildsys/server Builder.py, 1.6, 1.7 BuilderManager.py, 1.4, 1.5 CONFIG.py, 1.18, 1.19

Daniel Williams (dcbw) fedora-extras-commits at redhat.com
Sat Jul 16 15:47:45 UTC 2005


Author: dcbw

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

Modified Files:
	Builder.py BuilderManager.py CONFIG.py 
Log Message:
2005-07-16  Dan Williams <dcbw at redhat.com>

    * builder/builder.py
      server/Builder.py
      server/BuilderManager.py
        - Make the builder aware of what mock targets & arches it can actually
            build, and expose that information to the build server
        - On the server, make sure that we ask the builder to only build for
            arches that it supports for the target we request
        (This makes noarch jobs work correctly everywhere)




Index: Builder.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/Builder.py,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- Builder.py	14 Jul 2005 19:12:04 -0000	1.6
+++ Builder.py	16 Jul 2005 15:47:43 -0000	1.7
@@ -56,16 +56,18 @@
             self._server = XMLRPCServerProxy.PlgXMLRPCServerProxy(self._address, None)
         self._server_lock = threading.Lock()
         self._unavail_count = 0
-        self._arches = []
+        self._target_arches = []
         builder_xmlrpc_lock.acquire()
         try:
-            self._arches = self._server.supported_arches()
+            self._target_arches = self._server.supported_target_arches()
+            for target in self._target_arches.keys():
+                self._target_arches[target].append('noarch')
         except socket.error:
             builder_xmlrpc_lock.release()
             raise RuntimeError
         builder_xmlrpc_lock.release()
+
         self._alive = True
-        self._arches.append('noarch')
         self._stop = False
         self._prepping_jobs = False
 
@@ -87,12 +89,18 @@
     def xmlrpc_lock_release(self):
         builder_xmlrpc_lock.release()
 
-    def arches(self):
-        return self._arches
-
-    def can_build_arch(self, arch):
-        if arch in self._arches:
-            return True
+    def arches(self, target):
+        arches = None
+        try:
+            arches = self._target_arches[target]
+        except:
+            pass
+        return arches
+
+    def can_build_arch_on_target(self, arch, target):
+        if self._target_arches.has_key(target) and len(self._target_arches[target]) > 0:
+            if arch in self._target_arches[target]:
+                return True
         return False
 
     def address(self):
@@ -105,14 +113,18 @@
         return self._alive
     
     def start_job(self, par_job, target, arch, srpm_url):
-        if not arch in self._arches or not self.available():
+        if not self.available():
+            raise RuntimeError
+        if not self._target_arches.has_key(target) or len(self._target_arches[target]) == 0:
+            raise RuntimeError
+        if not arch in self._target_arches[target]:
             raise RuntimeError
 
         builder_xmlrpc_lock.acquire()
         self._server_lock.acquire()
         try:
             jobid = self._server.start(target, arch, srpm_url)
-        except (socket.error, xmlrpclib.ProtocolError):
+        except (socket.error, OpenSSL.SSL.SysCallError, xmlrpclib.ProtocolError):
             jobid = 0
         self._server_lock.release()
         builder_xmlrpc_lock.release()
@@ -200,7 +212,12 @@
     def to_dict(self):
         client_dict = {}
         client_dict['address'] = self._address
-        client_dict['arches'] = self._arches
+        arches = []
+        for target in self._target_arches.keys():
+            for arch in self._target_arches[target]:
+                if not arch in arches:
+                    arches.append(arch)
+        client_dict['arches'] = arches
         if self._cur_jobid:
             client_dict['status'] = 'building'
         else:


Index: BuilderManager.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/BuilderManager.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- BuilderManager.py	11 Jul 2005 20:13:37 -0000	1.4
+++ BuilderManager.py	16 Jul 2005 15:47:43 -0000	1.5
@@ -146,7 +146,7 @@
                 continue
             # Find a free builder for this request
             for builder in self.running_builders:
-                if builder.available() and builder.can_build_arch(req['arch']):
+                if builder.available() and builder.can_build_arch_on_target(req['arch'], req['target']):
                     try:
                         job = builder.start_job(parent, req['target'], req['arch'], req['srpm_url'])
                     except RuntimeError:


Index: CONFIG.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/CONFIG.py,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- CONFIG.py	12 Jul 2005 20:12:32 -0000	1.18
+++ CONFIG.py	16 Jul 2005 15:47:43 -0000	1.19
@@ -55,7 +55,7 @@
 # Further architectures on a per-package basis are configured in each target's
 # package file.  See the config option 'addl_package_arches_dir'.
 #
-config_opts['targets'] = {  'devel' :	['i386'] }
+config_opts['targets'] = {  'development' :	['i386'] }
 
 
 # If you're using CVS building, sometimes the CVS directory layout won't match




More information about the fedora-extras-commits mailing list