This is an automated email from the ASF dual-hosted git repository. zhouxj pushed a commit to branch feature/GEODE-8895 in repository https://gitbox.apache.org/repos/asf/geode.git
commit 76b4f190eecf14a7e2c1cde188d1a3d4b8f69f9d Author: zhouxh <[email protected]> AuthorDate: Fri Jan 29 14:00:03 2021 -0800 GEODE-8895: processChunkResponse encountering broken socket should throw IOException to retrty --- .../geode/cache/client/internal/AbstractOp.java | 3 +- .../cache/client/internal/AbstractOpTest.java | 41 ++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java index 412fdde..7c40b9e 100644 --- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java +++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java @@ -15,6 +15,7 @@ package org.apache.geode.cache.client.internal; +import java.io.IOException; import java.net.SocketTimeoutException; import org.apache.logging.log4j.Logger; @@ -346,7 +347,7 @@ public abstract class AbstractOp implements Op { Part part = msg.getPart(0); throw new ServerOperationException(part.getString()); } else { - throw new InternalGemFireError("Unexpected message type " + MessageType.getString(msgType)); + throw new IOException("Unexpected message type " + MessageType.getString(msgType)); } } } diff --git a/geode-core/src/test/java/org/apache/geode/cache/client/internal/AbstractOpTest.java b/geode-core/src/test/java/org/apache/geode/cache/client/internal/AbstractOpTest.java index 5327a21..651059a 100644 --- a/geode-core/src/test/java/org/apache/geode/cache/client/internal/AbstractOpTest.java +++ b/geode-core/src/test/java/org/apache/geode/cache/client/internal/AbstractOpTest.java @@ -17,12 +17,18 @@ package org.apache.geode.cache.client.internal; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import java.io.IOException; + import org.junit.Test; import org.junit.experimental.categories.Category; +import org.apache.geode.internal.cache.tier.MessageType; +import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage; import org.apache.geode.internal.cache.tier.sockets.Message; import org.apache.geode.test.junit.categories.ClientServerTest; @@ -37,4 +43,39 @@ public class AbstractOpTest { assertThat(mockAbstractOp.processObjResponse(mock(Message.class), "string")) .isEqualTo(mockObject); } + + @Test(expected = IOException.class) + public void processChunkedResponseShouldThrowIOExceptionWhenSocketBroken() throws Exception { + ChunkedMessage msg = mock(ChunkedMessage.class); + AbstractOp abstractOp = new AbstractOp(MessageType.PING, 0) { + @Override + protected Object processResponse(Message msg) throws Exception { + return null; + } + + @Override + protected boolean isErrorResponse(int msgType) { + return false; + } + + @Override + protected long startAttempt(ConnectionStats stats) { + return 0; + } + + @Override + protected void endSendAttempt(ConnectionStats stats, long start) { + + } + + @Override + protected void endAttempt(ConnectionStats stats, long start) { + + } + }; + doNothing().when(msg).readHeader(); + when(msg.getMessageType()).thenReturn(MessageType.PING); + abstractOp = spy(abstractOp); + abstractOp.processChunkedResponse(msg, "removeAll", null); + } }
