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 2017/08/01 21:03:39 UTC
[45/50] [abbrv] geode git commit: GEODE-3256: Refactoring DataCommands
GEODE-3256: Refactoring DataCommands
Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/32364169
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/32364169
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/32364169
Branch: refs/heads/feature/GEODE-3299
Commit: 32364169af27039f6281cf05bb8c21fd6ecb1a19
Parents: 9d59402
Author: YehEmily <em...@gmail.com>
Authored: Mon Jul 31 16:45:19 2017 -0700
Committer: Jared Stewart <js...@pivotal.io>
Committed: Tue Aug 1 10:31:13 2017 -0700
----------------------------------------------------------------------
.../internal/beans/QueryDataFunction.java | 12 +-
.../internal/cli/commands/DataCommands.java | 1282 ------------------
.../cli/commands/DataCommandsUtils.java | 311 +++++
.../cli/commands/ExportDataCommand.java | 90 ++
.../internal/cli/commands/GetCommand.java | 106 ++
.../cli/commands/ImportDataCommand.java | 94 ++
.../cli/commands/LocateEntryCommand.java | 91 ++
.../internal/cli/commands/PutCommand.java | 105 ++
.../internal/cli/commands/QueryCommand.java | 81 +-
.../internal/cli/commands/RebalanceCommand.java | 592 ++++++++
.../internal/cli/commands/RemoveCommand.java | 98 ++
.../web/controllers/DataCommandsController.java | 8 +-
.../internal/cli/CommandRequestTest.java | 4 +-
.../commands/GemfireDataCommandsDUnitTest.java | 3 +-
...WithCacheLoaderDuringCacheMissDUnitTest.java | 2 +-
15 files changed, 1583 insertions(+), 1296 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/geode/blob/32364169/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java
index 9829df3..0b4470d 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java
@@ -46,7 +46,7 @@ import org.apache.geode.management.ManagementService;
import org.apache.geode.management.internal.ManagementConstants;
import org.apache.geode.management.internal.ManagementStrings;
import org.apache.geode.management.internal.SystemManagementService;
-import org.apache.geode.management.internal.cli.commands.DataCommands;
+import org.apache.geode.management.internal.cli.commands.DataCommandsUtils;
import org.apache.geode.management.internal.cli.json.GfJsonException;
import org.apache.geode.management.internal.cli.json.GfJsonObject;
import org.apache.geode.management.internal.cli.json.TypedJson;
@@ -168,7 +168,7 @@ public class QueryDataFunction extends FunctionAdapter implements InternalEntity
}
LocalDataSet lds = new LocalDataSet(parRegion, localPrimaryBucketSet);
DefaultQuery query = (DefaultQuery) cache.getQueryService().newQuery(queryString);
- results = (SelectResults) lds.executeQuery(query, null, localPrimaryBucketSet);
+ results = lds.executeQuery(query, null, localPrimaryBucketSet);
}
} else {
rcollector = FunctionService.onRegion(cache.getRegion(regionName))
@@ -365,7 +365,7 @@ public class QueryDataFunction extends FunctionAdapter implements InternalEntity
.toString();
} else {
Set<DistributedMember> associatedMembers =
- DataCommands.getRegionAssociatedMembers(regionPath, cache, true);
+ DataCommandsUtils.getRegionAssociatedMembers(regionPath, cache, true);
if (inputMembers != null && inputMembers.size() > 0) {
if (!associatedMembers.containsAll(inputMembers)) {
@@ -397,9 +397,9 @@ public class QueryDataFunction extends FunctionAdapter implements InternalEntity
String randomRegion = regionsInQuery.iterator().next();
Set<DistributedMember> associatedMembers =
- DataCommands.getQueryRegionsAssociatedMembers(regionsInQuery, cache, false);// First
- // available
- // member
+ DataCommandsUtils.getQueryRegionsAssociatedMembers(regionsInQuery, cache, false);// First
+ // available
+ // member
if (associatedMembers != null && associatedMembers.size() > 0) {
Object[] functionArgs = new Object[6];
http://git-wip-us.apache.org/repos/asf/geode/blob/32364169/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommands.java
deleted file mode 100644
index 69daca6..0000000
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommands.java
+++ /dev/null
@@ -1,1282 +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 org.apache.geode.management.internal.cli.commands;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang.ArrayUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.shiro.subject.Subject;
-import org.springframework.shell.core.annotation.CliCommand;
-import org.springframework.shell.core.annotation.CliOption;
-
-import org.apache.geode.LogWriter;
-import org.apache.geode.cache.CacheClosedException;
-import org.apache.geode.cache.CacheFactory;
-import org.apache.geode.cache.DataPolicy;
-import org.apache.geode.cache.Region;
-import org.apache.geode.cache.control.RebalanceFactory;
-import org.apache.geode.cache.control.RebalanceOperation;
-import org.apache.geode.cache.control.RebalanceResults;
-import org.apache.geode.cache.control.ResourceManager;
-import org.apache.geode.cache.execute.Function;
-import org.apache.geode.cache.execute.FunctionInvocationTargetException;
-import org.apache.geode.cache.execute.FunctionService;
-import org.apache.geode.cache.execute.ResultCollector;
-import org.apache.geode.cache.partition.PartitionRebalanceInfo;
-import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.management.DistributedRegionMXBean;
-import org.apache.geode.management.ManagementService;
-import org.apache.geode.management.cli.CliMetaData;
-import org.apache.geode.management.cli.ConverterHint;
-import org.apache.geode.management.cli.Result;
-import org.apache.geode.management.internal.MBeanJMXAdapter;
-import org.apache.geode.management.internal.cli.CliUtil;
-import org.apache.geode.management.internal.cli.LogWrapper;
-import org.apache.geode.management.internal.cli.domain.DataCommandRequest;
-import org.apache.geode.management.internal.cli.domain.DataCommandResult;
-import org.apache.geode.management.internal.cli.functions.DataCommandFunction;
-import org.apache.geode.management.internal.cli.functions.ExportDataFunction;
-import org.apache.geode.management.internal.cli.functions.ImportDataFunction;
-import org.apache.geode.management.internal.cli.functions.RebalanceFunction;
-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.ErrorResultData;
-import org.apache.geode.management.internal.cli.result.ResultBuilder;
-import org.apache.geode.management.internal.cli.result.TabularResultData;
-import org.apache.geode.management.internal.cli.shell.Gfsh;
-import org.apache.geode.management.internal.security.ResourceOperation;
-import org.apache.geode.security.ResourcePermission.Operation;
-import org.apache.geode.security.ResourcePermission.Resource;
-
-/**
- * @since GemFire 7.0
- */
-public class DataCommands implements GfshCommand {
-
- private final int resultItemCount = 9;
-
- private final ExportDataFunction exportDataFunction = new ExportDataFunction();
-
- private final ImportDataFunction importDataFunction = new ImportDataFunction();
-
- @Override
- public Gfsh getGfsh() {
- return Gfsh.getCurrentInstance();
- }
-
- @Override
- public InternalCache getCache() {
- return (InternalCache) CacheFactory.getAnyInstance();
- }
-
- @CliCommand(value = CliStrings.REBALANCE, help = CliStrings.REBALANCE__HELP)
- @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_DATA, CliStrings.TOPIC_GEODE_REGION})
- @ResourceOperation(resource = Resource.DATA, operation = Operation.MANAGE)
- public Result rebalance(
- @CliOption(key = CliStrings.REBALANCE__INCLUDEREGION,
- help = CliStrings.REBALANCE__INCLUDEREGION__HELP) String[] includeRegions,
- @CliOption(key = CliStrings.REBALANCE__EXCLUDEREGION,
- help = CliStrings.REBALANCE__EXCLUDEREGION__HELP) String[] excludeRegions,
- @CliOption(key = CliStrings.REBALANCE__TIMEOUT, unspecifiedDefaultValue = "-1",
- help = CliStrings.REBALANCE__TIMEOUT__HELP) long timeout,
- @CliOption(key = CliStrings.REBALANCE__SIMULATE, specifiedDefaultValue = "true",
- unspecifiedDefaultValue = "false",
- help = CliStrings.REBALANCE__SIMULATE__HELP) boolean simulate) {
-
- ExecutorService commandExecutors = Executors.newSingleThreadExecutor();
- List<Future<Result>> commandResult = new ArrayList<>();
- Result result;
- try {
- commandResult.add(commandExecutors
- .submit(new ExecuteRebalanceWithTimeout(includeRegions, excludeRegions, simulate)));
-
- Future<Result> fs = commandResult.get(0);
- if (timeout > 0) {
- result = fs.get(timeout, TimeUnit.SECONDS);
- } else {
- result = fs.get();
-
- }
- } catch (TimeoutException timeoutException) {
- result = ResultBuilder.createInfoResult(CliStrings.REBALANCE__MSG__REBALANCE_WILL_CONTINUE);
-
- } catch (Exception ex) {
- result = ResultBuilder.createGemFireErrorResult(CliStrings.format(
- CliStrings.REBALANCE__MSG__EXCEPTION_OCCURRED_WHILE_REBALANCING_0, ex.getMessage()));
- }
- LogWrapper.getInstance().info("Rebalance returning result >>>" + result);
- return result;
- }
-
- private class ExecuteRebalanceWithTimeout implements Callable<Result> {
- String[] includeRegions = null;
- String[] excludeRegions = null;
- boolean simulate;
- InternalCache cache = getCache();
-
- @Override
- public Result call() throws Exception {
- return executeRebalanceWithTimeout(includeRegions, excludeRegions, simulate);
- }
-
- ExecuteRebalanceWithTimeout(String[] includedRegions, String[] excludedRegions,
- boolean toSimulate) {
- includeRegions = includedRegions;
- excludeRegions = excludedRegions;
- simulate = toSimulate;
- }
-
- Result executeRebalanceWithTimeout(String[] includeRegions, String[] excludeRegions,
- boolean simulate) {
-
- Result result = null;
- try {
- RebalanceOperation op;
-
- if (ArrayUtils.isNotEmpty(includeRegions)) {
- CompositeResultData rebalanceResultData = ResultBuilder.createCompositeResultData();
- int index = 0;
-
- for (String regionName : includeRegions) {
-
- // To be removed after region Name specification with "/" is fixed
- regionName = regionName.startsWith("/") ? regionName : ("/" + regionName);
- Region region = cache.getRegion(regionName);
-
- if (region == null) {
- DistributedMember member = getAssociatedMembers(regionName, cache);
-
- if (member == null) {
- LogWrapper.getInstance().info(CliStrings.format(
- CliStrings.REBALANCE__MSG__NO_ASSOCIATED_DISTRIBUTED_MEMBER, regionName));
- continue;
- }
-
- Function rebalanceFunction = new RebalanceFunction();
- Object[] functionArgs = new Object[3];
- functionArgs[0] = simulate ? "true" : "false";
- Set<String> setRegionName = new HashSet<>();
- setRegionName.add(regionName);
- functionArgs[1] = setRegionName;
-
- Set<String> excludeRegionSet = new HashSet<>();
- if (ArrayUtils.isNotEmpty(excludeRegions)) {
- Collections.addAll(excludeRegionSet, excludeRegions);
- }
- functionArgs[2] = excludeRegionSet;
-
- if (simulate) {
- List resultList;
- try {
- resultList = (ArrayList) CliUtil
- .executeFunction(rebalanceFunction, functionArgs, member).getResult();
- } catch (Exception ex) {
- LogWrapper.getInstance()
- .info(CliStrings.format(
- CliStrings.REBALANCE__MSG__EXCEPTION_IN_REBALANCE_FOR_MEMBER_0_Exception_1,
- member.getId(), ex.getMessage()), ex);
- rebalanceResultData.addSection()
- .addData(CliStrings.format(
- CliStrings.REBALANCE__MSG__EXCEPTION_IN_REBALANCE_FOR_MEMBER_0_Exception,
- member.getId()), ex.getMessage());
- result = ResultBuilder.buildResult(rebalanceResultData);
- continue;
- }
-
- if (checkResultList(rebalanceResultData, resultList, member)) {
- result = ResultBuilder.buildResult(rebalanceResultData);
- continue;
- }
- List<String> rstList = tokenize((String) resultList.get(0), ",");
-
- result = ResultBuilder.buildResult(toCompositeResultData(rebalanceResultData,
- (ArrayList) rstList, index, true, cache));
- } else {
- List resultList;
- try {
- resultList = (ArrayList) CliUtil
- .executeFunction(rebalanceFunction, functionArgs, member).getResult();
- } catch (Exception ex) {
- LogWrapper.getInstance()
- .info(CliStrings.format(
- CliStrings.REBALANCE__MSG__EXCEPTION_IN_REBALANCE_FOR_MEMBER_0_Exception_1,
- member.getId(), ex.getMessage()), ex);
- rebalanceResultData.addSection()
- .addData(CliStrings.format(
- CliStrings.REBALANCE__MSG__EXCEPTION_IN_REBALANCE_FOR_MEMBER_0_Exception,
- member.getId()), ex.getMessage());
- result = ResultBuilder.buildResult(rebalanceResultData);
- continue;
- }
-
- if (checkResultList(rebalanceResultData, resultList, member)) {
- result = ResultBuilder.buildResult(rebalanceResultData);
- continue;
- }
- List<String> rstList = tokenize((String) resultList.get(0), ",");
-
- result = ResultBuilder.buildResult(toCompositeResultData(rebalanceResultData,
- (ArrayList) rstList, index, false, cache));
- }
-
- } else {
-
- ResourceManager manager = cache.getResourceManager();
- RebalanceFactory rbFactory = manager.createRebalanceFactory();
- Set<String> excludeRegionSet = new HashSet<>();
- if (excludeRegions != null) {
- Collections.addAll(excludeRegionSet, excludeRegions);
- }
- rbFactory.excludeRegions(excludeRegionSet);
- Set<String> includeRegionSet = new HashSet<>();
- includeRegionSet.add(regionName);
- rbFactory.includeRegions(includeRegionSet);
-
- if (simulate) {
- op = manager.createRebalanceFactory().simulate();
- result = ResultBuilder.buildResult(buildResultForRebalance(rebalanceResultData,
- op.getResults(), index, true, cache));
-
- } else {
- op = manager.createRebalanceFactory().start();
- // Wait until the rebalance is complete and then get the results
- result = ResultBuilder.buildResult(buildResultForRebalance(rebalanceResultData,
- op.getResults(), index, false, cache));
- }
- }
- index++;
- }
- LogWrapper.getInstance().info("Rebalance returning result " + result);
- return result;
- } else {
- result = executeRebalanceOnDS(cache, String.valueOf(simulate), excludeRegions);
- LogWrapper.getInstance().info("Starting Rebalance simulate false result >> " + result);
- }
- } catch (Exception e) {
- result = ResultBuilder.createGemFireErrorResult(e.getMessage());
- }
- LogWrapper.getInstance().info("Rebalance returning result >>>" + result);
- return result;
- }
- }
-
- private List<String> tokenize(String str, String separator) {
- StringTokenizer st = new StringTokenizer(str, separator);
- List<String> rstList = new ArrayList<>();
-
- while (st.hasMoreTokens()) {
- rstList.add(st.nextToken());
-
- }
- return rstList;
- }
-
- private boolean checkResultList(CompositeResultData rebalanceResultData, List resultList,
- DistributedMember member) {
- boolean toContinueForOtherMembers = false;
-
- if (CollectionUtils.isNotEmpty(resultList)) {
- for (Object object : resultList) {
- if (object instanceof Exception) {
-
- rebalanceResultData.addSection().addData(
- CliStrings.format(CliStrings.REBALANCE__MSG__NO_EXECUTION, member.getId()),
- ((Exception) object).getMessage());
-
- LogWrapper.getInstance().info(CliStrings.REBALANCE__MSG__NO_EXECUTION + member.getId()
- + " exception=" + ((Throwable) object).getMessage(), ((Throwable) object));
-
- toContinueForOtherMembers = true;
- break;
- } else if (object instanceof Throwable) {
- rebalanceResultData.addSection().addData(
- CliStrings.format(CliStrings.REBALANCE__MSG__NO_EXECUTION, member.getId()),
- ((Throwable) object).getMessage());
-
- LogWrapper.getInstance().info(CliStrings.REBALANCE__MSG__NO_EXECUTION + member.getId()
- + " exception=" + ((Throwable) object).getMessage(), ((Throwable) object));
-
- toContinueForOtherMembers = true;
- break;
- }
- }
- } else {
- LogWrapper.getInstance().info(
- "Rebalancing for member=" + member.getId() + ", resultList is either null or empty");
- rebalanceResultData.addSection().addData("Rebalancing for member=" + member.getId(),
- ", resultList is either null or empty");
- toContinueForOtherMembers = true;
- }
-
- return toContinueForOtherMembers;
- }
-
- private Result executeRebalanceOnDS(InternalCache cache, String simulate,
- String[] excludeRegionsList) {
- Result result = null;
- int index = 1;
- CompositeResultData rebalanceResultData = ResultBuilder.createCompositeResultData();
- List<String> listExcludedRegion = new ArrayList<>();
- if (excludeRegionsList != null) {
- Collections.addAll(listExcludedRegion, excludeRegionsList);
- }
- List<MemberPRInfo> listMemberRegion = getMemberRegionList(cache, listExcludedRegion);
-
- if (listMemberRegion.size() == 0) {
- return ResultBuilder
- .createInfoResult(CliStrings.REBALANCE__MSG__NO_REBALANCING_REGIONS_ON_DS);
- }
-
- Iterator<MemberPRInfo> iterator = listMemberRegion.iterator();
- boolean flagToContinueWithRebalance = false;
-
- // check if list has some members that can be rebalanced
- while (iterator.hasNext()) {
- if (iterator.next().dsMemberList.size() > 1) {
- flagToContinueWithRebalance = true;
- break;
- }
- }
-
- if (!flagToContinueWithRebalance) {
- return ResultBuilder
- .createInfoResult(CliStrings.REBALANCE__MSG__NO_REBALANCING_REGIONS_ON_DS);
- }
-
- for (MemberPRInfo memberPR : listMemberRegion) {
- try {
- // check if there are more than one members associated with region for rebalancing
- if (memberPR.dsMemberList.size() > 1) {
- for (int i = 0; i < memberPR.dsMemberList.size(); i++) {
- DistributedMember dsMember = memberPR.dsMemberList.get(i);
- Function rebalanceFunction = new RebalanceFunction();
- Object[] functionArgs = new Object[3];
- functionArgs[0] = simulate;
- Set<String> regionSet = new HashSet<>();
-
- regionSet.add(memberPR.region);
- functionArgs[1] = regionSet;
-
- Set<String> excludeRegionSet = new HashSet<>();
- functionArgs[2] = excludeRegionSet;
-
- List resultList = null;
-
- try {
- if (checkMemberPresence(dsMember, cache)) {
- resultList = (ArrayList) CliUtil
- .executeFunction(rebalanceFunction, functionArgs, dsMember).getResult();
-
- if (checkResultList(rebalanceResultData, resultList, dsMember)) {
- result = ResultBuilder.buildResult(rebalanceResultData);
- continue;
- }
-
- List<String> rstList = tokenize((String) resultList.get(0), ",");
- result = ResultBuilder.buildResult(toCompositeResultData(rebalanceResultData,
- (ArrayList) rstList, index, simulate.equals("true"), cache));
- index++;
-
- // Rebalancing for region is done so break and continue with other region
- break;
- } else {
- if (i == memberPR.dsMemberList.size() - 1) {
- rebalanceResultData.addSection().addData(
- CliStrings.format(
- CliStrings.REBALANCE__MSG__NO_EXECUTION_FOR_REGION_0_ON_MEMBERS_1,
- memberPR.region, listOfAllMembers(memberPR.dsMemberList)),
- CliStrings.REBALANCE__MSG__MEMBERS_MIGHT_BE_DEPARTED);
- result = ResultBuilder.buildResult(rebalanceResultData);
- } else {
- continue;
- }
- }
- } catch (Exception ex) {
- if (i == memberPR.dsMemberList.size() - 1) {
- rebalanceResultData.addSection().addData(
- CliStrings.format(
- CliStrings.REBALANCE__MSG__NO_EXECUTION_FOR_REGION_0_ON_MEMBERS_1,
- memberPR.region, listOfAllMembers(memberPR.dsMemberList)),
- CliStrings.REBALANCE__MSG__REASON + ex.getMessage());
- result = ResultBuilder.buildResult(rebalanceResultData);
- } else {
- continue;
- }
- }
-
- if (checkResultList(rebalanceResultData, resultList, dsMember)) {
- result = ResultBuilder.buildResult(rebalanceResultData);
- continue;
- }
-
- List<String> rstList = tokenize((String) resultList.get(0), ",");
- result = ResultBuilder.buildResult(toCompositeResultData(rebalanceResultData,
- (ArrayList) rstList, index, simulate.equals("true"), cache));
- index++;
- }
- }
- } catch (Exception e) {
- ErrorResultData errorResultData = ResultBuilder.createErrorResultData()
- .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(e.getMessage());
- return (ResultBuilder.buildResult(errorResultData));
- }
- }
- return result;
- }
-
- private boolean checkMemberPresence(DistributedMember dsMember, InternalCache cache) {
- // check if member's presence just before executing function
- // this is to avoid running a function on departed members #47248
- Set<DistributedMember> dsMemberList = CliUtil.getAllNormalMembers(cache);
- return dsMemberList.contains(dsMember);
- }
-
- private String listOfAllMembers(ArrayList<DistributedMember> dsMemberList) {
- StringBuilder listMembersId = new StringBuilder();
- for (int j = 0; j < dsMemberList.size() - 1; j++) {
- listMembersId.append(dsMemberList.get(j).getId());
- listMembersId.append(" ; ");
- }
- return listMembersId.toString();
- }
-
- private CompositeResultData toCompositeResultData(CompositeResultData rebalanceResultData,
- ArrayList<String> rstlist, int index, boolean simulate, InternalCache cache) {
-
- // add only if there are any valid regions in results
- if (rstlist.size() > resultItemCount && StringUtils.isNotEmpty(rstlist.get(resultItemCount))) {
- TabularResultData table1 = rebalanceResultData.addSection().addTable("Table" + index);
- String newLine = System.getProperty("line.separator");
- StringBuilder resultStr = new StringBuilder();
- resultStr.append(newLine);
- table1.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALBUCKETCREATEBYTES);
- table1.accumulate("Value", rstlist.get(0));
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATEBYTES).append(" = ")
- .append(rstlist.get(0)).append(newLine);
-
- table1.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALBUCKETCREATETIM);
- table1.accumulate("Value", rstlist.get(1));
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATETIM).append(" = ")
- .append(rstlist.get(1)).append(newLine);
-
- table1.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALBUCKETCREATESCOMPLETED);
- table1.accumulate("Value", rstlist.get(2));
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATESCOMPLETED).append(" = ")
- .append(rstlist.get(2)).append(newLine);
-
- table1.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERBYTES);
- table1.accumulate("Value", rstlist.get(3));
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERBYTES).append(" = ")
- .append(rstlist.get(3)).append(newLine);
-
- table1.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERTIME);
- table1.accumulate("Value", rstlist.get(4));
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERTIME).append(" = ")
- .append(rstlist.get(4)).append(newLine);
-
- table1.accumulate("Rebalanced Stats",
- CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERSCOMPLETED);
- table1.accumulate("Value", rstlist.get(5));
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERSCOMPLETED).append(" = ")
- .append(rstlist.get(5)).append(newLine);
-
- table1.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERTIME);
- table1.accumulate("Value", rstlist.get(6));
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERTIME).append(" = ")
- .append(rstlist.get(6)).append(newLine);
-
- table1.accumulate("Rebalanced Stats",
- CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERSCOMPLETED);
- table1.accumulate("Value", rstlist.get(7));
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERSCOMPLETED).append(" = ")
- .append(rstlist.get(7)).append(newLine);
-
- table1.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALTIME);
- table1.accumulate("Value", rstlist.get(8));
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALTIME).append(" = ").append(rstlist.get(8))
- .append(newLine);
-
- String headerText;
- if (simulate) {
- headerText = "Simulated partition regions ";
- } else {
- headerText = "Rebalanced partition regions ";
- }
- for (int i = resultItemCount; i < rstlist.size(); i++) {
- headerText = headerText + " " + rstlist.get(i);
- }
- table1.setHeader(headerText);
- cache.getLogger().info(headerText + resultStr);
- }
- return rebalanceResultData;
- }
-
- private CompositeResultData buildResultForRebalance(CompositeResultData rebalanceResultData,
- RebalanceResults results, int index, boolean simulate, InternalCache cache) {
- Set<PartitionRebalanceInfo> regions = results.getPartitionRebalanceDetails();
- Iterator iterator = regions.iterator();
-
- // add only if there are valid number of regions
- if (regions.size() > 0
- && StringUtils.isNotEmpty(((PartitionRebalanceInfo) iterator.next()).getRegionPath())) {
- final TabularResultData resultData =
- rebalanceResultData.addSection().addTable("Table" + index);
- String newLine = System.getProperty("line.separator");
- StringBuilder resultStr = new StringBuilder();
- resultStr.append(newLine);
-
- resultData.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALBUCKETCREATEBYTES);
- resultData.accumulate("Value", results.getTotalBucketCreateBytes());
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATEBYTES).append(" = ")
- .append(results.getTotalBucketCreateBytes()).append(newLine);
-
- resultData.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALBUCKETCREATETIM);
- resultData.accumulate("Value", results.getTotalBucketCreateTime());
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATETIM).append(" = ")
- .append(results.getTotalBucketCreateTime()).append(newLine);
-
- resultData.accumulate("Rebalanced Stats",
- CliStrings.REBALANCE__MSG__TOTALBUCKETCREATESCOMPLETED);
- resultData.accumulate("Value", results.getTotalBucketCreatesCompleted());
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATESCOMPLETED).append(" = ")
- .append(results.getTotalBucketCreatesCompleted()).append(newLine);
-
- resultData.accumulate("Rebalanced Stats",
- CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERBYTES);
- resultData.accumulate("Value", results.getTotalBucketTransferBytes());
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERBYTES).append(" = ")
- .append(results.getTotalBucketTransferBytes()).append(newLine);
-
- resultData.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERTIME);
- resultData.accumulate("Value", results.getTotalBucketTransferTime());
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERTIME).append(" = ")
- .append(results.getTotalBucketTransferTime()).append(newLine);
-
- resultData.accumulate("Rebalanced Stats",
- CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERSCOMPLETED);
- resultData.accumulate("Value", results.getTotalBucketTransfersCompleted());
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERSCOMPLETED).append(" = ")
- .append(results.getTotalBucketTransfersCompleted()).append(newLine);
-
- resultData.accumulate("Rebalanced Stats",
- CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERTIME);
- resultData.accumulate("Value", results.getTotalPrimaryTransferTime());
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERTIME).append(" = ")
- .append(results.getTotalPrimaryTransferTime()).append(newLine);
-
- resultData.accumulate("Rebalanced Stats",
- CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERSCOMPLETED);
- resultData.accumulate("Value", results.getTotalPrimaryTransfersCompleted());
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERSCOMPLETED).append(" = ")
- .append(results.getTotalPrimaryTransfersCompleted()).append(newLine);
-
- resultData.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALTIME);
- resultData.accumulate("Value", results.getTotalTime());
- resultStr.append(CliStrings.REBALANCE__MSG__TOTALTIME).append(" = ")
- .append(results.getTotalTime()).append(newLine);
-
- Iterator<PartitionRebalanceInfo> it = regions.iterator();
-
- String headerText;
-
- if (simulate) {
- headerText = "Simulated partition regions ";
- } else {
- headerText = "Rebalanced partition regions ";
- }
-
- while (it.hasNext()) {
- PartitionRebalanceInfo rgn = it.next();
- headerText = headerText + " " + rgn.getRegionPath();
- }
- resultData.setHeader(resultData.getHeader() + headerText);
-
- cache.getLogger().info(headerText + resultStr);
- }
- return rebalanceResultData;
- }
-
- private DistributedMember getAssociatedMembers(String region, final InternalCache cache) {
- DistributedRegionMXBean bean =
- ManagementService.getManagementService(cache).getDistributedRegionMXBean(region);
-
- DistributedMember member = null;
-
- if (bean == null) {
- return null;
- }
-
- String[] membersName = bean.getMembers();
- Set<DistributedMember> dsMembers = CliUtil.getAllMembers(cache);
- Iterator it = dsMembers.iterator();
-
- boolean matchFound = false;
-
- if (membersName.length > 1) {
- while (it.hasNext() && !matchFound) {
- DistributedMember dsmember = (DistributedMember) it.next();
- for (String memberName : membersName) {
- if (MBeanJMXAdapter.getMemberNameOrId(dsmember).equals(memberName)) {
- member = dsmember;
- matchFound = true;
- break;
- }
- }
- }
- }
- return member;
- }
-
- private List<MemberPRInfo> getMemberRegionList(InternalCache cache,
- List<String> listExcludedRegion) {
- List<MemberPRInfo> listMemberPRInfo = new ArrayList<>();
- String[] listDSRegions =
- ManagementService.getManagementService(cache).getDistributedSystemMXBean().listRegions();
- final Set<DistributedMember> dsMembers = CliUtil.getAllMembers(cache);
-
- for (String regionName : listDSRegions) {
- // check for excluded regions
- boolean excludedRegionMatch = false;
- for (String aListExcludedRegion : listExcludedRegion) {
- // this is needed since region name may start with / or without it
- // also
- String excludedRegion = aListExcludedRegion.trim();
- if (regionName.startsWith("/")) {
- if (!excludedRegion.startsWith("/")) {
- excludedRegion = "/" + excludedRegion;
- }
- }
- if (excludedRegion.startsWith("/")) {
- if (!regionName.startsWith("/")) {
- regionName = "/" + regionName;
- }
- }
-
- if (excludedRegion.equals(regionName)) {
- excludedRegionMatch = true;
- break;
- }
- }
-
- if (excludedRegionMatch) {
- // ignore this region
- continue;
- }
-
- if (!regionName.startsWith("/")) {
- regionName = Region.SEPARATOR + regionName;
- }
- // remove this prefix /
- DistributedRegionMXBean bean =
- ManagementService.getManagementService(cache).getDistributedRegionMXBean(regionName);
-
- if (bean != null) {
- if (bean.getRegionType().equals(DataPolicy.PARTITION.toString())
- || bean.getRegionType().equals(DataPolicy.PERSISTENT_PARTITION.toString())) {
-
- String[] memberNames = bean.getMembers();
- for (DistributedMember dsmember : dsMembers) {
- for (String memberName : memberNames) {
- if (MBeanJMXAdapter.getMemberNameOrId(dsmember).equals(memberName)) {
- MemberPRInfo memberAndItsPRRegions = new MemberPRInfo();
- memberAndItsPRRegions.region = regionName;
- memberAndItsPRRegions.dsMemberList.add(dsmember);
- if (listMemberPRInfo.contains(memberAndItsPRRegions)) {
- // add member for appropriate region
- int index = listMemberPRInfo.indexOf(memberAndItsPRRegions);
- MemberPRInfo listMember = listMemberPRInfo.get(index);
- listMember.dsMemberList.add(dsmember);
- } else {
- listMemberPRInfo.add(memberAndItsPRRegions);
- }
- break;
- }
- }
- }
- }
- }
- }
-
- return listMemberPRInfo;
- }
-
- @CliCommand(value = CliStrings.EXPORT_DATA, help = CliStrings.EXPORT_DATA__HELP)
- @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_DATA, CliStrings.TOPIC_GEODE_REGION})
- public Result exportData(
- @CliOption(key = CliStrings.EXPORT_DATA__REGION, mandatory = true,
- optionContext = ConverterHint.REGION_PATH,
- help = CliStrings.EXPORT_DATA__REGION__HELP) String regionName,
- @CliOption(key = CliStrings.EXPORT_DATA__FILE, mandatory = true,
- help = CliStrings.EXPORT_DATA__FILE__HELP) String filePath,
- @CliOption(key = CliStrings.MEMBER, optionContext = ConverterHint.MEMBERIDNAME,
- mandatory = true, help = CliStrings.EXPORT_DATA__MEMBER__HELP) String memberNameOrId) {
-
- getSecurityService().authorizeRegionRead(regionName);
- final DistributedMember targetMember = CliUtil.getDistributedMemberByNameOrId(memberNameOrId);
- Result result;
-
- if (!filePath.endsWith(CliStrings.GEODE_DATA_FILE_EXTENSION)) {
- return ResultBuilder.createUserErrorResult(CliStrings
- .format(CliStrings.INVALID_FILE_EXTENSION, CliStrings.GEODE_DATA_FILE_EXTENSION));
- }
- try {
- if (targetMember != null) {
- final String args[] = {regionName, filePath};
-
- ResultCollector<?, ?> rc = CliUtil.executeFunction(exportDataFunction, args, targetMember);
- List<Object> results = (List<Object>) rc.getResult();
-
- if (results != null) {
- Object resultObj = results.get(0);
- if (resultObj instanceof String) {
- result = ResultBuilder.createInfoResult((String) resultObj);
- } else if (resultObj instanceof Exception) {
- result = ResultBuilder.createGemFireErrorResult(((Exception) resultObj).getMessage());
- } else {
- result = ResultBuilder.createGemFireErrorResult(
- CliStrings.format(CliStrings.COMMAND_FAILURE_MESSAGE, CliStrings.EXPORT_DATA));
- }
- } else {
- result = ResultBuilder.createGemFireErrorResult(
- CliStrings.format(CliStrings.COMMAND_FAILURE_MESSAGE, CliStrings.EXPORT_DATA));
- }
- } else {
- result = ResultBuilder.createUserErrorResult(
- CliStrings.format(CliStrings.EXPORT_DATA__MEMBER__NOT__FOUND, memberNameOrId));
- }
- } catch (CacheClosedException e) {
- result = ResultBuilder.createGemFireErrorResult(e.getMessage());
- } catch (FunctionInvocationTargetException e) {
- result = ResultBuilder.createGemFireErrorResult(
- CliStrings.format(CliStrings.COMMAND_FAILURE_MESSAGE, CliStrings.IMPORT_DATA));
- }
-
- return result;
- }
-
- @CliCommand(value = CliStrings.IMPORT_DATA, help = CliStrings.IMPORT_DATA__HELP)
- @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_DATA, CliStrings.TOPIC_GEODE_REGION})
- public Result importData(
- @CliOption(key = CliStrings.IMPORT_DATA__REGION, optionContext = ConverterHint.REGION_PATH,
- mandatory = true, help = CliStrings.IMPORT_DATA__REGION__HELP) String regionName,
- @CliOption(key = CliStrings.IMPORT_DATA__FILE, mandatory = true,
- help = CliStrings.IMPORT_DATA__FILE__HELP) String filePath,
- @CliOption(key = CliStrings.MEMBER, mandatory = true,
- optionContext = ConverterHint.MEMBERIDNAME,
- help = CliStrings.IMPORT_DATA__MEMBER__HELP) String memberNameOrId,
- @CliOption(key = CliStrings.IMPORT_DATA__INVOKE_CALLBACKS, unspecifiedDefaultValue = "false",
- help = CliStrings.IMPORT_DATA__INVOKE_CALLBACKS__HELP) boolean invokeCallbacks) {
-
- getSecurityService().authorizeRegionWrite(regionName);
-
- Result result;
-
- try {
- final DistributedMember targetMember = CliUtil.getDistributedMemberByNameOrId(memberNameOrId);
-
- if (!filePath.endsWith(CliStrings.GEODE_DATA_FILE_EXTENSION)) {
- return ResultBuilder.createUserErrorResult(CliStrings
- .format(CliStrings.INVALID_FILE_EXTENSION, CliStrings.GEODE_DATA_FILE_EXTENSION));
- }
- if (targetMember != null) {
- final Object args[] = {regionName, filePath, invokeCallbacks};
- ResultCollector<?, ?> rc = CliUtil.executeFunction(importDataFunction, args, targetMember);
- List<Object> results = (List<Object>) rc.getResult();
-
- if (results != null) {
- Object resultObj = results.get(0);
-
- if (resultObj instanceof String) {
- result = ResultBuilder.createInfoResult((String) resultObj);
- } else if (resultObj instanceof Exception) {
- result = ResultBuilder.createGemFireErrorResult(((Exception) resultObj).getMessage());
- } else {
- result = ResultBuilder.createGemFireErrorResult(
- CliStrings.format(CliStrings.COMMAND_FAILURE_MESSAGE, CliStrings.IMPORT_DATA));
- }
- } else {
- result = ResultBuilder.createGemFireErrorResult(
- CliStrings.format(CliStrings.COMMAND_FAILURE_MESSAGE, CliStrings.IMPORT_DATA));
- }
- } else {
- result = ResultBuilder.createUserErrorResult(
- CliStrings.format(CliStrings.IMPORT_DATA__MEMBER__NOT__FOUND, memberNameOrId));
- }
- } catch (CacheClosedException e) {
- result = ResultBuilder.createGemFireErrorResult(e.getMessage());
- } catch (FunctionInvocationTargetException e) {
- result = ResultBuilder.createGemFireErrorResult(
- CliStrings.format(CliStrings.COMMAND_FAILURE_MESSAGE, CliStrings.IMPORT_DATA));
- }
- return result;
- }
-
- @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_DATA, CliStrings.TOPIC_GEODE_REGION})
- @CliCommand(value = {CliStrings.PUT}, help = CliStrings.PUT__HELP)
- public Result put(
- @CliOption(key = {CliStrings.PUT__KEY}, mandatory = true,
- help = CliStrings.PUT__KEY__HELP) String key,
- @CliOption(key = {CliStrings.PUT__VALUE}, mandatory = true,
- help = CliStrings.PUT__VALUE__HELP) String value,
- @CliOption(key = {CliStrings.PUT__REGIONNAME}, mandatory = true,
- help = CliStrings.PUT__REGIONNAME__HELP,
- optionContext = ConverterHint.REGION_PATH) String regionPath,
- @CliOption(key = {CliStrings.PUT__KEYCLASS},
- help = CliStrings.PUT__KEYCLASS__HELP) String keyClass,
- @CliOption(key = {CliStrings.PUT__VALUEKLASS},
- help = CliStrings.PUT__VALUEKLASS__HELP) String valueClass,
- @CliOption(key = {CliStrings.PUT__PUTIFABSENT}, help = CliStrings.PUT__PUTIFABSENT__HELP,
- unspecifiedDefaultValue = "false") boolean putIfAbsent) {
-
- InternalCache cache = getCache();
- cache.getSecurityService().authorizeRegionWrite(regionPath);
- DataCommandResult dataResult;
- if (StringUtils.isEmpty(regionPath)) {
- return makePresentationResult(DataCommandResult.createPutResult(key, null, null,
- CliStrings.PUT__MSG__REGIONNAME_EMPTY, false));
- }
-
- if (StringUtils.isEmpty(key)) {
- return makePresentationResult(DataCommandResult.createPutResult(key, null, null,
- CliStrings.PUT__MSG__KEY_EMPTY, false));
- }
-
- if (StringUtils.isEmpty(value)) {
- return makePresentationResult(DataCommandResult.createPutResult(value, null, null,
- CliStrings.PUT__MSG__VALUE_EMPTY, false));
- }
-
- @SuppressWarnings("rawtypes")
- Region region = cache.getRegion(regionPath);
- DataCommandFunction putfn = new DataCommandFunction();
- if (region == null) {
- Set<DistributedMember> memberList = getRegionAssociatedMembers(regionPath, getCache(), false);
- if (CollectionUtils.isNotEmpty(memberList)) {
- DataCommandRequest request = new DataCommandRequest();
- request.setCommand(CliStrings.PUT);
- request.setValue(value);
- request.setKey(key);
- request.setKeyClass(keyClass);
- request.setRegionName(regionPath);
- request.setValueClass(valueClass);
- request.setPutIfAbsent(putIfAbsent);
- dataResult = callFunctionForRegion(request, putfn, memberList);
- } else {
- dataResult = DataCommandResult.createPutInfoResult(key, value, null,
- CliStrings.format(CliStrings.PUT__MSG__REGION_NOT_FOUND_ON_ALL_MEMBERS, regionPath),
- false);
- }
- } else {
- dataResult = putfn.put(key, value, putIfAbsent, keyClass, valueClass, regionPath);
- }
- dataResult.setKeyClass(keyClass);
- if (valueClass != null) {
- dataResult.setValueClass(valueClass);
- }
- return makePresentationResult(dataResult);
- }
-
- private Result makePresentationResult(DataCommandResult dataResult) {
- if (dataResult != null) {
- return dataResult.toCommandResult();
- } else {
- return ResultBuilder.createGemFireErrorResult("Error executing data command");
- }
- }
-
- @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_DATA, CliStrings.TOPIC_GEODE_REGION})
- @CliCommand(value = {CliStrings.GET}, help = CliStrings.GET__HELP)
- public Result get(
- @CliOption(key = {CliStrings.GET__KEY}, mandatory = true,
- help = CliStrings.GET__KEY__HELP) String key,
- @CliOption(key = {CliStrings.GET__REGIONNAME}, mandatory = true,
- help = CliStrings.GET__REGIONNAME__HELP,
- optionContext = ConverterHint.REGION_PATH) String regionPath,
- @CliOption(key = {CliStrings.GET__KEYCLASS},
- help = CliStrings.GET__KEYCLASS__HELP) String keyClass,
- @CliOption(key = {CliStrings.GET__VALUEKLASS},
- help = CliStrings.GET__VALUEKLASS__HELP) String valueClass,
- @CliOption(key = CliStrings.GET__LOAD, unspecifiedDefaultValue = "true",
- specifiedDefaultValue = "true",
- help = CliStrings.GET__LOAD__HELP) Boolean loadOnCacheMiss) {
-
- InternalCache cache = getCache();
- cache.getSecurityService().authorizeRegionRead(regionPath, key);
- DataCommandResult dataResult;
-
- if (StringUtils.isEmpty(regionPath)) {
- return makePresentationResult(DataCommandResult.createGetResult(key, null, null,
- CliStrings.GET__MSG__REGIONNAME_EMPTY, false));
- }
-
- if (StringUtils.isEmpty(key)) {
- return makePresentationResult(DataCommandResult.createGetResult(key, null, null,
- CliStrings.GET__MSG__KEY_EMPTY, false));
- }
-
- @SuppressWarnings("rawtypes")
- Region region = cache.getRegion(regionPath);
- DataCommandFunction getfn = new DataCommandFunction();
- if (region == null) {
- Set<DistributedMember> memberList = getRegionAssociatedMembers(regionPath, getCache(), false);
- if (CollectionUtils.isNotEmpty(memberList)) {
- DataCommandRequest request = new DataCommandRequest();
- request.setCommand(CliStrings.GET);
- request.setKey(key);
- request.setKeyClass(keyClass);
- request.setRegionName(regionPath);
- request.setValueClass(valueClass);
- request.setLoadOnCacheMiss(loadOnCacheMiss);
- Subject subject = cache.getSecurityService().getSubject();
- if (subject != null) {
- request.setPrincipal(subject.getPrincipal());
- }
- dataResult = callFunctionForRegion(request, getfn, memberList);
- } else {
- dataResult = DataCommandResult.createGetInfoResult(key, null, null,
- CliStrings.format(CliStrings.GET__MSG__REGION_NOT_FOUND_ON_ALL_MEMBERS, regionPath),
- false);
- }
- } else {
- dataResult = getfn.get(null, key, keyClass, valueClass, regionPath, loadOnCacheMiss,
- cache.getSecurityService());
- }
- dataResult.setKeyClass(keyClass);
- if (valueClass != null) {
- dataResult.setValueClass(valueClass);
- }
-
- return makePresentationResult(dataResult);
- }
-
- @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_DATA, CliStrings.TOPIC_GEODE_REGION})
- @CliCommand(value = {CliStrings.LOCATE_ENTRY}, help = CliStrings.LOCATE_ENTRY__HELP)
- public Result locateEntry(
- @CliOption(key = {CliStrings.LOCATE_ENTRY__KEY}, mandatory = true,
- help = CliStrings.LOCATE_ENTRY__KEY__HELP) String key,
- @CliOption(key = {CliStrings.LOCATE_ENTRY__REGIONNAME}, mandatory = true,
- help = CliStrings.LOCATE_ENTRY__REGIONNAME__HELP,
- optionContext = ConverterHint.REGION_PATH) String regionPath,
- @CliOption(key = {CliStrings.LOCATE_ENTRY__KEYCLASS},
- help = CliStrings.LOCATE_ENTRY__KEYCLASS__HELP) String keyClass,
- @CliOption(key = {CliStrings.LOCATE_ENTRY__VALUEKLASS},
- help = CliStrings.LOCATE_ENTRY__VALUEKLASS__HELP) String valueClass,
- @CliOption(key = {CliStrings.LOCATE_ENTRY__RECURSIVE},
- help = CliStrings.LOCATE_ENTRY__RECURSIVE__HELP,
- unspecifiedDefaultValue = "false") boolean recursive) {
-
- getSecurityService().authorizeRegionRead(regionPath, key);
-
- DataCommandResult dataResult;
-
- if (StringUtils.isEmpty(regionPath)) {
- return makePresentationResult(DataCommandResult.createLocateEntryResult(key, null, null,
- CliStrings.LOCATE_ENTRY__MSG__REGIONNAME_EMPTY, false));
- }
-
- if (StringUtils.isEmpty(key)) {
- return makePresentationResult(DataCommandResult.createLocateEntryResult(key, null, null,
- CliStrings.LOCATE_ENTRY__MSG__KEY_EMPTY, false));
- }
-
- DataCommandFunction locateEntry = new DataCommandFunction();
- Set<DistributedMember> memberList = getRegionAssociatedMembers(regionPath, getCache(), true);
- if (CollectionUtils.isNotEmpty(memberList)) {
- DataCommandRequest request = new DataCommandRequest();
- request.setCommand(CliStrings.LOCATE_ENTRY);
- request.setKey(key);
- request.setKeyClass(keyClass);
- request.setRegionName(regionPath);
- request.setValueClass(valueClass);
- request.setRecursive(recursive);
- dataResult = callFunctionForRegion(request, locateEntry, memberList);
- } else {
- dataResult = DataCommandResult.createLocateEntryInfoResult(key, null, null, CliStrings.format(
- CliStrings.LOCATE_ENTRY__MSG__REGION_NOT_FOUND_ON_ALL_MEMBERS, regionPath), false);
- }
- dataResult.setKeyClass(keyClass);
- if (valueClass != null) {
- dataResult.setValueClass(valueClass);
- }
-
- return makePresentationResult(dataResult);
- }
-
- @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_DATA, CliStrings.TOPIC_GEODE_REGION})
- @CliCommand(value = {CliStrings.REMOVE}, help = CliStrings.REMOVE__HELP)
- public Result remove(
- @CliOption(key = {CliStrings.REMOVE__KEY}, help = CliStrings.REMOVE__KEY__HELP,
- specifiedDefaultValue = "") String key,
- @CliOption(key = {CliStrings.REMOVE__REGION}, mandatory = true,
- help = CliStrings.REMOVE__REGION__HELP,
- optionContext = ConverterHint.REGION_PATH) String regionPath,
- @CliOption(key = CliStrings.REMOVE__ALL, help = CliStrings.REMOVE__ALL__HELP,
- specifiedDefaultValue = "true", unspecifiedDefaultValue = "false") boolean removeAllKeys,
- @CliOption(key = {CliStrings.REMOVE__KEYCLASS},
- help = CliStrings.REMOVE__KEYCLASS__HELP) String keyClass) {
- InternalCache cache = getCache();
- DataCommandResult dataResult;
-
- if (StringUtils.isEmpty(regionPath)) {
- return makePresentationResult(DataCommandResult.createRemoveResult(key, null, null,
- CliStrings.REMOVE__MSG__REGIONNAME_EMPTY, false));
- }
-
- if (!removeAllKeys && (key == null)) {
- return makePresentationResult(DataCommandResult.createRemoveResult(null, null, null,
- CliStrings.REMOVE__MSG__KEY_EMPTY, false));
- }
-
- if (removeAllKeys) {
- cache.getSecurityService().authorizeRegionWrite(regionPath);
- } else {
- cache.getSecurityService().authorizeRegionWrite(regionPath, key);
- }
-
- @SuppressWarnings("rawtypes")
- Region region = cache.getRegion(regionPath);
- DataCommandFunction removefn = new DataCommandFunction();
- if (region == null) {
- Set<DistributedMember> memberList = getRegionAssociatedMembers(regionPath, getCache(), false);
- if (CollectionUtils.isNotEmpty(memberList)) {
- DataCommandRequest request = new DataCommandRequest();
- request.setCommand(CliStrings.REMOVE);
- request.setKey(key);
- request.setKeyClass(keyClass);
- request.setRemoveAllKeys(removeAllKeys ? "ALL" : null);
- request.setRegionName(regionPath);
- dataResult = callFunctionForRegion(request, removefn, memberList);
- } else {
- dataResult = DataCommandResult.createRemoveInfoResult(key, null, null,
- CliStrings.format(CliStrings.REMOVE__MSG__REGION_NOT_FOUND_ON_ALL_MEMBERS, regionPath),
- false);
- }
-
- } else {
- dataResult = removefn.remove(key, keyClass, regionPath, removeAllKeys ? "ALL" : null);
- }
- dataResult.setKeyClass(keyClass);
-
- return makePresentationResult(dataResult);
- }
-
- private static class MemberPRInfo {
- ArrayList<DistributedMember> dsMemberList;
- public String region;
-
- MemberPRInfo() {
- region = "";
- dsMemberList = new ArrayList<>();
- }
-
- @Override
- public boolean equals(Object o2) {
- return o2 != null && this.region.equals(((MemberPRInfo) o2).region);
- }
- }
-
- @SuppressWarnings("rawtypes")
- public static DataCommandResult callFunctionForRegion(DataCommandRequest request,
- DataCommandFunction putfn, Set<DistributedMember> members) {
-
- if (members.size() == 1) {
- DistributedMember member = members.iterator().next();
- ResultCollector collector =
- FunctionService.onMember(member).setArguments(request).execute(putfn);
- List list = (List) collector.getResult();
- Object object = list.get(0);
- if (object instanceof Throwable) {
- Throwable error = (Throwable) object;
- DataCommandResult result = new DataCommandResult();
- result.setErorr(error);
- result.setErrorString(error.getMessage());
- return result;
- }
- DataCommandResult result = (DataCommandResult) list.get(0);
- result.aggregate(null);
- return result;
- } else {
- ResultCollector collector =
- FunctionService.onMembers(members).setArguments(request).execute(putfn);
- List list = (List) collector.getResult();
- DataCommandResult result = null;
- for (Object object : list) {
- if (object instanceof Throwable) {
- Throwable error = (Throwable) object;
- result = new DataCommandResult();
- result.setErorr(error);
- result.setErrorString(error.getMessage());
- return result;
- }
-
- if (result == null) {
- result = (DataCommandResult) object;
- result.aggregate(null);
- } else {
- result.aggregate((DataCommandResult) object);
- }
- }
- return result;
- }
- }
-
- public static Set<DistributedMember> getQueryRegionsAssociatedMembers(Set<String> regions,
- final InternalCache cache, boolean returnAll) {
- LogWriter logger = cache.getLogger();
- Set<DistributedMember> members;
- Set<DistributedMember> newMembers = null;
- Iterator<String> iterator = regions.iterator();
- String region = iterator.next();
- members = getRegionAssociatedMembers(region, cache, true);
- if (logger.fineEnabled()) {
- logger.fine("Members for region " + region + " Members " + members);
- }
- List<String> regionAndingList = new ArrayList<>();
- regionAndingList.add(region);
- if (regions.size() == 1) {
- newMembers = members;
- } else {
- if (CollectionUtils.isNotEmpty(members)) {
- while (iterator.hasNext()) {
- region = iterator.next();
- newMembers = getRegionAssociatedMembers(region, cache, true);
- if (newMembers == null) {
- newMembers = new HashSet<>();
- }
- if (logger.fineEnabled()) {
- logger.fine("Members for region " + region + " Members " + newMembers);
- }
- regionAndingList.add(region);
- newMembers.retainAll(members);
- members = newMembers;
- if (logger.fineEnabled()) {
- logger.fine(
- "Members after anding for regions " + regionAndingList + " List : " + newMembers);
- }
- }
- }
- }
- members = new HashSet<>();
- if (newMembers == null) {
- return members;
- }
- for (DistributedMember newMember : newMembers) {
- members.add(newMember);
- if (!returnAll) {
- return members;
- }
- }
- return members;
- }
-
- @SuppressWarnings("rawtypes")
- public static Set<DistributedMember> getRegionAssociatedMembers(String region,
- final InternalCache cache, boolean returnAll) {
-
- DistributedMember member;
-
- if (StringUtils.isEmpty(region)) {
- return null;
- }
-
- DistributedRegionMXBean bean =
- ManagementService.getManagementService(cache).getDistributedRegionMXBean(region);
-
- if (bean == null) {
- // try with slash ahead
- bean = ManagementService.getManagementService(cache)
- .getDistributedRegionMXBean(Region.SEPARATOR + region);
- }
-
- if (bean == null) {
- return null;
- }
-
- String[] membersName = bean.getMembers();
- Set<DistributedMember> dsMembers = cache.getMembers();
- Set<DistributedMember> dsMembersWithThisMember = new HashSet<>();
- dsMembersWithThisMember.addAll(dsMembers);
- dsMembersWithThisMember.add(cache.getDistributedSystem().getDistributedMember());
- Iterator it = dsMembersWithThisMember.iterator();
- Set<DistributedMember> matchedMembers = new HashSet<>();
-
- if (membersName.length > 0) {
- while (it.hasNext()) {
- DistributedMember dsmember = (DistributedMember) it.next();
- for (String memberName : membersName) {
- String name = MBeanJMXAdapter.getMemberNameOrId(dsmember);
- if (name.equals(memberName)) {
- member = dsmember;
- matchedMembers.add(member);
- if (!returnAll) {
- return matchedMembers;
- }
- }
- }
- }
- }
-
- // try with function calls
- if (matchedMembers.size() == 0) {
- matchedMembers = CliUtil.getMembersForeRegionViaFunction(cache, region, true);
- }
- return matchedMembers;
- }
-
- // TODO:k revisit after adding support in Gfsh.java?
- public static Object[] replaceGfshEnvVar(String query, Map<String, String> gfshEnvVarMap) {
- boolean done = false;
- int startIndex = 0;
- int replacedVars = 0;
- while (!done) {
- int index1 = query.indexOf("${", startIndex);
- if (index1 == -1) {
- break;
- }
- int index2 = query.indexOf("}", index1);
- if (index2 == -1) {
- break;
- }
- String var = query.substring(index1 + 2, index2);
- String value = gfshEnvVarMap.get(var);
- if (value != null) {
- query = query.replaceAll("\\$\\{" + var + "\\}", value);
- replacedVars++;
- }
- startIndex = index2 + 1;
- if (startIndex >= query.length()) {
- done = true;
- }
- }
- return new Object[] {replacedVars, query};
- }
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/32364169/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommandsUtils.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommandsUtils.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommandsUtils.java
new file mode 100644
index 0000000..bca315f
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommandsUtils.java
@@ -0,0 +1,311 @@
+/*
+ * 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.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
+
+import org.apache.geode.LogWriter;
+import org.apache.geode.cache.Region;
+import org.apache.geode.cache.execute.FunctionService;
+import org.apache.geode.cache.execute.ResultCollector;
+import org.apache.geode.distributed.DistributedMember;
+import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.management.DistributedRegionMXBean;
+import org.apache.geode.management.ManagementService;
+import org.apache.geode.management.cli.Result;
+import org.apache.geode.management.internal.MBeanJMXAdapter;
+import org.apache.geode.management.internal.cli.CliUtil;
+import org.apache.geode.management.internal.cli.LogWrapper;
+import org.apache.geode.management.internal.cli.domain.DataCommandRequest;
+import org.apache.geode.management.internal.cli.domain.DataCommandResult;
+import org.apache.geode.management.internal.cli.functions.DataCommandFunction;
+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.TabularResultData;
+
+public class DataCommandsUtils {
+ static boolean checkResultList(CompositeResultData rebalanceResultData, List resultList,
+ DistributedMember member) {
+ boolean toContinueForOtherMembers = false;
+ if (CollectionUtils.isNotEmpty(resultList)) {
+ for (Object object : resultList) {
+ if (object instanceof Exception) {
+ rebalanceResultData.addSection().addData(
+ CliStrings.format(CliStrings.REBALANCE__MSG__NO_EXECUTION, member.getId()),
+ ((Exception) object).getMessage());
+
+ LogWrapper.getInstance().info(CliStrings.REBALANCE__MSG__NO_EXECUTION + member.getId()
+ + " exception=" + ((Throwable) object).getMessage(), ((Throwable) object));
+
+ toContinueForOtherMembers = true;
+ break;
+ } else if (object instanceof Throwable) {
+ rebalanceResultData.addSection().addData(
+ CliStrings.format(CliStrings.REBALANCE__MSG__NO_EXECUTION, member.getId()),
+ ((Throwable) object).getMessage());
+
+ LogWrapper.getInstance().info(CliStrings.REBALANCE__MSG__NO_EXECUTION + member.getId()
+ + " exception=" + ((Throwable) object).getMessage(), ((Throwable) object));
+
+ toContinueForOtherMembers = true;
+ break;
+ }
+ }
+ } else {
+ LogWrapper.getInstance().info(
+ "Rebalancing for member=" + member.getId() + ", resultList is either null or empty");
+ rebalanceResultData.addSection().addData("Rebalancing for member=" + member.getId(),
+ ", resultList is either null or empty");
+ toContinueForOtherMembers = true;
+ }
+ return toContinueForOtherMembers;
+ }
+
+ static List<String> tokenize(String str, String separator) {
+ StringTokenizer st = new StringTokenizer(str, separator);
+ List<String> rstList = new ArrayList<>();
+ while (st.hasMoreTokens()) {
+ rstList.add(st.nextToken());
+
+ }
+ return rstList;
+ }
+
+ static CompositeResultData toCompositeResultData(CompositeResultData rebalanceResultData,
+ ArrayList<String> rstlist, int index, boolean simulate, InternalCache cache) {
+ int resultItemCount = 9;
+ // add only if there are any valid regions in results
+ if (rstlist.size() > resultItemCount && StringUtils.isNotEmpty(rstlist.get(resultItemCount))) {
+ TabularResultData table1 = rebalanceResultData.addSection().addTable("Table" + index);
+ String newLine = System.getProperty("line.separator");
+ StringBuilder resultStr = new StringBuilder();
+ resultStr.append(newLine);
+ table1.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALBUCKETCREATEBYTES);
+ table1.accumulate("Value", rstlist.get(0));
+ resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATEBYTES).append(" = ")
+ .append(rstlist.get(0)).append(newLine);
+ table1.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALBUCKETCREATETIM);
+ table1.accumulate("Value", rstlist.get(1));
+ resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATETIM).append(" = ")
+ .append(rstlist.get(1)).append(newLine);
+
+ table1.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALBUCKETCREATESCOMPLETED);
+ table1.accumulate("Value", rstlist.get(2));
+ resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATESCOMPLETED).append(" = ")
+ .append(rstlist.get(2)).append(newLine);
+
+ table1.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERBYTES);
+ table1.accumulate("Value", rstlist.get(3));
+ resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERBYTES).append(" = ")
+ .append(rstlist.get(3)).append(newLine);
+
+ table1.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERTIME);
+ table1.accumulate("Value", rstlist.get(4));
+ resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERTIME).append(" = ")
+ .append(rstlist.get(4)).append(newLine);
+
+ table1.accumulate("Rebalanced Stats",
+ CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERSCOMPLETED);
+ table1.accumulate("Value", rstlist.get(5));
+ resultStr.append(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERSCOMPLETED).append(" = ")
+ .append(rstlist.get(5)).append(newLine);
+
+ table1.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERTIME);
+ table1.accumulate("Value", rstlist.get(6));
+ resultStr.append(CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERTIME).append(" = ")
+ .append(rstlist.get(6)).append(newLine);
+
+ table1.accumulate("Rebalanced Stats",
+ CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERSCOMPLETED);
+ table1.accumulate("Value", rstlist.get(7));
+ resultStr.append(CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERSCOMPLETED).append(" = ")
+ .append(rstlist.get(7)).append(newLine);
+
+ table1.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__TOTALTIME);
+ table1.accumulate("Value", rstlist.get(8));
+ resultStr.append(CliStrings.REBALANCE__MSG__TOTALTIME).append(" = ").append(rstlist.get(8))
+ .append(newLine);
+
+ String headerText;
+ if (simulate) {
+ headerText = "Simulated partition regions ";
+ } else {
+ headerText = "Rebalanced partition regions ";
+ }
+ for (int i = resultItemCount; i < rstlist.size(); i++) {
+ headerText = headerText + " " + rstlist.get(i);
+ }
+ table1.setHeader(headerText);
+ cache.getLogger().info(headerText + resultStr);
+ }
+ return rebalanceResultData;
+ }
+
+ static Result makePresentationResult(DataCommandResult dataResult) {
+ if (dataResult != null) {
+ return dataResult.toCommandResult();
+ } else {
+ return ResultBuilder.createGemFireErrorResult("Error executing data command");
+ }
+ }
+
+ public static Set<DistributedMember> getRegionAssociatedMembers(String region,
+ final InternalCache cache, boolean returnAll) {
+ DistributedMember member;
+ if (StringUtils.isEmpty(region)) {
+ return null;
+ }
+ DistributedRegionMXBean bean =
+ ManagementService.getManagementService(cache).getDistributedRegionMXBean(region);
+ if (bean == null) {
+ // try with slash ahead
+ bean = ManagementService.getManagementService(cache)
+ .getDistributedRegionMXBean(Region.SEPARATOR + region);
+ }
+ if (bean == null) {
+ return null;
+ }
+ String[] membersName = bean.getMembers();
+ Set<DistributedMember> dsMembers = cache.getMembers();
+ Set<DistributedMember> dsMembersWithThisMember = new HashSet<>();
+ dsMembersWithThisMember.addAll(dsMembers);
+ dsMembersWithThisMember.add(cache.getDistributedSystem().getDistributedMember());
+ Iterator it = dsMembersWithThisMember.iterator();
+ Set<DistributedMember> matchedMembers = new HashSet<>();
+
+ if (membersName.length > 0) {
+ while (it.hasNext()) {
+ DistributedMember dsmember = (DistributedMember) it.next();
+ for (String memberName : membersName) {
+ String name = MBeanJMXAdapter.getMemberNameOrId(dsmember);
+ if (name.equals(memberName)) {
+ member = dsmember;
+ matchedMembers.add(member);
+ if (!returnAll) {
+ return matchedMembers;
+ }
+ }
+ }
+ }
+ }
+ // try with function calls
+ if (matchedMembers.size() == 0) {
+ matchedMembers = CliUtil.getMembersForeRegionViaFunction(cache, region, true);
+ }
+ return matchedMembers;
+ }
+
+ static DataCommandResult callFunctionForRegion(DataCommandRequest request,
+ DataCommandFunction putfn, Set<DistributedMember> members) {
+ if (members.size() == 1) {
+ DistributedMember member = members.iterator().next();
+ ResultCollector collector =
+ FunctionService.onMember(member).setArguments(request).execute(putfn);
+ List list = (List) collector.getResult();
+ Object object = list.get(0);
+ if (object instanceof Throwable) {
+ Throwable error = (Throwable) object;
+ DataCommandResult result = new DataCommandResult();
+ result.setErorr(error);
+ result.setErrorString(error.getMessage());
+ return result;
+ }
+ DataCommandResult result = (DataCommandResult) list.get(0);
+ result.aggregate(null);
+ return result;
+ } else {
+ ResultCollector collector =
+ FunctionService.onMembers(members).setArguments(request).execute(putfn);
+ List list = (List) collector.getResult();
+ DataCommandResult result = null;
+ for (Object object : list) {
+ if (object instanceof Throwable) {
+ Throwable error = (Throwable) object;
+ result = new DataCommandResult();
+ result.setErorr(error);
+ result.setErrorString(error.getMessage());
+ return result;
+ }
+
+ if (result == null) {
+ result = (DataCommandResult) object;
+ result.aggregate(null);
+ } else {
+ result.aggregate((DataCommandResult) object);
+ }
+ }
+ return result;
+ }
+ }
+
+ public static Set<DistributedMember> getQueryRegionsAssociatedMembers(Set<String> regions,
+ final InternalCache cache, boolean returnAll) {
+ LogWriter logger = cache.getLogger();
+ Set<DistributedMember> members;
+ Set<DistributedMember> newMembers = null;
+ Iterator<String> iterator = regions.iterator();
+ String region = iterator.next();
+ members = getRegionAssociatedMembers(region, cache, true);
+ if (logger.fineEnabled()) {
+ logger.fine("Members for region " + region + " Members " + members);
+ }
+ List<String> regionAndingList = new ArrayList<>();
+ regionAndingList.add(region);
+ if (regions.size() == 1) {
+ newMembers = members;
+ } else {
+ if (CollectionUtils.isNotEmpty(members)) {
+ while (iterator.hasNext()) {
+ region = iterator.next();
+ newMembers = getRegionAssociatedMembers(region, cache, true);
+ if (newMembers == null) {
+ newMembers = new HashSet<>();
+ }
+ if (logger.fineEnabled()) {
+ logger.fine("Members for region " + region + " Members " + newMembers);
+ }
+ regionAndingList.add(region);
+ newMembers.retainAll(members);
+ members = newMembers;
+ if (logger.fineEnabled()) {
+ logger.fine(
+ "Members after anding for regions " + regionAndingList + " List : " + newMembers);
+ }
+ }
+ }
+ }
+ members = new HashSet<>();
+ if (newMembers == null) {
+ return members;
+ }
+ for (DistributedMember newMember : newMembers) {
+ members.add(newMember);
+ if (!returnAll) {
+ return members;
+ }
+ }
+ return members;
+ }
+}
http://git-wip-us.apache.org/repos/asf/geode/blob/32364169/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExportDataCommand.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExportDataCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExportDataCommand.java
new file mode 100644
index 0000000..40bd0f3
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExportDataCommand.java
@@ -0,0 +1,90 @@
+/*
+ * 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.List;
+
+import org.springframework.shell.core.annotation.CliCommand;
+import org.springframework.shell.core.annotation.CliOption;
+
+import org.apache.geode.cache.CacheClosedException;
+import org.apache.geode.cache.execute.FunctionInvocationTargetException;
+import org.apache.geode.cache.execute.ResultCollector;
+import org.apache.geode.distributed.DistributedMember;
+import org.apache.geode.management.cli.CliMetaData;
+import org.apache.geode.management.cli.ConverterHint;
+import org.apache.geode.management.cli.Result;
+import org.apache.geode.management.internal.cli.CliUtil;
+import org.apache.geode.management.internal.cli.functions.ExportDataFunction;
+import org.apache.geode.management.internal.cli.i18n.CliStrings;
+import org.apache.geode.management.internal.cli.result.ResultBuilder;
+
+public class ExportDataCommand implements GfshCommand {
+ private final ExportDataFunction exportDataFunction = new ExportDataFunction();
+
+ @CliCommand(value = CliStrings.EXPORT_DATA, help = CliStrings.EXPORT_DATA__HELP)
+ @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_DATA, CliStrings.TOPIC_GEODE_REGION})
+ public Result exportData(
+ @CliOption(key = CliStrings.EXPORT_DATA__REGION, mandatory = true,
+ optionContext = ConverterHint.REGION_PATH,
+ help = CliStrings.EXPORT_DATA__REGION__HELP) String regionName,
+ @CliOption(key = CliStrings.EXPORT_DATA__FILE, mandatory = true,
+ help = CliStrings.EXPORT_DATA__FILE__HELP) String filePath,
+ @CliOption(key = CliStrings.MEMBER, optionContext = ConverterHint.MEMBERIDNAME,
+ mandatory = true, help = CliStrings.EXPORT_DATA__MEMBER__HELP) String memberNameOrId) {
+
+ getSecurityService().authorizeRegionRead(regionName);
+ final DistributedMember targetMember = CliUtil.getDistributedMemberByNameOrId(memberNameOrId);
+ Result result;
+
+ if (!filePath.endsWith(CliStrings.GEODE_DATA_FILE_EXTENSION)) {
+ return ResultBuilder.createUserErrorResult(CliStrings
+ .format(CliStrings.INVALID_FILE_EXTENSION, CliStrings.GEODE_DATA_FILE_EXTENSION));
+ }
+ try {
+ if (targetMember != null) {
+ final String args[] = {regionName, filePath};
+
+ ResultCollector<?, ?> rc = CliUtil.executeFunction(exportDataFunction, args, targetMember);
+ List<Object> results = (List<Object>) rc.getResult();
+
+ if (results != null) {
+ Object resultObj = results.get(0);
+ if (resultObj instanceof String) {
+ result = ResultBuilder.createInfoResult((String) resultObj);
+ } else if (resultObj instanceof Exception) {
+ result = ResultBuilder.createGemFireErrorResult(((Exception) resultObj).getMessage());
+ } else {
+ result = ResultBuilder.createGemFireErrorResult(
+ CliStrings.format(CliStrings.COMMAND_FAILURE_MESSAGE, CliStrings.EXPORT_DATA));
+ }
+ } else {
+ result = ResultBuilder.createGemFireErrorResult(
+ CliStrings.format(CliStrings.COMMAND_FAILURE_MESSAGE, CliStrings.EXPORT_DATA));
+ }
+ } else {
+ result = ResultBuilder.createUserErrorResult(
+ CliStrings.format(CliStrings.EXPORT_DATA__MEMBER__NOT__FOUND, memberNameOrId));
+ }
+ } catch (CacheClosedException e) {
+ result = ResultBuilder.createGemFireErrorResult(e.getMessage());
+ } catch (FunctionInvocationTargetException e) {
+ result = ResultBuilder.createGemFireErrorResult(
+ CliStrings.format(CliStrings.COMMAND_FAILURE_MESSAGE, CliStrings.IMPORT_DATA));
+ }
+ return result;
+ }
+}
http://git-wip-us.apache.org/repos/asf/geode/blob/32364169/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GetCommand.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GetCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GetCommand.java
new file mode 100644
index 0000000..f09174e
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GetCommand.java
@@ -0,0 +1,106 @@
+/*
+ * 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 static org.apache.geode.management.internal.cli.commands.DataCommandsUtils.callFunctionForRegion;
+import static org.apache.geode.management.internal.cli.commands.DataCommandsUtils.getRegionAssociatedMembers;
+import static org.apache.geode.management.internal.cli.commands.DataCommandsUtils.makePresentationResult;
+
+import java.util.Set;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.shiro.subject.Subject;
+import org.springframework.shell.core.annotation.CliCommand;
+import org.springframework.shell.core.annotation.CliOption;
+
+import org.apache.geode.cache.Region;
+import org.apache.geode.distributed.DistributedMember;
+import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.management.cli.CliMetaData;
+import org.apache.geode.management.cli.ConverterHint;
+import org.apache.geode.management.cli.Result;
+import org.apache.geode.management.internal.cli.domain.DataCommandRequest;
+import org.apache.geode.management.internal.cli.domain.DataCommandResult;
+import org.apache.geode.management.internal.cli.functions.DataCommandFunction;
+import org.apache.geode.management.internal.cli.i18n.CliStrings;
+
+public class GetCommand implements GfshCommand {
+ @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_DATA, CliStrings.TOPIC_GEODE_REGION})
+ @CliCommand(value = {CliStrings.GET}, help = CliStrings.GET__HELP)
+ public Result get(
+ @CliOption(key = {CliStrings.GET__KEY}, mandatory = true,
+ help = CliStrings.GET__KEY__HELP) String key,
+ @CliOption(key = {CliStrings.GET__REGIONNAME}, mandatory = true,
+ help = CliStrings.GET__REGIONNAME__HELP,
+ optionContext = ConverterHint.REGION_PATH) String regionPath,
+ @CliOption(key = {CliStrings.GET__KEYCLASS},
+ help = CliStrings.GET__KEYCLASS__HELP) String keyClass,
+ @CliOption(key = {CliStrings.GET__VALUEKLASS},
+ help = CliStrings.GET__VALUEKLASS__HELP) String valueClass,
+ @CliOption(key = CliStrings.GET__LOAD, unspecifiedDefaultValue = "true",
+ specifiedDefaultValue = "true",
+ help = CliStrings.GET__LOAD__HELP) Boolean loadOnCacheMiss) {
+
+ InternalCache cache = getCache();
+ cache.getSecurityService().authorizeRegionRead(regionPath, key);
+ DataCommandResult dataResult;
+
+ if (StringUtils.isEmpty(regionPath)) {
+ return makePresentationResult(DataCommandResult.createGetResult(key, null, null,
+ CliStrings.GET__MSG__REGIONNAME_EMPTY, false));
+ }
+
+ if (StringUtils.isEmpty(key)) {
+ return makePresentationResult(DataCommandResult.createGetResult(key, null, null,
+ CliStrings.GET__MSG__KEY_EMPTY, false));
+ }
+
+ @SuppressWarnings("rawtypes")
+ Region region = cache.getRegion(regionPath);
+ DataCommandFunction getfn = new DataCommandFunction();
+ if (region == null) {
+ Set<DistributedMember> memberList = getRegionAssociatedMembers(regionPath, getCache(), false);
+ if (CollectionUtils.isNotEmpty(memberList)) {
+ DataCommandRequest request = new DataCommandRequest();
+ request.setCommand(CliStrings.GET);
+ request.setKey(key);
+ request.setKeyClass(keyClass);
+ request.setRegionName(regionPath);
+ request.setValueClass(valueClass);
+ request.setLoadOnCacheMiss(loadOnCacheMiss);
+ Subject subject = cache.getSecurityService().getSubject();
+ if (subject != null) {
+ request.setPrincipal(subject.getPrincipal());
+ }
+ dataResult = callFunctionForRegion(request, getfn, memberList);
+ } else {
+ dataResult = DataCommandResult.createGetInfoResult(key, null, null,
+ CliStrings.format(CliStrings.GET__MSG__REGION_NOT_FOUND_ON_ALL_MEMBERS, regionPath),
+ false);
+ }
+ } else {
+ dataResult = getfn.get(null, key, keyClass, valueClass, regionPath, loadOnCacheMiss,
+ cache.getSecurityService());
+ }
+ dataResult.setKeyClass(keyClass);
+ if (valueClass != null) {
+ dataResult.setValueClass(valueClass);
+ }
+
+ return makePresentationResult(dataResult);
+ }
+}