This is an automated email from the ASF dual-hosted git repository. jchen21 pushed a commit to branch feature/GEODE-6273 in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/feature/GEODE-6273 by this push: new 742a9e5 Added Partitioned group test to CreateMappingDUnitTest 742a9e5 is described below commit 742a9e5afafe7d80056711f3ec689b0cf8f9c205 Author: Ben Ross <br...@pivotal.io> AuthorDate: Wed Jan 23 12:15:43 2019 -0800 Added Partitioned group test to CreateMappingDUnitTest - Added additional servers to CreateMappingDUnitTest - Removed unnessessary code from CliUtil, GfshCommand, and CommandExecutor Co-authored-by: Ben Ross <br...@pivotal.io> Co-authored-by: Jianxia Chen <jc...@pivotal.io> --- .../cli/CreateMappingCommandDUnitTest.java | 118 +++++++++++++++++---- .../jdbc/internal/cli/CreateMappingCommand.java | 4 +- .../apache/geode/management/cli/GfshCommand.java | 4 - .../geode/management/internal/cli/CliUtil.java | 36 ++++--- .../internal/cli/remote/CommandExecutor.java | 7 +- 5 files changed, 123 insertions(+), 46 deletions(-) diff --git a/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommandDUnitTest.java b/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommandDUnitTest.java index 1cee130..25f25c2 100644 --- a/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommandDUnitTest.java +++ b/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommandDUnitTest.java @@ -60,8 +60,10 @@ import org.apache.geode.test.junit.rules.serializable.SerializableTestName; public class CreateMappingCommandDUnitTest { private static final String TEST_REGION = "testRegion"; + private static final String GROUP1_REGION = "group1Region"; + private static final String GROUP2_REGION = "group2Region"; private static final String TEST_GROUP1 = "testGroup1"; - // private static final String TEST_GROUP2 = "testGroup2"; + private static final String TEST_GROUP2 = "testGroup2"; @Rule public transient GfshCommandRule gfsh = new GfshCommandRule(); @@ -75,15 +77,16 @@ public class CreateMappingCommandDUnitTest { private MemberVM locator; private MemberVM server1; private MemberVM server2; + private MemberVM server3; + private MemberVM server4; @Before public void before() throws Exception { locator = startupRule.startLocatorVM(0); server1 = startupRule.startServerVM(1, locator.getPort()); server2 = startupRule.startServerVM(2, TEST_GROUP1, locator.getPort()); - // TODO: - // create a TEST_GROUP2 to contain server3 - // create a TEST_GROUP3 to contain both server2 and server3 + server3 = startupRule.startServerVM(3, TEST_GROUP2, locator.getPort()); + server4 = startupRule.startServerVM(4, TEST_GROUP1 + "," + TEST_GROUP2, locator.getPort()); gfsh.connectAndVerify(locator); @@ -94,6 +97,7 @@ public class CreateMappingCommandDUnitTest { startupRule.stop(1); startupRule.stop(2); startupRule.stop(3); + startupRule.stop(4); gfsh.disconnect(); } @@ -110,9 +114,9 @@ public class CreateMappingCommandDUnitTest { } // TODO: might need a parameter for server group names - private void setupGroupReplicate(String regionName) { + private void setupGroupReplicate(String regionName, String groupNames) { gfsh.executeAndAssertThat( - "create region --name=" + regionName + " --type=REPLICATE --groups=" + TEST_GROUP1) + "create region --name=" + regionName + " --type=REPLICATE --groups=" + groupNames) .statusIsSuccess(); } @@ -121,6 +125,11 @@ public class CreateMappingCommandDUnitTest { .statusIsSuccess(); } + private void setupGroupPartition(String regionName, String groupNames) { + gfsh.executeAndAssertThat("create region --name=" + regionName + " --type=PARTITION --groups=" + groupNames) + .statusIsSuccess(); + } + private void setupAsyncEventQueue(String regionName) { gfsh.executeAndAssertThat( "create async-event-queue --id=" @@ -209,9 +218,9 @@ public class CreateMappingCommandDUnitTest { } @Test - @Parameters({TEST_REGION, "/" + TEST_REGION}) - public void createMappingUpdatesServiceAndClusterConfigForServerGroup(String regionName) { - setupGroupReplicate(regionName); + @Parameters({GROUP1_REGION, "/" + GROUP1_REGION}) + public void createMappingReplicatedUpdatesServiceAndClusterConfigForServerGroup(String regionName) { + setupGroupReplicate(regionName, TEST_GROUP1); CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING); csb.addOption(REGION_NAME, regionName); csb.addOption(DATA_SOURCE_NAME, "connection"); @@ -224,7 +233,7 @@ public class CreateMappingCommandDUnitTest { gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess(); - // TEST_GROUP1 only contains server2 + // TEST_GROUP1 only contains server2 and server 4 server2.invoke(() -> { RegionMapping mapping = getRegionMappingFromService(regionName); assertThat(mapping.getDataSourceName()).isEqualTo("connection"); @@ -237,17 +246,26 @@ public class CreateMappingCommandDUnitTest { validateAsyncEventQueueCreatedOnServer(regionName, false); }); + server4.invoke(() -> { + RegionMapping mapping = getRegionMappingFromService(regionName); + assertThat(mapping.getDataSourceName()).isEqualTo("connection"); + assertThat(mapping.getTableName()).isEqualTo("myTable"); + assertThat(mapping.getPdxName()).isEqualTo("myPdxClass"); + assertThat(mapping.getIds()).isEqualTo("myId"); + assertThat(mapping.getCatalog()).isEqualTo("myCatalog"); + assertThat(mapping.getSchema()).isEqualTo("mySchema"); + validateRegionAlteredOnServer(regionName, false); + validateAsyncEventQueueCreatedOnServer(regionName, false); + }); + server1.invoke(() -> { RegionMapping mapping = getRegionMappingFromService(regionName); assertThat(mapping).isNull(); - // assertThat(mapping.getDataSourceName()).isEqualTo("connection"); - // assertThat(mapping.getTableName()).isEqualTo("myTable"); - // assertThat(mapping.getPdxName()).isEqualTo("myPdxClass"); - // assertThat(mapping.getIds()).isEqualTo("myId"); - // assertThat(mapping.getCatalog()).isEqualTo("myCatalog"); - // assertThat(mapping.getSchema()).isEqualTo("mySchema"); - // validateRegionAlteredOnServer(regionName, false); - // validateAsyncEventQueueCreatedOnServer(regionName, false); + }); + + server3.invoke(() -> { + RegionMapping mapping = getRegionMappingFromService(regionName); + assertThat(mapping).isNull(); }); locator.invoke(() -> { @@ -264,6 +282,70 @@ public class CreateMappingCommandDUnitTest { } @Test + @Parameters({GROUP2_REGION, "/" + GROUP2_REGION}) + public void createMappingParitionedUpdatesServiceAndClusterConfigForServerGroup(String regionName) { + setupGroupPartition(regionName, TEST_GROUP2); + CommandStringBuilder csb = new CommandStringBuilder(CREATE_MAPPING); + csb.addOption(REGION_NAME, regionName); + csb.addOption(DATA_SOURCE_NAME, "connection"); + csb.addOption(TABLE_NAME, "myTable"); + csb.addOption(PDX_NAME, "myPdxClass"); + csb.addOption(ID_NAME, "myId"); + csb.addOption(CATALOG_NAME, "myCatalog"); + csb.addOption(SCHEMA_NAME, "mySchema"); + csb.addOption(GROUP_NAME, TEST_GROUP2); + + gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess(); + + // TEST_GROUP2 only contains server3 and server4 + server3.invoke(() -> { + RegionMapping mapping = getRegionMappingFromService(regionName); + assertThat(mapping.getDataSourceName()).isEqualTo("connection"); + assertThat(mapping.getTableName()).isEqualTo("myTable"); + assertThat(mapping.getPdxName()).isEqualTo("myPdxClass"); + assertThat(mapping.getIds()).isEqualTo("myId"); + assertThat(mapping.getCatalog()).isEqualTo("myCatalog"); + assertThat(mapping.getSchema()).isEqualTo("mySchema"); + validateRegionAlteredOnServer(regionName, false); + validateAsyncEventQueueCreatedOnServer(regionName, true); + }); + + server4.invoke(() -> { + RegionMapping mapping = getRegionMappingFromService(regionName); + assertThat(mapping.getDataSourceName()).isEqualTo("connection"); + assertThat(mapping.getTableName()).isEqualTo("myTable"); + assertThat(mapping.getPdxName()).isEqualTo("myPdxClass"); + assertThat(mapping.getIds()).isEqualTo("myId"); + assertThat(mapping.getCatalog()).isEqualTo("myCatalog"); + assertThat(mapping.getSchema()).isEqualTo("mySchema"); + validateRegionAlteredOnServer(regionName, false); + validateAsyncEventQueueCreatedOnServer(regionName, true); + }); + + server1.invoke(() -> { + RegionMapping mapping = getRegionMappingFromService(regionName); + assertThat(mapping).isNull(); + }); + + server2.invoke(() -> { + RegionMapping mapping = getRegionMappingFromService(regionName); + assertThat(mapping).isNull(); + }); + + locator.invoke(() -> { + RegionMapping regionMapping = getRegionMappingFromClusterConfig(regionName, TEST_GROUP2); + assertThat(regionMapping.getDataSourceName()).isEqualTo("connection"); + assertThat(regionMapping.getTableName()).isEqualTo("myTable"); + assertThat(regionMapping.getPdxName()).isEqualTo("myPdxClass"); + assertThat(regionMapping.getIds()).isEqualTo("myId"); + assertThat(regionMapping.getCatalog()).isEqualTo("myCatalog"); + assertThat(regionMapping.getSchema()).isEqualTo("mySchema"); + validateRegionAlteredInClusterConfig(regionName, TEST_GROUP2, false); + validateAsyncEventQueueCreatedInClusterConfig(regionName, TEST_GROUP2, true); + }); + } + + @Test @Parameters({TEST_REGION, "/" + TEST_REGION}) public void createMappingUpdatesServiceAndClusterConfig(String regionName) { setupReplicate(regionName); diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommand.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommand.java index a0f2c6c..7ed9490 100644 --- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommand.java +++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/cli/CreateMappingCommand.java @@ -112,9 +112,7 @@ public class CreateMappingCommand extends SingleGfshCommand { if (regionName.startsWith("/")) { regionName = regionName.substring(1); } - // group1,group2 => [group1, group2] - // input - // Set<DistributedMember> targetMembers = findMembersForRegion(regionName, groups); + Set<DistributedMember> targetMembers = findMembers(groups, null); RegionMapping mapping = new RegionMapping(regionName, pdxName, table, dataSourceName, id, catalog, schema, diff --git a/geode-core/src/main/java/org/apache/geode/management/cli/GfshCommand.java b/geode-core/src/main/java/org/apache/geode/management/cli/GfshCommand.java index d82f2bf..09b5471 100644 --- a/geode-core/src/main/java/org/apache/geode/management/cli/GfshCommand.java +++ b/geode-core/src/main/java/org/apache/geode/management/cli/GfshCommand.java @@ -185,10 +185,6 @@ public abstract class GfshCommand implements CommandMarker { return CliUtil.getRegionAssociatedMembers(regionPath, cache, true); } - public Set<DistributedMember> findMembersForRegion(String regionPath, String serverGroup) { - return CliUtil.getRegionAssociatedMembers(regionPath, cache, true, serverGroup); - } - public Set<DistributedMember> findAnyMembersForRegion(String regionPath) { return CliUtil.getRegionAssociatedMembers(regionPath, cache, false); } diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/CliUtil.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/CliUtil.java index 7e8d15a..6f1dd9c 100755 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/CliUtil.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/CliUtil.java @@ -49,6 +49,7 @@ import org.apache.geode.cache.execute.Function; import org.apache.geode.cache.execute.FunctionService; import org.apache.geode.cache.execute.ResultCollector; import org.apache.geode.distributed.DistributedMember; +import org.apache.geode.distributed.internal.DistributionManager; import org.apache.geode.distributed.internal.InternalDistributedSystem; import org.apache.geode.distributed.internal.membership.InternalDistributedMember; import org.apache.geode.internal.ClassPathLoader; @@ -112,15 +113,7 @@ public class CliUtil { * @return a Set of DistributedMember for members that have the specified <code>region</code>. */ public static Set<DistributedMember> getRegionAssociatedMembers(String region, - final InternalCache cache, - boolean returnAll) { - return getRegionAssociatedMembers(region, cache, returnAll, null); - } - - public static Set<DistributedMember> getRegionAssociatedMembers(String region, - final InternalCache cache, - boolean returnAll, - String serverGroup) { + final InternalCache cache, boolean returnAll) { if (region == null || region.isEmpty()) { return Collections.emptySet(); } @@ -142,9 +135,9 @@ public class CliUtil { allClusterMembers.add(cache.getDistributedSystem().getDistributedMember()); for (DistributedMember member : allClusterMembers) { - List<String> regionAssociatedMemberNamesSet = Arrays.asList(regionAssociatedMemberNames); + List<String> regionAssociatedMemberNamesList = Arrays.asList(regionAssociatedMemberNames); String name = MBeanJMXAdapter.getMemberNameOrUniqueId(member); - if (regionAssociatedMemberNamesSet.contains(name)) { + if (regionAssociatedMemberNamesList.contains(name)) { matchedMembers.add(member); if (!returnAll) { return matchedMembers; @@ -160,8 +153,7 @@ public class CliUtil { * @param returnAll if true, returns all matching members, otherwise, returns only one. */ public static Set<DistributedMember> getQueryRegionsAssociatedMembers(Set<String> regions, - final InternalCache cache, - boolean returnAll) { + final InternalCache cache, boolean returnAll) { Set<DistributedMember> results = regions.stream() .map(region -> getRegionAssociatedMembers(region, cache, true)).reduce((s1, s2) -> { s1.retainAll(s2); @@ -255,8 +247,7 @@ public class CliUtil { * groups or members. */ public static Set<DistributedMember> findMembersIncludingLocators(String[] groups, - String[] members, - InternalCache cache) { + String[] members, InternalCache cache) { Set<DistributedMember> allMembers = getAllMembers(cache); return findMembers(allMembers, groups, members); } @@ -272,6 +263,18 @@ public class CliUtil { return findMembers(allNormalMembers, groups, members); } + /** + * Finds all Servers which belong to the given arrays of groups or members. Does not include + * locators. + */ + public static Set<DistributedMember> findMembers(String[] groups, String[] members, + DistributionManager distributionManager) { + Set<DistributedMember> allNormalMembers = new HashSet<DistributedMember>( + distributionManager.getNormalDistributionManagerIds()); + + return findMembers(allNormalMembers, groups, members); + } + private static Set<DistributedMember> findMembers(Set<DistributedMember> membersToConsider, String[] groups, String[] members) { if (groups == null) { @@ -563,9 +566,8 @@ public class CliUtil { } catch (IOException | InterruptedException e) { Gfsh.printlnErr(e.getMessage()); } finally { - if (file != null) { + if (file != null) file.delete(); - } } } diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/CommandExecutor.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/CommandExecutor.java index de056ad..d9e223b 100755 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/CommandExecutor.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/CommandExecutor.java @@ -145,12 +145,11 @@ public class CommandExecutor { } List<String> groupsToUpdate; - String groupsInput = parseResult.getParamValueAsString("group"); - + String groupInput = parseResult.getParamValueAsString("group"); TabularResultModel table = null; - if (!StringUtils.isBlank(groupsInput)) { - groupsToUpdate = Arrays.asList(groupsInput.split(",")); + if (!StringUtils.isBlank(groupInput)) { + groupsToUpdate = Arrays.asList(groupInput.split(",")); } else if (gfshCommand instanceof UpdateAllConfigurationGroupsMarker) { groupsToUpdate = ccService.getGroups().stream().collect(Collectors.toList()); table = resultModel.addTable(GROUP_STATUS_SECTION);