You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by on...@apache.org on 2021/02/01 23:46:05 UTC

[geode] branch support/1.12 updated: GEODE-8895: processChunkResponse encountering broken socket should throw IOException to retrty (#5979)

This is an automated email from the ASF dual-hosted git repository.

onichols pushed a commit to branch support/1.12
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/support/1.12 by this push:
     new cbce1fd  GEODE-8895: processChunkResponse encountering broken socket should throw IOException to retrty (#5979)
cbce1fd is described below

commit cbce1fd68f0658090f0f1e441929fcf0beef8c59
Author: Xiaojian Zhou <ge...@users.noreply.github.com>
AuthorDate: Mon Feb 1 09:04:29 2021 -0800

    GEODE-8895: processChunkResponse encountering broken socket should throw IOException to retrty (#5979)
    
    (cherry picked from commit bc38eeffc5f137f6f81e21b687af9ef26bf41444)
---
 .../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 1e97d82..848c5cf 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;
@@ -345,7 +346,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);
+  }
 }