extras-buildsys/server BuilderManager.py,1.14,1.15

Daniel Williams (dcbw) fedora-extras-commits at redhat.com
Wed Aug 31 19:55:32 UTC 2005


Author: dcbw

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

Modified Files:
	BuilderManager.py 
Log Message:
2005-08-31  Dan Williams <dcbw at redhat.com>

    * server/BuilderManager.py
        - Load-balance builders somewhat




Index: BuilderManager.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/BuilderManager.py,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- BuilderManager.py	29 Aug 2005 17:48:19 -0000	1.14
+++ BuilderManager.py	31 Aug 2005 19:55:30 -0000	1.15
@@ -124,6 +124,9 @@
             return True
         return self._have_work
 
+    def _builder_sort_func(self, builder):
+        return builder.free_slots()
+
     def process(self, paused):
         self._have_work = False
 
@@ -140,19 +143,28 @@
             if (stage != 'prep') and (stage != 'building') and (stage != 'waiting'):
                 self._queue.remove(req)
                 continue
-            # Find a free builder for this request
+
+            # Find all free builders that could satisfy the request
+            builder_list = []
             for builder in self._builders:
                 if builder.available() and builder.can_build_for_target(req['target_dict']):
-                    try:
-                        job = builder.start_job(parent, req['target_dict'], req['srpm_url'])
-                    except RuntimeError:
-                        pass
-                    else:
-                        if not new_jobs.has_key(parent):
-                            new_jobs[parent] = []
-                        new_jobs[parent].append(job)
-                        self._queue.remove(req)
-                        break
+                    builder_list.append(builder)
+                    print "Appending builder %s" % builder.address()
+
+            # Use the builder with the most free build slots
+            builder_list.sort(key=self._builder_sort_func, reverse=True)
+            print builder_list
+            for builder in builder_list:
+                try:
+                    job = builder.start_job(parent, req['target_dict'], req['srpm_url'])
+                except RuntimeError:
+                    pass
+                else:
+                    if not new_jobs.has_key(parent):
+                        new_jobs[parent] = []
+                    new_jobs[parent].append(job)
+                    self._queue.remove(req)
+                    break
         self._queue_lock.release()
 
         # Notify the parent jobs of their new archjobs.  Have to do this outside _queue_lock




More information about the scm-commits mailing list