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

geode git commit: GEODE-1793 LocatorDUnitTest.testStartTwoLocatorsOneWithSSLAndTheOtherNonSSL

Repository: geode
Updated Branches:
  refs/heads/feature/GEODE-1793 [created] 866dc5ca1


GEODE-1793 LocatorDUnitTest.testStartTwoLocatorsOneWithSSLAndTheOtherNonSSL

This was a product issue.  When the locator using plain-text sockets is
contacted by a TcpClient using SSL the locator often just closes the socket.
On some platforms this causes a SSLHandshakeException but on others it
just causes a "SocketException: connection reset".  Writing some text to
the socket forces the TcpClient to get a SSLException (which is the superclass
of SSLHandshakeException).

The test class is still marked as Flaky due to GEODE-2542.


Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/866dc5ca
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/866dc5ca
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/866dc5ca

Branch: refs/heads/feature/GEODE-1793
Commit: 866dc5ca1583c5fab49ec96c48d261c0367427f3
Parents: 5ec0d47
Author: Bruce Schuchardt <bs...@pivotal.io>
Authored: Fri Mar 3 13:47:42 2017 -0800
Committer: Bruce Schuchardt <bs...@pivotal.io>
Committed: Fri Mar 3 13:47:42 2017 -0800

----------------------------------------------------------------------
 .../internal/tcpserver/TcpClient.java           |   5 +-
 .../internal/tcpserver/TcpServer.java           |  15 +-
 .../geode/distributed/LocatorDUnitTest.java     | 159 ++-----------------
 3 files changed, 29 insertions(+), 150 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/geode/blob/866dc5ca/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java
index 47b5703..6b54170 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java
@@ -25,6 +25,7 @@ import java.net.Socket;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.net.ssl.SSLException;
 import javax.net.ssl.SSLHandshakeException;
 
 import org.apache.logging.log4j.Logger;
@@ -264,8 +265,8 @@ public class TcpClient {
     try {
       sock = socketCreator.connect(ipAddr.getAddress(), ipAddr.getPort(), timeout, null, false);
       sock.setSoTimeout(timeout);
-    } catch (SSLHandshakeException e) {
-      throw new LocatorCancelException("Unrecognisable response received", e);
+    } catch (SSLException e) {
+      throw new LocatorCancelException("Unable to form SSL connection", e);
     }
 
     try {

http://git-wip-us.apache.org/repos/asf/geode/blob/866dc5ca/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java
index 4265349..8f1b537 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java
@@ -77,9 +77,9 @@ public class TcpServer {
    * <p>
    * This should be incremented if the gossip message structures change
    * <p>
-   * 1000 - gemfire 5.5 - using java serialization 1001 - 5.7 - using DataSerializable and
-   * supporting server locator messages. 1002 - 7.1 - sending GemFire version along with
-   * GOSSIP_VERSION in each request.
+   * 1000 - gemfire 5.5 - using java serialization<br>
+   * 1001 - 5.7 - using DataSerializable and supporting server locator messages.<br>
+   * 1002 - 7.1 - sending GemFire version along with GOSSIP_VERSION in each request.
    * <p>
    * with the addition of support for all old versions of clients you can no longer change this
    * version number
@@ -89,7 +89,7 @@ public class TcpServer {
   // This GOSSIPVERSION is used in _getVersionForAddress request for getting GemFire version of a
   // GossipServer.
   public final static int OLDGOSSIPVERSION = 1001;
-
+  
   private static/* GemStoneAddition */ final Map GOSSIP_TO_GEMFIRE_VERSION_MAP = new HashMap();
 
   // For test purpose only
@@ -360,6 +360,13 @@ public class TcpServer {
           versionOrdinal = (short) GOSSIP_TO_GEMFIRE_VERSION_MAP.get(gossipVersion);
         } else {
           // Close the socket. We can not accept requests from a newer version
+          try {
+            sock.getOutputStream().write("unknown protocol version".getBytes());
+            sock.getOutputStream().flush();
+          } catch (IOException e) {
+            log.debug("exception in sending reply to process using unknown protocol "
+                + gossipVersion, e);
+          }
           sock.close();
           return;
         }

http://git-wip-us.apache.org/repos/asf/geode/blob/866dc5ca/geode-core/src/test/java/org/apache/geode/distributed/LocatorDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/LocatorDUnitTest.java b/geode-core/src/test/java/org/apache/geode/distributed/LocatorDUnitTest.java
index 37e8b5c..5812e74 100644
--- a/geode-core/src/test/java/org/apache/geode/distributed/LocatorDUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/distributed/LocatorDUnitTest.java
@@ -20,7 +20,6 @@ import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_NETWOR
 import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
 import static org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL;
 import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
-import static org.apache.geode.distributed.ConfigurationProperties.MCAST_TTL;
 import static org.apache.geode.distributed.ConfigurationProperties.MEMBER_TIMEOUT;
 import static org.apache.geode.distributed.ConfigurationProperties.SECURITY_PEER_AUTHENTICATOR;
 import static org.apache.geode.distributed.ConfigurationProperties.SECURITY_PEER_AUTH_INIT;
@@ -43,7 +42,6 @@ import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import org.apache.geode.distributed.internal.membership.gms.Services;
 import org.apache.geode.test.dunit.AsyncInvocation;
 import org.awaitility.Awaitility;
 import org.apache.geode.ForcedDisconnectException;
@@ -86,7 +84,6 @@ import org.apache.geode.test.junit.categories.DistributedTest;
 import org.apache.geode.test.junit.categories.FlakyTest;
 import org.apache.geode.test.junit.categories.MembershipTest;
 import org.apache.geode.util.test.TestUtil;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
@@ -311,14 +308,14 @@ public class LocatorDUnitTest extends JUnit4DistributedTestCase {
   private Boolean startLocatorWithPortAndProperties(final int port, final Properties properties)
       throws IOException {
     try {
-      System.setProperty("p2p.joinTimeout", "5000"); // set a short join timeout. default is 17000ms
+//      System.setProperty("p2p.joinTimeout", "5000"); // set a short join timeout. default is 17000ms
       Locator.startLocatorAndDS(port, new File(""), properties);
     } catch (SystemConnectException e) {
       return Boolean.FALSE;
     } catch (GemFireConfigException e) {
       return Boolean.FALSE;
     } finally {
-      System.getProperties().remove("p2p.joinTimeout");
+//      System.getProperties().remove("p2p.joinTimeout");
     }
     return Boolean.TRUE;
   }
@@ -507,7 +504,6 @@ public class LocatorDUnitTest extends JUnit4DistributedTestCase {
     }
   }
 
-  @Ignore
   @Test
   public void testSSLEnabledLocatorDiesWhenConnectingToNonSSLLocator() {
     IgnoredException.addIgnoredException("Remote host closed connection during handshake");
@@ -640,10 +636,10 @@ public class LocatorDUnitTest extends JUnit4DistributedTestCase {
       throws IOException {
     Locator locator;
     try {
-      System.setProperty("p2p.joinTimeout", "5000"); // set a short join timeout. default is 17000ms
+//      System.setProperty("p2p.joinTimeout", "5000"); // set a short join timeout. default is 17000ms
       locator = Locator.startLocatorAndDS(port, new File(""), properties);
     } finally {
-      System.getProperties().remove("p2p.joinTimeout");
+//      System.getProperties().remove("p2p.joinTimeout");
     }
     return locator;
   }
@@ -1309,7 +1305,7 @@ public class LocatorDUnitTest extends JUnit4DistributedTestCase {
     bgexecLogger.info(addExpected);
 
     boolean exceptionOccurred = true;
-    String oldValue = (String) System.getProperties().put("p2p.joinTimeout", "15000");
+//    String oldValue = (String) System.getProperties().put("p2p.joinTimeout", "15000");
     try {
       DistributedSystem.connect(props);
       exceptionOccurred = false;
@@ -1326,11 +1322,11 @@ public class LocatorDUnitTest extends JUnit4DistributedTestCase {
       // if expected then add in a catch block for it above this catch
       org.apache.geode.test.dunit.Assert.fail("Failed with unexpected exception", ex);
     } finally {
-      if (oldValue == null) {
-        System.getProperties().remove("p2p.joinTimeout");
-      } else {
-        System.getProperties().put("p2p.joinTimeout", oldValue);
-      }
+//      if (oldValue == null) {
+//        System.getProperties().remove("p2p.joinTimeout");
+//      } else {
+//        System.getProperties().put("p2p.joinTimeout", oldValue);
+//      }
       bgexecLogger.info(removeExpected);
     }
 
@@ -1449,7 +1445,7 @@ public class LocatorDUnitTest extends JUnit4DistributedTestCase {
     DistributedTestUtils.deleteLocatorStateFile(port1);
     final String locators = NetworkUtils.getServerHostName(host) + "[" + port + "]";
 
-    vm0.invoke(getUniqueName() + 1, () -> getStartSBLocatorRunnable(port));
+    vm0.invoke(getUniqueName() + 1, () -> startSBLocator(port));
     try {
 
       final Properties props = new Properties();
@@ -1489,7 +1485,7 @@ public class LocatorDUnitTest extends JUnit4DistributedTestCase {
       // restart the locator to demonstrate reconnection & make disconnects faster
       // it should also regain the role of coordinator, so we check to make sure
       // that the coordinator has changed
-      vm0.invoke(getUniqueName() + "2", () -> getStartSBLocatorRunnable(port));
+      vm0.invoke(getUniqueName() + "2", () -> startSBLocator(port));
 
       final DistributedMember tempCoord = newCoord;
 
@@ -1532,20 +1528,6 @@ public class LocatorDUnitTest extends JUnit4DistributedTestCase {
 
   }
 
-  /**
-   * set a short locator refresh rate
-   */
-  public static void setShortRefreshWait() {
-    System.setProperty("p2p.gossipRefreshRate", "2000");
-  }
-
-  /**
-   * remove shortened locator refresh rate
-   */
-  public static void resetRefreshWait() {
-    System.getProperties().remove("p2p.gossipRefreshRate");
-  }
-
   public static boolean isSystemConnected() {
     DistributedSystem sys = InternalDistributedSystem.getAnyInstance();
     if (sys != null && sys.isConnected()) {
@@ -1817,117 +1799,6 @@ public class LocatorDUnitTest extends JUnit4DistributedTestCase {
   }
 
   /**
-   * Tests starting multiple locators in multiple VMs.
-   */
-  @Test
-  public void testMultipleMcastLocators() throws Exception {
-    disconnectAllFromDS();
-    IgnoredException.addIgnoredException("Could not stop  Distribution Locator"); // shutdown timing
-    // issue in
-    // InternalLocator
-    Host host = Host.getHost(0);
-    VM vm0 = host.getVM(0);
-    VM vm1 = host.getVM(1);
-    VM vm2 = host.getVM(2);
-    VM vm3 = host.getVM(3);
-
-    final int[] freeTCPPorts = AvailablePortHelper.getRandomAvailableTCPPorts(2);
-    final int port1 = freeTCPPorts[0];
-    this.port1 = port1;
-    final int port2 = freeTCPPorts[1];
-    this.port2 = port2;
-    DistributedTestUtils.deleteLocatorStateFile(port1, port2);
-    final int mcastport = AvailablePort.getRandomAvailablePort(AvailablePort.MULTICAST);
-
-    final String host0 = NetworkUtils.getServerHostName(host);
-    final String locators = host0 + "[" + port1 + "]," + host0 + "[" + port2 + "]";
-    final String uniqueName = getUniqueName();
-
-    vm0.invoke(new SerializableRunnable("Start locator on " + port1) {
-      public void run() {
-        File logFile = new File("");
-        try {
-          Properties props = new Properties();
-          props.setProperty(MCAST_PORT, String.valueOf(mcastport));
-          props.setProperty(LOCATORS, locators);
-          props.setProperty(LOG_LEVEL, LogWriterUtils.getDUnitLogLevel());
-          props.setProperty(MCAST_TTL, "0");
-          props.setProperty(ENABLE_NETWORK_PARTITION_DETECTION, "true");
-          props.setProperty(ENABLE_CLUSTER_CONFIGURATION, "false");
-
-          addDSProps(props);
-          Locator.startLocatorAndDS(port1, logFile, null, props);
-        } catch (IOException ex) {
-          org.apache.geode.test.dunit.Assert.fail("While starting locator on port " + port1, ex);
-        }
-      }
-    });
-    vm3.invoke("Start locator on " + port2, () -> {
-      File logFile = new File("");
-      try {
-        Properties props = new Properties();
-        props.setProperty(MCAST_PORT, String.valueOf(mcastport));
-        props.setProperty(LOCATORS, locators);
-        props.setProperty(LOG_LEVEL, LogWriterUtils.getDUnitLogLevel());
-        props.setProperty(MCAST_TTL, "0");
-        props.setProperty(ENABLE_NETWORK_PARTITION_DETECTION, "true");
-        props.setProperty(ENABLE_CLUSTER_CONFIGURATION, "false");
-        addDSProps(props);
-        Locator.startLocatorAndDS(port2, logFile, null, props);
-      } catch (IOException ex) {
-        org.apache.geode.test.dunit.Assert.fail("While starting locator on port " + port2, ex);
-      }
-    });
-
-    SerializableRunnable connect = new SerializableRunnable("Connect to " + locators) {
-      public void run() {
-        Properties props = new Properties();
-        props.setProperty(MCAST_PORT, String.valueOf(mcastport));
-        props.setProperty(LOCATORS, locators);
-        props.setProperty(LOG_LEVEL, LogWriterUtils.getDUnitLogLevel());
-        props.setProperty(MCAST_TTL, "0");
-        props.setProperty(ENABLE_NETWORK_PARTITION_DETECTION, "true");
-        addDSProps(props);
-        DistributedSystem.connect(props);
-      }
-    };
-    try {
-      vm1.invoke(connect);
-      vm2.invoke(connect);
-
-      Properties props = new Properties();
-      props.setProperty(MCAST_PORT, String.valueOf(mcastport));
-      props.setProperty(LOCATORS, locators);
-      props.setProperty(LOG_LEVEL, LogWriterUtils.getDUnitLogLevel());
-      props.setProperty(MCAST_TTL, "0");
-      props.setProperty(ENABLE_NETWORK_PARTITION_DETECTION, "true");
-
-      addDSProps(props);
-      system = (InternalDistributedSystem) DistributedSystem.connect(props);
-
-      Awaitility.waitAtMost(WAIT2_MS, TimeUnit.MILLISECONDS)
-          .pollInterval(200, TimeUnit.MILLISECONDS).until(() -> {
-            try {
-              return system.getDM().getViewMembers().size() == 5;
-            } catch (Exception e) {
-              org.apache.geode.test.dunit.Assert.fail("unexpected exception", e);
-            }
-            return false; // NOTREACHED
-          });
-      system.disconnect();
-
-      vm1.invoke(() -> disconnectDistributedSystem());
-      vm2.invoke(() -> disconnectDistributedSystem());
-    } finally {
-      vm0.invoke(() -> stopLocator());
-      vm3.invoke(() -> stopLocator());
-      if (system != null) {
-        system.disconnect();
-      }
-    }
-  }
-
-  /**
    * Tests that a VM can connect to a locator that is hosted in its own VM.
    */
   @Test
@@ -2087,11 +1958,11 @@ public class LocatorDUnitTest extends JUnit4DistributedTestCase {
     }
   }
 
-  private void getStartSBLocatorRunnable(final int port) {
+  private void startSBLocator(final int port) {
     File logFile = new File("");
     try {
       System.setProperty(InternalLocator.LOCATORS_PREFERRED_AS_COORDINATORS, "true");
-      System.setProperty("p2p.joinTimeout", "1000");
+//      System.setProperty("p2p.joinTimeout", "1000");
       Properties locProps = new Properties();
       locProps.put(MCAST_PORT, "0");
       locProps.put(LOG_LEVEL, LogWriterUtils.getDUnitLogLevel());
@@ -2101,7 +1972,7 @@ public class LocatorDUnitTest extends JUnit4DistributedTestCase {
       org.apache.geode.test.dunit.Assert.fail("While starting locator on port " + port, ex);
     } finally {
       System.getProperties().remove(InternalLocator.LOCATORS_PREFERRED_AS_COORDINATORS);
-      System.getProperties().remove("p2p.joinTimeout");
+//      System.getProperties().remove("p2p.joinTimeout");
     }
   }