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}}");
   }
 }

Reply via email to