Skip to content
Snippets Groups Projects
Commit 5474c6b3 authored by Craig Tiller's avatar Craig Tiller
Browse files

Merge branch 'traceback_port_server' of github.com:dgquintas/grpc into always-use-port-server

parents cba864bf 46a1cca0
Branches
Tags
No related merge requests found
...@@ -30,106 +30,112 @@ ...@@ -30,106 +30,112 @@
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
# must be synchronized with test/core/utils/port_server_client.h # must be synchronized with test/core/utils/port_server_client.h
_PORT_SERVER_PORT = 32766 _PORT_SERVER_PORT = 32766
def start_port_server(): def start_port_server():
# check if a compatible port server is running # check if a compatible port server is running
# if incompatible (version mismatch) ==> start a new one # if incompatible (version mismatch) ==> start a new one
# 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(
'http://localhost:%d/version_number' % port_server_port, urllib.request.urlopen(
timeout=10).read()) 'http://localhost:%d/version_number' % _PORT_SERVER_PORT,
print('detected port server running version %d' % version) timeout=10).read())
running = True logging.info('detected port server running version %d', version)
except Exception as e: running = True
print('failed to detect port server: %s' % sys.exc_info()[0]) except Exception as e:
print(e.strerror) logging.exception('failed to detect port server')
running = False running = False
if running: if running:
current_version = int(subprocess.check_output( current_version = int(
[sys.executable, subprocess.check_output([
os.path.abspath('tools/run_tests/python_utils/port_server.py'), sys.executable, os.path.abspath(
'dump_version'])) 'tools/run_tests/python_utils/port_server.py'),
print('my port server is version %d' % current_version) 'dump_version'
running = (version >= current_version) ]))
logging.info('my port server is version %d', current_version)
running = (version >= current_version)
if not running:
logging.info('port_server version mismatch: killing the old one')
urllib.request.urlopen('http://localhost:%d/quitquitquit' %
_PORT_SERVER_PORT).read()
time.sleep(1)
if not running: if not running:
print('port_server version mismatch: killing the old one') fd, logfile = tempfile.mkstemp()
urllib.request.urlopen('http://localhost:%d/quitquitquit' % os.close(fd)
port_server_port).read() logging.info('starting port_server, with log file %s', logfile)
time.sleep(1) args = [
if not running: sys.executable,
fd, logfile = tempfile.mkstemp()
os.close(fd)
print('starting port_server, with log file %s' % logfile)
args = [sys.executable,
os.path.abspath('tools/run_tests/python_utils/port_server.py'), os.path.abspath('tools/run_tests/python_utils/port_server.py'),
'-p', '%d' % port_server_port, '-l', logfile] '-p', '%d' % _PORT_SERVER_PORT, '-l', logfile
env = dict(os.environ) ]
env['BUILD_ID'] = 'pleaseDontKillMeJenkins' env = dict(os.environ)
if jobset.platform_string() == 'windows': env['BUILD_ID'] = 'pleaseDontKillMeJenkins'
# Working directory of port server needs to be outside of Jenkins if jobset.platform_string() == 'windows':
# workspace to prevent file lock issues. # Working directory of port server needs to be outside of Jenkins
tempdir = tempfile.mkdtemp() # workspace to prevent file lock issues.
port_server = subprocess.Popen( tempdir = tempfile.mkdtemp()
args, port_server = subprocess.Popen(
env=env, args,
cwd=tempdir, env=env,
creationflags = 0x00000008, # detached process cwd=tempdir,
close_fds=True) creationflags=0x00000008, # detached process
else: close_fds=True)
port_server = subprocess.Popen( else:
args, port_server = subprocess.Popen(
env=env, args, env=env, preexec_fn=os.setsid, close_fds=True)
preexec_fn=os.setsid,
close_fds=True)
time.sleep(1)
# ensure port server is up
waits = 0
while True:
if waits > 10:
print('killing port server due to excessive start up waits')
port_server.kill()
if port_server.poll() is not None:
print('port_server failed to start')
# try one final time: maybe another build managed to start one
time.sleep(1) time.sleep(1)
try: # ensure port server is up
urllib.request.urlopen('http://localhost:%d/get' % port_server_port, waits = 0
timeout=1).read() while True:
print('last ditch attempt to contact port server succeeded') if waits > 10:
break logging.warning(
except: 'killing port server due to excessive start up waits')
traceback.print_exc() port_server.kill()
port_log = open(logfile, 'r').read() if port_server.poll() is not None:
print(port_log) logging.error('port_server failed to start')
sys.exit(1) # try one final time: maybe another build managed to start one
try: time.sleep(1)
urllib.request.urlopen('http://localhost:%d/get' % port_server_port, try:
urllib.request.urlopen(
'http://localhost:%d/get' % _PORT_SERVER_PORT,
timeout=1).read() timeout=1).read()
print('port server is up and ready') logging.info(
break 'last ditch attempt to contact port server succeeded')
except socket.timeout: break
print('waiting for port_server: timeout') except:
traceback.print_exc(); logging.exception(
time.sleep(1) 'final attempt to contact port server failed')
waits += 1 port_log = open(logfile, 'r').read()
except urllib.error.URLError: print(port_log)
print('waiting for port_server: urlerror') sys.exit(1)
traceback.print_exc(); try:
time.sleep(1) port_server_url = 'http://localhost:%d/get' % _PORT_SERVER_PORT
waits += 1 urllib.request.urlopen(port_server_url, timeout=1).read()
except: logging.info('port server is up and ready')
traceback.print_exc() break
port_server.kill() except socket.timeout:
raise logging.exception('while waiting for port_server')
time.sleep(1)
waits += 1
except urllib.error.URLError:
logging.exception('while waiting for port_server')
time.sleep(1)
waits += 1
except:
logging.exception('error while contacting port server at "%s".'
'Will try killing it.', port_server_url)
port_server.kill()
raise
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment