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