From 68cba971afcee29b7be42c24020c8b07e2f2f366 Mon Sep 17 00:00:00 2001 From: nmittler Date: Mon, 4 May 2015 12:54:42 -0700 Subject: [PATCH] Do not fail pending streams when sending GOAWAY. If the HEADERS have been written to the buffering encoder we should allow their creation to complete since the HTTP/2 spec does not prohibit this. --- .../transport/netty/BufferingHttp2ConnectionEncoder.java | 5 ----- .../transport/netty/BufferingHttp2ConnectionEncoderTest.java | 5 ++--- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/netty/src/main/java/io/grpc/transport/netty/BufferingHttp2ConnectionEncoder.java b/netty/src/main/java/io/grpc/transport/netty/BufferingHttp2ConnectionEncoder.java index df5af9689b..972b9f8782 100644 --- a/netty/src/main/java/io/grpc/transport/netty/BufferingHttp2ConnectionEncoder.java +++ b/netty/src/main/java/io/grpc/transport/netty/BufferingHttp2ConnectionEncoder.java @@ -80,11 +80,6 @@ class BufferingHttp2ConnectionEncoder extends DecoratingHttp2ConnectionEncoder { super(delegate); connection().addListener(new Http2ConnectionAdapter() { - @Override - public void onGoAwaySent(int lastStreamId, long errorCode, ByteBuf debugData) { - cancelGoAwayStreams(lastStreamId, errorCode, debugData); - } - @Override public void onGoAwayReceived(int lastStreamId, long errorCode, ByteBuf debugData) { cancelGoAwayStreams(lastStreamId, errorCode, debugData); diff --git a/netty/src/test/java/io/grpc/transport/netty/BufferingHttp2ConnectionEncoderTest.java b/netty/src/test/java/io/grpc/transport/netty/BufferingHttp2ConnectionEncoderTest.java index 1ff81b1caf..fd42b0a291 100644 --- a/netty/src/test/java/io/grpc/transport/netty/BufferingHttp2ConnectionEncoderTest.java +++ b/netty/src/test/java/io/grpc/transport/netty/BufferingHttp2ConnectionEncoderTest.java @@ -186,7 +186,7 @@ public class BufferingHttp2ConnectionEncoderTest { } @Test - public void sendingGoAwayCompletesBufferedStreams() { + public void sendingGoAwayShouldNotFailStreams() { connection.local().maxActiveStreams(1); encoderWriteHeaders(3, promise); @@ -197,8 +197,7 @@ public class BufferingHttp2ConnectionEncoderTest { encoder.writeGoAway(ctx, 3, CANCEL.code(), empty, promise); assertEquals(1, connection.numActiveStreams()); - // The 2 buffered streams should be completed. - verify(promise, times(2)).setFailure(any(GoAwayClosedStreamException.class)); + verify(promise, never()).setFailure(any(GoAwayClosedStreamException.class)); } @Test