extras-buildsys/builder builder.py,1.44.2.7,1.44.2.8
Daniel Williams (dcbw)
fedora-extras-commits at redhat.com
Sun Mar 12 05:53:01 UTC 2006
Author: dcbw
Update of /cvs/fedora/extras-buildsys/builder
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv17091/builder
Modified Files:
Tag: STABLE_0_4
builder.py
Log Message:
2006-03-12 Dan Williams <dcbw at redhat.com>
* builder/builder.py
- Add a SIGTERM handler for clean shutdown
- Clean up lifecycle management
* common/HTTPServer.py
- Clean up lifecycle management of PlgHTTPServerManager objects
* common/SSLCommon.py
- Clean up lifecycle management of PlgBaseServer objects
- Initialize correct parent object in PlgBaseSSLServer.__init__
* etc/plague-builder.init
etc/plague-server.init
- Cleanups
* server/main.py
- Add a SIGTERM handler for clean shutdown
- Clean up lifecycle management
Index: builder.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/builder/builder.py,v
retrieving revision 1.44.2.7
retrieving revision 1.44.2.8
diff -u -r1.44.2.7 -r1.44.2.8
--- builder.py 19 Feb 2006 06:57:21 -0000 1.44.2.7
+++ builder.py 12 Mar 2006 05:52:54 -0000 1.44.2.8
@@ -29,6 +29,7 @@
import errno
import exceptions
import threading
+import signal
from plague import ArchUtils
from plague import FileDownloader
from plague import AuthedXMLRPCServer
@@ -44,6 +45,10 @@
certs = {}
build_arches = []
+def log(string):
+ sys.stdout.write(string)
+ sys.stdout.flush()
+
def get_hostname(cfg, bind_all):
cfg_hostname = cfg.get_str("Network", "hostname")
@@ -805,7 +810,16 @@
return max_jobs
+bserver = None
+
+def exit_handler(signum, frame):
+ global bserver
+ log("Received SIGTERM, quitting...\n")
+ bserver.stop()
+
def main():
+ global bserver
+
usage = "Usage: %s [-p <pidfile>] [-l <logfile>] [-d] -c <configfile>" % sys.argv[0]
parser = OptionParser(usage=usage)
parser.add_option("-p", "--pidfile", default=None,
@@ -819,7 +833,7 @@
(opts, args) = parser.parse_args()
if not opts.configfile:
- print "Must specify a config file."
+ log("Must specify a config file.\n")
sys.exit(1)
# Load in the config
@@ -834,18 +848,18 @@
build_arches = determine_build_arches(cfg)
if not len(build_arches):
- print "Cannot determine buildable arches for this builder. Exiting..."
+ log("Cannot determine buildable arches for this builder. Exiting...\n")
sys.exit(1)
cfg.load_target_configs(build_arches)
if len(cfg.targets()) == 0:
- print "No useable mock buildroots configured. Exiting..."
+ log("No useable mock buildroots configured. Exiting...\n")
sys.exit(1)
if opts.daemon:
ret=daemonize.createDaemon()
if ret:
- print "Daemonizing failed!"
+ log("Daemonizing failed!\n")
sys.exit(2)
if opts.pidfile:
@@ -861,7 +875,7 @@
work_dir = cfg.get_str("Directories", "builder_work_dir")
if not os.path.exists(work_dir) or not os.access(work_dir, os.R_OK):
- print "%s does not exist or is not readable." % work_dir
+ log("%s does not exist or is not readable.\n" % work_dir)
os._exit(1)
# Start up the HTTP server thread which the build server
@@ -880,44 +894,52 @@
pass
os._exit(1)
- print "Binding to address '%s' with arches: [%s]" % (hostname, string.join(build_arches, ","))
+ log("Binding to address '%s' with arches: [%s]\n" % (hostname, string.join(build_arches, ",")))
xmlrpc_port = cfg.get_int("Network", "xmlrpc_port")
try:
if cfg.get_bool("SSL", "use_ssl") == True:
- xmlserver = AuthedXMLRPCServer.AuthedSSLXMLRPCServer((hostname, xmlrpc_port), None, certs)
+ bserver = AuthedXMLRPCServer.AuthedSSLXMLRPCServer((hostname, xmlrpc_port), None, certs)
else:
- xmlserver = AuthedXMLRPCServer.AuthedXMLRPCServer((hostname, xmlrpc_port), None)
+ bserver = AuthedXMLRPCServer.AuthedXMLRPCServer((hostname, xmlrpc_port), None)
except socket.error, e:
if e[0] == 98:
- print "Error: couldn't bind to address '%s:%s'. " \
- "Is the builder already running?" % (hostname, xmlrpc_port)
+ log("Error: couldn't bind to address '%s:%s'. " \
+ "Is the builder already running?\n" % (hostname, xmlrpc_port))
os._exit(1)
max_jobs = determine_max_jobs(cfg)
bcs = XMLRPCBuilderServer(cfg, max_jobs)
- xmlserver.register_instance(bcs)
+ bserver.register_instance(bcs)
+
+ # Set up our termination handler
+ signal.signal(signal.SIGTERM, exit_handler)
- last_time = time.time()
try:
- while True:
- xmlserver.handle_request()
+ bserver.handle_request()
except KeyboardInterrupt, e:
- print "Shutting down..."
- (building_jobs, free) = bcs.building_jobs()
- for jobid in building_jobs.keys():
- bcs.die(jobid)
- # wait for the jobs to clean up before quitting
- while True:
- (building_jobs, free) = bcs.building_jobs()
- if len(building_jobs.keys()) == 0:
- break
- try:
- print "Waiting for building jobs to stop"
- time.sleep(1)
- except KeyboardInterrupt:
- break
+ bserver.server_close()
+ log("Shutting down...\n")
http_server.stop()
+
+ (building_jobs, free) = bcs.building_jobs()
+ for jobid in building_jobs.keys():
+ bcs.die(jobid)
+
+ # wait for the jobs to clean up before quitting
+ log("Waiting for running jobs to stop...")
+ while True:
+ (building_jobs, free) = bcs.building_jobs()
+ if len(building_jobs.keys()) == 0:
+ break
+ try:
+ log(".")
+ time.sleep(0.5)
+ except KeyboardInterrupt:
+ break
+ log(" done.\n");
+ sys.stdout.flush()
+ time.sleep(2)
os._exit(0)
More information about the fedora-extras-commits
mailing list