From 6c7372d9126b7b21333c1f36e7f44733b940e938 Mon Sep 17 00:00:00 2001 From: Jihun Cho Date: Tue, 24 Sep 2019 13:55:40 -0700 Subject: [PATCH 1/2] alts: add close to TsiHandshaker to avoid resource leak for some implementations --- .../main/java/io/grpc/alts/internal/AltsTsiHandshaker.java | 4 ++++ .../main/java/io/grpc/alts/internal/NettyTsiHandshaker.java | 4 ++++ .../main/java/io/grpc/alts/internal/TsiHandshakeHandler.java | 5 +++++ alts/src/main/java/io/grpc/alts/internal/TsiHandshaker.java | 5 +++++ .../io/grpc/alts/internal/AltsProtocolNegotiatorTest.java | 5 +++++ .../test/java/io/grpc/alts/internal/FakeTsiHandshaker.java | 5 +++++ 6 files changed, 28 insertions(+) diff --git a/alts/src/main/java/io/grpc/alts/internal/AltsTsiHandshaker.java b/alts/src/main/java/io/grpc/alts/internal/AltsTsiHandshaker.java index c8978cfa417..e20de738e55 100644 --- a/alts/src/main/java/io/grpc/alts/internal/AltsTsiHandshaker.java +++ b/alts/src/main/java/io/grpc/alts/internal/AltsTsiHandshaker.java @@ -192,4 +192,8 @@ public TsiFrameProtector createFrameProtector(int maxFrameSize, ByteBufAllocator public TsiFrameProtector createFrameProtector(ByteBufAllocator alloc) { return createFrameProtector(AltsTsiFrameProtector.getMaxAllowedFrameBytes(), alloc); } + + public void close() { + handshaker.close(); + } } diff --git a/alts/src/main/java/io/grpc/alts/internal/NettyTsiHandshaker.java b/alts/src/main/java/io/grpc/alts/internal/NettyTsiHandshaker.java index 8d4bbd1a21e..5087123ab06 100644 --- a/alts/src/main/java/io/grpc/alts/internal/NettyTsiHandshaker.java +++ b/alts/src/main/java/io/grpc/alts/internal/NettyTsiHandshaker.java @@ -149,4 +149,8 @@ TsiFrameProtector createFrameProtector(ByteBufAllocator alloc) { unwrapper = null; return internalHandshaker.createFrameProtector(alloc); } + + void close() { + internalHandshaker.close(); + } } 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 2664ba8f4f7..a4123a7a53e 100644 --- a/alts/src/main/java/io/grpc/alts/internal/TsiHandshakeHandler.java +++ b/alts/src/main/java/io/grpc/alts/internal/TsiHandshakeHandler.java @@ -185,4 +185,9 @@ private void sendHandshake(ChannelHandlerContext ctx) throws GeneralSecurityExce } } } + + @Override + protected void handlerRemoved0(ChannelHandlerContext ctx) throws Exception { + handshaker.close(); + } } \ No newline at end of file diff --git a/alts/src/main/java/io/grpc/alts/internal/TsiHandshaker.java b/alts/src/main/java/io/grpc/alts/internal/TsiHandshaker.java index 967582aa811..35b945770d2 100644 --- a/alts/src/main/java/io/grpc/alts/internal/TsiHandshaker.java +++ b/alts/src/main/java/io/grpc/alts/internal/TsiHandshaker.java @@ -106,4 +106,9 @@ public interface TsiHandshaker { * @return a new TsiFrameProtector. */ TsiFrameProtector createFrameProtector(ByteBufAllocator alloc); + + /** + * Closes resources. + */ + void close(); } diff --git a/alts/src/test/java/io/grpc/alts/internal/AltsProtocolNegotiatorTest.java b/alts/src/test/java/io/grpc/alts/internal/AltsProtocolNegotiatorTest.java index 67c3859b6af..395090dbd83 100644 --- a/alts/src/test/java/io/grpc/alts/internal/AltsProtocolNegotiatorTest.java +++ b/alts/src/test/java/io/grpc/alts/internal/AltsProtocolNegotiatorTest.java @@ -479,6 +479,11 @@ public TsiFrameProtector createFrameProtector(int maxFrameSize, ByteBufAllocator protectors.add(protector); return protector; } + + @Override + public void close() { + delegate.close(); + } } private static class InterceptingProtector implements TsiFrameProtector { diff --git a/alts/src/test/java/io/grpc/alts/internal/FakeTsiHandshaker.java b/alts/src/test/java/io/grpc/alts/internal/FakeTsiHandshaker.java index d742607618a..a04bbfd07e8 100644 --- a/alts/src/test/java/io/grpc/alts/internal/FakeTsiHandshaker.java +++ b/alts/src/test/java/io/grpc/alts/internal/FakeTsiHandshaker.java @@ -226,4 +226,9 @@ public TsiFrameProtector createFrameProtector(int maxFrameSize, ByteBufAllocator public TsiFrameProtector createFrameProtector(ByteBufAllocator alloc) { return createFrameProtector(AltsTsiFrameProtector.getMaxAllowedFrameBytes(), alloc); } + + @Override + public void close() { + // No-op + } } From 1dd94594db24b0e83b215ef394376d465f94cf8b Mon Sep 17 00:00:00 2001 From: Jihun Cho Date: Tue, 24 Sep 2019 14:10:52 -0700 Subject: [PATCH 2/2] fix linter error --- alts/src/main/java/io/grpc/alts/internal/AltsTsiHandshaker.java | 1 + 1 file changed, 1 insertion(+) diff --git a/alts/src/main/java/io/grpc/alts/internal/AltsTsiHandshaker.java b/alts/src/main/java/io/grpc/alts/internal/AltsTsiHandshaker.java index e20de738e55..3cd639ad5ff 100644 --- a/alts/src/main/java/io/grpc/alts/internal/AltsTsiHandshaker.java +++ b/alts/src/main/java/io/grpc/alts/internal/AltsTsiHandshaker.java @@ -193,6 +193,7 @@ public TsiFrameProtector createFrameProtector(ByteBufAllocator alloc) { return createFrameProtector(AltsTsiFrameProtector.getMaxAllowedFrameBytes(), alloc); } + @Override public void close() { handshaker.close(); }