alts: Initialize ProtocolNegotiators eagerly

This simplifies the construction process, as we have fewer "interesting"
phases to weed through.
This commit is contained in:
Eric Anderson 2018-08-31 16:37:42 -07:00
parent b0f423295b
commit 6f71472cf4
2 changed files with 53 additions and 46 deletions

View File

@ -140,7 +140,22 @@ public final class AltsChannelBuilder extends ForwardingChannelBuilder<AltsChann
} }
} }
TcpfFactory tcpfFactory = new TcpfFactory(); final AltsClientOptions handshakerOptions = handshakerOptionsBuilder.build();
TsiHandshakerFactory altsHandshakerFactory =
new TsiHandshakerFactory() {
@Override
public TsiHandshaker newHandshaker() {
// Used the shared grpc channel to connecting to the ALTS handshaker service.
// TODO: Release the channel if it is not used.
// https://github.com/grpc/grpc-java/issues/4755.
return AltsTsiHandshaker.newClient(
HandshakerServiceGrpc.newStub(handshakerChannelPool.getObject()),
handshakerOptions);
}
};
AltsProtocolNegotiator negotiator = AltsProtocolNegotiator.create(altsHandshakerFactory);
TcpfFactory tcpfFactory = new TcpfFactory(handshakerOptions, negotiator);
InternalNettyChannelBuilder.setDynamicTransportParamsFactory(delegate(), tcpfFactory); InternalNettyChannelBuilder.setDynamicTransportParamsFactory(delegate(), tcpfFactory);
tcpfFactoryForTest = tcpfFactory; tcpfFactoryForTest = tcpfFactory;
@ -162,22 +177,15 @@ public final class AltsChannelBuilder extends ForwardingChannelBuilder<AltsChann
return tcpfFactoryForTest.handshakerOptions; return tcpfFactoryForTest.handshakerOptions;
} }
private final class TcpfFactory implements TransportCreationParamsFilterFactory { private static final class TcpfFactory implements TransportCreationParamsFilterFactory {
final AltsClientOptions handshakerOptions = handshakerOptionsBuilder.build(); final AltsClientOptions handshakerOptions;
private final AltsProtocolNegotiator negotiator;
private final TsiHandshakerFactory altsHandshakerFactory = public TcpfFactory(AltsClientOptions handshakerOptions, AltsProtocolNegotiator negotiator) {
new TsiHandshakerFactory() { this.handshakerOptions = handshakerOptions;
@Override this.negotiator = negotiator;
public TsiHandshaker newHandshaker() { }
// Used the shared grpc channel to connecting to the ALTS handshaker service.
// TODO: Release the channel if it is not used.
// https://github.com/grpc/grpc-java/issues/4755.
return AltsTsiHandshaker.newClient(
HandshakerServiceGrpc.newStub(handshakerChannelPool.getObject()),
handshakerOptions);
}
};
@Override @Override
public TransportCreationParamsFilter create( public TransportCreationParamsFilter create(
@ -189,8 +197,6 @@ public final class AltsChannelBuilder extends ForwardingChannelBuilder<AltsChann
serverAddress instanceof InetSocketAddress, serverAddress instanceof InetSocketAddress,
"%s must be a InetSocketAddress", "%s must be a InetSocketAddress",
serverAddress); serverAddress);
final AltsProtocolNegotiator negotiator =
AltsProtocolNegotiator.create(altsHandshakerFactory);
return new TransportCreationParamsFilter() { return new TransportCreationParamsFilter() {
@Override @Override
public SocketAddress getTargetServerAddress() { public SocketAddress getTargetServerAddress() {

View File

@ -61,10 +61,36 @@ public final class GoogleDefaultChannelBuilder
extends ForwardingChannelBuilder<GoogleDefaultChannelBuilder> { extends ForwardingChannelBuilder<GoogleDefaultChannelBuilder> {
private final NettyChannelBuilder delegate; private final NettyChannelBuilder delegate;
private final TcpfFactory tcpfFactory = new TcpfFactory(); private final TcpfFactory tcpfFactory;
private GoogleDefaultChannelBuilder(String target) { private GoogleDefaultChannelBuilder(String target) {
delegate = NettyChannelBuilder.forTarget(target); delegate = NettyChannelBuilder.forTarget(target);
final AltsClientOptions handshakerOptions =
new AltsClientOptions.Builder()
.setRpcProtocolVersions(RpcProtocolVersionsUtil.getRpcProtocolVersions())
.build();
TsiHandshakerFactory altsHandshakerFactory =
new TsiHandshakerFactory() {
@Override
public TsiHandshaker newHandshaker() {
// Used the shared grpc channel to connecting to the ALTS handshaker service.
// TODO: Release the channel if it is not used.
// https://github.com/grpc/grpc-java/issues/4755.
ManagedChannel channel =
SharedResourceHolder.get(HandshakerServiceChannel.SHARED_HANDSHAKER_CHANNEL);
return AltsTsiHandshaker.newClient(
HandshakerServiceGrpc.newStub(channel), handshakerOptions);
}
};
SslContext sslContext;
try {
sslContext = GrpcSslContexts.forClient().build();
} catch (SSLException ex) {
throw new RuntimeException(ex);
}
tcpfFactory = new TcpfFactory(
new GoogleDefaultProtocolNegotiator(altsHandshakerFactory, sslContext));
InternalNettyChannelBuilder.setDynamicTransportParamsFactory(delegate(), tcpfFactory); InternalNettyChannelBuilder.setDynamicTransportParamsFactory(delegate(), tcpfFactory);
} }
@ -104,33 +130,10 @@ public final class GoogleDefaultChannelBuilder
} }
private static final class TcpfFactory implements TransportCreationParamsFilterFactory { private static final class TcpfFactory implements TransportCreationParamsFilterFactory {
private final GoogleDefaultProtocolNegotiator negotiator;
private final SslContext sslContext; private TcpfFactory(GoogleDefaultProtocolNegotiator negotiator) {
private final AltsClientOptions handshakerOptions = this.negotiator = negotiator;
new AltsClientOptions.Builder()
.setRpcProtocolVersions(RpcProtocolVersionsUtil.getRpcProtocolVersions())
.build();
private final TsiHandshakerFactory altsHandshakerFactory =
new TsiHandshakerFactory() {
@Override
public TsiHandshaker newHandshaker() {
// Used the shared grpc channel to connecting to the ALTS handshaker service.
// TODO: Release the channel if it is not used.
// https://github.com/grpc/grpc-java/issues/4755.
ManagedChannel channel =
SharedResourceHolder.get(HandshakerServiceChannel.SHARED_HANDSHAKER_CHANNEL);
return AltsTsiHandshaker.newClient(
HandshakerServiceGrpc.newStub(channel), handshakerOptions);
}
};
private TcpfFactory() {
try {
sslContext = GrpcSslContexts.forClient().build();
} catch (SSLException ex) {
throw new RuntimeException(ex);
}
} }
@Override @Override
@ -143,8 +146,6 @@ public final class GoogleDefaultChannelBuilder
serverAddress instanceof InetSocketAddress, serverAddress instanceof InetSocketAddress,
"%s must be a InetSocketAddress", "%s must be a InetSocketAddress",
serverAddress); serverAddress);
final GoogleDefaultProtocolNegotiator negotiator =
new GoogleDefaultProtocolNegotiator(altsHandshakerFactory, sslContext);
return new TransportCreationParamsFilter() { return new TransportCreationParamsFilter() {
@Override @Override
public SocketAddress getTargetServerAddress() { public SocketAddress getTargetServerAddress() {