aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2017-04-25 10:19:53 -0700
committerGravatar GitHub <noreply@github.com>2017-04-25 10:19:53 -0700
commitb864e7c41c6d0363e23093fb090625f260994962 (patch)
tree6797e6ad381ec2f5df733aae6d9c8f27e3ecc33b
parentb219338e5426ae6fc483d568432fcf3ca110a279 (diff)
parent09ebed7bf4c19a8c31195b44c8d911f39779323e (diff)
Merge pull request #10844 from ctiller/PSC
Fixes for test stability (especially microbenchmarks)
-rw-r--r--test/core/util/port_server_client.c4
-rw-r--r--test/cpp/microbenchmarks/fullstack_fixtures.h26
-rwxr-xr-xtools/jenkins/run_performance.sh1
-rwxr-xr-xtools/profiling/microbenchmarks/bm_diff.py27
-rwxr-xr-xtools/run_tests/python_utils/port_server.py7
5 files changed, 39 insertions, 26 deletions
diff --git a/test/core/util/port_server_client.c b/test/core/util/port_server_client.c
index 38054dd1e7..254c3a6b61 100644
--- a/test/core/util/port_server_client.c
+++ b/test/core/util/port_server_client.c
@@ -103,7 +103,7 @@ void grpc_free_port_using_server(int port) {
grpc_resource_quota *resource_quota =
grpc_resource_quota_create("port_server_client/free");
grpc_httpcli_get(&exec_ctx, &context, &pr.pops, resource_quota, &req,
- grpc_timeout_seconds_to_deadline(10),
+ grpc_timeout_seconds_to_deadline(30),
grpc_closure_create(freed_port_from_server, &pr,
grpc_schedule_on_exec_ctx),
&rsp);
@@ -235,7 +235,7 @@ int grpc_pick_port_using_server(void) {
grpc_resource_quota_create("port_server_client/pick");
grpc_httpcli_get(
&exec_ctx, &context, &pr.pops, resource_quota, &req,
- grpc_timeout_seconds_to_deadline(10),
+ grpc_timeout_seconds_to_deadline(30),
grpc_closure_create(got_port_from_server, &pr, grpc_schedule_on_exec_ctx),
&pr.response);
grpc_resource_quota_unref_internal(&exec_ctx, resource_quota);
diff --git a/test/cpp/microbenchmarks/fullstack_fixtures.h b/test/cpp/microbenchmarks/fullstack_fixtures.h
index f129ede26a..98aca1c346 100644
--- a/test/cpp/microbenchmarks/fullstack_fixtures.h
+++ b/test/cpp/microbenchmarks/fullstack_fixtures.h
@@ -113,13 +113,17 @@ class TCP : public FullstackFixture {
public:
TCP(Service* service, const FixtureConfiguration& fixture_configuration =
FixtureConfiguration())
- : FullstackFixture(service, fixture_configuration, MakeAddress()) {}
+ : FullstackFixture(service, fixture_configuration, MakeAddress(&port_)) {}
+
+ ~TCP() { grpc_recycle_unused_port(port_); }
private:
- static grpc::string MakeAddress() {
- int port = grpc_pick_unused_port_or_die();
+ int port_;
+
+ static grpc::string MakeAddress(int* port) {
+ *port = grpc_pick_unused_port_or_die();
std::stringstream addr;
- addr << "localhost:" << port;
+ addr << "localhost:" << *port;
return addr.str();
}
};
@@ -128,14 +132,18 @@ class UDS : public FullstackFixture {
public:
UDS(Service* service, const FixtureConfiguration& fixture_configuration =
FixtureConfiguration())
- : FullstackFixture(service, fixture_configuration, MakeAddress()) {}
+ : FullstackFixture(service, fixture_configuration, MakeAddress(&port_)) {}
+
+ ~UDS() { grpc_recycle_unused_port(port_); }
private:
- static grpc::string MakeAddress() {
- int port = grpc_pick_unused_port_or_die(); // just for a unique id - not a
- // real port
+ int port_;
+
+ static grpc::string MakeAddress(int* port) {
+ *port = grpc_pick_unused_port_or_die(); // just for a unique id - not a
+ // real port
std::stringstream addr;
- addr << "unix:/tmp/bm_fullstack." << port;
+ addr << "unix:/tmp/bm_fullstack." << *port;
return addr.str();
}
};
diff --git a/tools/jenkins/run_performance.sh b/tools/jenkins/run_performance.sh
index 544e31dcbd..f530fb46b8 100755
--- a/tools/jenkins/run_performance.sh
+++ b/tools/jenkins/run_performance.sh
@@ -37,4 +37,5 @@ BENCHMARKS_TO_RUN="bm_fullstack_unary_ping_pong bm_fullstack_streaming_ping_pong
# Enter the gRPC repo root
cd $(dirname $0)/../..
+tools/run_tests/start_port_server.py
tools/profiling/microbenchmarks/bm_diff.py -d origin/$ghprbTargetBranch -b $BENCHMARKS_TO_RUN
diff --git a/tools/profiling/microbenchmarks/bm_diff.py b/tools/profiling/microbenchmarks/bm_diff.py
index 6ee4cbfc7b..3c15478774 100755
--- a/tools/profiling/microbenchmarks/bm_diff.py
+++ b/tools/profiling/microbenchmarks/bm_diff.py
@@ -204,7 +204,10 @@ def eintr_be_gone(fn):
def read_json(filename):
- with open(filename) as f: return json.loads(f.read())
+ try:
+ with open(filename) as f: return json.loads(f.read())
+ except ValueError, e:
+ return None
def finalize():
@@ -217,16 +220,18 @@ def finalize():
js_old_ctr = read_json('%s.counters.old.%d.json' % (bm, loop))
js_old_opt = read_json('%s.opt.old.%d.json' % (bm, loop))
- for row in bm_json.expand_json(js_new_ctr, js_new_opt):
- print row
- name = row['cpp_name']
- if name.endswith('_mean') or name.endswith('_stddev'): continue
- benchmarks[name].add_sample(row, True)
- for row in bm_json.expand_json(js_old_ctr, js_old_opt):
- print row
- name = row['cpp_name']
- if name.endswith('_mean') or name.endswith('_stddev'): continue
- benchmarks[name].add_sample(row, False)
+ if js_new_ctr:
+ for row in bm_json.expand_json(js_new_ctr, js_new_opt):
+ print row
+ name = row['cpp_name']
+ if name.endswith('_mean') or name.endswith('_stddev'): continue
+ benchmarks[name].add_sample(row, True)
+ if js_old_ctr:
+ for row in bm_json.expand_json(js_old_ctr, js_old_opt):
+ print row
+ name = row['cpp_name']
+ if name.endswith('_mean') or name.endswith('_stddev'): continue
+ benchmarks[name].add_sample(row, False)
really_interesting = set()
for name, bm in benchmarks.items():
diff --git a/tools/run_tests/python_utils/port_server.py b/tools/run_tests/python_utils/port_server.py
index 522cbed9e1..e96ee0b08c 100755
--- a/tools/run_tests/python_utils/port_server.py
+++ b/tools/run_tests/python_utils/port_server.py
@@ -46,7 +46,7 @@ import threading
# increment this number whenever making a change to ensure that
# the changes are picked up by running CI servers
# note that all changes must be backwards compatible
-_MY_VERSION = 11
+_MY_VERSION = 14
if len(sys.argv) == 2 and sys.argv[1] == 'dump_version':
@@ -166,12 +166,11 @@ class Handler(BaseHTTPRequestHandler):
elif self.path == '/quitquitquit':
self.send_response(200)
self.end_headers()
- sys.exit(0)
+ self.server.shutdown()
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
"""Handle requests in a separate thread"""
-httpd = ThreadedHTTPServer(('', args.port), Handler)
-httpd.serve_forever()
+ThreadedHTTPServer(('', args.port), Handler).serve_forever()