Merge pull request #9739 from dgquintas/traceback_port_server

Port server missing import
pull/8501/merge
David G. Quintas 8 years ago committed by GitHub
commit f0355bfa0e
  1. 78
      tools/run_tests/python_utils/start_port_server.py

@ -30,13 +30,15 @@
from __future__ import print_function from __future__ import print_function
from six.moves import urllib from six.moves import urllib
import jobset
import logging
import os import os
import socket
import subprocess import subprocess
import tempfile
import sys import sys
import tempfile
import time import time
import jobset
import socket
def start_port_server(port_server_port): def start_port_server(port_server_port):
# check if a compatible port server is running # check if a compatible port server is running
@ -44,31 +46,38 @@ 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 = int(urllib.request.urlopen( version = int(
urllib.request.urlopen(
'http://localhost:%d/version_number' % port_server_port, 'http://localhost:%d/version_number' % port_server_port,
timeout=10).read()) timeout=10).read())
print('detected port server running version %d' % version) logging.info('detected port server running version %d', version)
running = True running = True
except Exception as e: except Exception as e:
print('failed to detect port server: %s' % sys.exc_info()[0]) logging.exception('failed to detect port server')
print(e.strerror)
running = False running = False
if running: if running:
current_version = int(subprocess.check_output( current_version = int(
[sys.executable, os.path.abspath('tools/run_tests/python_utils/port_server.py'), subprocess.check_output([
'dump_version'])) sys.executable, os.path.abspath(
print('my port server is version %d' % current_version) 'tools/run_tests/python_utils/port_server.py'),
'dump_version'
]))
logging.info('my port server is version %d', current_version)
running = (version >= current_version) running = (version >= current_version)
if not running: if not running:
print('port_server version mismatch: killing the old one') logging.info('port_server version mismatch: killing the old one')
urllib.request.urlopen('http://localhost:%d/quitquitquit' % port_server_port).read() urllib.request.urlopen('http://localhost:%d/quitquitquit' %
port_server_port).read()
time.sleep(1) time.sleep(1)
if not running: if not running:
fd, logfile = tempfile.mkstemp() fd, logfile = tempfile.mkstemp()
os.close(fd) os.close(fd)
print('starting port_server, with log file %s' % logfile) logging.info('starting port_server, with log file %s', logfile)
args = [sys.executable, os.path.abspath('tools/run_tests/python_utils/port_server.py'), args = [
'-p', '%d' % port_server_port, '-l', logfile] sys.executable,
os.path.abspath('tools/run_tests/python_utils/port_server.py'),
'-p', '%d' % port_server_port, '-l', logfile
]
env = dict(os.environ) env = dict(os.environ)
env['BUILD_ID'] = 'pleaseDontKillMeJenkins' env['BUILD_ID'] = 'pleaseDontKillMeJenkins'
if jobset.platform_string() == 'windows': if jobset.platform_string() == 'windows':
@ -79,52 +88,51 @@ def start_port_server(port_server_port):
args, args,
env=env, env=env,
cwd=tempdir, cwd=tempdir,
creationflags = 0x00000008, # detached process creationflags=0x00000008, # detached process
close_fds=True) close_fds=True)
else: else:
port_server = subprocess.Popen( port_server = subprocess.Popen(
args, args, env=env, preexec_fn=os.setsid, close_fds=True)
env=env,
preexec_fn=os.setsid,
close_fds=True)
time.sleep(1) time.sleep(1)
# ensure port server is up # ensure port server is up
waits = 0 waits = 0
while True: while True:
if waits > 10: if waits > 10:
print('killing port server due to excessive start up waits') logging.warning(
'killing port server due to excessive start up waits')
port_server.kill() port_server.kill()
if port_server.poll() is not None: if port_server.poll() is not None:
print('port_server failed to start') logging.error('port_server failed to start')
# try one final time: maybe another build managed to start one # try one final time: maybe another build managed to start one
time.sleep(1) time.sleep(1)
try: try:
urllib.request.urlopen('http://localhost:%d/get' % port_server_port, urllib.request.urlopen(
'http://localhost:%d/get' % port_server_port,
timeout=1).read() timeout=1).read()
print('last ditch attempt to contact port server succeeded') logging.info(
'last ditch attempt to contact port server succeeded')
break break
except: except:
traceback.print_exc() logging.exception(
'final attempt to contact port server failed')
port_log = open(logfile, 'r').read() port_log = open(logfile, 'r').read()
print(port_log) print(port_log)
sys.exit(1) sys.exit(1)
try: try:
urllib.request.urlopen('http://localhost:%d/get' % port_server_port, port_server_url = 'http://localhost:%d/get' % port_server_port
timeout=1).read() urllib.request.urlopen(port_server_url, timeout=1).read()
print('port server is up and ready') logging.info('port server is up and ready')
break break
except socket.timeout: except socket.timeout:
print('waiting for port_server: timeout') logging.exception('while waiting for port_server')
traceback.print_exc();
time.sleep(1) time.sleep(1)
waits += 1 waits += 1
except urllib.error.URLError: except urllib.error.URLError:
print('waiting for port_server: urlerror') logging.exception('while waiting for port_server')
traceback.print_exc();
time.sleep(1) time.sleep(1)
waits += 1 waits += 1
except: except:
traceback.print_exc() logging.exception('error while contacting port server at "%s".'
'Will try killing it.', port_server_url)
port_server.kill() port_server.kill()
raise raise

Loading…
Cancel
Save