diff options
author | cpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-07 20:24:30 +0000 |
---|---|---|
committer | cpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-07 20:24:30 +0000 |
commit | ed8e24a6a2e7a13879ebb3c06aaca8d459ec5de4 (patch) | |
tree | 417d3ba4342e9b0f37ba57573b85e8f9435dcfa2 /webkit | |
parent | 748c29f8976f56a48b5ab49ed48e7e66e2593a07 (diff) | |
download | chromium_src-ed8e24a6a2e7a13879ebb3c06aaca8d459ec5de4.zip chromium_src-ed8e24a6a2e7a13879ebb3c06aaca8d459ec5de4.tar.gz chromium_src-ed8e24a6a2e7a13879ebb3c06aaca8d459ec5de4.tar.bz2 |
Revert 33975 - Take two at enabling maxworkers for lighttpd. Use SIGKILL instead
of SIGTERM to avoid getting nonzero exit codes when shutting down
lighttpd.
Also, remove some unnecessary sleep calls and share the code that waits
until the server is up between Apache and lighttpd scripts.
Review URL: http://codereview.chromium.org/463039
TBR=ojan@chromium.org
Review URL: http://codereview.chromium.org/467039
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@33983 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
6 files changed, 54 insertions, 64 deletions
diff --git a/webkit/tools/layout_tests/layout_package/apache_http_server.py b/webkit/tools/layout_tests/layout_package/apache_http_server.py index 0094322..1950c6b 100644 --- a/webkit/tools/layout_tests/layout_package/apache_http_server.py +++ b/webkit/tools/layout_tests/layout_package/apache_http_server.py @@ -9,14 +9,20 @@ import optparse import os import subprocess import sys +import time import google.httpd_utils -import http_server_base import path_utils import platform_utils -class LayoutTestApacheHttpd(http_server_base.HttpServerBase): +class LayoutTestApacheHttpd(object): + _PORTS = [ + {'port': 8000}, + {'port': 8080}, + {'port': 8443, 'is_ssl': True} + ] + def __init__(self, output_dir): """Args: output_dir: the absolute path to the layout test result directory @@ -25,12 +31,6 @@ class LayoutTestApacheHttpd(http_server_base.HttpServerBase): self._httpd_proc = None path_utils.MaybeMakeDirectory(output_dir) - self.mappings = [ - {'port': 8000}, - {'port': 8080}, - {'port': 8443, 'sslcert': True} - ] - # The upstream .conf file assumed the existence of /tmp/WebKit for placing # apache files like the lock file there. path_utils.MaybeMakeDirectory(os.path.join("/tmp", "WebKit")) @@ -93,6 +93,15 @@ class LayoutTestApacheHttpd(http_server_base.HttpServerBase): ssl and 'SSLEngine On' or '', '</VirtualHost>', '')) + def _IsServerRunningOnAllPorts(self): + """Returns whether the server is running on all the desired ports.""" + for mapping in self._PORTS: + url = 'http%s://127.0.0.1:%d/' % ('is_ssl' in mapping and 's' or '', + mapping['port']) + if not google.httpd_utils.UrlIsAlive(url): + return False + + return True def _StartHttpdProcess(self): """Starts the httpd process and returns whether there were errors.""" @@ -101,15 +110,28 @@ class LayoutTestApacheHttpd(http_server_base.HttpServerBase): return False return True + def _WaitForAction(self, action): + """Repeat the action for 20 seconds or until it succeeds. Returns whether + it succeeded.""" + succeeded = False + + start_time = time.time() + # Give apache up to 20 seconds to start up. + while time.time() - start_time < 20 and not succeeded: + time.sleep(0.1) + succeeded = action() + + return succeeded + def Start(self): """Starts the apache http server.""" # Stop any currently running servers. self.Stop() logging.debug("Starting apache http server") - server_started = self.WaitForAction(self._StartHttpdProcess) + server_started = self._WaitForAction(self._StartHttpdProcess) if server_started: - server_started = self.WaitForAction(self.IsServerRunningOnAllPorts) + server_started = self._WaitForAction(self._IsServerRunningOnAllPorts) if server_started: logging.debug("Server successfully started") diff --git a/webkit/tools/layout_tests/layout_package/http_server.py b/webkit/tools/layout_tests/layout_package/http_server.py index 36490ce..be09331 100755 --- a/webkit/tools/layout_tests/layout_package/http_server.py +++ b/webkit/tools/layout_tests/layout_package/http_server.py @@ -16,7 +16,6 @@ import tempfile import time import urllib -import http_server_base import path_utils # So we can import httpd_utils below to make ui_tests happy. @@ -30,7 +29,7 @@ def RemoveLogFiles(folder, starts_with): full_path = os.path.join(folder, file) os.remove(full_path) -class Lighttpd(http_server_base.HttpServerBase): +class Lighttpd: # Webkit tests try: _webkit_tests = path_utils.PathFromBase('third_party', 'WebKit', @@ -85,13 +84,12 @@ class Lighttpd(http_server_base.HttpServerBase): ) - def __init__(self, output_dir, num_workers=None, background=False, port=None, - root=None, register_cygwin=None, run_background=None): + def __init__(self, output_dir, background=False, port=None, root=None, + register_cygwin=None, run_background=None): """Args: output_dir: the absolute path to the layout test result directory """ self._output_dir = output_dir - self._num_workers = num_workers self._process = None self._port = port self._root = root @@ -141,10 +139,6 @@ class Lighttpd(http_server_base.HttpServerBase): f.write(('server.errorlog = "%s"\n' 'accesslog.filename = "%s"\n\n') % (error_log, access_log)) - # Setup the number of worker processes to spawn. - if self._num_workers: - f.write('server.max-worker = %s' % self._num_workers) - # Setup upload folders. Upload folder is to hold temporary upload files # and also POST data. This is used to support XHR layout tests that does # POST. @@ -221,27 +215,38 @@ class Lighttpd(http_server_base.HttpServerBase): self._process = subprocess.Popen(start_cmd, env=env) # Wait for server to start. - self.mappings = mappings - server_started = self.WaitForAction(self.IsServerRunningOnAllPorts) + time.sleep(3) + + # Ensure that the server is running on all the desired ports. + for mapping in mappings: + url = 'http%s://127.0.0.1:%d/' % ('sslcert' in mapping and 's' or '', + mapping['port']) + if not google.httpd_utils.UrlIsAlive(url): + raise google.httpd_utils.HttpdNotStarted('Failed to start httpd on ', + 'port %s' % + str(mapping['port'])) # Our process terminated already - if not server_started or self._process.returncode != None: + if self._process.returncode != None: raise google.httpd_utils.HttpdNotStarted('Failed to start httpd.') - logging.debug("Server successfully started") - # TODO(deanm): Find a nicer way to shutdown cleanly. Our log files are # probably not being flushed, etc... why doesn't our python have os.kill ? def Stop(self, force=False): if not force and not self.IsRunning(): return + logging.debug('Shutting down http server') path_utils.ShutDownHTTPServer(self._process) if self._process: self._process.wait() self._process = None + # Wait a bit to make sure the ports are free'd up + time.sleep(2) + + if '__main__' == __name__: # Provide some command line params for starting/stopping the http server # manually. Also used in ui_tests to run http layout tests in a browser. diff --git a/webkit/tools/layout_tests/layout_package/http_server_base.py b/webkit/tools/layout_tests/layout_package/http_server_base.py deleted file mode 100644 index 5dc27d0..0000000 --- a/webkit/tools/layout_tests/layout_package/http_server_base.py +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright (c) 2009 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Base class with common routines between the Apache and Lighttpd servers.""" - -import time - -import google.httpd_utils - -class HttpServerBase(object): - def WaitForAction(self, action): - """Repeat the action for 20 seconds or until it succeeds. Returns whether - it succeeded.""" - succeeded = False - - start_time = time.time() - while time.time() - start_time < 20 and not succeeded: - time.sleep(0.1) - succeeded = action() - - return succeeded - - def IsServerRunningOnAllPorts(self): - """Returns whether the server is running on all the desired ports.""" - for mapping in self.mappings: - if 'sslcert' in mapping: - http_suffix = 's' - else: - http_suffix = '' - - url = 'http%s://127.0.0.1:%d/' % (http_suffix, mapping['port']) - if not google.httpd_utils.UrlIsAlive(url): - return False - - return True diff --git a/webkit/tools/layout_tests/layout_package/platform_utils_linux.py b/webkit/tools/layout_tests/layout_package/platform_utils_linux.py index c5772b4..6b3501c 100644 --- a/webkit/tools/layout_tests/layout_package/platform_utils_linux.py +++ b/webkit/tools/layout_tests/layout_package/platform_utils_linux.py @@ -115,7 +115,7 @@ def ShutDownHTTPServer(server_process): # processes not started by http_server.py, but good enough for now. subprocess.call(['killall', '-u', os.getenv('USER'), '-TERM', 'lighttpd']) else: - os.kill(server_process.pid, signal.SIGKILL) + os.kill(server_process.pid, signal.SIGTERM) def KillProcess(pid): """Forcefully kill the process. diff --git a/webkit/tools/layout_tests/layout_package/platform_utils_mac.py b/webkit/tools/layout_tests/layout_package/platform_utils_mac.py index 96f176f..a7ed086 100644 --- a/webkit/tools/layout_tests/layout_package/platform_utils_mac.py +++ b/webkit/tools/layout_tests/layout_package/platform_utils_mac.py @@ -110,7 +110,7 @@ def ShutDownHTTPServer(server_process): stderr=null) null.close() else: - os.kill(server_process.pid, signal.SIGKILL) + os.kill(server_process.pid, signal.SIGTERM) def KillProcess(pid): """Forcefully kill the process. diff --git a/webkit/tools/layout_tests/run_webkit_tests.py b/webkit/tools/layout_tests/run_webkit_tests.py index 131ae9e..d0660de 100755 --- a/webkit/tools/layout_tests/run_webkit_tests.py +++ b/webkit/tools/layout_tests/run_webkit_tests.py @@ -133,8 +133,7 @@ class TestRunner: self._http_server = apache_http_server.LayoutTestApacheHttpd( options.results_directory) else: - self._http_server = http_server.Lighttpd(options.results_directory, - num_workers=self._options.num_test_shells) + self._http_server = http_server.Lighttpd(options.results_directory) self._shardable_directories = ['chrome', 'LayoutTests', 'pending', 'fast', 'svg'] |