You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2016/05/06 21:40:49 UTC
[18/37] incubator-geode git commit: GEODE-1255: Add test coverage for
using a custom log4j2.xml with Geode
GEODE-1255: Add test coverage for using a custom log4j2.xml with Geode
* refactor launcher integration tests (rename files, use TemporaryFolder)
* refactor cluster config tests (use TemporaryFolder)
* change several additional tests to use TemporaryFolder
* add better support for TemporaryFolder usage to HeadlessGfsh
* alter HeadlessGfsh tests to use TemporaryFolder
* rescope variables and methods to private where possible
* fixup file formatting
* prevent eating of exceptions
* remove incomplete or useless javadocs
* rename LocatorJUnitTest test methods from TRAC #s to meaningful names
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/566fce96
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/566fce96
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/566fce96
Branch: refs/heads/feature/GEODE-1276
Commit: 566fce96aa8759d14b9825577116293c1578147e
Parents: 024cd22
Author: Kirk Lund <kl...@apache.org>
Authored: Thu May 5 15:46:26 2016 -0700
Committer: Kirk Lund <kl...@apache.org>
Committed: Thu May 5 15:48:30 2016 -0700
----------------------------------------------------------------------
.../LocatorLauncherAssemblyIntegrationTest.java | 155 ++
.../LocatorLauncherAssemblyJUnitTest.java | 156 --
.../SharedConfigurationEndToEndDUnitTest.java | 311 ++--
.../cache/operations/OperationContext.java | 4 -
.../internal/SharedConfiguration.java | 532 +++----
.../AbstractLauncherIntegrationJUnitTest.java | 71 -
.../AbstractLauncherIntegrationTest.java | 71 +
.../AbstractLauncherIntegrationTestCase.java | 254 ++++
.../distributed/AbstractLauncherJUnitTest.java | 298 ----
.../AbstractLauncherJUnitTestCase.java | 254 ----
.../AbstractLauncherServiceStatusJUnitTest.java | 264 ----
.../AbstractLauncherServiceStatusTest.java | 264 ++++
.../distributed/AbstractLauncherTest.java | 298 ++++
...tractLocatorLauncherIntegrationTestCase.java | 117 ++
.../AbstractLocatorLauncherJUnitTestCase.java | 105 --
...ocatorLauncherRemoteIntegrationTestCase.java | 67 +
...stractServerLauncherIntegrationTestCase.java | 95 ++
.../AbstractServerLauncherJUnitTestCase.java | 93 --
...ServerLauncherRemoteIntegrationTestCase.java | 95 ++
.../distributed/DistributedTestSuite.java | 35 -
.../distributed/HostedLocatorsDUnitTest.java | 27 +-
.../LauncherMemberMXBeanIntegrationTest.java | 151 ++
.../LauncherMemberMXBeanJUnitTest.java | 152 --
.../gemfire/distributed/LauncherTestSuite.java | 47 -
.../gemfire/distributed/LocatorJUnitTest.java | 67 +-
.../LocatorLauncherIntegrationJUnitTest.java | 248 ---
.../LocatorLauncherIntegrationTest.java | 248 +++
.../distributed/LocatorLauncherJUnitTest.java | 341 -----
...LocatorLauncherLocalFileIntegrationTest.java | 54 +
.../LocatorLauncherLocalFileJUnitTest.java | 51 -
.../LocatorLauncherLocalIntegrationTest.java | 827 ++++++++++
.../LocatorLauncherLocalJUnitTest.java | 842 -----------
...ocatorLauncherRemoteFileIntegrationTest.java | 218 +++
.../LocatorLauncherRemoteFileJUnitTest.java | 218 ---
.../LocatorLauncherRemoteIntegrationTest.java | 977 ++++++++++++
.../LocatorLauncherRemoteJUnitTest.java | 1011 -------------
...rRemoteWithCustomLoggingIntegrationTest.java | 124 ++
.../distributed/LocatorLauncherTest.java | 340 +++++
.../distributed/LocatorStateJUnitTest.java | 208 ---
.../gemfire/distributed/LocatorStateTest.java | 208 +++
.../MockServerLauncherCacheProvider.java | 8 +-
.../ServerLauncherIntegrationJUnitTest.java | 312 ----
.../ServerLauncherIntegrationTest.java | 311 ++++
.../distributed/ServerLauncherJUnitTest.java | 903 -----------
.../ServerLauncherLocalFileIntegrationTest.java | 54 +
.../ServerLauncherLocalFileJUnitTest.java | 54 -
.../ServerLauncherLocalIntegrationTest.java | 1073 +++++++++++++
.../ServerLauncherLocalJUnitTest.java | 1073 -------------
...ServerLauncherRemoteFileIntegrationTest.java | 222 +++
.../ServerLauncherRemoteFileJUnitTest.java | 222 ---
.../ServerLauncherRemoteIntegrationTest.java | 1380 +++++++++++++++++
.../ServerLauncherRemoteJUnitTest.java | 1430 ------------------
...rRemoteWithCustomLoggingIntegrationTest.java | 122 ++
.../gemfire/distributed/ServerLauncherTest.java | 898 +++++++++++
...rverLauncherWithProviderIntegrationTest.java | 89 ++
.../ServerLauncherWithProviderJUnitTest.java | 90 --
.../gemstone/gemfire/internal/ClassBuilder.java | 2 +-
.../logging/log4j/custom/BasicAppender.java | 76 +
.../CustomConfigWithCacheIntegrationTest.java | 148 ++
...stomConfigWithLogServiceIntegrationTest.java | 119 ++
.../log4j/custom/CustomConfiguration.java | 64 +
...leProcessControllerIntegrationJUnitTest.java | 13 +-
.../management/internal/cli/HeadlessGfsh.java | 23 +-
.../cli/HeadlessGfshIntegrationTest.java | 90 ++
.../internal/cli/HeadlessGfshJUnitTest.java | 85 --
.../cli/commands/CliCommandTestBase.java | 31 +-
.../ConnectCommandWithHttpAndSSLDUnitTest.java | 305 ++++
.../cli/commands/DeployCommandsDUnitTest.java | 52 +-
...WithCacheLoaderDuringCacheMissDUnitTest.java | 159 +-
...stAndDescribeDiskStoreCommandsDUnitTest.java | 117 +-
.../cli/commands/ListIndexCommandDUnitTest.java | 121 +-
.../cli/commands/ShellCommandsDUnitTest.java | 2 +-
.../cli/commands/UserCommandsDUnitTest.java | 2 +-
.../SharedConfigurationDUnitTest.java | 227 ++-
.../SharedConfigurationTestUtils.java | 40 +
.../SharedConfigurationUsingDirDUnitTest.java | 128 +-
.../security/GfshShellConnectionRule.java | 8 +-
.../logging/log4j/custom/log4j2-custom.xml | 27 +
.../pulse/internal/data/JMXDataUpdater.java | 3 -
.../wan/wancommand/WANCommandTestBase.java | 2 +-
.../ClusterConfigurationDUnitTest.java | 1236 ++++++++-------
gradle/dependency-versions.properties | 20 +-
82 files changed, 11076 insertions(+), 10163 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/566fce96/geode-assembly/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherAssemblyIntegrationTest.java
----------------------------------------------------------------------
diff --git a/geode-assembly/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherAssemblyIntegrationTest.java b/geode-assembly/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherAssemblyIntegrationTest.java
new file mode 100644
index 0000000..332cbf4
--- /dev/null
+++ b/geode-assembly/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherAssemblyIntegrationTest.java
@@ -0,0 +1,155 @@
+/*
+ * 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 com.gemstone.gemfire.distributed;
+
+import com.gemstone.gemfire.cache.Cache;
+import com.gemstone.gemfire.cache.CacheFactory;
+import com.gemstone.gemfire.distributed.AbstractLauncher.Status;
+import com.gemstone.gemfire.distributed.LocatorLauncher.Builder;
+import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+import com.gemstone.gemfire.internal.AvailablePortHelper;
+import com.gemstone.gemfire.internal.process.ProcessType;
+import com.gemstone.gemfire.internal.process.ProcessUtils;
+import com.gemstone.gemfire.management.ManagementService;
+import com.gemstone.gemfire.management.ManagerMXBean;
+import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import java.io.File;
+
+import static org.junit.Assert.*;
+
+/**
+ * These tests are part of assembly as they require the REST war file to be present.
+ */
+@Category(IntegrationTest.class)
+public class LocatorLauncherAssemblyIntegrationTest extends AbstractLocatorLauncherIntegrationTestCase {
+
+ @Before
+ public final void setUpLocatorLauncherLocalTest() throws Exception {
+ disconnectFromDS();
+ System.setProperty(ProcessType.TEST_PREFIX_PROPERTY, getUniqueName() + "-");
+ }
+
+ @After
+ public final void tearDownLocatorLauncherLocalTest() throws Exception {
+ disconnectFromDS();
+ }
+
+ /*
+ * This test addresses GEODE-528
+ */
+ @Test
+ public void testLocatorStopsWhenJmxPortIsZero() throws Throwable {
+ String rootFolder = this.temporaryFolder.getRoot().getCanonicalPath();
+
+ final Builder builder = new Builder()
+ .setMemberName(getUniqueName())
+ .setPort(this.locatorPort)
+ .setRedirectOutput(false)
+ .setWorkingDirectory(rootFolder)
+ .set(DistributionConfig.LOG_LEVEL_NAME, "config")
+ .set(DistributionConfig.ENABLE_CLUSTER_CONFIGURATION_NAME, "false")
+ .set(DistributionConfig.JMX_MANAGER_NAME, "true")
+ .set(DistributionConfig.JMX_MANAGER_START_NAME, "true")
+ .set(DistributionConfig.JMX_MANAGER_PORT_NAME, "0");
+
+ performTest(builder);
+ }
+
+ /*
+ * This test addresses GEODE-528
+ */
+ @Test
+ public void testLocatorStopsWhenJmxPortIsNonZero() throws Throwable {
+ String rootFolder = this.temporaryFolder.getRoot().getCanonicalPath();
+ final int jmxPort = AvailablePortHelper.getRandomAvailableTCPPorts(1)[0];
+
+ final Builder builder = new Builder().setMemberName(getUniqueName())
+ .setPort(this.locatorPort)
+ .setRedirectOutput(false)
+ .setWorkingDirectory(rootFolder)
+ .set(DistributionConfig.LOG_LEVEL_NAME, "config")
+ .set(DistributionConfig.ENABLE_CLUSTER_CONFIGURATION_NAME, "false")
+ .set(DistributionConfig.JMX_MANAGER_NAME, "true")
+ .set(DistributionConfig.JMX_MANAGER_START_NAME, "true")
+ .set(DistributionConfig.JMX_MANAGER_PORT_NAME, Integer.toString(jmxPort));
+
+ performTest(builder);
+ }
+
+ private void performTest(Builder builder) {
+ assertFalse(builder.getForce());
+ this.launcher = builder.build();
+ assertFalse(this.launcher.isForcing());
+
+ LocatorLauncher dirLauncher = null;
+ int initialThreadCount = Thread.activeCount();
+
+ try {
+ this.launcher.start();
+ waitForLocatorToStart(this.launcher);
+
+ // validate the pid file and its contents
+ this.pidFile = new File(this.temporaryFolder.getRoot(), ProcessType.LOCATOR.getPidFileName());
+ assertTrue("Pid file " + this.pidFile.getCanonicalPath().toString() + " should exist", this.pidFile.exists());
+ final int pid = readPid(this.pidFile);
+ assertTrue(pid > 0);
+ assertEquals(ProcessUtils.identifyPid(), pid);
+
+ dirLauncher = new Builder().setWorkingDirectory(builder.getWorkingDirectory()).build();
+ assertNotNull(dirLauncher);
+ assertFalse(dirLauncher.isRunning());
+
+ // Stop the manager
+ Cache cache = CacheFactory.getAnyInstance();
+ ManagerMXBean managerBean = ManagementService.getManagementService(cache).getManagerMXBean();
+ managerBean.stop();
+
+ // stop the locator
+ final LocatorLauncher.LocatorState locatorState = dirLauncher.stop();
+ assertNotNull(locatorState);
+ assertEquals(Status.STOPPED, locatorState.getStatus());
+ } catch (Throwable e) {
+ this.errorCollector.addError(e);
+ }
+
+ try {
+ // verify the PID file was deleted
+ waitForFileToDelete(this.pidFile);
+ } catch (Throwable e) {
+ this.errorCollector.addError(e);
+ }
+
+ int finalThreadCount = Integer.MAX_VALUE;
+
+ // Spin for up to 5 seconds waiting for threads to finish
+ for (int i = 0; i < 50 && finalThreadCount > initialThreadCount; i++) {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException ex) {
+ // ignored
+ }
+ finalThreadCount = Thread.activeCount();
+ }
+
+ assertEquals(initialThreadCount, finalThreadCount);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/566fce96/geode-assembly/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherAssemblyJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-assembly/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherAssemblyJUnitTest.java b/geode-assembly/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherAssemblyJUnitTest.java
deleted file mode 100644
index 0984508..0000000
--- a/geode-assembly/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherAssemblyJUnitTest.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * 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 com.gemstone.gemfire.distributed;
-
-import com.gemstone.gemfire.cache.Cache;
-import com.gemstone.gemfire.cache.CacheFactory;
-import com.gemstone.gemfire.distributed.AbstractLauncher.Status;
-import com.gemstone.gemfire.distributed.LocatorLauncher.Builder;
-import com.gemstone.gemfire.distributed.internal.DistributionConfig;
-import com.gemstone.gemfire.internal.AvailablePortHelper;
-import com.gemstone.gemfire.internal.process.ProcessType;
-import com.gemstone.gemfire.internal.process.ProcessUtils;
-import com.gemstone.gemfire.management.ManagementService;
-import com.gemstone.gemfire.management.ManagerMXBean;
-import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import java.io.File;
-
-import static org.junit.Assert.*;
-
-/**
- * These tests are part of assembly as they require the REST war file to be present.
- *
- */
-@Category(IntegrationTest.class)
-public class LocatorLauncherAssemblyJUnitTest extends AbstractLocatorLauncherJUnitTestCase {
-
- @Before
- public final void setUpLocatorLauncherLocalTest() throws Exception {
- disconnectFromDS();
- System.setProperty(ProcessType.TEST_PREFIX_PROPERTY, getUniqueName() + "-");
- }
-
- @After
- public final void tearDownLocatorLauncherLocalTest() throws Exception {
- disconnectFromDS();
- }
-
- /*
- * This test addresses GEODE-528
- */
- @Test
- public void testLocatorStopsWhenJmxPortIsZero() throws Throwable {
- String rootFolder = this.temporaryFolder.getRoot().getCanonicalPath();
-
- final Builder builder = new Builder()
- .setMemberName(getUniqueName())
- .setPort(this.locatorPort)
- .setRedirectOutput(false)
- .setWorkingDirectory(rootFolder)
- .set(DistributionConfig.LOG_LEVEL_NAME, "config")
- .set(DistributionConfig.ENABLE_CLUSTER_CONFIGURATION_NAME, "false")
- .set(DistributionConfig.JMX_MANAGER_NAME, "true")
- .set(DistributionConfig.JMX_MANAGER_START_NAME, "true")
- .set(DistributionConfig.JMX_MANAGER_PORT_NAME, "0");
-
- performTest(builder);
- }
-
- /*
- * This test addresses GEODE-528
- */
- @Test
- public void testLocatorStopsWhenJmxPortIsNonZero() throws Throwable {
- String rootFolder = this.temporaryFolder.getRoot().getCanonicalPath();
- final int jmxPort = AvailablePortHelper.getRandomAvailableTCPPorts(1)[0];
-
- final Builder builder = new Builder().setMemberName(getUniqueName())
- .setPort(this.locatorPort)
- .setRedirectOutput(false)
- .setWorkingDirectory(rootFolder)
- .set(DistributionConfig.LOG_LEVEL_NAME, "config")
- .set(DistributionConfig.ENABLE_CLUSTER_CONFIGURATION_NAME, "false")
- .set(DistributionConfig.JMX_MANAGER_NAME, "true")
- .set(DistributionConfig.JMX_MANAGER_START_NAME, "true")
- .set(DistributionConfig.JMX_MANAGER_PORT_NAME, Integer.toString(jmxPort));
-
- performTest(builder);
- }
-
- private void performTest(Builder builder) {
- assertFalse(builder.getForce());
- this.launcher = builder.build();
- assertFalse(this.launcher.isForcing());
-
- LocatorLauncher dirLauncher = null;
- int initialThreadCount = Thread.activeCount();
-
- try {
- this.launcher.start();
- waitForLocatorToStart(this.launcher);
-
- // validate the pid file and its contents
- this.pidFile = new File(this.temporaryFolder.getRoot(), ProcessType.LOCATOR.getPidFileName());
- assertTrue("Pid file " + this.pidFile.getCanonicalPath().toString() + " should exist", this.pidFile.exists());
- final int pid = readPid(this.pidFile);
- assertTrue(pid > 0);
- assertEquals(ProcessUtils.identifyPid(), pid);
-
- dirLauncher = new Builder().setWorkingDirectory(builder.getWorkingDirectory()).build();
- assertNotNull(dirLauncher);
- assertFalse(dirLauncher.isRunning());
-
- // Stop the manager
- Cache cache = CacheFactory.getAnyInstance();
- ManagerMXBean managerBean = ManagementService.getManagementService(cache).getManagerMXBean();
- managerBean.stop();
-
- // stop the locator
- final LocatorLauncher.LocatorState locatorState = dirLauncher.stop();
- assertNotNull(locatorState);
- assertEquals(Status.STOPPED, locatorState.getStatus());
- } catch (Throwable e) {
- this.errorCollector.addError(e);
- }
-
- try {
- // verify the PID file was deleted
- waitForFileToDelete(this.pidFile);
- } catch (Throwable e) {
- this.errorCollector.addError(e);
- }
-
- int finalThreadCount = Integer.MAX_VALUE;
-
- // Spin for up to 5 seconds waiting for threads to finish
- for (int i = 0; i < 50 && finalThreadCount > initialThreadCount; i++) {
- try {
- Thread.sleep(100);
- } catch (InterruptedException ex) {
- // ignored
- }
- finalThreadCount = Thread.activeCount();
- }
-
- assertEquals(initialThreadCount, finalThreadCount);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/566fce96/geode-assembly/src/test/java/com/gemstone/gemfire/management/internal/configuration/SharedConfigurationEndToEndDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-assembly/src/test/java/com/gemstone/gemfire/management/internal/configuration/SharedConfigurationEndToEndDUnitTest.java b/geode-assembly/src/test/java/com/gemstone/gemfire/management/internal/configuration/SharedConfigurationEndToEndDUnitTest.java
index 653bbdc..caee9ea 100644
--- a/geode-assembly/src/test/java/com/gemstone/gemfire/management/internal/configuration/SharedConfigurationEndToEndDUnitTest.java
+++ b/geode-assembly/src/test/java/com/gemstone/gemfire/management/internal/configuration/SharedConfigurationEndToEndDUnitTest.java
@@ -16,117 +16,143 @@
*/
package com.gemstone.gemfire.management.internal.configuration;
+import static com.gemstone.gemfire.cache.RegionShortcut.*;
+import static com.gemstone.gemfire.distributed.internal.DistributionConfig.*;
+import static com.gemstone.gemfire.internal.AvailablePortHelper.*;
+import static com.gemstone.gemfire.internal.FileUtil.*;
+import static com.gemstone.gemfire.internal.lang.StringUtils.*;
+import static com.gemstone.gemfire.management.internal.cli.CliUtil.*;
import static com.gemstone.gemfire.test.dunit.Assert.*;
+import static com.gemstone.gemfire.test.dunit.Host.*;
+import static com.gemstone.gemfire.test.dunit.IgnoredException.*;
import static com.gemstone.gemfire.test.dunit.LogWriterUtils.*;
import static com.gemstone.gemfire.test.dunit.Wait.*;
+import java.io.File;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.HashSet;
+import java.util.Properties;
+import java.util.Set;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
import com.gemstone.gemfire.cache.Cache;
import com.gemstone.gemfire.cache.CacheFactory;
import com.gemstone.gemfire.cache.RegionShortcut;
import com.gemstone.gemfire.cache.wan.GatewaySender.OrderPolicy;
import com.gemstone.gemfire.distributed.Locator;
-import com.gemstone.gemfire.distributed.internal.DistributionConfig;
import com.gemstone.gemfire.distributed.internal.InternalLocator;
-import com.gemstone.gemfire.internal.AvailablePortHelper;
import com.gemstone.gemfire.internal.ClassBuilder;
-import com.gemstone.gemfire.internal.FileUtil;
import com.gemstone.gemfire.internal.JarDeployer;
import com.gemstone.gemfire.internal.admin.remote.ShutdownAllRequest;
import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
-import com.gemstone.gemfire.internal.lang.StringUtils;
import com.gemstone.gemfire.management.cli.Result.Status;
-import com.gemstone.gemfire.management.internal.cli.CliUtil;
import com.gemstone.gemfire.management.internal.cli.HeadlessGfsh;
import com.gemstone.gemfire.management.internal.cli.commands.CliCommandTestBase;
import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
import com.gemstone.gemfire.management.internal.cli.result.CommandResult;
import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
-import com.gemstone.gemfire.test.dunit.Host;
-import com.gemstone.gemfire.test.dunit.IgnoredException;
import com.gemstone.gemfire.test.dunit.SerializableCallable;
import com.gemstone.gemfire.test.dunit.VM;
import com.gemstone.gemfire.test.dunit.WaitCriterion;
import com.gemstone.gemfire.test.junit.categories.DistributedTest;
-import org.apache.commons.io.FileUtils;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.HashSet;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.ExecutionException;
-
@Category(DistributedTest.class)
public class SharedConfigurationEndToEndDUnitTest extends CliCommandTestBase {
+
private static final int TIMEOUT = 10000;
private static final int INTERVAL = 500;
+
private static final String REGION1 = "R1";
private static final String REGION2 = "R2";
private static final String INDEX1 = "ID1";
- private transient ClassBuilder classBuilder = new ClassBuilder();
- public static Set<String> serverNames = new HashSet<String>();
- public static Set<String> jarFileNames = new HashSet<String>();
- private static final long serialVersionUID = -2276690105585944041L;
+ private static Set<String> serverNames;
+ private static Set<String> jarFileNames;
- public Set<String> startServers(HeadlessGfsh gfsh, String locatorString, int numServers, String serverNamePrefix, int startNum) throws ClassNotFoundException, IOException {
- Set<String> serverNames = new HashSet<String>();
+ private transient ClassBuilder classBuilder;
+ private transient String jmxHost;
+ private transient int jmxPort;
+ private transient int httpPort;
+ private transient String locatorString;
- final int[] serverPorts = AvailablePortHelper.getRandomAvailableTCPPorts(numServers);
- for (int i=0; i<numServers; i++) {
- int port = serverPorts[i];
- String serverName = serverNamePrefix+ Integer.toString(i+startNum) + "-" + port;
- CommandStringBuilder csb = new CommandStringBuilder(CliStrings.START_SERVER);
- csb.addOption(CliStrings.START_SERVER__NAME, serverName);
- csb.addOption(CliStrings.START_SERVER__LOCATORS, locatorString);
- csb.addOption(CliStrings.START_SERVER__SERVER_PORT, Integer.toString(port));
- CommandResult cmdResult = executeCommand(gfsh, csb.getCommandString());
- assertEquals(Status.OK, cmdResult.getStatus());
- }
- return serverNames;
- }
+ @Override
+ public final void postSetUpCliCommandTestBase() throws Exception {
+ disconnectAllFromDS();
+
+ addIgnoredException("EntryDestroyedException");
+
+ serverNames = new HashSet<>();
+ jarFileNames = new HashSet<>();
+
+ this.classBuilder = new ClassBuilder();
- @Test
- public void testStartServerAndExecuteCommands() throws InterruptedException, ClassNotFoundException, IOException, ExecutionException {
- IgnoredException.addIgnoredException("EntryDestroyedException");
Object[] result = setup();
- final int locatorPort = (Integer) result[0];
- final String jmxHost = (String) result[1];
- final int jmxPort = (Integer) result[2];
- final int httpPort = (Integer) result[3];
- final String locatorString = "localHost[" + locatorPort + "]";
+ int locatorPort = (Integer) result[0];
+
+ this.jmxHost = (String) result[1];
+ this.jmxPort = (Integer) result[2];
+ this.httpPort = (Integer) result[3];
+ this.locatorString = "localHost[" + locatorPort + "]";
+ }
- final HeadlessGfsh gfsh = new HeadlessGfsh("gfsh2", 300);
+ @Override
+ public final void preTearDownCliCommandTestBase() throws Exception {
+ //shutdown everything
+ shutdownAll();
+
+ serverNames.clear();
+ jarFileNames.clear();
+
+ serverNames = null;
+ jarFileNames = null;
+ }
+
+ @Test
+ public void testStartServerAndExecuteCommands() throws Exception {
+ final HeadlessGfsh gfsh = new HeadlessGfsh("gfsh2", 300, this.gfshDir);
assertNotNull(gfsh);
shellConnect(jmxHost, jmxPort, httpPort, gfsh);
serverNames.addAll(startServers(gfsh, locatorString, 2, "Server", 1));
doCreateCommands();
serverNames.addAll(startServers(gfsh, locatorString, 1, "NewMember", 4));
+
verifyRegionCreateOnAllMembers(REGION1);
verifyRegionCreateOnAllMembers(REGION2);
verifyIndexCreationOnAllMembers(INDEX1);
verifyAsyncEventQueueCreation();
-
+ }
+ private Set<String> startServers(final HeadlessGfsh gfsh, final String locatorString, final int numServers, final String serverNamePrefix, final int startNum) throws ClassNotFoundException, IOException {
+ Set<String> serverNames = new HashSet<>();
- //shutdown everything
- getLogWriter().info("Shutting down all the members");
- shutdownAll();
- deleteSavedJarFiles();
- }
+ final int[] serverPorts = getRandomAvailableTCPPorts(numServers);
+ for (int i=0; i<numServers; i++) {
+ int port = serverPorts[i];
+ String serverName = serverNamePrefix+ Integer.toString(i+startNum) + "-" + port;
+ CommandStringBuilder csb = new CommandStringBuilder(CliStrings.START_SERVER);
+ csb.addOption(CliStrings.START_SERVER__NAME, serverName);
+ csb.addOption(CliStrings.START_SERVER__LOCATORS, locatorString);
+ csb.addOption(CliStrings.START_SERVER__SERVER_PORT, Integer.toString(port));
+
+ CommandResult cmdResult = executeCommand(gfsh, csb.getCommandString());
+
+ assertEquals(Status.OK, cmdResult.getStatus());
+ }
+ return serverNames;
+ }
- private void doCreateCommands() {
- createRegion(REGION1, RegionShortcut.REPLICATE, null);
- createRegion(REGION2, RegionShortcut.PARTITION, null);
+ private void doCreateCommands() throws IOException {
+ createRegion(REGION1, REPLICATE, null);
+ createRegion(REGION2, PARTITION, null);
createIndex(INDEX1 , "AAPL", REGION1, null);
- createAndDeployJar("Deploy1.jar");
+ createAndDeployJar(this.temporaryFolder.getRoot().getCanonicalPath() + File.separator + "Deploy1.jar");
createAsyncEventQueue("q1");
final String autoCompact = "true";
final String allowForceCompaction = "true";
@@ -143,34 +169,33 @@ public class SharedConfigurationEndToEndDUnitTest extends CliCommandTestBase {
createDiskStore(diskStoreName, diskDirs, autoCompact, allowForceCompaction, compactionThreshold, duCritical, duWarning, maxOplogSize, queueSize, timeInterval, writeBufferSize);
}
-
- protected void executeAndVerifyCommand(String commandString) {
+ private void executeAndVerifyCommand(final String commandString) {
CommandResult cmdResult = executeCommand(commandString);
getLogWriter().info("Command Result : \n" + commandResultToString(cmdResult));
assertEquals(Status.OK, cmdResult.getStatus());
assertFalse(cmdResult.failedToPersist());
}
- private void createRegion(String regionName, RegionShortcut regionShortCut, String group) {
+ private void createRegion(final String regionName, final RegionShortcut regionShortCut, final String group) {
CommandStringBuilder csb = new CommandStringBuilder(CliStrings.CREATE_REGION);
csb.addOption(CliStrings.CREATE_REGION__REGION, regionName);
csb.addOption(CliStrings.CREATE_REGION__REGIONSHORTCUT, regionShortCut.name());
executeAndVerifyCommand(csb.getCommandString());
}
- private void destroyRegion(String regionName) {
+ private void destroyRegion(final String regionName) {
CommandStringBuilder csb = new CommandStringBuilder(CliStrings.DESTROY_REGION);
csb.addOption(CliStrings.DESTROY_REGION__REGION, regionName);
executeAndVerifyCommand(csb.getCommandString());
}
- private void stopServer(String serverName) {
+ private void stopServer(final String serverName) {
CommandStringBuilder csb = new CommandStringBuilder(CliStrings.STOP_SERVER);
csb.addOption(CliStrings.STOP_SERVER__MEMBER, serverName);
executeAndVerifyCommand(csb.getCommandString());
}
- public void createAsyncEventQueue(String queueName) {
+ private void createAsyncEventQueue(final String queueName) throws IOException {
String queueCommandsJarName = "testEndToEndSC-QueueCommands.jar";
final File jarFile = new File(queueCommandsJarName);
@@ -208,23 +233,22 @@ public class SharedConfigurationEndToEndDUnitTest extends CliCommandTestBase {
executeAndVerifyCommand(csb.getCommandString());
- } catch (IOException e) {
- e.printStackTrace();
} finally {
FileUtils.deleteQuietly(jarFile);
}
}
- private void createDiskStore(String diskStoreName,
- String diskDirs,
- String autoCompact,
- String allowForceCompaction,
- String compactionThreshold,
- String duCritical,
- String duWarning,
- String maxOplogSize,
- String queueSize,
- String timeInterval,
- String writeBufferSize) {
+
+ private void createDiskStore(final String diskStoreName,
+ final String diskDirs,
+ final String autoCompact,
+ final String allowForceCompaction,
+ final String compactionThreshold,
+ final String duCritical,
+ final String duWarning,
+ final String maxOplogSize,
+ final String queueSize,
+ final String timeInterval,
+ final String writeBufferSize) {
CommandStringBuilder csb = new CommandStringBuilder(CliStrings.CREATE_DISK_STORE);
csb.addOption(CliStrings.CREATE_DISK_STORE__NAME, diskStoreName);
csb.addOption(CliStrings.CREATE_DISK_STORE__DIRECTORY_AND_SIZE, diskDirs);
@@ -240,13 +264,14 @@ public class SharedConfigurationEndToEndDUnitTest extends CliCommandTestBase {
executeAndVerifyCommand(csb.getCommandString());
}
- private void destroyDiskStore(String diskStoreName, String group) {
+ private void destroyDiskStore(final String diskStoreName, final String group) {
CommandStringBuilder csb = new CommandStringBuilder(CliStrings.DESTROY_DISK_STORE);
csb.addOption(CliStrings.DESTROY_DISK_STORE__NAME, diskStoreName);
csb.addOptionWithValueCheck(CliStrings.DESTROY_DISK_STORE__GROUP, group);
executeAndVerifyCommand(csb.toString());
}
- public void createIndex(String indexName, String expression, String regionName, String group) {
+
+ private void createIndex(final String indexName, final String expression, final String regionName, final String group) {
CommandStringBuilder csb = new CommandStringBuilder(CliStrings.CREATE_INDEX);
csb.addOption(CliStrings.CREATE_INDEX__NAME, indexName);
csb.addOption(CliStrings.CREATE_INDEX__EXPRESSION, expression);
@@ -254,57 +279,50 @@ public class SharedConfigurationEndToEndDUnitTest extends CliCommandTestBase {
executeAndVerifyCommand(csb.getCommandString());
}
- public void destoyIndex(String indexName, String regionName, String group) {
- if (StringUtils.isBlank(indexName) && StringUtils.isBlank(regionName) && StringUtils.isBlank(group)) {
+ private void destroyIndex(final String indexName, final String regionName, final String group) {
+ if (isBlank(indexName) && isBlank(regionName) && isBlank(group)) {
return;
}
CommandStringBuilder csb = new CommandStringBuilder(CliStrings.DESTROY_INDEX);
- if (!StringUtils.isBlank(indexName)) {
+ if (!isBlank(indexName)) {
csb.addOption(CliStrings.DESTROY_INDEX__NAME, indexName);
}
- if (!StringUtils.isBlank(regionName)) {
+ if (!isBlank(regionName)) {
csb.addOption(CliStrings.DESTROY_INDEX__REGION, regionName);
}
- if (!StringUtils.isBlank(group)) {
+ if (!isBlank(group)) {
csb.addOption(CliStrings.DESTROY_INDEX__GROUP, group);
}
executeAndVerifyCommand(csb.getCommandString());
}
- public void createAndDeployJar(String jarName) {
+ private void createAndDeployJar(final String jarName) throws IOException {
File newDeployableJarFile = new File(jarName);
- try {
- this.classBuilder.writeJarFromName("ShareConfigClass", newDeployableJarFile);
- CommandStringBuilder csb = new CommandStringBuilder(CliStrings.DEPLOY);
- csb.addOption(CliStrings.DEPLOY__JAR, jarName);
- executeAndVerifyCommand(csb.getCommandString());
- jarFileNames.add(jarName);
- } catch (IOException e) {
- e.printStackTrace();
- }
+ this.classBuilder.writeJarFromName("ShareConfigClass", newDeployableJarFile);
+ CommandStringBuilder csb = new CommandStringBuilder(CliStrings.DEPLOY);
+ csb.addOption(CliStrings.DEPLOY__JAR, jarName);
+ executeAndVerifyCommand(csb.getCommandString());
+ jarFileNames.add(jarName);
}
- public void deleteSavedJarFiles() {
- try {
- FileUtil.deleteMatching(new File("."), "^" + JarDeployer.JAR_PREFIX + "Deploy1.*#\\d++$");
- FileUtil.delete(new File("Deploy1.jar"));
- } catch (IOException ioe) {
- ioe.printStackTrace();
- }
+ private void deleteSavedJarFiles() throws IOException {
+ deleteMatching(new File("."), "^" + JarDeployer.JAR_PREFIX + "Deploy1.*#\\d++$");
+ delete(new File("Deploy1.jar"));
}
- public Object[] setup() {
- disconnectAllFromDS();
- final int [] ports = AvailablePortHelper.getRandomAvailableTCPPorts(3);
+ private Object[] setup() throws IOException {
+ final int [] ports = getRandomAvailableTCPPorts(3);
final int locator1Port = ports[0];
+
final String locator1Name = "locator1-" + locator1Port;
- VM locatorAndMgr = Host.getHost(0).getVM(3);
+ final String locatorLogPath = this.temporaryFolder.getRoot().getCanonicalPath() + File.separator + "locator-" + locator1Port + ".log";
+ VM locatorAndMgr = getHost(0).getVM(3);
Object[] result = (Object[]) locatorAndMgr.invoke(new SerializableCallable() {
@Override
- public Object call() {
+ public Object call() throws IOException {
int httpPort;
int jmxPort;
String jmxHost;
@@ -316,42 +334,37 @@ public class SharedConfigurationEndToEndDUnitTest extends CliCommandTestBase {
jmxHost = "localhost";
}
- final int[] ports = AvailablePortHelper.getRandomAvailableTCPPorts(2);
+ final int[] ports = getRandomAvailableTCPPorts(2);
jmxPort = ports[0];
httpPort = ports[1];
- final File locatorLogFile = new File("locator-" + locator1Port + ".log");
+ final File locatorLogFile = new File(locatorLogPath);
final Properties locatorProps = new Properties();
- locatorProps.setProperty(DistributionConfig.NAME_NAME, locator1Name);
- locatorProps.setProperty(DistributionConfig.MCAST_PORT_NAME, "0");
- locatorProps.setProperty(DistributionConfig.LOG_LEVEL_NAME, "config");
- locatorProps.setProperty(DistributionConfig.ENABLE_CLUSTER_CONFIGURATION_NAME, "true");
- locatorProps.setProperty(DistributionConfig.JMX_MANAGER_NAME, "true");
- locatorProps.setProperty(DistributionConfig.JMX_MANAGER_START_NAME, "true");
- locatorProps.setProperty(DistributionConfig.JMX_MANAGER_BIND_ADDRESS_NAME, String.valueOf(jmxHost));
- locatorProps.setProperty(DistributionConfig.JMX_MANAGER_PORT_NAME, String.valueOf(jmxPort));
- locatorProps.setProperty(DistributionConfig.HTTP_SERVICE_PORT_NAME, String.valueOf(httpPort));
-
- try {
- final InternalLocator locator = (InternalLocator) Locator.startLocatorAndDS(locator1Port, locatorLogFile, null,
- locatorProps);
- WaitCriterion wc = new WaitCriterion() {
- @Override
- public boolean done() {
- return locator.isSharedConfigurationRunning();
- }
-
- @Override
- public String description() {
- return "Waiting for shared configuration to be started";
- }
- };
- waitForCriterion(wc, TIMEOUT, INTERVAL, true);
- } catch (IOException ioex) {
- fail("Unable to create a locator with a shared configuration");
- }
+ locatorProps.setProperty(NAME_NAME, locator1Name);
+ locatorProps.setProperty(MCAST_PORT_NAME, "0");
+ locatorProps.setProperty(LOG_LEVEL_NAME, "config");
+ locatorProps.setProperty(ENABLE_CLUSTER_CONFIGURATION_NAME, "true");
+ locatorProps.setProperty(JMX_MANAGER_NAME, "true");
+ locatorProps.setProperty(JMX_MANAGER_START_NAME, "true");
+ locatorProps.setProperty(JMX_MANAGER_BIND_ADDRESS_NAME, String.valueOf(jmxHost));
+ locatorProps.setProperty(JMX_MANAGER_PORT_NAME, String.valueOf(jmxPort));
+ locatorProps.setProperty(HTTP_SERVICE_PORT_NAME, String.valueOf(httpPort));
+
+ final InternalLocator locator = (InternalLocator) Locator.startLocatorAndDS(locator1Port, locatorLogFile, null, locatorProps);
+
+ WaitCriterion wc = new WaitCriterion() {
+ @Override
+ public boolean done() {
+ return locator.isSharedConfigurationRunning();
+ }
+ @Override
+ public String description() {
+ return "Waiting for shared configuration to be started";
+ }
+ };
+ waitForCriterion(wc, TIMEOUT, INTERVAL, true);
final Object[] result = new Object[4];
result[0] = locator1Port;
@@ -368,32 +381,28 @@ public class SharedConfigurationEndToEndDUnitTest extends CliCommandTestBase {
int httpPort = (Integer)result[3];
shellConnect(jmxHost, jmxPort, httpPort, gfsh);
+
// Create a cache in VM 1
- VM dataMember = Host.getHost(0).getVM(1);
+ VM dataMember = getHost(0).getVM(1);
dataMember.invoke(new SerializableCallable() {
@Override
public Object call() {
Properties localProps = new Properties();
- localProps.setProperty(DistributionConfig.MCAST_PORT_NAME, "0");
- localProps.setProperty(DistributionConfig.LOCATORS_NAME, "localhost:" + locator1Port);
- localProps.setProperty(DistributionConfig.NAME_NAME, "DataMember");
+ localProps.setProperty(MCAST_PORT_NAME, "0");
+ localProps.setProperty(LOCATORS_NAME, "localhost:" + locator1Port);
+ localProps.setProperty(NAME_NAME, "DataMember");
getSystem(localProps);
Cache cache = getCache();
assertNotNull(cache);
- return CliUtil.getAllNormalMembers(cache);
+ return getAllNormalMembers(cache);
}
});
return result;
}
private void shutdownAll() throws IOException {
- VM locatorAndMgr = Host.getHost(0).getVM(3);
+ VM locatorAndMgr = getHost(0).getVM(3);
locatorAndMgr.invoke(new SerializableCallable() {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
-
@Override
public Object call() throws Exception {
GemFireCacheImpl cache = (GemFireCacheImpl)CacheFactory.getAnyInstance();
@@ -402,7 +411,8 @@ public class SharedConfigurationEndToEndDUnitTest extends CliCommandTestBase {
}
});
- locatorAndMgr.invoke(SharedConfigurationDUnitTest.locatorCleanup);
+ locatorAndMgr.invoke(SharedConfigurationTestUtils.cleanupLocator);
+
//Clean up the directories
if (!serverNames.isEmpty()) {
for (String serverName : serverNames) {
@@ -412,10 +422,9 @@ public class SharedConfigurationEndToEndDUnitTest extends CliCommandTestBase {
}
}
serverNames.clear();
- serverNames = null;
}
- private void verifyRegionCreateOnAllMembers(String regionName) {
+ private void verifyRegionCreateOnAllMembers(final String regionName) {
CommandStringBuilder csb = new CommandStringBuilder(CliStrings.DESCRIBE_REGION);
csb.addOption(CliStrings.DESCRIBE_REGION__NAME, regionName);
CommandResult cmdResult = executeCommand(csb.getCommandString());
@@ -426,7 +435,7 @@ public class SharedConfigurationEndToEndDUnitTest extends CliCommandTestBase {
}
}
- private void verifyIndexCreationOnAllMembers(String indexName) {
+ private void verifyIndexCreationOnAllMembers(final String indexName) {
CommandStringBuilder csb = new CommandStringBuilder(CliStrings.LIST_INDEX);
CommandResult cmdResult = executeCommand(csb.getCommandString());
String resultAsString = commandResultToString(cmdResult);
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/566fce96/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java
index b632edb..dec716c 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java
@@ -303,10 +303,6 @@ public abstract class OperationContext extends WildcardPermission{
return Resource.NULL;
}
- /**
- *
- * @return
- */
public String getRegionName(){
return "NULL";
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/566fce96/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/SharedConfiguration.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/SharedConfiguration.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/SharedConfiguration.java
index 8f190eb..0f349e9 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/SharedConfiguration.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/SharedConfiguration.java
@@ -83,50 +83,38 @@ import com.gemstone.gemfire.management.internal.configuration.messages.SharedCon
import com.gemstone.gemfire.management.internal.configuration.utils.XmlUtils;
import com.gemstone.gemfire.management.internal.configuration.utils.ZipUtils;
-/*********
- *
- *
- */
-@SuppressWarnings("deprecation")
+@SuppressWarnings({ "deprecation", "unchecked" })
public class SharedConfiguration {
private static final Logger logger = LogService.getLogger();
- static class JarFileFilter implements FilenameFilter {
- @Override
- public boolean accept(File dir, String name) {
- return name.endsWith(".jar");
- }
- }
- /****
+ /**
* Name of the directory where the shared configuration artifacts are stored
*/
public static final String CLUSTER_CONFIG_ARTIFACTS_DIR_NAME = "cluster_config";
- public static final String CLUSTER_CONFIG_DISK_STORE_NAME = "cluster_config";
- public static String CONFIG_DIR_PATH;//FilenameUtils.concat(System.getProperty("user.dir"), CONFIG_ARTIFACTS_DIR_NAME);
+ private static final String CLUSTER_CONFIG_DISK_STORE_NAME = "cluster_config";
public static final String CLUSTER_CONFIG_DISK_DIR_PREFIX = "ConfigDiskDir_";
public static final String CLUSTER_CONFIG = "cluster";
-
- /***
+ /**
* Name of the lock service used for shared configuration
*/
- public static final String SHARED_CONFIG_LOCK_SERVICE_NAME = "__CLUSTER_CONFIG_LS";
+ private static final String SHARED_CONFIG_LOCK_SERVICE_NAME = "__CLUSTER_CONFIG_LS";
- /***
+ /**
* Name of the lock for locking the shared configuration
*/
public static final String SHARED_CONFIG_LOCK_NAME = "__CLUSTER_CONFIG_LOCK";
- /***
+ /**
* Name of the region which is used to store the configuration information
*/
- public static final String CONFIG_REGION_NAME = "_ConfigurationRegion";
+ private static final String CONFIG_REGION_NAME = "_ConfigurationRegion";
-
- public String CONFIG_DISK_DIR_NAME;
- public String CONFIG_DISK_DIR_PATH;;
+ private final String configDirPath;
+ private final String configDiskDirName;
+ private final String configDiskDirPath;;
private final Set<PersistentMemberPattern> newerSharedConfigurationLocatorInfo = new HashSet<PersistentMemberPattern>();
private final AtomicReference<SharedConfigurationStatus> status = new AtomicReference<SharedConfigurationStatus>();
@@ -136,12 +124,9 @@ public class SharedConfiguration {
private GemFireCacheImpl cache;
private final DistributedLockService sharedConfigLockingService;
-
- /****
+ /**
* Gets or creates (if not created) shared configuration lock service
- * @return DistributedLockService
*/
-
public static DistributedLockService getSharedConfigLockService(DistributedSystem ds) {
DistributedLockService sharedConfigDls = DLockService.getServiceNamed(SHARED_CONFIG_LOCK_SERVICE_NAME);
try {
@@ -154,19 +139,9 @@ public class SharedConfiguration {
return sharedConfigDls;
}
- /**
- * Returns an array containing the names of the subdirectories in a given directory
- * @param path Path of the directory whose subdirectories are listed
- * @return String[] names of first level subdirectories, null if no subdirectories are found or if the path is incorrect
- */
- private static String[] getSubdirectories(String path) {
- File directory = new File(path);
- return directory.list(DirectoryFileFilter.INSTANCE);
- }
-
public SharedConfiguration(Cache cache) throws IOException {
this.cache = (GemFireCacheImpl)cache;
- CONFIG_DISK_DIR_NAME = CLUSTER_CONFIG_DISK_DIR_PREFIX + cache.getDistributedSystem().getName();
+ this.configDiskDirName = CLUSTER_CONFIG_DISK_DIR_PREFIX + cache.getDistributedSystem().getName();
String clusterConfigDir = cache.getDistributedSystem().getProperties().getProperty(DistributionConfig.CLUSTER_CONFIGURATION_DIR);
if (StringUtils.isBlank(clusterConfigDir)) {
clusterConfigDir = System.getProperty("user.dir");
@@ -177,17 +152,14 @@ public class SharedConfiguration {
}
clusterConfigDir = diskDir.getCanonicalPath();
}
- CONFIG_DISK_DIR_PATH = FilenameUtils.concat(clusterConfigDir, CONFIG_DISK_DIR_NAME);
- CONFIG_DIR_PATH = FilenameUtils.concat(clusterConfigDir, CLUSTER_CONFIG_ARTIFACTS_DIR_NAME);
+ this.configDiskDirPath = FilenameUtils.concat(clusterConfigDir, this.configDiskDirName);
+ configDirPath = FilenameUtils.concat(clusterConfigDir, CLUSTER_CONFIG_ARTIFACTS_DIR_NAME);
sharedConfigLockingService = getSharedConfigLockService(cache.getDistributedSystem());
status.set(SharedConfigurationStatus.NOT_STARTED);
}
- /*****
+ /**
* Add jar information into the shared configuration and save the jars in the file system
- * @param jarNames
- * @param jarBytes
- * @param groups
* @return true on success
*/
public boolean addJars(String []jarNames, byte[][]jarBytes, String[]groups) {
@@ -198,7 +170,7 @@ public class SharedConfiguration {
}
Region<String, Configuration> configRegion = getConfigurationRegion();
for (String group : groups) {
- Configuration configuration = (Configuration) configRegion.get(group);
+ Configuration configuration = configRegion.get(group);
if (configuration == null) {
configuration = new Configuration(group);
@@ -206,7 +178,7 @@ public class SharedConfiguration {
}
configuration.addJarNames(jarNames);
configRegion.put(group, configuration);
- String groupDir = FilenameUtils.concat(CONFIG_DIR_PATH, group);
+ String groupDir = FilenameUtils.concat(configDirPath, group);
writeJarFiles(groupDir, jarNames, jarBytes);
}
} catch (Exception e) {
@@ -216,12 +188,8 @@ public class SharedConfiguration {
return success;
}
-
- /***
+ /**
* Adds/replaces the xml entity in the shared configuration
- * @param xmlEntity
- * @param groups
- * @throws Exception
*/
public void addXmlEntity(XmlEntity xmlEntity, String[] groups) throws Exception {
Region<String, Configuration> configRegion = getConfigurationRegion();
@@ -248,30 +216,6 @@ public class SharedConfiguration {
}
}
- /**
- * Create a {@link Document} using
- * {@link XmlUtils#createDocumentFromXml(String)} and if the version attribute
- * is not equal to the current version then update the XML to the current
- * schema and return the document.
- *
- * @param xmlContent
- * XML content to load and upgrade.
- * @return {@link Document} from xmlContent.
- * @throws IOException
- * @throws ParserConfigurationException
- * @throws SAXException
- * @throws XPathExpressionException
- * @since 8.1
- */
- // UnitTest SharedConfigurationJUnitTest.testCreateAndUpgradeDocumentFromXml
- static Document createAndUpgradeDocumentFromXml(final String xmlContent) throws SAXException, ParserConfigurationException, IOException, XPathExpressionException {
- Document doc = XmlUtils.createDocumentFromXml(xmlContent);
- if (!CacheXml.VERSION_LATEST.equals(XmlUtils.getAttribute(doc.getDocumentElement(), CacheXml.VERSION, CacheXml.GEODE_NAMESPACE))) {
- doc = XmlUtils.upgradeSchema(doc, CacheXml.GEODE_NAMESPACE, CacheXml.LATEST_SCHEMA_LOCATION, CacheXml.VERSION_LATEST);
- }
- return doc;
- }
-
public void clearSharedConfiguration() throws Exception {
Region<String, Configuration> configRegion = getConfigurationRegion();
if (configRegion != null) {
@@ -279,11 +223,9 @@ public class SharedConfiguration {
}
}
-
- /*****
+ /**
* Creates the shared configuration service
* @param loadSharedConfigFromDir when set to true, loads the configuration from the share_config directory
- * @throws Exception
*/
public void initSharedConfiguration(boolean loadSharedConfigFromDir) throws Exception {
status.set(SharedConfigurationStatus.STARTED);
@@ -349,23 +291,11 @@ public class SharedConfiguration {
status.set(SharedConfigurationStatus.RUNNING);
}
-
- public boolean lockSharedConfiguration() {
- return sharedConfigLockingService.lock(SHARED_CONFIG_LOCK_NAME, -1, -1);
- }
-
- public void unlockSharedConfiguration() {
- sharedConfigLockingService.unlock(SHARED_CONFIG_LOCK_NAME);
- }
-
- /****
+ /**
* Creates a ConfigurationResponse based on the configRequest, configuration response contains the requested shared configuration
* This method locks the SharedConfiguration
- * @param configRequest
- * @return ConfigurationResponse
- * @throws Exception
*/
- public ConfigurationResponse createConfigurationReponse(ConfigurationRequest configRequest) throws Exception {
+ public ConfigurationResponse createConfigurationReponse(final ConfigurationRequest configRequest) throws Exception {
ConfigurationResponse configResponse = new ConfigurationResponse();
@@ -401,7 +331,7 @@ public class SharedConfiguration {
return configResponse;
}
- /***
+ /**
* Create a response containing the status of the Shared configuration and information about other locators containing newer
* shared configuration data (if at all)
* @return {@link SharedConfigurationStatusResponse} containing the {@link SharedConfigurationStatus}
@@ -413,13 +343,10 @@ public class SharedConfiguration {
return response;
}
- /*****
+ /**
* Deletes the xml entity from the shared configuration.
- * @param xmlEntity
- * @param groups
- * @throws Exception
*/
- public void deleteXmlEntity (XmlEntity xmlEntity, String[] groups) throws Exception {
+ public void deleteXmlEntity(final XmlEntity xmlEntity, String[] groups) throws Exception {
Region<String, Configuration> configRegion = getConfigurationRegion();
//No group is specified, so delete in every single group if it exists.
if (groups == null) {
@@ -441,7 +368,7 @@ public class SharedConfiguration {
}
}
- public void modifyCacheAttributes(XmlEntity xmlEntity, String [] groups) throws Exception {
+ public void modifyCacheAttributes(final XmlEntity xmlEntity, String [] groups) throws Exception {
Region<String, Configuration> configRegion = getConfigurationRegion();
//No group is specified, so modify the cache attributes for a in every single group if it exists.
if (groups == null) {
@@ -474,27 +401,26 @@ public class SharedConfiguration {
}
}
- /***
- * Only to be used for clean up in DUnits.
+ /**
+ * For tests only. TODO: clean this up and remove from production code
+ * <p/>
+ * Throws {@code AssertionError} wrapping any exception thrown by operation.
*/
- public void destroySharedConfiguration() {
- Region<String, Configuration> configRegion;
+ public void destroySharedConfiguration_forTestsOnly() {
try {
- configRegion = getConfigurationRegion();
+ Region<String, Configuration> configRegion = getConfigurationRegion();
if (configRegion != null) {
configRegion.destroyRegion();
}
DiskStore configDiskStore = this.cache.findDiskStore(CLUSTER_CONFIG_ARTIFACTS_DIR_NAME);
if (configDiskStore != null) {
configDiskStore.destroy();
- File file = new File(CONFIG_DISK_DIR_PATH);
+ File file = new File(configDiskDirPath);
FileUtils.deleteDirectory(file);
}
- FileUtils.deleteDirectory(new File(CONFIG_DIR_PATH));
- } catch (IOException e) {
- e.printStackTrace();
- } catch (Exception e1) {
- e1.printStackTrace();
+ FileUtils.deleteDirectory(new File(configDirPath));
+ } catch (Exception exception) {
+ throw new AssertionError(exception);
}
}
@@ -521,7 +447,7 @@ public class SharedConfiguration {
if (configuration != null) {
Set<String> jarNameSet = configuration.getJarNames();
for (String jarName : jarNameSet) {
- String groupDirPath = FilenameUtils.concat(CONFIG_DIR_PATH, group);
+ String groupDirPath = FilenameUtils.concat(configDirPath, group);
if (!jarsAdded.contains(jarName)) {
String jarFilePath = FilenameUtils.concat(groupDirPath, jarName);
jarNames[ctr]=jarName;
@@ -531,18 +457,163 @@ public class SharedConfiguration {
}
}
}
+
jars[0] = jarNames;
jars[1] = jarBytes;
}
return jars;
}
+ public Configuration getConfiguration(String groupName) throws Exception {
+ Configuration configuration = getConfigurationRegion().get(groupName);
+ return configuration;
+ }
+
+ public Map<String, Configuration> getEntireConfiguration() throws Exception {
+ Set<String> keys = getConfigurationRegion().keySet();
+ return getConfigurationRegion().getAll(keys);
+ }
+
+ /**
+ * Returns the path of Shared configuration directory
+ * @return {@link String} path of the shared configuration directory
+ */
+ public String getSharedConfigurationDirPath() {
+ return configDirPath;
+ }
+
+ /**
+ * Gets the current status of the SharedConfiguration
+ * If the status is started , it determines if the shared configuration is waiting for new configuration on
+ * other locators
+ * @return {@link SharedConfigurationStatus}
+ */
+ public SharedConfigurationStatus getStatus() {
+ SharedConfigurationStatus scStatus = this.status.get();
+ if (scStatus == SharedConfigurationStatus.STARTED) {
+ PersistentMemberManager pmm = cache.getPersistentMemberManager();
+ Map<String, Set<PersistentMemberID>> waitingRegions = pmm.getWaitingRegions();
+ if (!waitingRegions.isEmpty()) {
+ this.status.compareAndSet(SharedConfigurationStatus.STARTED, SharedConfigurationStatus.WAITING);
+ Set<PersistentMemberID> persMemIds = waitingRegions.get(Region.SEPARATOR_CHAR + CONFIG_REGION_NAME);
+ for (PersistentMemberID persMemId : persMemIds) {
+ newerSharedConfigurationLocatorInfo.add(new PersistentMemberPattern(persMemId));
+ }
+ }
+ }
+ return this.status.get();
+ }
+
+ /**
+ * Loads the
+ * @throws Exception
+ */
+ public void loadSharedConfigurationFromDisk() throws Exception {
+ Map<String, Configuration> sharedConfigurationMap = readSharedConfigurationFromDisk();
+ getConfigurationRegion().clear();
+ getConfigurationRegion().putAll(sharedConfigurationMap);
+ }
+
+ public void modifyProperties(final Properties properties, String[] groups) throws Exception {
+ if (groups == null) {
+ groups = new String[] {SharedConfiguration.CLUSTER_CONFIG};
+ }
+ Region<String, Configuration> configRegion = getConfigurationRegion();
+ for (String group : groups) {
+ Configuration configuration = configRegion.get(group);
+ if (configuration == null) {
+ configuration = new Configuration(group);
+ }
+ configuration.getGemfireProperties().putAll(properties);
+ configRegion.put(group, configuration);
+ writeConfig(configuration);
+ }
+ }
+
+ /**
+ * Removes the jar files from the shared configuration.
+ * @param jarNames Names of the jar files.
+ * @param groups Names of the groups which had the jar file deployed.
+ * @return true on success.
+ */
+ public boolean removeJars(final String[] jarNames, String[] groups){
+ boolean success = true;
+ try {
+ Region<String, Configuration> configRegion = getConfigurationRegion();
+ if (groups == null) {
+ Set<String> groupSet = configRegion.keySet();
+ groups = groupSet.toArray(new String[groupSet.size()]);
+ }
+ for (String group : groups) {
+ Configuration configuration = (Configuration) configRegion.get(group);
+ if (configuration != null) {
+ String dirPath = FilenameUtils.concat(getSharedConfigurationDirPath(), configuration.getConfigName());
+ removeJarFiles(dirPath, jarNames);
+ }
+ }
+ for (String group : groups) {
+ Configuration configuration = (Configuration) configRegion.get(group);
+ if (configuration != null) {
+ if (!configuration.getJarNames().isEmpty()) {
+ configuration.removeJarNames(jarNames);
+ configRegion.put(group, configuration);
+ }
+ }
+ }
+ } catch (Exception e) {
+ logger.info("Exception occurred while deleting the jar files", e);
+ success = false;
+ }
+ return success;
+ }
+
+ public void renameExistingSharedConfigDirectory() {
+ File configDirFile = new File(configDirPath);
+ if (configDirFile.exists()) {
+ String configDirFileName2 = CLUSTER_CONFIG_ARTIFACTS_DIR_NAME + new SimpleDateFormat("yyyyMMddhhmm").format(new Date()) + "." + System.nanoTime();
+ File configDirFile2 = new File(FilenameUtils.concat(configDirFileName2, configDirFileName2));
+ try {
+ FileUtils.moveDirectoryToDirectory(configDirFile, configDirFile2, true);
+ } catch (IOException e) {
+ logger.info(e);
+ }
+ }
+ }
+
+ /**
+ * Writes the contents of the {@link Configuration} to the file system
+ */
+ public void writeConfig(final Configuration configuration) throws Exception {
+ File configDir = new File(getSharedConfigurationDirPath());
+ if (!configDir.exists()) {
+ if (!configDir.mkdirs()) {
+ throw new IOException("Cannot create directory : " + getSharedConfigurationDirPath());
+ }
+ }
+ String dirPath = FilenameUtils.concat(getSharedConfigurationDirPath(), configuration.getConfigName());
+ File file = new File(dirPath);
+ if (!file.exists()) {
+ if (!file.mkdir()) {
+ throw new IOException("Cannot create directory : " + dirPath);
+ }
+ }
+
+ writeProperties(dirPath, configuration);
+ writeCacheXml(dirPath, configuration);
+ }
+
+ private boolean lockSharedConfiguration() {
+ return sharedConfigLockingService.lock(SHARED_CONFIG_LOCK_NAME, -1, -1);
+ }
+
+ private void unlockSharedConfiguration() {
+ sharedConfigLockingService.unlock(SHARED_CONFIG_LOCK_NAME);
+ }
- /***
+ /**
* Gets the Jar from existing locators in the system
- * @throws Exception
*/
- public void getAllJarsFromOtherLocators() throws Exception {
+ private void getAllJarsFromOtherLocators() throws Exception {
logger.info("Getting Jar files from other locators");
DM dm = cache.getDistributionManager();
DistributedMember me = cache.getMyId();
@@ -555,7 +626,6 @@ public class SharedConfiguration {
logger.info("No other locators present");
return;
}
- @SuppressWarnings("unchecked")
ResultCollector<?, List<Object>> rc = (ResultCollector<?, List<Object>>) CliUtil.executeFunction(getAllJarsFunction, null , locators);
List<Object> results = rc.getResult();
@@ -584,7 +654,7 @@ public class SharedConfiguration {
for (String group : groups) {
Configuration config = entireConfiguration.get(group);
Set<String> groupJarNames = config.getJarNames();
- String groupDirPath = FilenameUtils.concat(CONFIG_DIR_PATH, group);
+ String groupDirPath = FilenameUtils.concat(configDirPath, group);
for (String groupJarName : groupJarNames) {
Integer index = jarIndex.get(groupJarName);
@@ -609,29 +679,22 @@ public class SharedConfiguration {
}
}
- public Configuration getConfiguration(String groupName) throws Exception {
- Configuration configuration = (Configuration)getConfigurationRegion().get(groupName);
- return configuration;
- }
-
- /*****
+ /**
* Gets the region containing the shared configuration data.
* The region is created , if it does not exist already.
* Note : this could block if this locator contains stale persistent configuration data.
- * @return {@link Region} ConfigurationRegion
- * @throws Exception
+ * @return {@link Region} ConfigurationRegion
*/
private Region<String, Configuration> getConfigurationRegion() throws Exception {
- @SuppressWarnings("unchecked")
Region<String, Configuration> configRegion = cache.getRegion(CONFIG_REGION_NAME);
try {
if (configRegion == null) {
- File diskDir = new File(CONFIG_DISK_DIR_PATH);
+ File diskDir = new File(configDiskDirPath);
if (!diskDir.exists()) {
if (!diskDir.mkdirs()) {
- throw new IOException("Cannot create directory at " + CONFIG_DISK_DIR_PATH);
+ throw new IOException("Cannot create directory at " + configDiskDirPath);
}
}
@@ -653,83 +716,24 @@ public class SharedConfiguration {
configRegion = cache.createVMRegion(CONFIG_REGION_NAME, regionAttrsFactory.create(), internalArgs);
}
+
} catch (CancelException e) {
if (configRegion == null) {
this.status.set(SharedConfigurationStatus.STOPPED);
}
throw e; // CONFIG: don't rethrow as Exception, keep it a subclass of CancelException
+
} catch (Exception e) {
if (configRegion == null) {
this.status.set(SharedConfigurationStatus.STOPPED);
}
throw new Exception("Error occurred while initializing cluster configuration", e);
}
- return configRegion;
- }
- public Map<String, Configuration> getEntireConfiguration() throws Exception {
- Set<String> keys = getConfigurationRegion().keySet();
- return getConfigurationRegion().getAll(keys);
- }
-
-
- /****
- * Returns the path of Shared configuration directory
- * @return {@link String} path of the shared configuration directory
- */
- public String getSharedConfigurationDirPath() {
- return CONFIG_DIR_PATH;
- }
-
-
- /*****
- * Gets the current status of the SharedConfiguration
- * If the status is started , it determines if the shared configuration is waiting for new configuration on
- * other locators
- * @return {@link SharedConfigurationStatus}
- */
- public SharedConfigurationStatus getStatus() {
- SharedConfigurationStatus scStatus = this.status.get();
- if (scStatus == SharedConfigurationStatus.STARTED) {
- PersistentMemberManager pmm = cache.getPersistentMemberManager();
- Map<String, Set<PersistentMemberID>> waitingRegions = pmm.getWaitingRegions();
- if (!waitingRegions.isEmpty()) {
- this.status.compareAndSet(SharedConfigurationStatus.STARTED, SharedConfigurationStatus.WAITING);
- Set<PersistentMemberID> persMemIds = waitingRegions.get(Region.SEPARATOR_CHAR + CONFIG_REGION_NAME);
- for (PersistentMemberID persMemId : persMemIds) {
- newerSharedConfigurationLocatorInfo.add(new PersistentMemberPattern(persMemId));
- }
- }
- }
- return this.status.get();
- }
- /****
- * Loads the
- * @throws Exception
- */
- public void loadSharedConfigurationFromDisk() throws Exception {
- Map<String, Configuration> sharedConfigurationMap = readSharedConfigurationFromDisk();
- getConfigurationRegion().clear();
- getConfigurationRegion().putAll(sharedConfigurationMap);
- }
-
- public void modifyProperties(Properties properties, String[] groups) throws Exception {
- if (groups == null) {
- groups = new String[] {SharedConfiguration.CLUSTER_CONFIG};
- }
- Region<String, Configuration> configRegion = getConfigurationRegion();
- for (String group : groups) {
- Configuration configuration = (Configuration) configRegion.get(group);
- if (configuration == null) {
- configuration = new Configuration(group);
- }
- configuration.getGemfireProperties().putAll(properties);
- configRegion.put(group, configuration);
- writeConfig(configuration);
- }
+ return configRegion;
}
- /*****
+ /**
* Reads the configuration information from the shared configuration directory and returns a {@link Configuration} object
* @param configName
* @param configDirectory
@@ -739,7 +743,7 @@ public class SharedConfiguration {
* @throws ParserConfigurationException
* @throws SAXException
*/
- private Configuration readConfiguration(String configName, String configDirectory) throws SAXException, ParserConfigurationException, TransformerFactoryConfigurationError, TransformerException {
+ private Configuration readConfiguration(final String configName, final String configDirectory) throws SAXException, ParserConfigurationException, TransformerFactoryConfigurationError, TransformerException {
Configuration configuration = new Configuration(configName);
String cacheXmlFullPath = FilenameUtils.concat(configDirectory, configuration.getCacheXmlFileName());
String propertiesFullPath = FilenameUtils.concat(configDirectory, configuration.getPropertiesFileName());
@@ -760,14 +764,13 @@ public class SharedConfiguration {
return configuration;
}
- /*****
+ /**
* Reads the properties from the properties file.
* @param propertiesFilePath
* @return {@link Properties}
* @throws IOException
*/
- public Properties readProperties(String propertiesFilePath) throws IOException{
-
+ private Properties readProperties(final String propertiesFilePath) throws IOException {
Properties properties = new Properties();
File propsFile = new File(propertiesFilePath);
FileInputStream fis = null;
@@ -784,9 +787,8 @@ public class SharedConfiguration {
return properties;
}
-
- /****
- * Reads the "shared_config" directory and loads all the cache.xml , gemfire.properties and deployd jars information
+ /**
+ * Reads the "shared_config" directory and loads all the cache.xml, gemfire.properties and deployed jars information
* @return {@link Map}
* @throws TransformerException
* @throws TransformerFactoryConfigurationError
@@ -794,12 +796,12 @@ public class SharedConfiguration {
* @throws SAXException
*/
private Map<String, Configuration> readSharedConfigurationFromDisk() throws SAXException, ParserConfigurationException, TransformerFactoryConfigurationError, TransformerException {
- String []subdirectoryNames = getSubdirectories(CONFIG_DIR_PATH);
+ String[] subdirectoryNames = getSubdirectories(configDirPath);
Map<String, Configuration> sharedConfiguration = new HashMap<String, Configuration>();
if (subdirectoryNames != null) {
for (String subdirectoryName : subdirectoryNames) {
- String fullpath = FilenameUtils.concat(CONFIG_DIR_PATH, subdirectoryName);
+ String fullpath = FilenameUtils.concat(configDirPath, subdirectoryName);
Configuration configuration = readConfiguration(subdirectoryName, fullpath);
sharedConfiguration.put(subdirectoryName, configuration);
}
@@ -807,16 +809,13 @@ public class SharedConfiguration {
return sharedConfiguration;
}
-
-
- /****
+ /**
* Removes the jar files from the given directory
* @param dirPath Path of the configuration directory
* @param jarNames Names of the jar files
* @throws IOException
*/
-
- public void removeJarFiles (String dirPath, String[] jarNames) throws IOException {
+ private void removeJarFiles(final String dirPath, final String[] jarNames) throws IOException {
if (jarNames != null) {
for (int i=0; i<jarNames.length; i++) {
File jarFile = new File(FilenameUtils.concat(dirPath, jarNames[i]));
@@ -838,96 +837,21 @@ public class SharedConfiguration {
}
}
- /****
- * Removes the jar files from the shared configuration.
- * @param jarNames Names of the jar files.
- * @param groups Names of the groups which had the jar file deployed.
- * @return true on success.
- */
- public boolean removeJars(String []jarNames, String[] groups){
- boolean success = true;
- try {
- Region<String, Configuration> configRegion = getConfigurationRegion();
- if (groups == null) {
- Set<String> groupSet = configRegion.keySet();
- groups = groupSet.toArray(new String[groupSet.size()]);
- }
- for (String group : groups) {
- Configuration configuration = (Configuration) configRegion.get(group);
- if (configuration != null) {
- String dirPath = FilenameUtils.concat(getSharedConfigurationDirPath(), configuration.getConfigName());
- removeJarFiles(dirPath, jarNames);
- }
- }
- for (String group : groups) {
- Configuration configuration = (Configuration) configRegion.get(group);
- if (configuration != null) {
- if (!configuration.getJarNames().isEmpty()) {
- configuration.removeJarNames(jarNames);
- configRegion.put(group, configuration);
- }
- }
- }
- } catch (Exception e) {
- logger.info("Exception occurred while deleting the jar files", e);
- success = false;
- }
- return success;
- }
-
- public void renameExistingSharedConfigDirectory() {
- File configDirFile = new File(CONFIG_DIR_PATH);
- if (configDirFile.exists()) {
- String configDirFileName2 = CLUSTER_CONFIG_ARTIFACTS_DIR_NAME + new SimpleDateFormat("yyyyMMddhhmm").format(new Date()) + "." + System.nanoTime();
- File configDirFile2 = new File(FilenameUtils.concat(configDirFileName2, configDirFileName2));
- try {
- FileUtils.moveDirectoryToDirectory(configDirFile, configDirFile2, true);
- } catch (IOException e) {
- logger.info(e);
- }
- }
- }
- /***
+ /**
* Writes the cache.xml to the file , based on Configuration
- * @param dirPath Path of the directory in which the configuration is written
- * @param configuration
- * @throws IOException
*/
- private void writeCacheXml(String dirPath, Configuration configuration) throws IOException {
+ private void writeCacheXml(final String dirPath, final Configuration configuration) throws IOException {
String fullPath = FilenameUtils.concat(dirPath,configuration.getCacheXmlFileName());
FileUtils.writeStringToFile(new File(fullPath), configuration.getCacheXmlContent(), "UTF-8") ;
}
- /***
- * Writes the contents of the {@link Configuration} to the file system
- * @param configuration
- * @throws Exception
- */
- public void writeConfig(Configuration configuration) throws Exception {
- File configDir = new File(getSharedConfigurationDirPath());
- if (!configDir.exists()) {
- if (!configDir.mkdirs()) {
- throw new IOException("Cannot create directory : " + getSharedConfigurationDirPath());
- }
- }
- String dirPath = FilenameUtils.concat(getSharedConfigurationDirPath(), configuration.getConfigName());
- File file = new File(dirPath);
- if (!file.exists()) {
- if (!file.mkdir()) {
- throw new IOException("Cannot create directory : " + dirPath);
- }
- }
-
- writeProperties(dirPath, configuration);
- writeCacheXml(dirPath, configuration);
- }
- /*****
+ /**
* Writes the
* @param dirPath target directory , where the jar files are to be written
* @param jarNames Array containing the name of the jar files.
* @param jarBytes Array of byte arrays for the jar files.
*/
- private void writeJarFiles(String dirPath , String[] jarNames, byte[][] jarBytes) {
+ private void writeJarFiles(final String dirPath, final String[] jarNames, final byte[][] jarBytes) {
for (int i=0; i<jarNames.length; i++) {
String filePath = FilenameUtils.concat(dirPath, jarNames[i]);
File jarFile = new File(filePath);
@@ -939,17 +863,49 @@ public class SharedConfiguration {
}
}
- /****
+ /**
* Writes the properties to the file based on the {@link Configuration}
- * @param dirPath
- * @param configuration
- * @throws IOException
*/
- private void writeProperties(String dirPath, Configuration configuration) throws IOException {
+ private void writeProperties(final String dirPath, final Configuration configuration) throws IOException {
String fullPath = FilenameUtils.concat(dirPath,configuration.getPropertiesFileName());
BufferedWriter bw = new BufferedWriter(new FileWriter(fullPath));
configuration.getGemfireProperties().store(bw, "");
bw.close();
}
+ /**
+ * Create a {@link Document} using
+ * {@link XmlUtils#createDocumentFromXml(String)} and if the version attribute
+ * is not equal to the current version then update the XML to the current
+ * schema and return the document.
+ *
+ * @param xmlContent XML content to load and upgrade.
+ * @return {@link Document} from xmlContent.
+ * @since 8.1
+ */
+ // UnitTest SharedConfigurationJUnitTest.testCreateAndUpgradeDocumentFromXml
+ static Document createAndUpgradeDocumentFromXml(final String xmlContent) throws SAXException, ParserConfigurationException, IOException, XPathExpressionException {
+ Document doc = XmlUtils.createDocumentFromXml(xmlContent);
+ if (!CacheXml.VERSION_LATEST.equals(XmlUtils.getAttribute(doc.getDocumentElement(), CacheXml.VERSION, CacheXml.GEODE_NAMESPACE))) {
+ doc = XmlUtils.upgradeSchema(doc, CacheXml.GEODE_NAMESPACE, CacheXml.LATEST_SCHEMA_LOCATION, CacheXml.VERSION_LATEST);
+ }
+ return doc;
+ }
+
+ /**
+ * Returns an array containing the names of the subdirectories in a given directory
+ * @param path Path of the directory whose subdirectories are listed
+ * @return String[] names of first level subdirectories, null if no subdirectories are found or if the path is incorrect
+ */
+ private static String[] getSubdirectories(String path) {
+ File directory = new File(path);
+ return directory.list(DirectoryFileFilter.INSTANCE);
+ }
+
+ private static class JarFileFilter implements FilenameFilter {
+ @Override
+ public boolean accept(File dir, String name) {
+ return name.endsWith(".jar");
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/566fce96/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherIntegrationJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherIntegrationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherIntegrationJUnitTest.java
deleted file mode 100755
index 745090d..0000000
--- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherIntegrationJUnitTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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 com.gemstone.gemfire.distributed;
-
-import static org.assertj.core.api.Assertions.*;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.util.Properties;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestName;
-
-import com.gemstone.gemfire.distributed.internal.DistributionConfig;
-import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
-
-/**
- * Integration tests for AbstractLauncher class. These tests require file system I/O.
- */
-@Category(IntegrationTest.class)
-public class AbstractLauncherIntegrationJUnitTest {
-
- @Rule
- public final TemporaryFolder temporaryFolder = new TemporaryFolder();
-
- @Rule
- public final TestName testName = new TestName();
-
- private File gemfirePropertiesFile;
- private Properties expectedGemfireProperties;
-
- @Before
- public void setUp() throws Exception {
- this.gemfirePropertiesFile = this.temporaryFolder.newFile("gemfire.properties");
-
- this.expectedGemfireProperties = new Properties();
- this.expectedGemfireProperties.setProperty(DistributionConfig.NAME_NAME, "memberOne");
- this.expectedGemfireProperties.setProperty(DistributionConfig.GROUPS_NAME, "groupOne, groupTwo");
- this.expectedGemfireProperties.store(new FileWriter(this.gemfirePropertiesFile, false), this.testName.getMethodName());
-
- assertThat(this.gemfirePropertiesFile).isNotNull();
- assertThat(this.gemfirePropertiesFile.exists()).isTrue();
- assertThat(this.gemfirePropertiesFile.isFile()).isTrue();
- }
-
- @Test
- public void testLoadGemFirePropertiesFromFile() throws Exception {
- final Properties actualGemFireProperties = AbstractLauncher.loadGemFireProperties(this.gemfirePropertiesFile.toURI().toURL());
-
- assertThat(actualGemFireProperties).isNotNull();
- assertThat(actualGemFireProperties).isEqualTo(this.expectedGemfireProperties);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/566fce96/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherIntegrationTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherIntegrationTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherIntegrationTest.java
new file mode 100755
index 0000000..040d15f
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherIntegrationTest.java
@@ -0,0 +1,71 @@
+/*
+ * 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 com.gemstone.gemfire.distributed;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.util.Properties;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TemporaryFolder;
+import org.junit.rules.TestName;
+
+import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
+
+/**
+ * Integration tests for AbstractLauncher class. These tests require file system I/O.
+ */
+@Category(IntegrationTest.class)
+public class AbstractLauncherIntegrationTest {
+
+ private File gemfirePropertiesFile;
+ private Properties expectedGemfireProperties;
+
+ @Rule
+ public final TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ @Rule
+ public final TestName testName = new TestName();
+
+ @Before
+ public void setUp() throws Exception {
+ this.gemfirePropertiesFile = this.temporaryFolder.newFile("gemfire.properties");
+
+ this.expectedGemfireProperties = new Properties();
+ this.expectedGemfireProperties.setProperty(DistributionConfig.NAME_NAME, "memberOne");
+ this.expectedGemfireProperties.setProperty(DistributionConfig.GROUPS_NAME, "groupOne, groupTwo");
+ this.expectedGemfireProperties.store(new FileWriter(this.gemfirePropertiesFile, false), this.testName.getMethodName());
+
+ assertThat(this.gemfirePropertiesFile).isNotNull();
+ assertThat(this.gemfirePropertiesFile.exists()).isTrue();
+ assertThat(this.gemfirePropertiesFile.isFile()).isTrue();
+ }
+
+ @Test
+ public void testLoadGemFirePropertiesFromFile() throws Exception {
+ final Properties actualGemFireProperties = AbstractLauncher.loadGemFireProperties(this.gemfirePropertiesFile.toURI().toURL());
+
+ assertThat(actualGemFireProperties).isNotNull();
+ assertThat(actualGemFireProperties).isEqualTo(this.expectedGemfireProperties);
+ }
+}