This is an automated email from the ASF dual-hosted git repository.

boglesby pushed a commit to branch support/1.14
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/support/1.14 by this push:
     new 3b4ecd0  GEODE-10103: Retrieve full region path names (#7419)
3b4ecd0 is described below

commit 3b4ecd09a685b41e5b5d4df3927dd0e93ad87162
Author: Barry Oglesby <bogle...@users.noreply.github.com>
AuthorDate: Wed Mar 9 07:11:30 2022 -1000

    GEODE-10103: Retrieve full region path names (#7419)
    
    * GEODE-10103: Retrieve full region path names
    
    This commit modifies RebalanceOperationPerformer getMemberRegionList
    to invoke listAllRegionPaths instead of listNames.
    
    (cherry picked from commit 8610ee70d470a8b30ab067db912bd0ac345d9df0)
    (cherry picked from commit d8f5afcecab615113c4326a32e9f56e0dfaa44f6)
---
 .../rest/RebalanceManagementDunitTest.java         |   9 +-
 .../operation/RebalanceOperationPerformer.java     |   8 +-
 .../operation/RebalanceOperationPerformerTest.java |   8 +-
 .../operation/RestoreRedundancyPerformerTest.java  |   2 +-
 .../RebalanceSubregionDistributedTest.java         | 110 +++++++++++++++++++++
 .../internal/cli/commands/RebalanceCommand.java    |   4 +-
 6 files changed, 126 insertions(+), 15 deletions(-)

diff --git 
a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/RebalanceManagementDunitTest.java
 
b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/RebalanceManagementDunitTest.java
index b187a24..d292855 100644
--- 
a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/RebalanceManagementDunitTest.java
+++ 
b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/RebalanceManagementDunitTest.java
@@ -100,7 +100,8 @@ public class RebalanceManagementDunitTest {
     RebalanceResult result = endResult.getOperationResult();
     assertThat(result.getRebalanceRegionResults().size()).isEqualTo(2);
     RebalanceRegionResult firstRegionSummary = 
result.getRebalanceRegionResults().get(0);
-    assertThat(firstRegionSummary.getRegionName()).isIn("customers1", 
"customers2");
+    assertThat(firstRegionSummary.getRegionName()).isIn(SEPARATOR + 
"customers1",
+        SEPARATOR + "customers2");
   }
 
   @Test
@@ -117,7 +118,7 @@ public class RebalanceManagementDunitTest {
         .getOperationResult();
     assertThat(result.getRebalanceRegionResults().size()).isEqualTo(1);
     RebalanceRegionResult firstRegionSummary = 
result.getRebalanceRegionResults().get(0);
-    assertThat(firstRegionSummary.getRegionName()).isEqualTo("customers2");
+    assertThat(firstRegionSummary.getRegionName()).isEqualTo(SEPARATOR + 
"customers2");
     assertThat(firstRegionSummary.getBucketCreateBytes()).isEqualTo(0);
     
assertThat(firstRegionSummary.getTimeInMilliseconds()).isGreaterThanOrEqualTo(0);
 
@@ -137,7 +138,7 @@ public class RebalanceManagementDunitTest {
             .getOperationResult();
     assertThat(result.getRebalanceRegionResults().size()).isEqualTo(1);
     RebalanceRegionResult firstRegionSummary = 
result.getRebalanceRegionResults().get(0);
-    assertThat(firstRegionSummary.getRegionName()).isEqualTo("customers2");
+    assertThat(firstRegionSummary.getRegionName()).isEqualTo(SEPARATOR + 
"customers2");
     assertThat(firstRegionSummary.getBucketCreateBytes()).isEqualTo(0);
     
assertThat(firstRegionSummary.getTimeInMilliseconds()).isGreaterThanOrEqualTo(0);
   }
@@ -195,7 +196,7 @@ public class RebalanceManagementDunitTest {
         .getOperationResult();
     assertThat(result.getRebalanceRegionResults().size()).isEqualTo(1);
     RebalanceRegionResult firstRegionSummary = 
result.getRebalanceRegionResults().get(0);
-    assertThat(firstRegionSummary.getRegionName()).isEqualTo("customers1");
+    assertThat(firstRegionSummary.getRegionName()).isEqualTo(SEPARATOR + 
"customers1");
     assertThat(firstRegionSummary.getBucketCreateBytes()).isEqualTo(0);
     
assertThat(firstRegionSummary.getTimeInMilliseconds()).isGreaterThanOrEqualTo(0);
   }
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 21f2d00..26ae3dc 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
@@ -162,7 +162,7 @@ public class RebalanceOperationPerformer
 
       // translate to the return type we want
       RebalanceRegionResultImpl result = new RebalanceRegionResultImpl();
-      result.setRegionName(regionName.replace(SEPARATOR, ""));
+      result.setRegionName(regionName);
       result.setBucketCreateBytes(results.getTotalBucketCreateBytes());
       
result.setBucketCreateTimeInMilliseconds(results.getTotalBucketCreateTime());
       
result.setBucketCreatesCompleted(results.getTotalBucketCreatesCompleted());
@@ -214,7 +214,7 @@ public class RebalanceOperationPerformer
       List<String> listExcludedRegion) {
     List<MemberPRInfo> listMemberPRInfo = new ArrayList<>();
     String[] listDSRegions =
-        managementService.getDistributedSystemMXBean().listRegions();
+        managementService.getDistributedSystemMXBean().listAllRegionPaths();
     Set<DistributedMember> dsMembers = ManagementUtils.getAllMembers(cache);
 
     for (String regionName : listDSRegions) {
@@ -474,10 +474,10 @@ public class RebalanceOperationPerformer
     result.setTimeInMilliseconds(Long.parseLong(rstList.get(8)));
     if (rstList.size() < 11) {
       result.setNumOfMembers(-1);
-      result.setRegionName(rstList.get(9).replace(SEPARATOR, ""));
+      result.setRegionName(rstList.get(9));
     } else {
       result.setNumOfMembers(Integer.parseInt(rstList.get(9)));
-      result.setRegionName(rstList.get(10).replace(SEPARATOR, ""));
+      result.setRegionName(rstList.get(10));
     }
 
 
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 21ef1e4..bd0ec29 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
@@ -57,7 +57,7 @@ public class RebalanceOperationPerformerTest {
   public void 
executeRebalanceOnDSWithNoRegionsReturnsSuccessAndNoRegionMessage() {
     ManagementService managementService = mock(ManagementService.class);
     DistributedSystemMXBean distributedSystemMXBean = 
mock(DistributedSystemMXBean.class);
-    when(distributedSystemMXBean.listRegions()).thenReturn(new String[] {});
+    when(distributedSystemMXBean.listAllRegionPaths()).thenReturn(new String[] 
{});
     
when(managementService.getDistributedSystemMXBean()).thenReturn(distributedSystemMXBean);
     InternalDistributedSystem internalDistributedSystem = 
mock(InternalDistributedSystem.class);
     InternalCache cache = mock(InternalCache.class);
@@ -84,7 +84,7 @@ public class RebalanceOperationPerformerTest {
     when(managementService.getDistributedRegionMXBean(SEPARATOR + "region1"))
         .thenReturn(regionMXBean);
     DistributedSystemMXBean distributedSystemMXBean = 
mock(DistributedSystemMXBean.class);
-    when(distributedSystemMXBean.listRegions()).thenReturn(new String[] 
{"region1"});
+    when(distributedSystemMXBean.listAllRegionPaths()).thenReturn(new String[] 
{"region1"});
     
when(managementService.getDistributedSystemMXBean()).thenReturn(distributedSystemMXBean);
     InternalDistributedSystem internalDistributedSystem = 
mock(InternalDistributedSystem.class);
     InternalCache cache = mock(InternalCache.class);
@@ -116,7 +116,7 @@ public class RebalanceOperationPerformerTest {
     when(managementService.getDistributedRegionMXBean(SEPARATOR + "region1"))
         .thenReturn(regionMXBean);
     DistributedSystemMXBean distributedSystemMXBean = 
mock(DistributedSystemMXBean.class);
-    when(distributedSystemMXBean.listRegions()).thenReturn(new String[] 
{"region1"});
+    when(distributedSystemMXBean.listAllRegionPaths()).thenReturn(new String[] 
{"region1"});
     
when(managementService.getDistributedSystemMXBean()).thenReturn(distributedSystemMXBean);
     InternalDistributedSystem internalDistributedSystem = 
mock(InternalDistributedSystem.class);
     InternalCache cache = mock(InternalCache.class);
@@ -148,7 +148,7 @@ public class RebalanceOperationPerformerTest {
     assertThat(result.getRebalanceRegionResults()).isNotNull();
     assertThat(result.getRebalanceRegionResults()).hasSize(1);
     RebalanceRegionResult regionResult = 
result.getRebalanceRegionResults().get(0);
-    assertThat(regionResult.getRegionName()).isEqualTo("region1");
+    assertThat(regionResult.getRegionName()).isEqualTo(SEPARATOR + "region1");
     assertThat(regionResult.getBucketCreateBytes()).isEqualTo(0);
     assertThat(regionResult.getBucketCreateTimeInMilliseconds()).isEqualTo(1);
     assertThat(regionResult.getBucketCreatesCompleted()).isEqualTo(2);
diff --git 
a/geode-core/src/test/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformerTest.java
 
b/geode-core/src/test/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformerTest.java
index e8ca7b9..42750ff 100644
--- 
a/geode-core/src/test/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformerTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformerTest.java
@@ -79,7 +79,7 @@ public class RestoreRedundancyPerformerTest {
         .thenReturn(new String[] {DS_MEMBER_NAME_SERVER1, 
DS_MEMBER_NAME_SERVER2});
     when(server1.getName()).thenReturn(DS_MEMBER_NAME_SERVER1);
     when(server2.getName()).thenReturn(DS_MEMBER_NAME_SERVER2);
-    when(distributedSystemMXBean.listRegions()).thenReturn(new String[] 
{REGION_1});
+    when(distributedSystemMXBean.listAllRegionPaths()).thenReturn(new String[] 
{REGION_1});
     when(internalDistributedSystem.getDistributionManager())
         .thenReturn(distributionManager);
     Set<InternalDistributedMember> dsMembers = new HashSet<>();
diff --git 
a/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/RebalanceSubregionDistributedTest.java
 
b/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/RebalanceSubregionDistributedTest.java
new file mode 100644
index 0000000..e010597
--- /dev/null
+++ 
b/geode-gfsh/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/RebalanceSubregionDistributedTest.java
@@ -0,0 +1,110 @@
+/*
+ * 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.cache.Region.SEPARATOR;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.IntStream;
+
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+
+import org.apache.geode.cache.PartitionAttributesFactory;
+import org.apache.geode.cache.Region;
+import org.apache.geode.cache.RegionFactory;
+import org.apache.geode.cache.RegionShortcut;
+import org.apache.geode.management.internal.cli.result.model.ResultModel;
+import 
org.apache.geode.management.internal.cli.result.model.TabularResultModel;
+import org.apache.geode.test.dunit.rules.ClusterStartupRule;
+import org.apache.geode.test.dunit.rules.MemberVM;
+import org.apache.geode.test.junit.rules.GfshCommandRule;
+import org.apache.geode.test.junit.rules.serializable.SerializableTestName;
+
+public class RebalanceSubregionDistributedTest implements Serializable {
+
+  @Rule
+  public ClusterStartupRule cluster = new ClusterStartupRule();
+
+  @ClassRule
+  public static GfshCommandRule gfsh = new GfshCommandRule();
+
+  @Rule
+  public SerializableTestName testName = new SerializableTestName();
+
+  private static final String ROOT_REGION_NAME = "root";
+
+  @Test
+  public void testRebalanceSubregion() throws Exception {
+    // Start locator
+    MemberVM locator = cluster.startLocatorVM(0);
+
+    // Start 2 servers
+    MemberVM server1 = cluster.startServerVM(1, locator.getPort());
+    MemberVM server2 = cluster.startServerVM(2, locator.getPort());
+
+    // Create region in server1
+    String regionName = testName.getMethodName();
+    server1.invoke(() -> createSubregion(regionName));
+
+    // Do puts in server1
+    server1.invoke(() -> doPuts(regionName));
+
+    // Create region in server2
+    server2.invoke(() -> createSubregion(regionName));
+
+    // Make sure the locator has the MBean
+    locator.waitUntilRegionIsReadyOnExactlyThisManyServers(
+        SEPARATOR + ROOT_REGION_NAME + SEPARATOR + regionName, 2);
+
+    // Connect gfsh to locator
+    gfsh.connectAndVerify(locator);
+
+    // Execute rebalance and verify it is successful
+    gfsh.executeAndAssertThat("rebalance").statusIsSuccess();
+
+    // Verify the results
+    ResultModel result = gfsh.getCommandResult().getResultData();
+    List<TabularResultModel> tableSections = result.getTableSections();
+    assertThat(tableSections.size()).isEqualTo(1);
+    assertThat(tableSections.get(0).getHeader()
+        .contains(SEPARATOR + ROOT_REGION_NAME + SEPARATOR + 
regionName)).isTrue();
+  }
+
+  private void createSubregion(String regionName) {
+    // Create the root region
+    RegionFactory<Object, Object> rootRegionFactory =
+        Objects.requireNonNull(ClusterStartupRule.getCache())
+            .createRegionFactory(RegionShortcut.REPLICATE);
+    Region<Object, Object> rootRegion = 
rootRegionFactory.create(ROOT_REGION_NAME);
+
+    // Create the subregion
+    RegionFactory<Integer, Integer> partitionedRegionFactory =
+        Objects.requireNonNull(ClusterStartupRule.getCache())
+            .createRegionFactory(RegionShortcut.PARTITION);
+    partitionedRegionFactory.setPartitionAttributes(new 
PartitionAttributesFactory().create());
+    partitionedRegionFactory.createSubregion(rootRegion, regionName);
+  }
+
+  private void doPuts(String regionName) {
+    Region<Integer, Integer> subregion = 
Objects.requireNonNull(ClusterStartupRule.getCache())
+        .getRegion(SEPARATOR + ROOT_REGION_NAME + SEPARATOR + regionName);
+    IntStream.range(0, 112).forEach(i -> subregion.put(i, i));
+  }
+}
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 c1dd8c7..442d43c 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
@@ -186,9 +186,9 @@ public class RebalanceCommand extends GfshCommand {
 
     String headerText;
     if (simulate) {
-      headerText = "Simulated partition regions";
+      headerText = "Simulated rebalance of partitioned region";
     } else {
-      headerText = "Rebalanced partition regions";
+      headerText = "Rebalanced partitioned region";
     }
     for (int i = resultItemCount; i < rstlist.size(); i++) {
       headerText = headerText + " " + rstlist.get(i);

Reply via email to