You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ds...@apache.org on 2017/08/31 01:26:01 UTC
[24/47] geode git commit: GEODE-3436: Restore refactoring of
DiskStoreCommands
http://git-wip-us.apache.org/repos/asf/geode/blob/ca808714/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShowMissingDiskStoreCommand.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShowMissingDiskStoreCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShowMissingDiskStoreCommand.java
new file mode 100644
index 0000000..eb2b544
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShowMissingDiskStoreCommand.java
@@ -0,0 +1,149 @@
+/*
+ * 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.management.internal.cli.commands;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.springframework.shell.core.annotation.CliCommand;
+
+import org.apache.geode.SystemFailure;
+import org.apache.geode.cache.execute.Execution;
+import org.apache.geode.cache.execute.FunctionInvocationTargetException;
+import org.apache.geode.cache.execute.ResultCollector;
+import org.apache.geode.distributed.DistributedMember;
+import org.apache.geode.internal.cache.execute.AbstractExecution;
+import org.apache.geode.internal.cache.partitioned.ColocatedRegionDetails;
+import org.apache.geode.internal.cache.persistence.PersistentMemberPattern;
+import org.apache.geode.management.cli.CliMetaData;
+import org.apache.geode.management.cli.Result;
+import org.apache.geode.management.internal.cli.functions.ShowMissingDiskStoresFunction;
+import org.apache.geode.management.internal.cli.i18n.CliStrings;
+import org.apache.geode.management.internal.cli.result.CompositeResultData;
+import org.apache.geode.management.internal.cli.result.ResultBuilder;
+import org.apache.geode.management.internal.cli.result.ResultDataException;
+import org.apache.geode.management.internal.cli.result.TabularResultData;
+import org.apache.geode.management.internal.security.ResourceOperation;
+import org.apache.geode.security.ResourcePermission;
+
+public class ShowMissingDiskStoreCommand implements GfshCommand {
+ @CliCommand(value = CliStrings.SHOW_MISSING_DISK_STORE,
+ help = CliStrings.SHOW_MISSING_DISK_STORE__HELP)
+ @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_DISKSTORE})
+ @ResourceOperation(resource = ResourcePermission.Resource.CLUSTER,
+ operation = ResourcePermission.Operation.READ)
+ public Result showMissingDiskStore() {
+
+ try {
+ Set<DistributedMember> dataMembers = DiskStoreCommandsUtils.getNormalMembers(getCache());
+
+ if (dataMembers.isEmpty()) {
+ return ResultBuilder.createInfoResult(CliStrings.NO_CACHING_MEMBERS_FOUND_MESSAGE);
+ }
+ List<Object> results = getMissingDiskStoresList(dataMembers);
+ return toMissingDiskStoresTabularResult(results);
+ } catch (FunctionInvocationTargetException ignore) {
+ return ResultBuilder.createGemFireErrorResult(CliStrings.format(
+ CliStrings.COULD_NOT_EXECUTE_COMMAND_TRY_AGAIN, CliStrings.SHOW_MISSING_DISK_STORE));
+ } catch (VirtualMachineError e) {
+ SystemFailure.initiateFailure(e);
+ throw e;
+ } catch (Throwable t) {
+ SystemFailure.checkFailure();
+ if (t.getMessage() == null) {
+ return ResultBuilder.createGemFireErrorResult(
+ String.format(CliStrings.SHOW_MISSING_DISK_STORE__ERROR_MESSAGE, t));
+ }
+ return ResultBuilder.createGemFireErrorResult(
+ String.format(CliStrings.SHOW_MISSING_DISK_STORE__ERROR_MESSAGE, t.getMessage()));
+ }
+ }
+
+ private List<Object> getMissingDiskStoresList(Set<DistributedMember> members) {
+ final Execution membersFunctionExecutor = getMembersFunctionExecutor(members);
+ if (membersFunctionExecutor instanceof AbstractExecution) {
+ ((AbstractExecution) membersFunctionExecutor).setIgnoreDepartedMembers(true);
+ }
+
+ final ResultCollector<?, ?> resultCollector =
+ membersFunctionExecutor.execute(new ShowMissingDiskStoresFunction());
+
+ final List<?> results = (List<?>) resultCollector.getResult();
+ final List<Object> distributedPersistentRecoveryDetails = new ArrayList<>(results.size());
+ for (final Object result : results) {
+ if (result instanceof Set) {
+ distributedPersistentRecoveryDetails.addAll((Set<Object>) result);
+ }
+ }
+ return distributedPersistentRecoveryDetails;
+ }
+
+ private Result toMissingDiskStoresTabularResult(final List<Object> resultDetails)
+ throws ResultDataException {
+ CompositeResultData crd = ResultBuilder.createCompositeResultData();
+ List<PersistentMemberPattern> missingDiskStores = new ArrayList<>();
+ List<ColocatedRegionDetails> missingColocatedRegions = new ArrayList<>();
+
+ for (Object detail : resultDetails) {
+ if (detail instanceof PersistentMemberPattern) {
+ missingDiskStores.add((PersistentMemberPattern) detail);
+ } else if (detail instanceof ColocatedRegionDetails) {
+ missingColocatedRegions.add((ColocatedRegionDetails) detail);
+ } else {
+ throw new ResultDataException("Unknown type of PersistentRecoveryFailures result");
+ }
+ }
+
+ boolean hasMissingDiskStores = !missingDiskStores.isEmpty();
+ boolean hasMissingColocatedRegions = !missingColocatedRegions.isEmpty();
+ if (hasMissingDiskStores) {
+ CompositeResultData.SectionResultData missingDiskStoresSection = crd.addSection();
+ missingDiskStoresSection.setHeader("Missing Disk Stores");
+ TabularResultData missingDiskStoreData = missingDiskStoresSection.addTable();
+
+ for (PersistentMemberPattern persistentMemberDetails : missingDiskStores) {
+ missingDiskStoreData.accumulate("Disk Store ID", persistentMemberDetails.getUUID());
+ missingDiskStoreData.accumulate("Host", persistentMemberDetails.getHost());
+ missingDiskStoreData.accumulate("Directory", persistentMemberDetails.getDirectory());
+ }
+ } else {
+ CompositeResultData.SectionResultData noMissingDiskStores = crd.addSection();
+ noMissingDiskStores.setHeader("No missing disk store found");
+ }
+ if (hasMissingDiskStores || hasMissingColocatedRegions) {
+ // For clarity, separate disk store and colocated region information
+ crd.addSection().setHeader("\n");
+ }
+
+ if (hasMissingColocatedRegions) {
+ CompositeResultData.SectionResultData missingRegionsSection = crd.addSection();
+ missingRegionsSection.setHeader("Missing Colocated Regions");
+ TabularResultData missingRegionData = missingRegionsSection.addTable();
+
+ for (ColocatedRegionDetails colocatedRegionDetails : missingColocatedRegions) {
+ missingRegionData.accumulate("Host", colocatedRegionDetails.getHost());
+ missingRegionData.accumulate("Distributed Member", colocatedRegionDetails.getMember());
+ missingRegionData.accumulate("Parent Region", colocatedRegionDetails.getParent());
+ missingRegionData.accumulate("Missing Colocated Region", colocatedRegionDetails.getChild());
+ }
+ } else {
+ CompositeResultData.SectionResultData noMissingColocatedRegions = crd.addSection();
+ noMissingColocatedRegions.setHeader("No missing colocated region found");
+ }
+ return ResultBuilder.buildResult(crd);
+ }
+}
http://git-wip-us.apache.org/repos/asf/geode/blob/ca808714/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/UpgradeOfflineDiskStoreCommand.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/UpgradeOfflineDiskStoreCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/UpgradeOfflineDiskStoreCommand.java
new file mode 100644
index 0000000..85b86db
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/UpgradeOfflineDiskStoreCommand.java
@@ -0,0 +1,177 @@
+/*
+ * 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.management.internal.cli.commands;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.springframework.shell.core.annotation.CliCommand;
+import org.springframework.shell.core.annotation.CliOption;
+
+import org.apache.geode.GemFireIOException;
+import org.apache.geode.management.cli.CliMetaData;
+import org.apache.geode.management.cli.Result;
+import org.apache.geode.management.internal.cli.CliUtil;
+import org.apache.geode.management.internal.cli.GfshParser;
+import org.apache.geode.management.internal.cli.LogWrapper;
+import org.apache.geode.management.internal.cli.i18n.CliStrings;
+import org.apache.geode.management.internal.cli.result.ResultBuilder;
+import org.apache.geode.management.internal.cli.shell.Gfsh;
+import org.apache.geode.management.internal.cli.util.DiskStoreUpgrader;
+
+public class UpgradeOfflineDiskStoreCommand implements GfshCommand {
+ @CliCommand(value = CliStrings.UPGRADE_OFFLINE_DISK_STORE,
+ help = CliStrings.UPGRADE_OFFLINE_DISK_STORE__HELP)
+ @CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GEODE_DISKSTORE})
+ public Result upgradeOfflineDiskStore(
+ @CliOption(key = CliStrings.UPGRADE_OFFLINE_DISK_STORE__NAME, mandatory = true,
+ help = CliStrings.UPGRADE_OFFLINE_DISK_STORE__NAME__HELP) String diskStoreName,
+ @CliOption(key = CliStrings.UPGRADE_OFFLINE_DISK_STORE__DISKDIRS, mandatory = true,
+ help = CliStrings.UPGRADE_OFFLINE_DISK_STORE__DISKDIRS__HELP) String[] diskDirs,
+ @CliOption(key = CliStrings.UPGRADE_OFFLINE_DISK_STORE__MAXOPLOGSIZE,
+ unspecifiedDefaultValue = "-1",
+ help = CliStrings.UPGRADE_OFFLINE_DISK_STORE__MAXOPLOGSIZE__HELP) long maxOplogSize,
+ @CliOption(key = CliStrings.UPGRADE_OFFLINE_DISK_STORE__J,
+ help = CliStrings.UPGRADE_OFFLINE_DISK_STORE__J__HELP) String[] jvmProps)
+ throws InterruptedException {
+
+ Result result;
+ LogWrapper logWrapper = LogWrapper.getInstance();
+
+ StringBuilder output = new StringBuilder();
+ StringBuilder error = new StringBuilder();
+ StringBuilder errorMessage = new StringBuilder();
+ Process upgraderProcess = null;
+
+ try {
+ String validatedDirectories = DiskStoreCommandsUtils.validatedDirectories(diskDirs);
+ if (validatedDirectories != null) {
+ throw new IllegalArgumentException(
+ "Could not find " + CliStrings.UPGRADE_OFFLINE_DISK_STORE__DISKDIRS + ": \""
+ + validatedDirectories + "\"");
+ }
+
+ List<String> commandList = new ArrayList<>();
+ commandList.add(System.getProperty("java.home") + File.separatorChar + "bin"
+ + File.separatorChar + "java");
+
+ DiskStoreCommandsUtils.configureLogging(commandList);
+
+ if (jvmProps != null && jvmProps.length != 0) {
+ commandList.addAll(Arrays.asList(jvmProps));
+ }
+ commandList.add("-classpath");
+ commandList.add(System.getProperty("java.class.path", "."));
+ commandList.add(DiskStoreUpgrader.class.getName());
+
+ commandList.add(CliStrings.UPGRADE_OFFLINE_DISK_STORE__NAME + "=" + diskStoreName);
+
+ if (diskDirs != null && diskDirs.length != 0) {
+ StringBuilder builder = new StringBuilder();
+ int arrayLength = diskDirs.length;
+ for (int i = 0; i < arrayLength; i++) {
+ if (File.separatorChar == '\\') {
+ builder.append(diskDirs[i].replace("\\", "/")); // see 46120
+ } else {
+ builder.append(diskDirs[i]);
+ }
+ if (i + 1 != arrayLength) {
+ builder.append(',');
+ }
+ }
+ commandList.add(CliStrings.UPGRADE_OFFLINE_DISK_STORE__DISKDIRS + "=" + builder.toString());
+ }
+ // -1 is ignore as maxOplogSize
+ commandList.add(CliStrings.UPGRADE_OFFLINE_DISK_STORE__MAXOPLOGSIZE + "=" + maxOplogSize);
+
+ ProcessBuilder procBuilder = new ProcessBuilder(commandList);
+ // procBuilder.redirectErrorStream(true);
+ upgraderProcess = procBuilder.start();
+ InputStream inputStream = upgraderProcess.getInputStream();
+ InputStream errorStream = upgraderProcess.getErrorStream();
+ BufferedReader inputReader = new BufferedReader(new InputStreamReader(inputStream));
+ BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorStream));
+
+ String line;
+ while ((line = inputReader.readLine()) != null) {
+ output.append(line).append(GfshParser.LINE_SEPARATOR);
+ }
+
+ boolean switchToStackTrace = false;
+ while ((line = errorReader.readLine()) != null) {
+ if (!switchToStackTrace && DiskStoreUpgrader.STACKTRACE_START.equals(line)) {
+ switchToStackTrace = true;
+ } else if (switchToStackTrace) {
+ error.append(line).append(GfshParser.LINE_SEPARATOR);
+ } else {
+ errorMessage.append(line);
+ }
+ }
+
+ if (errorMessage.length() > 0) {
+ throw new GemFireIOException(errorMessage.toString());
+ }
+
+ upgraderProcess.destroy();
+ result = ResultBuilder.createInfoResult(output.toString());
+ } catch (IOException e) {
+ if (output.length() != 0) {
+ Gfsh.println(output.toString());
+ }
+ String fieldsMessage = (maxOplogSize != -1
+ ? CliStrings.UPGRADE_OFFLINE_DISK_STORE__MAXOPLOGSIZE + "=" + maxOplogSize + "," : "");
+ fieldsMessage += CliUtil.arrayToString(diskDirs);
+ String errorString = CliStrings.format(
+ CliStrings.UPGRADE_OFFLINE_DISK_STORE__MSG__ERROR_WHILE_COMPACTING_DISKSTORE_0_WITH_1_REASON_2,
+ diskStoreName, fieldsMessage);
+ result = ResultBuilder.createUserErrorResult(errorString);
+ if (logWrapper.fineEnabled()) {
+ logWrapper.fine(e.getMessage(), e);
+ }
+ } catch (GemFireIOException e) {
+ if (output.length() != 0) {
+ Gfsh.println(output.toString());
+ }
+ result = ResultBuilder.createUserErrorResult(errorMessage.toString());
+ if (logWrapper.fineEnabled()) {
+ logWrapper.fine(error.toString());
+ }
+ } catch (IllegalArgumentException e) {
+ if (output.length() != 0) {
+ Gfsh.println(output.toString());
+ }
+ result = ResultBuilder.createUserErrorResult(e.getMessage());
+ } finally {
+ if (upgraderProcess != null) {
+ try {
+ // just to check whether the process has exited
+ // Process.exitValue() throws IllegalStateException if Process is alive
+ upgraderProcess.exitValue();
+ } catch (IllegalThreadStateException itse) {
+ // not yet terminated, destroy the process
+ upgraderProcess.destroy();
+ }
+ }
+ }
+ return result;
+ }
+}
http://git-wip-us.apache.org/repos/asf/geode/blob/ca808714/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ValidateDiskStoreCommand.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ValidateDiskStoreCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ValidateDiskStoreCommand.java
new file mode 100644
index 0000000..029b384
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ValidateDiskStoreCommand.java
@@ -0,0 +1,104 @@
+/*
+ * 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.management.internal.cli.commands;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.springframework.shell.core.annotation.CliCommand;
+import org.springframework.shell.core.annotation.CliOption;
+
+import org.apache.geode.management.cli.CliMetaData;
+import org.apache.geode.management.cli.Result;
+import org.apache.geode.management.internal.cli.GfshParser;
+import org.apache.geode.management.internal.cli.i18n.CliStrings;
+import org.apache.geode.management.internal.cli.result.ResultBuilder;
+import org.apache.geode.management.internal.cli.util.DiskStoreValidater;
+
+public class ValidateDiskStoreCommand implements GfshCommand {
+ @CliCommand(value = CliStrings.VALIDATE_DISK_STORE, help = CliStrings.VALIDATE_DISK_STORE__HELP)
+ @CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GEODE_DISKSTORE})
+ public Result validateDiskStore(
+ @CliOption(key = CliStrings.VALIDATE_DISK_STORE__NAME, mandatory = true,
+ help = CliStrings.VALIDATE_DISK_STORE__NAME__HELP) String diskStoreName,
+ @CliOption(key = CliStrings.VALIDATE_DISK_STORE__DISKDIRS, mandatory = true,
+ help = CliStrings.VALIDATE_DISK_STORE__DISKDIRS__HELP) String[] diskDirs,
+ @CliOption(key = CliStrings.VALIDATE_DISK_STORE__J,
+ help = CliStrings.VALIDATE_DISK_STORE__J__HELP) String[] jvmProps) {
+ try {
+ // create a new process ...bug 46075
+ StringBuilder dirList = new StringBuilder();
+ for (String diskDir : diskDirs) {
+ dirList.append(diskDir);
+ dirList.append(";");
+ }
+
+ List<String> commandList = new ArrayList<>();
+ commandList.add(System.getProperty("java.home") + File.separatorChar + "bin"
+ + File.separatorChar + "java");
+
+ DiskStoreCommandsUtils.configureLogging(commandList);
+
+ if (jvmProps != null && jvmProps.length != 0) {
+ commandList.addAll(Arrays.asList(jvmProps));
+ }
+
+ // Pass any java options on to the command
+ String opts = System.getenv("JAVA_OPTS");
+ if (opts != null) {
+ commandList.add(opts);
+ }
+ commandList.add("-classpath");
+ commandList.add(System.getProperty("java.class.path", "."));
+ commandList.add(DiskStoreValidater.class.getName());
+ commandList.add(diskStoreName);
+ commandList.add(dirList.toString());
+
+ ProcessBuilder procBuilder = new ProcessBuilder(commandList);
+ StringBuilder output = new StringBuilder();
+ String errorString = "";
+
+ Process validateDiskStoreProcess = procBuilder.redirectErrorStream(true).start();
+ InputStream inputStream = validateDiskStoreProcess.getInputStream();
+ BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
+ String line;
+
+ while ((line = br.readLine()) != null) {
+ output.append(line).append(GfshParser.LINE_SEPARATOR);
+ }
+ validateDiskStoreProcess.destroy();
+
+ output.append(errorString).append(GfshParser.LINE_SEPARATOR);
+ String resultString =
+ "Validating " + diskStoreName + GfshParser.LINE_SEPARATOR + output.toString();
+ return ResultBuilder.createInfoResult(resultString);
+ } catch (IOException ex) {
+ return ResultBuilder.createGemFireErrorResult(CliStrings
+ .format(CliStrings.VALIDATE_DISK_STORE__MSG__IO_ERROR, diskStoreName, ex.getMessage()));
+ } catch (Exception ex) {
+ // StringPrintWriter s = new StringPrintWriter();
+ // ex.printStackTrace(s);
+ return ResultBuilder.createGemFireErrorResult(CliStrings
+ .format(CliStrings.VALIDATE_DISK_STORE__MSG__ERROR, diskStoreName, ex.getMessage()));
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/geode/blob/ca808714/geode-core/src/main/java/org/apache/geode/management/internal/web/controllers/DiskStoreCommandsController.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/web/controllers/DiskStoreCommandsController.java b/geode-core/src/main/java/org/apache/geode/management/internal/web/controllers/DiskStoreCommandsController.java
index 2e06811..1f646d6 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/web/controllers/DiskStoreCommandsController.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/web/controllers/DiskStoreCommandsController.java
@@ -25,6 +25,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.apache.geode.internal.lang.StringUtils;
+import org.apache.geode.management.internal.cli.commands.ListDiskStoresCommand;
import org.apache.geode.management.internal.cli.i18n.CliStrings;
import org.apache.geode.management.internal.cli.util.CommandStringBuilder;
@@ -32,8 +33,21 @@ import org.apache.geode.management.internal.cli.util.CommandStringBuilder;
* The DiskStoreCommandsController class implements GemFire Management REST API web service
* endpoints for the Gfsh Disk Store Commands.
* <p/>
- *
- * @see org.apache.geode.management.internal.cli.commands.DiskStoreCommands
+ *
+ * @see org.apache.geode.management.internal.cli.commands.AlterOfflineDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.BackupDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.CompactDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.CompactOfflineDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.CreateDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.DescribeDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.DescribeOfflineDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.DestroyDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.ExportOfflineDiskStoreCommand
+ * @see ListDiskStoresCommand
+ * @see org.apache.geode.management.internal.cli.commands.RevokeMissingDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.ShowMissingDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.UpgradeOfflineDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.ValidateDiskStoreCommand
* @see org.apache.geode.management.internal.web.controllers.AbstractCommandsController
* @see org.springframework.stereotype.Controller
* @see org.springframework.web.bind.annotation.PathVariable
http://git-wip-us.apache.org/repos/asf/geode/blob/ca808714/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java
index 07cdb11..1002f5d 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java
@@ -36,7 +36,23 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import java.io.File;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.StringTokenizer;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.TimeUnit;
+
import org.apache.commons.io.FileUtils;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
import org.apache.geode.cache.Cache;
import org.apache.geode.cache.CacheFactory;
import org.apache.geode.cache.DataPolicy;
@@ -76,28 +92,26 @@ import org.apache.geode.test.dunit.VM;
import org.apache.geode.test.dunit.WaitCriterion;
import org.apache.geode.test.junit.categories.DistributedTest;
import org.apache.geode.test.junit.categories.FlakyTest;
-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.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.TimeUnit;
/**
* The DiskStoreCommandsDUnitTest class is a distributed test suite of test cases for testing the
* disk store commands that are part of Gfsh.
* </p>
*
- * @see org.apache.geode.management.internal.cli.commands.DiskStoreCommands
+ * @see org.apache.geode.management.internal.cli.commands.AlterOfflineDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.BackupDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.CompactDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.CompactOfflineDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.CreateDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.DescribeDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.DescribeOfflineDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.DestroyDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.ExportOfflineDiskStoreCommand
+ * @see ListDiskStoresCommand
+ * @see org.apache.geode.management.internal.cli.commands.RevokeMissingDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.ShowMissingDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.UpgradeOfflineDiskStoreCommand
+ * @see org.apache.geode.management.internal.cli.commands.ValidateDiskStoreCommand
* @see org.junit.Assert
* @see org.junit.Test
* @since GemFire 7.0
http://git-wip-us.apache.org/repos/asf/geode/blob/ca808714/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommandsJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommandsJUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommandsJUnitTest.java
index 1902656..f8cd657 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommandsJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommandsJUnitTest.java
@@ -14,7 +14,10 @@
*/
package org.apache.geode.management.internal.cli.commands;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
import java.util.ArrayList;
import java.util.Arrays;
@@ -49,10 +52,11 @@ import org.apache.geode.test.junit.categories.UnitTest;
/**
* The DiskStoreCommandsJUnitTest class is a test suite of test cases testing the contract and
- * functionality of the DiskStoreCommands class implementing commands in the GemFire shell (gfsh)
- * that access and modify disk stores in GemFire.
+ * functionality of the command classes relating to disk stores that implement commands in the
+ * GemFire shell (gfsh) that access and modify disk stores in GemFire.
*
- * @see org.apache.geode.management.internal.cli.commands.DiskStoreCommands
+ * @see org.apache.geode.management.internal.cli.commands.DescribeDiskStoreCommand
+ * @see ListDiskStoresCommand
* @see org.apache.geode.management.internal.cli.domain.DiskStoreDetails
* @see org.apache.geode.management.internal.cli.functions.DescribeDiskStoreFunction
* @see org.apache.geode.management.internal.cli.functions.ListDiskStoresFunction
@@ -61,6 +65,7 @@ import org.apache.geode.test.junit.categories.UnitTest;
* @see org.jmock.lib.legacy.ClassImposteriser
* @see org.junit.Assert
* @see org.junit.Test
+ *
* @since GemFire 7.0
*/
@Category(UnitTest.class)
@@ -84,9 +89,14 @@ public class DiskStoreCommandsJUnitTest {
mockContext = null;
}
- private DiskStoreCommands createDiskStoreCommands(final InternalCache cache,
+ private DescribeDiskStoreCommand createDescribeDiskStoreCommand(final InternalCache cache,
+ final DistributedMember distributedMember, final Execution functionExecutor) {
+ return new TestDescribeDiskStoreCommand(cache, distributedMember, functionExecutor);
+ }
+
+ private ListDiskStoresCommand createListDiskStoreCommand(final InternalCache cache,
final DistributedMember distributedMember, final Execution functionExecutor) {
- return new TestDiskStoreCommands(cache, distributedMember, functionExecutor);
+ return new TestListDiskStoresCommand(cache, distributedMember, functionExecutor);
}
private DiskStoreDetails createDiskStoreDetails(final String memberId,
@@ -123,15 +133,15 @@ public class DiskStoreCommandsJUnitTest {
oneOf(mockFunctionExecutor).execute(with(aNonNull(DescribeDiskStoreFunction.class)));
will(returnValue(mockResultCollector));
oneOf(mockResultCollector).getResult();
- will(returnValue(Arrays.asList(expectedDiskStoredDetails)));
+ will(returnValue(Collections.singletonList(expectedDiskStoredDetails)));
}
});
- final DiskStoreCommands commands =
- createDiskStoreCommands(mockCache, mockMember, mockFunctionExecutor);
+ final DescribeDiskStoreCommand describeCommand =
+ createDescribeDiskStoreCommand(mockCache, mockMember, mockFunctionExecutor);
final DiskStoreDetails actualDiskStoreDetails =
- commands.getDiskStoreDescription(memberId, diskStoreName);
+ describeCommand.getDiskStoreDescription(memberId, diskStoreName);
assertNotNull(actualDiskStoreDetails);
assertEquals(expectedDiskStoredDetails, actualDiskStoreDetails);
@@ -156,10 +166,11 @@ public class DiskStoreCommandsJUnitTest {
}
});
- final DiskStoreCommands commands = createDiskStoreCommands(mockCache, mockMember, null);
+ final DescribeDiskStoreCommand describeCommand =
+ createDescribeDiskStoreCommand(mockCache, mockMember, null);
try {
- commands.getDiskStoreDescription(memberId, diskStoreName);
+ describeCommand.getDiskStoreDescription(memberId, diskStoreName);
} catch (MemberNotFoundException expected) {
assertEquals(CliStrings.format(CliStrings.MEMBER_NOT_FOUND_ERROR_MESSAGE, memberId),
expected.getMessage());
@@ -192,11 +203,11 @@ public class DiskStoreCommandsJUnitTest {
}
});
- final DiskStoreCommands commands =
- createDiskStoreCommands(mockCache, mockMember, mockFunctionExecutor);
+ final DescribeDiskStoreCommand describeCommand =
+ createDescribeDiskStoreCommand(mockCache, mockMember, mockFunctionExecutor);
try {
- commands.getDiskStoreDescription(memberId, diskStoreName);
+ describeCommand.getDiskStoreDescription(memberId, diskStoreName);
} catch (DiskStoreNotFoundException expected) {
assertEquals("expected", expected.getMessage());
throw expected;
@@ -228,11 +239,11 @@ public class DiskStoreCommandsJUnitTest {
}
});
- final DiskStoreCommands commands =
- createDiskStoreCommands(mockCache, mockMember, mockFunctionExecutor);
+ final DescribeDiskStoreCommand describeCommand =
+ createDescribeDiskStoreCommand(mockCache, mockMember, mockFunctionExecutor);
try {
- commands.getDiskStoreDescription(memberId, diskStoreName);
+ describeCommand.getDiskStoreDescription(memberId, diskStoreName);
} catch (RuntimeException expected) {
assertEquals("expected", expected.getMessage());
throw expected;
@@ -265,15 +276,15 @@ public class DiskStoreCommandsJUnitTest {
oneOf(mockFunctionExecutor).execute(with(aNonNull(DescribeDiskStoreFunction.class)));
will(returnValue(mockResultCollector));
oneOf(mockResultCollector).getResult();
- will(returnValue(Arrays.asList(new Object())));
+ will(returnValue(Collections.singletonList(new Object())));
}
});
- final DiskStoreCommands commands =
- createDiskStoreCommands(mockCache, mockMember, mockFunctionExecutor);
+ final DescribeDiskStoreCommand describeCommand =
+ createDescribeDiskStoreCommand(mockCache, mockMember, mockFunctionExecutor);
try {
- commands.getDiskStoreDescription(memberId, diskStoreName);
+ describeCommand.getDiskStoreDescription(memberId, diskStoreName);
} catch (RuntimeException expected) {
assertEquals(
CliStrings.format(CliStrings.UNEXPECTED_RETURN_TYPE_EXECUTING_COMMAND_ERROR_MESSAGE,
@@ -308,7 +319,7 @@ public class DiskStoreCommandsJUnitTest {
final List<DiskStoreDetails> expectedDiskStores =
Arrays.asList(diskStoreDetails1, diskStoreDetails2, diskStoreDetails3, diskStoreDetails4);
- final List<Set<DiskStoreDetails>> results = new ArrayList<Set<DiskStoreDetails>>();
+ final List<Set<DiskStoreDetails>> results = new ArrayList<>();
results.add(CollectionUtils.asSet(diskStoreDetails4, diskStoreDetails3));
results.add(CollectionUtils.asSet(diskStoreDetails1, diskStoreDetails2));
@@ -323,11 +334,11 @@ public class DiskStoreCommandsJUnitTest {
}
});
- final DiskStoreCommands commands =
- createDiskStoreCommands(mockCache, mockDistributedMember, mockFunctionExecutor);
+ final ListDiskStoresCommand listCommand =
+ createListDiskStoreCommand(mockCache, mockDistributedMember, mockFunctionExecutor);
final List<DiskStoreDetails> actualDiskStores =
- commands.getDiskStoreListing(commands.getNormalMembers(mockCache));
+ listCommand.getDiskStoreListing(Collections.singleton(mockDistributedMember));
Assert.assertNotNull(actualDiskStores);
assertEquals(expectedDiskStores, actualDiskStores);
@@ -349,11 +360,11 @@ public class DiskStoreCommandsJUnitTest {
}
});
- final DiskStoreCommands commands =
- createDiskStoreCommands(mockCache, mockDistributedMember, mockFunctionExecutor);
+ final ListDiskStoresCommand listCommand =
+ createListDiskStoreCommand(mockCache, mockDistributedMember, mockFunctionExecutor);
try {
- commands.getDiskStoreListing(commands.getNormalMembers(mockCache));
+ listCommand.getDiskStoreListing(Collections.singleton(mockDistributedMember));
} catch (RuntimeException expected) {
assertEquals("expected", expected.getMessage());
throw expected;
@@ -376,9 +387,9 @@ public class DiskStoreCommandsJUnitTest {
final DiskStoreDetails diskStoreDetails =
createDiskStoreDetails("memberOne", "cacheServerDiskStore");
- final List<DiskStoreDetails> expectedDiskStores = Arrays.asList(diskStoreDetails);
+ final List<DiskStoreDetails> expectedDiskStores = Collections.singletonList(diskStoreDetails);
- final List<Object> results = new ArrayList<Object>();
+ final List<Object> results = new ArrayList<>();
results.add(CollectionUtils.asSet(diskStoreDetails));
results.add(new FunctionInvocationTargetException("expected"));
@@ -393,23 +404,23 @@ public class DiskStoreCommandsJUnitTest {
}
});
- final DiskStoreCommands commands =
- createDiskStoreCommands(mockCache, mockDistributedMember, mockFunctionExecutor);
+ final ListDiskStoresCommand listCommand =
+ createListDiskStoreCommand(mockCache, mockDistributedMember, mockFunctionExecutor);
final List<DiskStoreDetails> actualDiskStores =
- commands.getDiskStoreListing(commands.getNormalMembers(mockCache));
+ listCommand.getDiskStoreListing(Collections.singleton(mockDistributedMember));
Assert.assertNotNull(actualDiskStores);
assertEquals(expectedDiskStores, actualDiskStores);
}
- private static class TestDiskStoreCommands extends DiskStoreCommands {
+ private static class TestDescribeDiskStoreCommand extends DescribeDiskStoreCommand {
private final InternalCache cache;
private final DistributedMember distributedMember;
private final Execution functionExecutor;
- public TestDiskStoreCommands(final InternalCache cache,
+ TestDescribeDiskStoreCommand(final InternalCache cache,
final DistributedMember distributedMember, final Execution functionExecutor) {
assert cache != null : "The Cache cannot be null!";
this.cache = cache;
@@ -433,12 +444,37 @@ public class DiskStoreCommandsJUnitTest {
Assert.assertNotNull(members);
return this.functionExecutor;
}
+ }
+
+ private static class TestListDiskStoresCommand extends ListDiskStoresCommand {
+
+ private final InternalCache cache;
+ private final DistributedMember distributedMember;
+ private final Execution functionExecutor;
+
+ TestListDiskStoresCommand(final InternalCache cache, final DistributedMember distributedMember,
+ final Execution functionExecutor) {
+ assert cache != null : "The Cache cannot be null!";
+ this.cache = cache;
+ this.distributedMember = distributedMember;
+ this.functionExecutor = functionExecutor;
+ }
@Override
- protected Set<DistributedMember> getNormalMembers(final InternalCache cache) {
+ public InternalCache getCache() {
+ return this.cache;
+ }
+
+ @Override
+ public Set<DistributedMember> getMembers(final InternalCache cache) {
assertSame(getCache(), cache);
return Collections.singleton(this.distributedMember);
}
- }
+ @Override
+ public Execution getMembersFunctionExecutor(final Set<DistributedMember> members) {
+ Assert.assertNotNull(members);
+ return this.functionExecutor;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/geode/blob/ca808714/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ListAndDescribeDiskStoreCommandsDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ListAndDescribeDiskStoreCommandsDUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ListAndDescribeDiskStoreCommandsDUnitTest.java
index 8d4be8b..1fe0bd1 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ListAndDescribeDiskStoreCommandsDUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ListAndDescribeDiskStoreCommandsDUnitTest.java
@@ -14,7 +14,25 @@
*/
package org.apache.geode.management.internal.cli.commands;
-import org.apache.geode.cache.*;
+import static org.apache.geode.distributed.ConfigurationProperties.NAME;
+import static org.apache.geode.test.dunit.Assert.assertEquals;
+import static org.apache.geode.test.dunit.Assert.assertNotNull;
+import static org.apache.geode.test.dunit.Host.getHost;
+import static org.apache.geode.test.dunit.LogWriterUtils.getDUnitLogLevel;
+import static org.apache.geode.test.dunit.LogWriterUtils.getLogWriter;
+
+import java.io.Serializable;
+import java.util.Properties;
+
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import org.apache.geode.cache.Cache;
+import org.apache.geode.cache.DataPolicy;
+import org.apache.geode.cache.DiskStore;
+import org.apache.geode.cache.DiskStoreFactory;
+import org.apache.geode.cache.RegionFactory;
+import org.apache.geode.cache.Scope;
import org.apache.geode.distributed.ConfigurationProperties;
import org.apache.geode.management.cli.Result;
import org.apache.geode.management.internal.cli.i18n.CliStrings;
@@ -22,18 +40,6 @@ import org.apache.geode.test.dunit.SerializableRunnable;
import org.apache.geode.test.dunit.SerializableRunnableIF;
import org.apache.geode.test.dunit.VM;
import org.apache.geode.test.junit.categories.DistributedTest;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import java.io.Serializable;
-import java.util.Properties;
-
-import static org.apache.geode.test.dunit.Assert.assertEquals;
-import static org.apache.geode.test.dunit.Assert.assertNotNull;
-import static org.apache.geode.test.dunit.Host.getHost;
-import static org.apache.geode.test.dunit.LogWriterUtils.getDUnitLogLevel;
-import static org.apache.geode.test.dunit.LogWriterUtils.getLogWriter;
-import static org.apache.geode.distributed.ConfigurationProperties.*;
/**
* The ListAndDescribeDiskStoreCommandsDUnitTest class is a test suite of functional tests cases
@@ -41,7 +47,9 @@ import static org.apache.geode.distributed.ConfigurationProperties.*;
* </p>
*
* @see org.apache.geode.management.internal.cli.commands.CliCommandTestBase
- * @see org.apache.geode.management.internal.cli.commands.DiskStoreCommands
+ * @see ListDiskStoresCommand
+ * @see org.apache.geode.management.internal.cli.commands.DescribeDiskStoreCommand
+ *
* @since GemFire 7.0
*/
@Category(DistributedTest.class)