This is an automated email from the ASF dual-hosted git repository. mkevo pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push: new 93e460b GEODE-7838: getNumOfServers while rebalance is executed (#4815) 93e460b is described below commit 93e460bb12c05c9351db0b8d6cb8b9179f18caec Author: Mario Kevo <48509719+mk...@users.noreply.github.com> AuthorDate: Fri Apr 10 07:28:49 2020 +0200 GEODE-7838: getNumOfServers while rebalance is executed (#4815) * GEODE-7383: getNumOfServers while rebalance is executed --- .../control/RebalanceOperationDistributedTest.java | 1 + .../geode/cache/control/RebalanceResults.java | 7 +++ .../cache/partition/PartitionRebalanceInfo.java | 7 +++ .../control/PartitionRebalanceDetailsImpl.java | 6 ++ .../cache/control/RebalanceResultsImpl.java | 9 +++ .../internal/functions/RebalanceFunction.java | 2 +- .../geode/management/internal/i18n/CliStrings.java | 2 + .../operation/RebalanceOperationPerformer.java | 4 +- .../sanctioned-geode-core-serializables.txt | 4 +- .../operation/RebalanceOperationPerformerTest.java | 2 +- .../gfsh/command-pages/rebalance.html.md.erb | 28 +++++----- .../RebalanceCommandDistributedTestBase.java | 65 +++++++++++++++++++++- .../internal/cli/commands/RebalanceCommand.java | 12 +++- .../operation/RebalanceRegionResultImpl.java | 11 ++++ .../management/runtime/RebalanceRegionResult.java | 5 ++ .../sanctioned-geode-management-serializables.txt | 2 +- .../management/operation/RebalanceResultTest.java | 4 +- 17 files changed, 146 insertions(+), 25 deletions(-) diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/control/RebalanceOperationDistributedTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/control/RebalanceOperationDistributedTest.java index 7f43087..f77193e 100644 --- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/control/RebalanceOperationDistributedTest.java +++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/control/RebalanceOperationDistributedTest.java @@ -1055,6 +1055,7 @@ public class RebalanceOperationDistributedTest extends CacheTestCase { assertThat(details.getPrimaryTransfersCompleted()).isEqualTo(0); assertThat(details.getBucketTransferBytes()).isGreaterThan(0); assertThat(details.getBucketTransfersCompleted()).isEqualTo(3); + assertThat(details.getNumberOfMembersExecutedOn()).isEqualTo(2); Set<PartitionMemberInfo> afterDetails = details.getPartitionMemberDetailsAfter(); assertThat(afterDetails).hasSize(2); diff --git a/geode-core/src/main/java/org/apache/geode/cache/control/RebalanceResults.java b/geode-core/src/main/java/org/apache/geode/cache/control/RebalanceResults.java index e2e0134..fd6f28a 100644 --- a/geode-core/src/main/java/org/apache/geode/cache/control/RebalanceResults.java +++ b/geode-core/src/main/java/org/apache/geode/cache/control/RebalanceResults.java @@ -99,4 +99,11 @@ public interface RebalanceResults { * @return the total time, in milliseconds, spent transferring primaries */ long getTotalPrimaryTransferTime(); + + /** + * Returns the total number of members on which command is executed. + * + * @return the total number of members on which command is executed + */ + int getTotalMembersExecutedOn(); } diff --git a/geode-core/src/main/java/org/apache/geode/cache/partition/PartitionRebalanceInfo.java b/geode-core/src/main/java/org/apache/geode/cache/partition/PartitionRebalanceInfo.java index cf69ce8..437e8cf 100644 --- a/geode-core/src/main/java/org/apache/geode/cache/partition/PartitionRebalanceInfo.java +++ b/geode-core/src/main/java/org/apache/geode/cache/partition/PartitionRebalanceInfo.java @@ -137,4 +137,11 @@ public interface PartitionRebalanceInfo { * @return the time, in milliseconds, spent transferring primaries for this region */ long getPrimaryTransferTime(); + + /** + * Returns the total number of members on which command is executed. + * + * @return the total number of members on which command is executed + */ + int getNumberOfMembersExecutedOn(); } diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/control/PartitionRebalanceDetailsImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/control/PartitionRebalanceDetailsImpl.java index 8a6c4f9..5eeb8aa 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/control/PartitionRebalanceDetailsImpl.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/control/PartitionRebalanceDetailsImpl.java @@ -46,6 +46,7 @@ public class PartitionRebalanceDetailsImpl private int primaryTransfersCompleted; private final transient PartitionedRegion region; private long time; + private int numOfMembers; public PartitionRebalanceDetailsImpl(PartitionedRegion region) { this.region = region; @@ -148,6 +149,11 @@ public class PartitionRebalanceDetailsImpl } @Override + public int getNumberOfMembersExecutedOn() { + return getPartitionMemberDetailsAfter().size(); + } + + @Override public int getPrimaryTransfersCompleted() { return this.primaryTransfersCompleted; } diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/control/RebalanceResultsImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/control/RebalanceResultsImpl.java index ab78311..d51df14 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/control/RebalanceResultsImpl.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/control/RebalanceResultsImpl.java @@ -32,6 +32,7 @@ public class RebalanceResultsImpl implements RebalanceResults, Serializable { private long totalPrimaryTransferTime; private int totalPrimaryTransfersCompleted; private long totalTime; + private int totalNumOfMembers; public void addDetails(PartitionRebalanceInfo details) { this.detailSet.add(details); @@ -43,6 +44,7 @@ public class RebalanceResultsImpl implements RebalanceResults, Serializable { totalBucketTransfersCompleted += details.getBucketTransfersCompleted(); totalPrimaryTransferTime += details.getPrimaryTransferTime(); totalPrimaryTransfersCompleted += details.getPrimaryTransfersCompleted(); + totalNumOfMembers += details.getNumberOfMembersExecutedOn(); totalTime += details.getTime(); } @@ -56,6 +58,7 @@ public class RebalanceResultsImpl implements RebalanceResults, Serializable { totalBucketTransfersCompleted += details.totalBucketTransfersCompleted; totalPrimaryTransferTime += details.totalPrimaryTransferTime; totalPrimaryTransfersCompleted += details.totalPrimaryTransfersCompleted; + totalNumOfMembers += details.totalNumOfMembers; if (details.totalTime > totalTime) totalTime = details.totalTime; } @@ -101,6 +104,11 @@ public class RebalanceResultsImpl implements RebalanceResults, Serializable { } @Override + public int getTotalMembersExecutedOn() { + return this.totalNumOfMembers; + } + + @Override public int getTotalPrimaryTransfersCompleted() { return this.totalPrimaryTransfersCompleted; } @@ -121,6 +129,7 @@ public class RebalanceResultsImpl implements RebalanceResults, Serializable { ", totalPrimaryTransferTimeInMilliseconds=" + totalPrimaryTransferTime + ", totalPrimaryTransfersCompleted=" + totalPrimaryTransfersCompleted + ", totalTimeInMilliseconds=" + totalTime + + ", totalNumOfMembers=" + totalNumOfMembers + "}"; } } diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/functions/RebalanceFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/functions/RebalanceFunction.java index 8d95e30..bd06853 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/functions/RebalanceFunction.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/functions/RebalanceFunction.java @@ -71,7 +71,7 @@ public class RebalanceFunction implements InternalFunction { + results.getTotalBucketTransferBytes() + "," + results.getTotalBucketTransferTime() + "," + results.getTotalBucketTransfersCompleted() + "," + results.getTotalPrimaryTransferTime() + "," + results.getTotalPrimaryTransfersCompleted() + "," + results.getTotalTime() + "," - + String.join(",", includeRegionNames)); + + results.getTotalMembersExecutedOn() + "," + String.join(",", includeRegionNames)); logger.info("Starting RebalanceFunction str1={}", str1); context.getResultSender().lastResult(str1.toString()); diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/i18n/CliStrings.java b/geode-core/src/main/java/org/apache/geode/management/internal/i18n/CliStrings.java index fadbd84..62f2983 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/i18n/CliStrings.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/i18n/CliStrings.java @@ -1873,6 +1873,8 @@ public class CliStrings { "Total primaries transferred during this rebalance"; public static final String REBALANCE__MSG__TOTALTIME = "Total time (in milliseconds) for this rebalance"; + public static final String REBALANCE__MSG__MEMBER_COUNT = + "Total number of members in system on which rebalance is executed"; public static final String REBALANCE__MSG__NO_REBALANCING_REGIONS_ON_DS = "Distributed system has no regions that can be rebalanced"; public static final String REBALANCE__MSG__EXCEPTION_IN_REBALANCE_FOR_MEMBER_0_Exception = diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/operation/RebalanceOperationPerformer.java b/geode-core/src/main/java/org/apache/geode/management/internal/operation/RebalanceOperationPerformer.java index ff14555..ab0f2b1 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/operation/RebalanceOperationPerformer.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/operation/RebalanceOperationPerformer.java @@ -167,6 +167,7 @@ public class RebalanceOperationPerformer { result.setBucketTransfersCompleted(results.getTotalBucketTransfersCompleted()); result.setPrimaryTransferTimeInMilliseconds(results.getTotalPrimaryTransferTime()); result.setPrimaryTransfersCompleted(results.getTotalPrimaryTransfersCompleted()); + result.setNumOfMembers(results.getTotalMembersExecutedOn()); result.setTimeInMilliseconds(results.getTotalTime()); return result; @@ -455,7 +456,8 @@ public class RebalanceOperationPerformer { result.setPrimaryTransferTimeInMilliseconds(Long.parseLong(rstList.get(6))); result.setPrimaryTransfersCompleted(Integer.parseInt(rstList.get(7))); result.setTimeInMilliseconds(Long.parseLong(rstList.get(8))); - result.setRegionName(rstList.get(9).replace("/", "")); + result.setNumOfMembers(Integer.parseInt(rstList.get(9))); + result.setRegionName(rstList.get(10).replace("/", "")); return result; } diff --git a/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt b/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt index 8887f3a..5bb929c 100644 --- a/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt +++ b/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt @@ -318,8 +318,8 @@ org/apache/geode/internal/cache/TXCommitMessage$CommitExceptionCollectingExcepti org/apache/geode/internal/cache/TXCommitMessage$RegionCommitList,true,-8910813949027683641 org/apache/geode/internal/cache/control/InternalResourceManager$ResourceType,false,id:int org/apache/geode/internal/cache/control/MemoryThresholds$MemoryState,false -org/apache/geode/internal/cache/control/PartitionRebalanceDetailsImpl,true,5880667005758250156,bucketCreateBytes:long,bucketCreateTime:long,bucketCreatesCompleted:int,bucketRemoveBytes:long,bucketRemoveTime:long,bucketRemovesCompleted:int,bucketTransferBytes:long,bucketTransferTime:long,bucketTransfersCompleted:int,partitionMemberDetailsAfter:java/util/Set,partitionMemberDetailsBefore:java/util/Set,primaryTransferTime:long,primaryTransfersCompleted:int,time:long -org/apache/geode/internal/cache/control/RebalanceResultsImpl,false,detailSet:java/util/Set,totalBucketCreateBytes:long,totalBucketCreateTime:long,totalBucketCreatesCompleted:int,totalBucketTransferBytes:long,totalBucketTransferTime:long,totalBucketTransfersCompleted:int,totalPrimaryTransferTime:long,totalPrimaryTransfersCompleted:int,totalTime:long +org/apache/geode/internal/cache/control/PartitionRebalanceDetailsImpl,true,5880667005758250156,bucketCreateBytes:long,bucketCreateTime:long,bucketCreatesCompleted:int,bucketRemoveBytes:long,bucketRemoveTime:long,bucketRemovesCompleted:int,bucketTransferBytes:long,bucketTransferTime:long,bucketTransfersCompleted:int,numOfMembers:int,partitionMemberDetailsAfter:java/util/Set,partitionMemberDetailsBefore:java/util/Set,primaryTransferTime:long,primaryTransfersCompleted:int,time:long +org/apache/geode/internal/cache/control/RebalanceResultsImpl,false,detailSet:java/util/Set,totalBucketCreateBytes:long,totalBucketCreateTime:long,totalBucketCreatesCompleted:int,totalBucketTransferBytes:long,totalBucketTransferTime:long,totalBucketTransfersCompleted:int,totalNumOfMembers:int,totalPrimaryTransferTime:long,totalPrimaryTransfersCompleted:int,totalTime:long org/apache/geode/internal/cache/execute/BucketMovedException,true,4893171227542647452 org/apache/geode/internal/cache/execute/InternalFunctionException,true,3532698050312820319 org/apache/geode/internal/cache/execute/InternalFunctionInvocationTargetException,true,-6063507496829271815,failedIds:java/util/Set diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/operation/RebalanceOperationPerformerTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/operation/RebalanceOperationPerformerTest.java index baef301..55c5a99 100644 --- a/geode-core/src/test/java/org/apache/geode/management/internal/operation/RebalanceOperationPerformerTest.java +++ b/geode-core/src/test/java/org/apache/geode/management/internal/operation/RebalanceOperationPerformerTest.java @@ -125,7 +125,7 @@ public class RebalanceOperationPerformerTest { RebalanceOperationPerformer.FunctionExecutor functionExecutor = mock(RebalanceOperationPerformer.FunctionExecutor.class); List<Object> resultList = new ArrayList<>(); - resultList.add("0,1,2,3,4,5,6,7,8,/region1"); + resultList.add("0,1,2,3,4,5,6,7,8,9,/region1"); when(functionExecutor.execute(any(), any(), any())).thenReturn(resultList); RebalanceResult result = diff --git a/geode-docs/tools_modules/gfsh/command-pages/rebalance.html.md.erb b/geode-docs/tools_modules/gfsh/command-pages/rebalance.html.md.erb index 2cfcbd6..2394298 100644 --- a/geode-docs/tools_modules/gfsh/command-pages/rebalance.html.md.erb +++ b/geode-docs/tools_modules/gfsh/command-pages/rebalance.html.md.erb @@ -52,21 +52,19 @@ rebalance --include-region=/region3 --simulate=true **Sample Output:** ``` pre -rebalance -1. server1 host1(3467):12435:12423 -Row Rebalanced Stats | Value ---- ---------------- | ----- -1 TotalBucketCreateBytes | 0 -2 TotalBucketCreateTime | 0 -3 TotalBucketCreatesCompleted | 0 -4 TotalBucketTransferBytes | 0 -5 TotalBucketTransferTime | 0 -6 TotalBucketTransfersCompleted | 0 -7 TotalPrimaryTransferTime | 0 -8 TotalPrimaryTransfersCompleted | 0 -9 TotalTime | 56 - -Rebalance complete on host1(3467):12435:12423. + Rebalanced Stats | Value +----------------------------------------------------------------------------------------------- | ----- +Total bytes in all redundant bucket copies created during this rebalance | 0 +Total time (in milliseconds) spent creating redundant bucket copies during this rebalance | 0 +Total number of redundant copies created during this rebalance | 0 +Total bytes in buckets moved during this rebalance | 0 +Total time (in milliseconds) spent moving buckets during this rebalance | 0 +Total number of buckets moved during this rebalance | 0 +Total time (in milliseconds) spent switching the primary state of buckets during this rebalance | 0 +Total primaries transferred during this rebalance | 0 +Total time (in milliseconds) for this rebalance | 0 +Total number of members in system on which rebalance is executed | 2 + ``` diff --git a/geode-dunit/src/main/java/org/apache/geode/management/internal/cli/commands/RebalanceCommandDistributedTestBase.java b/geode-dunit/src/main/java/org/apache/geode/management/internal/cli/commands/RebalanceCommandDistributedTestBase.java index 186b515..d69619f 100644 --- a/geode-dunit/src/main/java/org/apache/geode/management/internal/cli/commands/RebalanceCommandDistributedTestBase.java +++ b/geode-dunit/src/main/java/org/apache/geode/management/internal/cli/commands/RebalanceCommandDistributedTestBase.java @@ -16,6 +16,10 @@ package org.apache.geode.management.internal.cli.commands; import static org.apache.geode.test.junit.rules.GfshCommandRule.PortType.jmxManager; +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; +import java.util.Map; import org.junit.Before; import org.junit.BeforeClass; @@ -26,8 +30,10 @@ import org.apache.geode.cache.Cache; import org.apache.geode.cache.Region; import org.apache.geode.cache.RegionFactory; import org.apache.geode.cache.RegionShortcut; +import org.apache.geode.management.internal.i18n.CliStrings; import org.apache.geode.test.dunit.rules.ClusterStartupRule; import org.apache.geode.test.dunit.rules.MemberVM; +import org.apache.geode.test.junit.assertions.TabularResultModelAssert; import org.apache.geode.test.junit.rules.GfshCommandRule; @SuppressWarnings("serial") @@ -39,7 +45,7 @@ public class RebalanceCommandDistributedTestBase { @ClassRule public static GfshCommandRule gfsh = new GfshCommandRule(); - protected static MemberVM locator, server1, server2; + protected static MemberVM locator, server1, server2, server3; @BeforeClass public static void beforeClass() { @@ -69,6 +75,63 @@ public class RebalanceCommandDistributedTestBase { gfsh.executeAndAssertThat(command).statusIsSuccess(); } + @Test + public void testRebalanceResultOutput() { + // check if DistributedRegionMXBean is available so that command will not fail + locator.waitUntilRegionIsReadyOnExactlyThisManyServers("/region-1", 2); + + String command = "rebalance"; + + TabularResultModelAssert rebalanceResult = + gfsh.executeAndAssertThat(command).statusIsSuccess().hasTableSection(); + + rebalanceResult.hasHeader().contains("Rebalanced partition regions"); + rebalanceResult.hasRow(0).contains(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATEBYTES); + rebalanceResult.hasRow(1).contains(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATETIM); + rebalanceResult.hasRow(2).contains(CliStrings.REBALANCE__MSG__TOTALBUCKETCREATESCOMPLETED); + rebalanceResult.hasRow(3).contains(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERBYTES); + rebalanceResult.hasRow(4).contains(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERTIME); + rebalanceResult.hasRow(5).contains(CliStrings.REBALANCE__MSG__TOTALBUCKETTRANSFERSCOMPLETED); + rebalanceResult.hasRow(6).contains(CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERTIME); + rebalanceResult.hasRow(7).contains(CliStrings.REBALANCE__MSG__TOTALPRIMARYTRANSFERSCOMPLETED); + rebalanceResult.hasRow(8).contains(CliStrings.REBALANCE__MSG__TOTALTIME); + rebalanceResult.hasRow(9).contains(CliStrings.REBALANCE__MSG__MEMBER_COUNT); + } + + @Test + public void testRebalanceResultOutputMemberCount() { + server3 = cluster.startServerVM(3, "localhost", locator.getPort()); + server3.invoke(() -> { + Cache cache = ClusterStartupRule.getCache(); + RegionFactory<Integer, Integer> dataRegionFactory = + cache.createRegionFactory(RegionShortcut.PARTITION); + Region region = dataRegionFactory.create("region-1"); + for (int i = 0; i < 100; i++) { + region.put("key" + (i + 400), "value" + (i + 400)); + } + }); + // check if DistributedRegionMXBean is available so that command will not fail + locator.waitUntilRegionIsReadyOnExactlyThisManyServers("/region-1", 3); + + Map<String, List<String>> listMembersResult = gfsh.executeAndAssertThat("list members") + .hasTableSection().getActual().getContent(); + assertThat(listMembersResult.get("Name").size()).isEqualTo(4); + + server3.forceDisconnect(); + + Map<String, List<String>> rebalanceResult = gfsh.executeAndAssertThat("rebalance") + .statusIsSuccess().hasTableSection().getActual().getContent(); + + server3.waitTilFullyReconnected(); + + listMembersResult = gfsh.executeAndAssertThat("list members") + .hasTableSection().getActual().getContent(); + assertThat(listMembersResult.get("Name").size()).isEqualTo(4); + assertThat(rebalanceResult.get("Rebalanced Stats").get(9)) + .isEqualTo(CliStrings.REBALANCE__MSG__MEMBER_COUNT); + assertThat(rebalanceResult.get("Value").get(9)).isEqualTo("2"); + } + private static void setUpRegions() { server1.invoke(() -> { Cache cache = ClusterStartupRule.getCache(); diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/RebalanceCommand.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/RebalanceCommand.java index fbd2508..5fcce07 100644 --- a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/RebalanceCommand.java +++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/RebalanceCommand.java @@ -101,11 +101,12 @@ public class RebalanceCommand extends GfshCommand { rsltList.add(6, String.valueOf(results.getPrimaryTransferTimeInMilliseconds())); rsltList.add(7, String.valueOf(results.getPrimaryTransfersCompleted())); rsltList.add(8, String.valueOf(results.getTimeInMilliseconds())); + rsltList.add(9, String.valueOf(results.getNumOfMembers())); String regionName = results.getRegionName(); if (!regionName.startsWith("/")) { regionName = "/" + regionName; } - rsltList.add(9, regionName); + rsltList.add(10, regionName); toCompositeResultData(result, rsltList, index, simulate, cache); } @@ -114,7 +115,7 @@ public class RebalanceCommand extends GfshCommand { private void toCompositeResultData(ResultModel result, List<String> rstlist, int index, boolean simulate, InternalCache cache) { - final int resultItemCount = 9; + final int resultItemCount = 10; if (rstlist.size() <= resultItemCount || StringUtils.isEmpty(rstlist.get(resultItemCount))) { return; @@ -170,6 +171,12 @@ public class RebalanceCommand extends GfshCommand { resultStr.append(CliStrings.REBALANCE__MSG__TOTALTIME).append(" = ").append(rstlist.get(8)) .append(newLine); + table1.accumulate("Rebalanced Stats", CliStrings.REBALANCE__MSG__MEMBER_COUNT); + table1.accumulate("Value", rstlist.get(9)); + resultStr.append(CliStrings.REBALANCE__MSG__MEMBER_COUNT).append(" = ") + .append(rstlist.get(9)) + .append(newLine); + String headerText; if (simulate) { headerText = "Simulated partition regions"; @@ -231,6 +238,7 @@ public class RebalanceCommand extends GfshCommand { // do rebalance RebalanceResult rebalanceResult = RebalanceOperationPerformer.perform(cache, operation); + // check for error if (!rebalanceResult.getSuccess()) { result.addInfo("error"); diff --git a/geode-management/src/main/java/org/apache/geode/management/internal/operation/RebalanceRegionResultImpl.java b/geode-management/src/main/java/org/apache/geode/management/internal/operation/RebalanceRegionResultImpl.java index d68948a..a05f83f 100644 --- a/geode-management/src/main/java/org/apache/geode/management/internal/operation/RebalanceRegionResultImpl.java +++ b/geode-management/src/main/java/org/apache/geode/management/internal/operation/RebalanceRegionResultImpl.java @@ -27,6 +27,7 @@ public class RebalanceRegionResultImpl implements RebalanceRegionResult { private long primaryTransferTimeInMilliseconds; private int primaryTransfersCompleted; private long timeInMilliseconds; + private int numOfMembers; @Override public String getRegionName() { @@ -119,6 +120,15 @@ public class RebalanceRegionResultImpl implements RebalanceRegionResult { } @Override + public int getNumOfMembers() { + return numOfMembers; + } + + public void setNumOfMembers(int numOfMembers) { + this.numOfMembers = numOfMembers; + } + + @Override public String toString() { return "{bucketCreateBytes=" + bucketCreateBytes + ", bucketCreateTimeInMilliseconds=" + bucketCreateTimeInMilliseconds + @@ -129,6 +139,7 @@ public class RebalanceRegionResultImpl implements RebalanceRegionResult { ", primaryTransferTimeInMilliseconds=" + primaryTransferTimeInMilliseconds + ", primaryTransfersCompleted=" + primaryTransfersCompleted + ", timeInMilliseconds=" + timeInMilliseconds + + ", numOfMembers=" + numOfMembers + ", regionName=" + regionName + '}'; } diff --git a/geode-management/src/main/java/org/apache/geode/management/runtime/RebalanceRegionResult.java b/geode-management/src/main/java/org/apache/geode/management/runtime/RebalanceRegionResult.java index fded22f..ffb6c13 100644 --- a/geode-management/src/main/java/org/apache/geode/management/runtime/RebalanceRegionResult.java +++ b/geode-management/src/main/java/org/apache/geode/management/runtime/RebalanceRegionResult.java @@ -74,4 +74,9 @@ public interface RebalanceRegionResult extends JsonSerializable, Serializable { * Returns the time, in milliseconds, that the rebalance operation took for this region. */ long getTimeInMilliseconds(); + + /** + * Returns the number of members on which rebalance operation is executed. + */ + int getNumOfMembers(); } diff --git a/geode-management/src/main/resources/org/apache/geode/internal/sanctioned-geode-management-serializables.txt b/geode-management/src/main/resources/org/apache/geode/internal/sanctioned-geode-management-serializables.txt index a3d2499..c1b51dc 100644 --- a/geode-management/src/main/resources/org/apache/geode/internal/sanctioned-geode-management-serializables.txt +++ b/geode-management/src/main/resources/org/apache/geode/internal/sanctioned-geode-management-serializables.txt @@ -21,7 +21,7 @@ org/apache/geode/management/configuration/Region$Expiration,false,action:org/apa org/apache/geode/management/configuration/Region$ExpirationAction,false org/apache/geode/management/configuration/Region$ExpirationType,false org/apache/geode/management/configuration/RegionType,false -org/apache/geode/management/internal/operation/RebalanceRegionResultImpl,false,bucketCreateBytes:long,bucketCreateTimeInMilliseconds:long,bucketCreatesCompleted:int,bucketTransferBytes:long,bucketTransferTimeInMilliseconds:long,bucketTransfersCompleted:int,primaryTransferTimeInMilliseconds:long,primaryTransfersCompleted:int,regionName:java/lang/String,timeInMilliseconds:long +org/apache/geode/management/internal/operation/RebalanceRegionResultImpl,false,bucketCreateBytes:long,bucketCreateTimeInMilliseconds:long,bucketCreatesCompleted:int,bucketTransferBytes:long,bucketTransferTimeInMilliseconds:long,bucketTransfersCompleted:int,numOfMembers:int,primaryTransferTimeInMilliseconds:long,primaryTransfersCompleted:int,regionName:java/lang/String,timeInMilliseconds:long org/apache/geode/management/internal/operation/RebalanceResultImpl,false,rebalanceSummary:java/util/List,statusMessage:java/lang/String,success:boolean org/apache/geode/management/operation/RebalanceOperation,false,excludeRegions:java/util/List,includeRegions:java/util/List,operator:java/lang/String,simulate:boolean org/apache/geode/management/runtime/CacheServerInfo,true,1,bindAddress:java/lang/String,isRunning:boolean,maxConnections:int,maxThreads:int,port:int diff --git a/geode-management/src/test/java/org/apache/geode/management/operation/RebalanceResultTest.java b/geode-management/src/test/java/org/apache/geode/management/operation/RebalanceResultTest.java index 5ce0d5d..de9f2b1 100644 --- a/geode-management/src/test/java/org/apache/geode/management/operation/RebalanceResultTest.java +++ b/geode-management/src/test/java/org/apache/geode/management/operation/RebalanceResultTest.java @@ -19,6 +19,7 @@ import static org.assertj.core.api.Assertions.assertThat; import java.util.Collections; import java.util.List; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Before; import org.junit.Test; @@ -36,6 +37,7 @@ public class RebalanceResultTest { @Before public void setUp() { mapper = GeodeJsonMapper.getMapper(); + mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); RebalanceRegionResultImpl summary = new RebalanceRegionResultImpl(); summary.setRegionName("testRegion"); List<RebalanceRegionResult> results = Collections.singletonList(summary); @@ -55,6 +57,6 @@ public class RebalanceResultTest { public void toStringRebalanceResult() { String toStr = result.toString(); assertThat(toStr).isEqualTo( - "{{bucketCreateBytes=0, bucketCreateTimeInMilliseconds=0, bucketCreatesCompleted=0, bucketTransferBytes=0, bucketTransferTimeInMilliseconds=0, bucketTransfersCompleted=0, primaryTransferTimeInMilliseconds=0, primaryTransfersCompleted=0, timeInMilliseconds=0, regionName=testRegion}}"); + "{{bucketCreateBytes=0, bucketCreateTimeInMilliseconds=0, bucketCreatesCompleted=0, bucketTransferBytes=0, bucketTransferTimeInMilliseconds=0, bucketTransfersCompleted=0, primaryTransferTimeInMilliseconds=0, primaryTransfersCompleted=0, timeInMilliseconds=0, numOfMembers=0, regionName=testRegion}}"); } }