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);
tcpfFactoryForTest = tcpfFactory;
@ -162,22 +177,15 @@ public final class AltsChannelBuilder extends ForwardingChannelBuilder<AltsChann
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 =
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);
}
};
public TcpfFactory(AltsClientOptions handshakerOptions, AltsProtocolNegotiator negotiator) {
this.handshakerOptions = handshakerOptions;
this.negotiator = negotiator;
}
@Override
public TransportCreationParamsFilter create(
@ -189,8 +197,6 @@ public final class AltsChannelBuilder extends ForwardingChannelBuilder<AltsChann
serverAddress instanceof InetSocketAddress,
"%s must be a InetSocketAddress",
serverAddress);
final AltsProtocolNegotiator negotiator =
AltsProtocolNegotiator.create(altsHandshakerFactory);
return new TransportCreationParamsFilter() {
@Override
public SocketAddress getTargetServerAddress() {

View File

@ -61,10 +61,36 @@ public final class GoogleDefaultChannelBuilder
extends ForwardingChannelBuilder<GoogleDefaultChannelBuilder> {
private final NettyChannelBuilder delegate;
private final TcpfFactory tcpfFactory = new TcpfFactory();
private final TcpfFactory tcpfFactory;
private GoogleDefaultChannelBuilder(String 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);
}
@ -104,33 +130,10 @@ public final class GoogleDefaultChannelBuilder
}
private static final class TcpfFactory implements TransportCreationParamsFilterFactory {
private final GoogleDefaultProtocolNegotiator negotiator;
private final SslContext sslContext;
private final AltsClientOptions handshakerOptions =
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);
}
private TcpfFactory(GoogleDefaultProtocolNegotiator negotiator) {
this.negotiator = negotiator;
}
@Override
@ -143,8 +146,6 @@ public final class GoogleDefaultChannelBuilder
serverAddress instanceof InetSocketAddress,
"%s must be a InetSocketAddress",
serverAddress);
final GoogleDefaultProtocolNegotiator negotiator =
new GoogleDefaultProtocolNegotiator(altsHandshakerFactory, sslContext);
return new TransportCreationParamsFilter() {
@Override
public SocketAddress getTargetServerAddress() {