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);
+  }
 }