]> git.pld-linux.org Git - projects/pld-builder.new.git/blame - PLD_Builder/load_balancer.py
Typo.
[projects/pld-builder.new.git] / PLD_Builder / load_balancer.py
CommitLineData
dfff8bd5
MM
1# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
2
3fefb769
MM
3import string
4import os
5import time
6
7import path
07e220e1 8import sys
3fefb769
MM
9import log
10import status
11import lock
3f446d8f 12import loop
07e220e1
MM
13
14import rpm_builder
15
3fefb769
MM
16from config import config, init_conf
17
18# return list of binary builders in fair-queue order
19# it is determined based upon spool/got_lock file, which is also
20# updated to be short
21def builders_order():
dfff8bd5
MM
22 bs = {}
23 bl = []
24 for b in config.binary_builders:
25 bs[b] = 0
26 bl.append(b)
e6376553 27
dfff8bd5
MM
28 lck = lock.lock("got-lock")
29 f = open(path.got_lock_file, "r+")
30 line_no = 0
e6376553 31
dfff8bd5
MM
32 for l in f.xreadlines():
33 line_no += 1
34 b = string.strip(l)
35 if bs.has_key(b):
36 bs[b] = line_no
37 else:
38 log.alert("found strange lock in got-lock: %s" % b)
3fefb769 39
dfff8bd5
MM
40 def mycmp(b1, b2):
41 return cmp(bs[b1], bs[b2])
e6376553 42
dfff8bd5 43 bl.sort(mycmp)
3fefb769 44
dfff8bd5
MM
45 f.seek(0)
46 f.truncate(0)
47 for l in bl: f.write(l + "\n")
48 f.close()
49 lck.close()
3fefb769 50
dfff8bd5 51 return bl
3fefb769
MM
52
53def run_rpm_builder(b):
dfff8bd5
MM
54 if os.fork() == 0:
55 return
56 else:
57 rpm_builder.main_for(b)
58 sys.exit(0)
3fefb769
MM
59
60def main():
032526d0 61 init_conf()
dfff8bd5
MM
62 for b in builders_order():
63 run_rpm_builder(b)
64 # give builder some time to aquire lock
65 time.sleep(1)
66 # wait for children to die out
67 try:
68 while 1: os.wait()
69 except:
70 pass
3fefb769 71
e8ee9db8 72if __name__ == '__main__':
dfff8bd5 73 loop.run_loop(main)
This page took 0.942787 seconds and 4 git commands to generate.