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(a)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
Show replies by date