--- /dev/null
+import string
+import os
+import time
+
+import path
+import log
+import status
+import lock
+import util
+from config import config, init_conf
+
+# return list of binary builders in fair-queue order
+# it is determined based upon spool/got_lock file, which is also
+# updated to be short
+def builders_order():
+ bs = {}
+ bl = []
+ for b in config.builders:
+ bs[b] = 0
+ bl.append(b)
+
+ lck = lock.lock("got-lock")
+ f = open(path.got_lock_file, "r+")
+ line_no = 0
+
+ for l in f.xreadlines():
+ line_no += 1
+ b = string.strip(l)
+ if bs.has_key(b):
+ bs[b] = line_no
+ else:
+ log.alert("found strange lock in got-lock: %s" % b)
+
+ bl.sort(lambda (b1, b2): cmp(bs[b1], bs[b2]))
+
+ f.seek(0)
+ f.truncate(0)
+ for l in bl: f.write(l + "\n")
+ f.close()
+ lck.close()
+
+ return bl
+
+def run_rpm_builder(b):
+ prog = path.root_dir + "binary_builder/rpm-builder.sh"
+ os.spawnl(os.P_NOWAIT, prog, prog, b)
+
+def main():
+ init_conf("")
+ for b in builders_order():
+ run_rpm_builder(b)
+ # give builder some time to aquire lock
+ time.sleep(1)
+ # wait for children to die out
+ try:
+ while 1: os.wait()
+ except:
+ pass
+
+util.wrap(main)
-import ConfigParser
import string
import os
import urllib
echo 0 > www/max_req_no
echo 0 > spool/last_req_no
echo -n > spool/processed_ids
+echo -n > spool/got_lock
echo '<queue/>' > spool/queue
echo '<queue/>' > spool/req_queue
--- /dev/null
+#!/bin/sh
+
+cd ~/pld-builder.new
+python PLD_Builder/load_balancer.py
max_load = 10.0
# where to look for queue.gz and counter
control_url = http://roke.freak/builder/
-# list of all builders
-builders = src athlon
+# list of binary builders
+builders = athlon
# login of user (from acl.conf) that should sign queue
queue_signed_by = malekith
rpm-builder.sh <builder>
Tries to aquire locks for <builder> and for job-slot. If that suceeds,
proccess one request from spool/queue-<builder>.
+
+ load-balancer.sh
+ Checks spool/got_lock. Then run rpm-builder.sh in order determined
+ from this file (if b1 had lock last time before b2, first run
+ rpm-builder.sh b1 and then rpm-builder.sh b2), so builders get
+ the same number of requests.
Working directories:
lock/
- file-sender -- buildlogs, ftp queues. support for file://, scp://, rsync://
remember to send files in order, they were stored
-- load-balancer -- process got_lock, and run rpm-builder for archs in proper
- order, shorten got_lock
-
- make mailer.py actually send mail (easy)
- fix make-request.sh to be more user-friendly and configurable