alts: add debugging statements for ALTS
diff --git a/alts/src/main/java/io/grpc/alts/internal/AltsProtocolNegotiator.java b/alts/src/main/java/io/grpc/alts/internal/AltsProtocolNegotiator.java
index 300fd78..bebf968 100644
--- a/alts/src/main/java/io/grpc/alts/internal/AltsProtocolNegotiator.java
+++ b/alts/src/main/java/io/grpc/alts/internal/AltsProtocolNegotiator.java
@@ -34,6 +34,8 @@
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.util.AsciiString;
+import java.util.logging.Level;
+import java.util.logging.Logger;
/**
* A GRPC {@link ProtocolNegotiator} for ALTS. This class creates a Netty handler that provides ALTS
@@ -41,6 +43,8 @@
*/
public abstract class AltsProtocolNegotiator implements ProtocolNegotiator {
+ private static final Logger logger = Logger.getLogger(AltsProtocolNegotiator.class.getName());
+
@Grpc.TransportAttr
public static final Attributes.Key<TsiPeer> TSI_PEER_KEY = Attributes.Key.create("TSI_PEER");
@Grpc.TransportAttr
@@ -51,46 +55,52 @@
/** Creates a negotiator used for ALTS client. */
public static AltsProtocolNegotiator createClientNegotiator(
final TsiHandshakerFactory handshakerFactory) {
- return new AltsProtocolNegotiator() {
+ final class ClientAltsProtocolNegotiator extends AltsProtocolNegotiator {
@Override
public Handler newHandler(GrpcHttp2ConnectionHandler grpcHandler) {
+ TsiHandshaker handshaker = handshakerFactory.newHandshaker(grpcHandler.getAuthority());
return new BufferUntilAltsNegotiatedHandler(
grpcHandler,
- new TsiHandshakeHandler(
- new NettyTsiHandshaker(
- handshakerFactory.newHandshaker(grpcHandler.getAuthority()))),
+ new TsiHandshakeHandler(new NettyTsiHandshaker(handshaker)),
new TsiFrameHandler());
}
@Override
public void close() {
+ logger.finest("ALTS Client ProtocolNegotiator Closed");
// TODO(jiangtaoli2016): release resources
}
- };
+ }
+
+ return new ClientAltsProtocolNegotiator();
}
/** Creates a negotiator used for ALTS server. */
public static AltsProtocolNegotiator createServerNegotiator(
final TsiHandshakerFactory handshakerFactory) {
- return new AltsProtocolNegotiator() {
+ final class ServerAltsProtocolNegotiator extends AltsProtocolNegotiator {
@Override
public Handler newHandler(GrpcHttp2ConnectionHandler grpcHandler) {
+ TsiHandshaker handshaker = handshakerFactory.newHandshaker(/*authority=*/ null);
return new BufferUntilAltsNegotiatedHandler(
grpcHandler,
- new TsiHandshakeHandler(new NettyTsiHandshaker(handshakerFactory.newHandshaker(null))),
+ new TsiHandshakeHandler(new NettyTsiHandshaker(handshaker)),
new TsiFrameHandler());
}
@Override
public void close() {
+ logger.finest("ALTS Server ProtocolNegotiator Closed");
// TODO(jiangtaoli2016): release resources
}
- };
+ }
+
+ return new ServerAltsProtocolNegotiator();
}
/** Buffers all writes until the ALTS handshake is complete. */
@VisibleForTesting
- static class BufferUntilAltsNegotiatedHandler extends AbstractBufferingHandler
+ static final class BufferUntilAltsNegotiatedHandler extends AbstractBufferingHandler
implements ProtocolNegotiator.Handler {
private final GrpcHttp2ConnectionHandler grpcHandler;
@@ -105,7 +115,8 @@
// TODO: Remove this once https://github.com/grpc/grpc-java/pull/3715 is in.
@Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
+ logger.log(Level.FINEST, "Exception while buffering for ALTS Negotiation", cause);
fail(ctx, cause);
ctx.fireExceptionCaught(cause);
}
@@ -117,6 +128,9 @@
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
+ if (logger.isLoggable(Level.FINEST)) {
+ logger.log(Level.FINEST, "User Event triggered while negotiating ALTS", new Object[]{evt});
+ }
if (evt instanceof TsiHandshakeCompletionEvent) {
TsiHandshakeCompletionEvent altsEvt = (TsiHandshakeCompletionEvent) evt;
if (altsEvt.isSuccess()) {
@@ -138,6 +152,7 @@
+ RpcProtocolVersionsUtil.getRpcProtocolVersions().toString()
+ "are not compatible with peer Rpc Protocol Versions "
+ altsContext.getPeerRpcVersions().toString();
+ logger.finest(errorMessage);
fail(ctx, Status.UNAVAILABLE.withDescription(errorMessage).asRuntimeException());
}
grpcHandler.handleProtocolNegotiationCompleted(
@@ -150,10 +165,11 @@
.build(),
new Security(new OtherSecurity("alts", Any.pack(altsContext.context))));
}
-
+ logger.finest("Flushing ALTS buffered data");
// Now write any buffered data and remove this handler.
writeBufferedAndRemove(ctx);
} else {
+ logger.log(Level.FINEST, "ALTS handshake failed", altsEvt.cause());
fail(ctx, unavailableException("ALTS handshake failed", altsEvt.cause()));
}
}
diff --git a/alts/src/main/java/io/grpc/alts/internal/TsiFrameHandler.java b/alts/src/main/java/io/grpc/alts/internal/TsiFrameHandler.java
index a7afca2..a2c1a1d 100644
--- a/alts/src/main/java/io/grpc/alts/internal/TsiFrameHandler.java
+++ b/alts/src/main/java/io/grpc/alts/internal/TsiFrameHandler.java
@@ -34,6 +34,8 @@
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;
+import java.util.logging.Level;
+import java.util.logging.Logger;
/**
* Encrypts and decrypts TSI Frames. Writes are buffered here until {@link #flush} is called. Writes
@@ -41,6 +43,8 @@
*/
public final class TsiFrameHandler extends ByteToMessageDecoder implements ChannelOutboundHandler {
+ private static final Logger logger = Logger.getLogger(TsiFrameHandler.class.getName());
+
private TsiFrameProtector protector;
private PendingWriteQueue pendingUnprotectedWrites;
@@ -48,6 +52,7 @@
@Override
public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
+ logger.finest("TsiFrameHandler added");
super.handlerAdded(ctx);
assert pendingUnprotectedWrites == null;
pendingUnprotectedWrites = new PendingWriteQueue(checkNotNull(ctx));
@@ -55,6 +60,9 @@
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object event) throws Exception {
+ if (logger.isLoggable(Level.FINEST)) {
+ logger.log(Level.FINEST, "TsiFrameHandler user event triggered", new Object[]{event});
+ }
if (event instanceof TsiHandshakeCompletionEvent) {
TsiHandshakeCompletionEvent tsiEvent = (TsiHandshakeCompletionEvent) event;
if (tsiEvent.isSuccess()) {
@@ -68,6 +76,7 @@
@VisibleForTesting
void setProtector(TsiFrameProtector protector) {
+ logger.finest("TsiFrameHandler protector set");
checkState(this.protector == null);
this.protector = checkNotNull(protector);
}
@@ -95,7 +104,8 @@
}
@Override
- public void handlerRemoved0(ChannelHandlerContext ctx) throws Exception {
+ public void handlerRemoved0(ChannelHandlerContext ctx) {
+ logger.finest("TsiFrameHandler removed");
if (!pendingUnprotectedWrites.isEmpty()) {
pendingUnprotectedWrites.removeAndFailAll(
new ChannelException("Pending write on removal of TSI handler"));
diff --git a/alts/src/main/java/io/grpc/alts/internal/TsiHandshakeHandler.java b/alts/src/main/java/io/grpc/alts/internal/TsiHandshakeHandler.java
index 98c9a7d..98dd1f9 100644
--- a/alts/src/main/java/io/grpc/alts/internal/TsiHandshakeHandler.java
+++ b/alts/src/main/java/io/grpc/alts/internal/TsiHandshakeHandler.java
@@ -19,6 +19,7 @@
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.MoreObjects;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.channel.ChannelHandlerContext;
@@ -27,6 +28,8 @@
import java.security.GeneralSecurityException;
import java.util.List;
import java.util.concurrent.Future;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import javax.annotation.Nullable;
/**
@@ -34,6 +37,9 @@
* TsiHandshakeCompletionEvent} indicating the result of the handshake.
*/
public final class TsiHandshakeHandler extends ByteToMessageDecoder {
+
+ private static final Logger logger = Logger.getLogger(TsiHandshakeHandler.class.getName());
+
private static final int HANDSHAKE_FRAME_SIZE = 1024;
private final NettyTsiHandshaker handshaker;
@@ -106,28 +112,42 @@
TsiFrameProtector protector() {
return protector;
}
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("peer", peer)
+ .add("protector", protector)
+ .add("context", context)
+ .add("cause", cause)
+ .toString();
+ }
}
@Override
public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
+ logger.finest("TsiHandshakeHandler added");
maybeStart(ctx);
super.handlerAdded(ctx);
}
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ logger.finest("TsiHandshakeHandler channel active");
maybeStart(ctx);
super.channelActive(ctx);
}
@Override
public void handlerRemoved0(ChannelHandlerContext ctx) throws Exception {
+ logger.finest("TsiHandshakeHandler handler removed");
close();
super.handlerRemoved0(ctx);
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ logger.log(Level.FINEST, "Exception in TsiHandshakeHandler", cause);
ctx.fireUserEventTriggered(new TsiHandshakeCompletionEvent(cause));
super.exceptionCaught(ctx, cause);
}