You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by zh...@apache.org on 2021/01/29 22:01:44 UTC
[geode] 01/01: GEODE-8895: processChunkResponse encountering broken
socket should throw IOException to retrty
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 <gz...@pivotal.io>
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);
+ }
}