Rework restart facility to be more portable

pull/2788/head
Craig Tiller 10 years ago
parent a13482546b
commit ef12559f0f
  1. 18
      tools/run_tests/port_server.py
  2. 7
      tools/run_tests/run_tests.py

@ -81,9 +81,13 @@ def allocate_port():
return port return port
keep_running = True
class Handler(BaseHTTPServer.BaseHTTPRequestHandler): class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self): def do_GET(self):
global keep_running
if self.path == '/get': if self.path == '/get':
# allocate a new port, it will stay bound for ten minutes and until # allocate a new port, it will stay bound for ten minutes and until
# it's unused # it's unused
@ -93,13 +97,21 @@ class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
p = allocate_port() p = allocate_port()
self.log_message('allocated port %d' % p) self.log_message('allocated port %d' % p)
self.wfile.write('%d' % p) self.wfile.write('%d' % p)
elif self.path == '/version_and_pid': elif self.path == '/version':
# fetch a version string and the current process pid # fetch a version string and the current process pid
self.send_response(200) self.send_response(200)
self.send_header('Content-Type', 'text/plain') self.send_header('Content-Type', 'text/plain')
self.end_headers() self.end_headers()
self.wfile.write('%s+%d' % (_MY_VERSION, os.getpid())) self.wfile.write(_MY_VERSION)
elif self.path == '/quit':
self.send_response(200)
self.end_headers()
keep_running = False
httpd = BaseHTTPServer.HTTPServer(('', args.port), Handler)
while keep_running:
httpd.handle_request()
BaseHTTPServer.HTTPServer(('', args.port), Handler).serve_forever() print 'done'

@ -38,7 +38,6 @@ import json
import multiprocessing import multiprocessing
import os import os
import platform import platform
import psutil
import random import random
import re import re
import subprocess import subprocess
@ -532,8 +531,7 @@ def _start_port_server(port_server_port):
# if not running ==> start a new one # if not running ==> start a new one
# otherwise, leave it up # otherwise, leave it up
try: try:
version, _, pid = urllib2.urlopen( version = urllib2.urlopen('http://localhost:%d/version' % port_server_port).read()
'http://localhost:%d/version_and_pid' % port_server_port).read().partition('+')
running = True running = True
except Exception: except Exception:
running = False running = False
@ -542,7 +540,8 @@ def _start_port_server(port_server_port):
current_version = hashlib.sha1(f.read()).hexdigest() current_version = hashlib.sha1(f.read()).hexdigest()
running = (version == current_version) running = (version == current_version)
if not running: if not running:
psutil.Process(int(pid)).terminate() urllib2.urlopen('http://localhost:%d/quit' % port_server_port).read()
time.sleep(1)
if not running: if not running:
port_log = open('portlog.txt', 'w') port_log = open('portlog.txt', 'w')
port_server = subprocess.Popen( port_server = subprocess.Popen(

Loading…
Cancel
Save