Repository: stratos Updated Branches: refs/heads/4.0.0-grouping 07eeac30a -> 0626aefea
changing the Startup Order to be based on aliases in Groups Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/b3ac2736 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/b3ac2736 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/b3ac2736 Branch: refs/heads/4.0.0-grouping Commit: b3ac27364fdb8e31baa00e5c32830dda17afaf04 Parents: 5aac10e Author: Isuru Haththotuwa <[email protected]> Authored: Thu Oct 2 17:46:01 2014 +0530 Committer: Isuru Haththotuwa <[email protected]> Committed: Thu Oct 2 17:46:01 2014 +0530 ---------------------------------------------------------------------- .../parser/DefaultApplicationParser.java | 31 ++------ .../application/parser/ParserUtils.java | 82 +++++++++++++++++++- .../messaging/domain/topology/Application.java | 4 +- 3 files changed, 89 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/b3ac2736/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/DefaultApplicationParser.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/DefaultApplicationParser.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/DefaultApplicationParser.java index 16c66a5..27c4126 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/DefaultApplicationParser.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/DefaultApplicationParser.java @@ -250,17 +250,6 @@ public class DefaultApplicationParser implements ApplicationParser { log.info("Application with id " + appCtxt.getApplicationId() + " parsed successfully"); return application; - - //ApplicationDataHolder applicationDataHolder = new ApplicationDataHolder(); - //assert clusterDataHolder != null; - //applicationDataHolder.setClusters(clusterDataHolder.getApplicationClusterContexts()); - //applicationDataHolder.setPayloadDataHolders(clusterDataHolder.getPayloadDataHolders()); - //applicationDataHolder.setApplication(application); - - // persist the information in FasterLookUpDataHolder - //persist(dataHolder); - - //return applicationDataHolder; } private Map<String, Group> parseGroups (String appId, int tenantId, String key, List<GroupContext> groupCtxts, @@ -333,7 +322,7 @@ public class DefaultApplicationParser implements ApplicationParser { group.setDeploymentPolicy(groupCtxt.getDeploymentPolicy()); DependencyOrder dependencyOrder = new DependencyOrder(); // create the Dependency Ordering - Set<StartupOrder> startupOrders = getStartupOrderForGroup(groupCtxt.getName()); + Set<StartupOrder> startupOrders = getStartupOrderForGroup(groupCtxt); if (startupOrders != null) { dependencyOrder.setStartupOrders(startupOrders); } @@ -347,14 +336,6 @@ public class DefaultApplicationParser implements ApplicationParser { clusterDataMap = parseLeafLevelSubscriptions(appId, tenantId, key, groupCtxt.getName(), Arrays.asList(groupCtxt.getSubscribableContexts()), subscribableInfoCtxts); group.setClusterData(clusterDataMap); - //clusters.addAll(clusterDataHolderOfGroup.getApplicationClusterContexts()); -// if (clusterDataHolder == null) { -// clusterDataHolder = clusterDataHolderOfGroup; -// } else { -// clusterDataHolder.getApplicationClusterContexts().addAll(clusterDataHolderOfGroup.getApplicationClusterContexts()); -// clusterDataHolder.getClusterIdMap().putAll(clusterDataHolderOfGroup.getClusterIdMap()); -// //clusterDataHolder.getPayloadDataHolders().addAll(clusterDataHolderOfGroup.getPayloadDataHolders()); -// } } // get nested groups @@ -376,18 +357,20 @@ public class DefaultApplicationParser implements ApplicationParser { return group; } - private Set<StartupOrder> getStartupOrderForGroup(String serviceGroupName) throws ApplicationDefinitionException { + private Set<StartupOrder> getStartupOrderForGroup(GroupContext groupContext) throws ApplicationDefinitionException { - ServiceGroup serviceGroup = FasterLookUpDataHolder.getInstance().getServiceGroup(serviceGroupName); + ServiceGroup serviceGroup = FasterLookUpDataHolder.getInstance().getServiceGroup(groupContext.getName()); if (serviceGroup == null) { - handleError("Service Group Definition not found for name " + serviceGroupName); + handleError("Service Group Definition not found for name " + groupContext.getName()); } assert serviceGroup != null; if (serviceGroup.getDependencies() != null) { if (serviceGroup.getDependencies().getStartupOrder() != null) { - return ParserUtils.convert(serviceGroup.getDependencies().getStartupOrder()); + + // convert to Startup Order with aliases + return ParserUtils.convert(serviceGroup.getDependencies().getStartupOrder(), groupContext); } } http://git-wip-us.apache.org/repos/asf/stratos/blob/b3ac2736/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/ParserUtils.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/ParserUtils.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/ParserUtils.java index 7ae9010..f47970c 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/ParserUtils.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/ParserUtils.java @@ -19,6 +19,8 @@ package org.apache.stratos.cloud.controller.application.parser; +import org.apache.stratos.cloud.controller.pojo.application.GroupContext; +import org.apache.stratos.cloud.controller.pojo.application.SubscribableContext; import org.apache.stratos.messaging.domain.topology.StartupOrder; import java.util.HashSet; @@ -26,7 +28,7 @@ import java.util.Set; public class ParserUtils { - public static Set<StartupOrder> convert (org.apache.stratos.cloud.controller.pojo.StartupOrder [] startupOrderArr) { + public static Set<StartupOrder> convert (org.apache.stratos.cloud.controller.pojo.StartupOrder [] startupOrderArr, GroupContext groupContext) { Set<StartupOrder> startupOrders = new HashSet<StartupOrder>(); @@ -34,10 +36,86 @@ public class ParserUtils { return startupOrders; } + for (int i = 0; i < startupOrderArr.length ; i++) { - startupOrders.add(new StartupOrder(startupOrderArr[i].getStart(), startupOrderArr[i].getAfter())); + // convert all Startup Orders to aliases-based + // start + String startAlias; + if (startupOrderArr[i].getStart().startsWith("cartridge.")) { + String cartridgeType = startupOrderArr[i].getStart().substring(10); + startAlias = getAliasForServiceType(cartridgeType, groupContext); + if (startAlias == null) { + throw new RuntimeException("Unable convert Startup Order to alias-based; " + + "cannot find the matching alias for Service type " + cartridgeType); + } + + startAlias = "cartridge.".concat(startAlias); + + } else if (startupOrderArr[i].getStart().startsWith("group.")) { + String groupName = startupOrderArr[i].getStart().substring(6); + startAlias = getAliasForGroupName(groupName, groupContext); + if (startAlias == null) { + throw new RuntimeException("Unable convert Startup Order to alias-based; " + + "cannot find the matching alias for Group name " + groupName); + } + + startAlias = "group.".concat(startAlias); + + } else { + throw new RuntimeException("Incorrect Startup Order specified"); + } + + // after + String afterAlias; + if (startupOrderArr[i].getAfter().startsWith("cartridge.")) { + String cartridgeType = startupOrderArr[i].getAfter().substring(10); + afterAlias = getAliasForServiceType(cartridgeType, groupContext); + if (afterAlias == null) { + throw new RuntimeException("Unable convert Startup Order to alias-based; " + + "cannot find the matching alias for Service type " + cartridgeType); + } + + afterAlias = "cartridge.".concat(afterAlias); + + } else if (startupOrderArr[i].getAfter().startsWith("group.")) { + String groupName = startupOrderArr[i].getAfter().substring(6); + afterAlias = getAliasForGroupName(groupName, groupContext); + if (afterAlias == null) { + throw new RuntimeException("Unable convert Startup Order to alias-based; " + + "cannot find the matching alias for Group name " + groupName); + } + + afterAlias = "group.".concat(afterAlias); + + } else { + throw new RuntimeException("Incorrect Startup Order specified"); + } + + startupOrders.add(new StartupOrder(startAlias, afterAlias)); } return startupOrders; } + + private static String getAliasForGroupName (String groupName, GroupContext groupContext) { + + for (GroupContext groupCtxt : groupContext.getGroupContexts()) { + if (groupName.equals(groupCtxt.getName())) { + return groupCtxt.getAlias(); + } + } + + return null; + } + + private static String getAliasForServiceType (String serviceType, GroupContext groupContext) { + + for (SubscribableContext subCtxt : groupContext.getSubscribableContexts()) { + if (serviceType.equals(subCtxt.getType())) { + return subCtxt.getAlias(); + } + } + + return null; + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/b3ac2736/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Application.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Application.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Application.java index ec9c1fd..a2e5732 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Application.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Application.java @@ -59,8 +59,8 @@ public class Application implements ParentBehavior { } @Override - public void setGroups(Map<String, Group> groupNameToGroup) { - aliasToGroupMap.putAll(groupNameToGroup); + public void setGroups(Map<String, Group> aliasToGroup) { + aliasToGroupMap.putAll(aliasToGroup); } @Override
