diff --git a/daemons/ganeti-noded b/daemons/ganeti-noded index 0cbe68844bd22ead5fbe36530015c8c41c21d8da..c740105d3571041643d6bc1c13fd9b495c071856 100755 --- a/daemons/ganeti-noded +++ b/daemons/ganeti-noded @@ -27,6 +27,7 @@ import os import sys import traceback +import SocketServer import errno import logging @@ -537,6 +538,15 @@ class NodeDaemonHttpServer(http.HTTPServer): http.HTTPServer.__init__(self, server_address, NodeDaemonRequestHandler) +class ForkingHTTPServer(SocketServer.ForkingMixIn, NodeDaemonHttpServer): + """Forking HTTP Server. + + This inherits from ForkingMixIn and HTTPServer in order to fork for each + request we handle. This allows more requests to be handled concurrently. + + """ + + def ParseOptions(): """Parse the command line options. @@ -603,7 +613,12 @@ def main(): global _EXIT_GANETI_NODED - httpd = NodeDaemonHttpServer(('', port)) + if options.fork: + httpd = ForkingHTTPServer(('', port)) + else: + httpd = NodeDaemonHttpServer(('', port)) + + # FIXME: updating _EXIT_GANETI_NODED doesn't work when forking while (not _EXIT_GANETI_NODED): httpd.handle_request()