You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by mc...@apache.org on 2018/09/21 21:17:57 UTC

[geode] branch develop updated: GEODE-5747: Handling SocketException in InternalDataSerializer (#2484)

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

mcmellawatt pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new 6006ec3  GEODE-5747: Handling SocketException in InternalDataSerializer (#2484)
6006ec3 is described below

commit 6006ec34cf79808622b3d8d08bf6d0e0a3aaee2d
Author: Ryan McMahon <rm...@pivotal.io>
AuthorDate: Fri Sep 21 14:17:45 2018 -0700

    GEODE-5747: Handling SocketException in InternalDataSerializer (#2484)
---
 .../apache/geode/internal/InternalDataSerializer.java |  3 ++-
 .../internal/InternalDataSerializerJUnitTest.java     | 19 +++++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/geode-core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java b/geode-core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java
index 22c1282..90921b9 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java
@@ -39,6 +39,7 @@ import java.lang.reflect.Proxy;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.net.InetAddress;
+import java.net.SocketException;
 import java.net.URL;
 import java.sql.Timestamp;
 import java.util.ArrayList;
@@ -2480,7 +2481,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
           ((DataSerializable) ds).fromData(in);
         }
       }
-    } catch (EOFException | ClassNotFoundException | CacheClosedException ex) {
+    } catch (EOFException | ClassNotFoundException | CacheClosedException | SocketException ex) {
       // client went away - ignore
       throw ex;
     } catch (Exception ex) {
diff --git a/geode-core/src/test/java/org/apache/geode/internal/InternalDataSerializerJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/InternalDataSerializerJUnitTest.java
index 6d0f1c9..2ef8e73 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/InternalDataSerializerJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/InternalDataSerializerJUnitTest.java
@@ -14,9 +14,15 @@
  */
 package org.apache.geode.internal;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
 
+import java.io.DataInput;
+import java.io.IOException;
+import java.net.SocketException;
 import java.util.Properties;
 
 import org.apache.logging.log4j.Level;
@@ -25,6 +31,7 @@ import org.apache.logging.log4j.util.PropertiesUtil;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
+import org.apache.geode.DataSerializable;
 import org.apache.geode.InternalGemFireException;
 import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
@@ -51,6 +58,18 @@ public class InternalDataSerializerJUnitTest {
         InternalDataSerializer.isGemfireObject(new ExampleSecurityManager()));
   }
 
+  @Test
+  public void testInvokeFromData_SocketExceptionRethrown()
+      throws IOException, ClassNotFoundException {
+    DataInput in = mock(DataInput.class);
+    DataSerializable ds = mock(DataSerializable.class);
+
+    doThrow(SocketException.class).when(ds).fromData(in);
+
+    assertThatThrownBy(() -> InternalDataSerializer.invokeFromData(ds, in))
+        .isInstanceOf(SocketException.class);
+  }
+
   class TestFunction implements Function {
     @Override
     public void execute(FunctionContext context) {