GEODE-2732 after auto-reconnect a server is restarted on the default port

Gfsh command line parameters were put into ThreadLocals to make them
available to the XML parser.  These are now held in non-thread-local
variables so that all threads, including the auto-reconnect thread,
can see them when building the cache.


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

Branch: refs/heads/feature/GEODE-2485
Commit: 391502a2615dbc80cde0b9a111fa967f4d76c39a
Parents: 39c72b2
Author: Bruce Schuchardt <bschucha...@pivotal.io>
Authored: Wed Apr 5 15:11:04 2017 -0700
Committer: Bruce Schuchardt <bschucha...@pivotal.io>
Committed: Wed Apr 5 15:31:33 2017 -0700

----------------------------------------------------------------------
 .../geode/distributed/ServerLauncher.java       |  10 +-
 .../internal/cache/CacheServerLauncher.java     |  43 +++++---
 .../internal/cache/xmlcache/CacheCreation.java  |   2 +-
 .../cache30/ReconnectWithCacheXMLDUnitTest.java | 107 +++++++++++++++++++
 .../ReconnectWithUDPSecurityDUnitTest.java      |   6 ++
 .../ReconnectedCacheServerDUnitTest.java        |   4 +-
 .../cache30/ReconnectWithCacheXMLDUnitTest.xml  |  25 +++++
 7 files changed, 176 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/geode/blob/391502a2/geode-core/src/main/java/org/apache/geode/distributed/ServerLauncher.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/org/apache/geode/distributed/ServerLauncher.java 
b/geode-core/src/main/java/org/apache/geode/distributed/ServerLauncher.java
index 9435bd8..c96732c 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/ServerLauncher.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/ServerLauncher.java
@@ -274,7 +274,7 @@ public class ServerLauncher extends 
AbstractLauncher<String> {
     this.assignBuckets = Boolean.TRUE.equals(builder.getAssignBuckets());
     setDebug(Boolean.TRUE.equals(builder.getDebug()));
     this.disableDefaultServer = 
Boolean.TRUE.equals(builder.getDisableDefaultServer());
-    CacheServerLauncher.disableDefaultServer.set(this.disableDefaultServer);
+    CacheServerLauncher.setDisableDefaultServer(this.disableDefaultServer);
     this.distributedSystemProperties = 
builder.getDistributedSystemProperties();
     this.force = Boolean.TRUE.equals(builder.getForce());
     this.help = Boolean.TRUE.equals(builder.getHelp());
@@ -286,11 +286,11 @@ public class ServerLauncher extends 
AbstractLauncher<String> {
     this.redirectOutput = Boolean.TRUE.equals(builder.getRedirectOutput());
     this.serverBindAddress = builder.getServerBindAddress();
     if (builder.isServerBindAddressSetByUser() && this.serverBindAddress != 
null) {
-      
CacheServerLauncher.serverBindAddress.set(this.serverBindAddress.getHostAddress());
+      
CacheServerLauncher.setServerBindAddress(this.serverBindAddress.getHostAddress());
     }
     this.serverPort = builder.getServerPort();
     if (builder.isServerPortSetByUser() && this.serverPort != null) {
-      CacheServerLauncher.serverPort.set(this.serverPort);
+      CacheServerLauncher.setServerPort(this.serverPort);
     }
     this.springXmlLocation = builder.getSpringXmlLocation();
     this.workingDirectory = builder.getWorkingDirectory();
@@ -954,8 +954,8 @@ public class ServerLauncher extends 
AbstractLauncher<String> {
       final String serverBindAddress =
           (getServerBindAddress() == null ? null : 
getServerBindAddress().getHostAddress());
       final Integer serverPort = getServerPort();
-      CacheServerLauncher.serverBindAddress.set(serverBindAddress);
-      CacheServerLauncher.serverPort.set(serverPort);
+      CacheServerLauncher.setServerBindAddress(serverBindAddress);
+      CacheServerLauncher.setServerPort(serverPort);
       final CacheServer cacheServer = cache.addCacheServer();
       cacheServer.setBindAddress(serverBindAddress);
       cacheServer.setPort(serverPort);

http://git-wip-us.apache.org/repos/asf/geode/blob/391502a2/geode-core/src/main/java/org/apache/geode/internal/cache/CacheServerLauncher.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/CacheServerLauncher.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/CacheServerLauncher.java
index 760abd3..9a544d2 100755
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/CacheServerLauncher.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/CacheServerLauncher.java
@@ -565,28 +565,43 @@ public class CacheServerLauncher {
     }
   }
 
-  public static ThreadLocal<Integer> serverPort = new ThreadLocal<Integer>();
+  private static Integer serverPort;
+
+  private static String serverBindAddress;
+
+  public static void setServerPort(Integer serverPort) {
+    CacheServerLauncher.serverPort = serverPort;
+  }
+
+  public static void setServerBindAddress(String serverBindAddress) {
+    CacheServerLauncher.serverBindAddress = serverBindAddress;
+  }
+
+  public static void setDisableDefaultServer(Boolean disableDefaultServer) {
+    CacheServerLauncher.disableDefaultServer = disableDefaultServer;
+  }
+
+  public static Boolean disableDefaultServer;
+
 
-  public static ThreadLocal<String> serverBindAddress = new 
ThreadLocal<String>();
 
   public static Integer getServerPort() {
-    return serverPort.get();
+    return serverPort;
   }
 
   public static String getServerBindAddress() {
-    return serverBindAddress.get();
+    return serverBindAddress;
   }
 
-  public static ThreadLocal<Boolean> disableDefaultServer = new 
ThreadLocal<Boolean>();
-
   public static Boolean getDisableDefaultServer() {
-    return disableDefaultServer.get();
+    return disableDefaultServer;
   }
 
+
   public static void clearStatics() {
-    disableDefaultServer.set(null);
-    serverPort.set(null);
-    serverBindAddress.set(null);
+    disableDefaultServer = null;
+    serverPort = null;
+    serverBindAddress = null;
   }
 
 
@@ -616,11 +631,11 @@ public class CacheServerLauncher {
     final String serverPortString = (String) options.get(SERVER_PORT);
 
     if (serverPortString != null) {
-      serverPort.set(Integer.parseInt(serverPortString));
+      serverPort = Integer.parseInt(serverPortString);
     }
 
-    serverBindAddress.set((String) options.get(SERVER_BIND_ADDRESS_NAME));
-    disableDefaultServer.set((Boolean) options.get(DISABLE_DEFAULT_SERVER));
+    serverBindAddress = (String) options.get(SERVER_BIND_ADDRESS_NAME);
+    disableDefaultServer = (Boolean) options.get(DISABLE_DEFAULT_SERVER);
     workingDir = new File(System.getProperty("user.dir"));
 
     // Say that we're starting...
@@ -835,7 +850,7 @@ public class CacheServerLauncher {
     // Create and start a default cache server
     // If (disableDefaultServer is not set or it is set but false) AND (the 
number of cacheservers
     // is 0)
-    Boolean disable = disableDefaultServer.get();
+    Boolean disable = disableDefaultServer;
     if ((disable == null || !disable) && cache.getCacheServers().size() == 0) {
       // Create and add a cache server
       CacheServer server = cache.addCacheServer();

http://git-wip-us.apache.org/repos/asf/geode/blob/391502a2/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheCreation.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheCreation.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheCreation.java
index 1c3c933..a0810d9 100755
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheCreation.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheCreation.java
@@ -503,7 +503,7 @@ public class CacheCreation implements InternalCache {
 
     Integer serverPort = CacheServerLauncher.getServerPort();
     String serverBindAdd = CacheServerLauncher.getServerBindAddress();
-    Boolean disableDefaultServer = 
CacheServerLauncher.disableDefaultServer.get();
+    Boolean disableDefaultServer = 
CacheServerLauncher.getDisableDefaultServer();
     startCacheServers(this.getCacheServers(), cache, serverPort, serverBindAdd,
         disableDefaultServer);
 

http://git-wip-us.apache.org/repos/asf/geode/blob/391502a2/geode-core/src/test/java/org/apache/geode/cache30/ReconnectWithCacheXMLDUnitTest.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/java/org/apache/geode/cache30/ReconnectWithCacheXMLDUnitTest.java
 
b/geode-core/src/test/java/org/apache/geode/cache30/ReconnectWithCacheXMLDUnitTest.java
new file mode 100755
index 0000000..4f2fac1
--- /dev/null
+++ 
b/geode-core/src/test/java/org/apache/geode/cache30/ReconnectWithCacheXMLDUnitTest.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+package org.apache.geode.cache30;
+
+import static org.apache.geode.internal.Assert.assertTrue;
+import static org.awaitility.Awaitility.await;
+import static org.junit.Assert.assertEquals;
+
+import org.apache.geode.cache.Cache;
+import org.apache.geode.cache.server.CacheServer;
+import org.apache.geode.distributed.ConfigurationProperties;
+import org.apache.geode.distributed.internal.DistributionConfig;
+import org.apache.geode.distributed.internal.membership.MembershipTestHook;
+import 
org.apache.geode.distributed.internal.membership.gms.MembershipManagerHelper;
+import org.apache.geode.internal.AvailablePortHelper;
+import org.apache.geode.internal.cache.CacheServerLauncher;
+import org.apache.geode.test.dunit.cache.internal.JUnit4CacheTestCase;
+import org.apache.geode.test.junit.categories.ClientServerTest;
+import org.apache.geode.test.junit.categories.DistributedTest;
+import org.apache.geode.test.junit.categories.MembershipTest;
+import org.apache.geode.util.test.TestUtil;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+@Category({DistributedTest.class, MembershipTest.class, 
ClientServerTest.class})
+public class ReconnectWithCacheXMLDUnitTest extends JUnit4CacheTestCase {
+
+
+  public ReconnectWithCacheXMLDUnitTest() {
+    super();
+  }
+
+  private static final long serialVersionUID = 1L;
+
+
+  private String xmlProperty = DistributionConfig.GEMFIRE_PREFIX + 
"autoReconnect-useCacheXMLFile";
+  private String oldPropertySetting;
+
+  @Override
+  public final void postSetUp() {
+    oldPropertySetting = System.setProperty(xmlProperty, "true");
+  }
+
+  @Override
+  public final void preTearDownCacheTestCase() throws Exception {
+    if (oldPropertySetting == null) {
+      System.getProperties().remove(xmlProperty);
+    } else {
+      System.setProperty(xmlProperty, oldPropertySetting);
+    }
+  }
+
+  @Override
+  public Properties getDistributedSystemProperties() {
+    Properties result = super.getDistributedSystemProperties();
+    String fileName = TestUtil.getResourcePath(getClass(), 
"ReconnectWithCacheXMLDUnitTest.xml");
+    result.put(ConfigurationProperties.CACHE_XML_FILE, fileName);
+    result.put(ConfigurationProperties.ENABLE_NETWORK_PARTITION_DETECTION, 
"true");
+    result.put(ConfigurationProperties.DISABLE_AUTO_RECONNECT, "false");
+    result.put(ConfigurationProperties.MAX_WAIT_TIME_RECONNECT, "2000");
+    return result;
+  }
+
+  @Test
+  public void testCacheServerLauncherPortRetained() throws Exception {
+    CacheServerLauncher.setDisableDefaultServer(true);
+    
CacheServerLauncher.setServerPort(AvailablePortHelper.getRandomAvailableTCPPort());
+    Cache cache = getCache();
+
+    final AtomicBoolean membershipFailed = new AtomicBoolean();
+    MembershipManagerHelper.addTestHook(cache.getDistributedSystem(), new 
MembershipTestHook() {
+      @Override
+      public void beforeMembershipFailure(String reason, Throwable cause) {
+        membershipFailed.set(true);
+      }
+
+      @Override
+      public void afterMembershipFailure(String reason, Throwable cause) {}
+    });
+    
MembershipManagerHelper.crashDistributedSystem(cache.getDistributedSystem());
+    assertTrue(membershipFailed.get());
+
+    await().atMost(60, TimeUnit.SECONDS).until(() -> 
cache.getReconnectedCache() != null);
+
+    Cache newCache = cache.getReconnectedCache();
+    CacheServer server = newCache.getCacheServers().iterator().next();
+    assertEquals(CacheServerLauncher.getServerPort().intValue(), 
server.getPort());
+    assertEquals(20, server.getMaxConnections()); // this setting is in the 
XML file
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/geode/blob/391502a2/geode-core/src/test/java/org/apache/geode/cache30/ReconnectWithUDPSecurityDUnitTest.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/java/org/apache/geode/cache30/ReconnectWithUDPSecurityDUnitTest.java
 
b/geode-core/src/test/java/org/apache/geode/cache30/ReconnectWithUDPSecurityDUnitTest.java
index a52d8bf..55d0a3c 100755
--- 
a/geode-core/src/test/java/org/apache/geode/cache30/ReconnectWithUDPSecurityDUnitTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/cache30/ReconnectWithUDPSecurityDUnitTest.java
@@ -17,8 +17,14 @@ package org.apache.geode.cache30;
 import java.util.Properties;
 
 import org.apache.geode.distributed.internal.DistributionConfig;
+import org.apache.geode.test.junit.categories.ClientServerTest;
+import org.apache.geode.test.junit.categories.DistributedTest;
+import org.apache.geode.test.junit.categories.MembershipTest;
+import org.junit.experimental.categories.Category;
+
 import static org.apache.geode.distributed.ConfigurationProperties.*;
 
+@Category({DistributedTest.class, MembershipTest.class, 
ClientServerTest.class})
 public class ReconnectWithUDPSecurityDUnitTest extends ReconnectDUnitTest {
 
   public ReconnectWithUDPSecurityDUnitTest() {

http://git-wip-us.apache.org/repos/asf/geode/blob/391502a2/geode-core/src/test/java/org/apache/geode/cache30/ReconnectedCacheServerDUnitTest.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/java/org/apache/geode/cache30/ReconnectedCacheServerDUnitTest.java
 
b/geode-core/src/test/java/org/apache/geode/cache30/ReconnectedCacheServerDUnitTest.java
index 3224257..2a2fe73 100755
--- 
a/geode-core/src/test/java/org/apache/geode/cache30/ReconnectedCacheServerDUnitTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/cache30/ReconnectedCacheServerDUnitTest.java
@@ -14,6 +14,8 @@
  */
 package org.apache.geode.cache30;
 
+import org.apache.geode.test.junit.categories.ClientServerTest;
+import org.apache.geode.test.junit.categories.MembershipTest;
 import org.junit.experimental.categories.Category;
 import org.junit.Test;
 
@@ -32,7 +34,7 @@ import 
org.apache.geode.distributed.internal.membership.gms.mgr.GMSMembershipMan
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 
 
-@Category(DistributedTest.class)
+@Category({DistributedTest.class, MembershipTest.class, 
ClientServerTest.class})
 public class ReconnectedCacheServerDUnitTest extends JUnit4CacheTestCase {
 
   public ReconnectedCacheServerDUnitTest() {

http://git-wip-us.apache.org/repos/asf/geode/blob/391502a2/geode-core/src/test/resources/org/apache/geode/cache30/ReconnectWithCacheXMLDUnitTest.xml
----------------------------------------------------------------------
diff --git 
a/geode-core/src/test/resources/org/apache/geode/cache30/ReconnectWithCacheXMLDUnitTest.xml
 
b/geode-core/src/test/resources/org/apache/geode/cache30/ReconnectWithCacheXMLDUnitTest.xml
new file mode 100644
index 0000000..f7e338b
--- /dev/null
+++ 
b/geode-core/src/test/resources/org/apache/geode/cache30/ReconnectWithCacheXMLDUnitTest.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<cache
+    xmlns="http://geode.apache.org/schema/cache";
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+    xsi:schemaLocation="http://geode.apache.org/schema/cache 
http://geode.apache.org/schema/cache/cache-1.0.xsd";
+    version="1.0">
+  <cache-server max-connections="20"/>
+</cache>
+

Reply via email to