Merge pull request #3635 from ctiller/be-useful

Add a more useful log message when failing to connect
pull/3637/head
Yang Gao 9 years ago
commit e1d8d4dc1b
  1. 14
      src/core/iomgr/tcp_client_posix.c
  2. 14
      test/core/util/port_posix.c
  3. 10
      tools/run_tests/run_tests.py

@ -141,7 +141,8 @@ static void on_writable(grpc_exec_ctx *exec_ctx, void *acp, int success) {
err = getsockopt(fd->fd, SOL_SOCKET, SO_ERROR, &so_error, &so_error_size); err = getsockopt(fd->fd, SOL_SOCKET, SO_ERROR, &so_error, &so_error_size);
} while (err < 0 && errno == EINTR); } while (err < 0 && errno == EINTR);
if (err < 0) { if (err < 0) {
gpr_log(GPR_ERROR, "getsockopt(ERROR): %s", strerror(errno)); gpr_log(GPR_ERROR, "failed to connect to '%s': getsockopt(ERROR): %s",
ac->addr_str, strerror(errno));
goto finish; goto finish;
} else if (so_error != 0) { } else if (so_error != 0) {
if (so_error == ENOBUFS) { if (so_error == ENOBUFS) {
@ -166,10 +167,14 @@ static void on_writable(grpc_exec_ctx *exec_ctx, void *acp, int success) {
} else { } else {
switch (so_error) { switch (so_error) {
case ECONNREFUSED: case ECONNREFUSED:
gpr_log(GPR_ERROR, "socket error: connection refused"); gpr_log(
GPR_ERROR,
"failed to connect to '%s': socket error: connection refused",
ac->addr_str);
break; break;
default: default:
gpr_log(GPR_ERROR, "socket error: %d", so_error); gpr_log(GPR_ERROR, "failed to connect to '%s': socket error: %d",
ac->addr_str, so_error);
break; break;
} }
goto finish; goto finish;
@ -181,7 +186,8 @@ static void on_writable(grpc_exec_ctx *exec_ctx, void *acp, int success) {
goto finish; goto finish;
} }
} else { } else {
gpr_log(GPR_ERROR, "on_writable failed during connect"); gpr_log(GPR_ERROR, "failed to connect to '%s': timeout occurred",
ac->addr_str);
goto finish; goto finish;
} }

@ -213,15 +213,25 @@ static void got_port_from_server(grpc_exec_ctx *exec_ctx, void *arg,
size_t i; size_t i;
int port = 0; int port = 0;
portreq *pr = arg; portreq *pr = arg;
int failed = 0;
if (!response || response->status != 200) { if (!response) {
failed = 1;
gpr_log(GPR_DEBUG,
"failed port pick from server: retrying [response=NULL]");
} else if (response->status != 200) {
failed = 1;
gpr_log(GPR_DEBUG, "failed port pick from server: status=%d",
response->status);
}
if (failed) {
grpc_httpcli_request req; grpc_httpcli_request req;
memset(&req, 0, sizeof(req)); memset(&req, 0, sizeof(req));
GPR_ASSERT(pr->retries < 10); GPR_ASSERT(pr->retries < 10);
pr->retries++; pr->retries++;
req.host = pr->server; req.host = pr->server;
req.path = "/get"; req.path = "/get";
gpr_log(GPR_DEBUG, "failed port pick from server: retrying");
sleep(1); sleep(1);
grpc_httpcli_get(exec_ctx, pr->ctx, &pr->pollset, &req, grpc_httpcli_get(exec_ctx, pr->ctx, &pr->pollset, &req,
GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), got_port_from_server, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10), got_port_from_server,

@ -715,17 +715,21 @@ def _start_port_server(port_server_port):
try: try:
version = urllib2.urlopen('http://localhost:%d/version' % port_server_port, version = urllib2.urlopen('http://localhost:%d/version' % port_server_port,
timeout=1).read() timeout=1).read()
print 'detected port server running'
running = True running = True
except Exception: except Exception:
print 'failed to detect port server: %s' % sys.exc_info()[0]
running = False running = False
if running: if running:
with open('tools/run_tests/port_server.py') as f: with open('tools/run_tests/port_server.py') as f:
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:
print 'port_server version mismatch: killing the old one'
urllib2.urlopen('http://localhost:%d/quit' % port_server_port).read() urllib2.urlopen('http://localhost:%d/quit' % port_server_port).read()
time.sleep(1) time.sleep(1)
if not running: if not running:
print 'starting port_server'
port_log = open('portlog.txt', 'w') port_log = open('portlog.txt', 'w')
port_server = subprocess.Popen( port_server = subprocess.Popen(
['python2.7', 'tools/run_tests/port_server.py', '-p', '%d' % port_server_port], ['python2.7', 'tools/run_tests/port_server.py', '-p', '%d' % port_server_port],
@ -737,7 +741,7 @@ def _start_port_server(port_server_port):
if waits > 10: if waits > 10:
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" print 'port_server failed to start'
port_log = open('portlog.txt', 'r').read() port_log = open('portlog.txt', 'r').read()
print port_log print port_log
sys.exit(1) sys.exit(1)
@ -746,11 +750,11 @@ def _start_port_server(port_server_port):
timeout=1).read() timeout=1).read()
break break
except socket.timeout: except socket.timeout:
print "waiting for port_server" print 'waiting for port_server: timeout'
time.sleep(0.5) time.sleep(0.5)
waits += 1 waits += 1
except urllib2.URLError: except urllib2.URLError:
print "waiting for port_server" print 'waiting for port_server: urlerror'
time.sleep(0.5) time.sleep(0.5)
waits += 1 waits += 1
except: except:

Loading…
Cancel
Save