From cad47e4de8a2d19d6c815922d01094e16d85c100 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Thu, 19 Apr 2018 16:10:48 -0700 Subject: [PATCH 1/2] Update benchmark code to handle both implementations --- test/package.json | 4 +++- test/performance/benchmark_client.js | 16 +++++++++++----- test/performance/benchmark_client_express.js | 2 +- test/performance/benchmark_server.js | 19 ++++++++++++------- test/performance/benchmark_server_express.js | 4 ++-- test/performance/worker.js | 15 ++++++++++----- 6 files changed, 39 insertions(+), 21 deletions(-) diff --git a/test/package.json b/test/package.json index 306e3f73..76423297 100644 --- a/test/package.json +++ b/test/package.json @@ -14,7 +14,9 @@ } ], "dependencies": { + "express": "^4.16.3", "google-auth-library": "^0.9.2", - "lodash": "^4.17.4" + "lodash": "^4.17.4", + "poisson-process": "^1.0.0" } } diff --git a/test/performance/benchmark_client.js b/test/performance/benchmark_client.js index 974edc01..7da0003b 100644 --- a/test/performance/benchmark_client.js +++ b/test/performance/benchmark_client.js @@ -36,10 +36,16 @@ var Histogram = require('./histogram'); var genericService = require('./generic_service'); // TODO(murgatroid99): use multiple grpc implementations -var grpc = require('grpc'); -var serviceProto = grpc.load({ - root: __dirname + '/../packages/grpc-native-core/ext/grpc', - file: 'src/proto/grpc/testing/services.proto'}).grpc.testing; +var grpc = require('../any_grpc').client; +var protoLoader = require('../../packages/grpc-protobufjs'); +var protoPackage = protoLoader.loadSync( + 'src/proto/grpc/testing/services.proto', + {keepCase: true, + defaults: true, + enums: String, + oneofs: true, + include: [__dirname + '/../../packages/grpc-native-core/deps/grpc']}); +var serviceProto = grpc.loadPackageDefinition(protoPackage).grpc.testing; /** * Create a buffer filled with size zeroes @@ -82,7 +88,7 @@ function BenchmarkClient(server_targets, channels, histogram_params, if (security_params) { var ca_path; if (security_params.use_test_ca) { - ca_path = path.join(__dirname, '../test/data/ca.pem'); + ca_path = path.join(__dirname, '../data/ca.pem'); var ca_data = fs.readFileSync(ca_path); creds = grpc.credentials.createSsl(ca_data); } else { diff --git a/test/performance/benchmark_client_express.js b/test/performance/benchmark_client_express.js index 815843fe..f8be6d45 100644 --- a/test/performance/benchmark_client_express.js +++ b/test/performance/benchmark_client_express.js @@ -60,7 +60,7 @@ function BenchmarkClient(server_targets, channels, histogram_params, protocol = https; this.request = _.bind(https.request, https); if (security_params.use_test_ca) { - ca_path = path.join(__dirname, '../test/data/ca.pem'); + ca_path = path.join(__dirname, '../data/ca.pem'); var ca_data = fs.readFileSync(ca_path); options.ca = ca_data; } diff --git a/test/performance/benchmark_server.js b/test/performance/benchmark_server.js index a39c5ec6..0cfa8506 100644 --- a/test/performance/benchmark_server.js +++ b/test/performance/benchmark_server.js @@ -30,11 +30,16 @@ var util = require('util'); var genericService = require('./generic_service'); -// TODO(murgatroid99): use multiple grpc implementations -var grpc = require('grpc'); -var serviceProto = grpc.load({ - root: __dirname + '/../packages/grpc-native-core/ext/grpc', - file: 'src/proto/grpc/testing/services.proto'}).grpc.testing; +var grpc = require('../any_grpc').server; +var protoLoader = require('../../packages/grpc-protobufjs'); +var protoPackage = protoLoader.loadSync( + 'src/proto/grpc/testing/services.proto', + {keepCase: true, + defaults: true, + enums: String, + oneofs: true, + include: [__dirname + '/../../packages/grpc-native-core/deps/grpc']}); +var serviceProto = grpc.loadPackageDefinition(protoPackage).grpc.testing; /** * Create a buffer filled with size zeroes @@ -106,8 +111,8 @@ function BenchmarkServer(host, port, tls, generic, response_size) { var server_creds; var host_override; if (tls) { - var key_path = path.join(__dirname, '../test/data/server1.key'); - var pem_path = path.join(__dirname, '../test/data/server1.pem'); + var key_path = path.join(__dirname, '../data/server1.key'); + var pem_path = path.join(__dirname, '../data/server1.pem'); var key_data = fs.readFileSync(key_path); var pem_data = fs.readFileSync(pem_path); diff --git a/test/performance/benchmark_server_express.js b/test/performance/benchmark_server_express.js index 73e54091..657006f9 100644 --- a/test/performance/benchmark_server_express.js +++ b/test/performance/benchmark_server_express.js @@ -47,8 +47,8 @@ function BenchmarkServer(host, port, tls, generic, response_size) { this.input_port = port; if (tls) { var credentials = {}; - var key_path = path.join(__dirname, '../test/data/server1.key'); - var pem_path = path.join(__dirname, '../test/data/server1.pem'); + var key_path = path.join(__dirname, '../data/server1.key'); + var pem_path = path.join(__dirname, '../data/server1.pem'); var key_data = fs.readFileSync(key_path); var pem_data = fs.readFileSync(pem_path); diff --git a/test/performance/worker.js b/test/performance/worker.js index 5a3f114e..d138536f 100644 --- a/test/performance/worker.js +++ b/test/performance/worker.js @@ -21,11 +21,16 @@ var console = require('console'); var WorkerServiceImpl = require('./worker_service_impl'); -// TODO(murgatroid99): use multiple grpc implementations -var grpc = require('grpc'); -var serviceProto = grpc.load({ - root: __dirname + '/../packages/grpc-native-core/ext/grpc', - file: 'src/proto/grpc/testing/services.proto'}).grpc.testing; +var grpc = require('../any_grpc').server; +var protoLoader = require('../../packages/grpc-protobufjs'); +var protoPackage = protoLoader.loadSync( + 'src/proto/grpc/testing/services.proto', + {keepCase: true, + defaults: true, + enums: String, + oneofs: true, + include: [__dirname + '/../../packages/grpc-native-core/deps/grpc']}); +var serviceProto = grpc.loadPackageDefinition(protoPackage).grpc.testing; function runServer(port, benchmark_impl) { var server_creds = grpc.ServerCredentials.createInsecure(); From 0b075f18bb4c041f6c188313fea4215269e5ce61 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Fri, 20 Apr 2018 14:46:51 -0700 Subject: [PATCH 2/2] Add subchannel error handler, copy waitForReady wrapper from 1.11 --- packages/grpc-js-core/src/channel.ts | 1 + packages/grpc-js-core/src/index.ts | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/packages/grpc-js-core/src/channel.ts b/packages/grpc-js-core/src/channel.ts index e710b733..44dcfae7 100644 --- a/packages/grpc-js-core/src/channel.ts +++ b/packages/grpc-js-core/src/channel.ts @@ -191,6 +191,7 @@ export class Http2Channel extends EventEmitter implements Channel { ConnectivityState.TRANSIENT_FAILURE); }; subChannel.once('close', this.subChannelCloseCallback); + subChannel.once('error', this.subChannelCloseCallback); } constructor( diff --git a/packages/grpc-js-core/src/index.ts b/packages/grpc-js-core/src/index.ts index 5a3f6025..95328f9c 100644 --- a/packages/grpc-js-core/src/index.ts +++ b/packages/grpc-js-core/src/index.ts @@ -85,3 +85,8 @@ export { * @param client The client to close. */ export const closeClient = (client: Client) => client.close(); + +export const waitForClientReady = + (client: Client, deadline: Date|number, + callback: (error: Error|null) => void) => + client.waitForReady(deadline, callback);