Repository: stratos Updated Branches: refs/heads/4.0.0-grouping f8ca4b278 -> 66042d444
adding a method to get all cluster info. in an App recursively Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/787b554e Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/787b554e Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/787b554e Branch: refs/heads/4.0.0-grouping Commit: 787b554ee993045b079d9c59aedd0522f1c23a13 Parents: f1ccd9b Author: Isuru Haththotuwa <[email protected]> Authored: Thu Sep 25 11:50:22 2014 +0530 Committer: Isuru Haththotuwa <[email protected]> Committed: Thu Sep 25 11:50:22 2014 +0530 ---------------------------------------------------------------------- .../impl/CloudControllerServiceImpl.java | 37 ++++++++++++++++++-- .../controller/topology/TopologyBuilder.java | 12 +++++-- .../messaging/domain/topology/Application.java | 29 +++++++++++++++ 3 files changed, 73 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/787b554e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java index 6f72e63..5b04df2 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java @@ -35,6 +35,7 @@ import org.apache.stratos.cloud.controller.interfaces.Iaas; import org.apache.stratos.cloud.controller.persist.Deserializer; import org.apache.stratos.cloud.controller.pojo.*; import org.apache.stratos.cloud.controller.pojo.application.ApplicationContext; +import org.apache.stratos.cloud.controller.pojo.payload.MetaDataHolder; import org.apache.stratos.cloud.controller.publisher.CartridgeInstanceDataPublisher; import org.apache.stratos.cloud.controller.registry.RegistryManager; import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder; @@ -48,6 +49,11 @@ import org.apache.stratos.messaging.domain.topology.ConfigCompositeApplication; import org.apache.stratos.messaging.domain.topology.Member; import org.apache.stratos.messaging.domain.topology.MemberStatus; import org.apache.stratos.messaging.util.Constants; +import org.apache.stratos.metadata.client.DefaultMetaDataServiceClient; +import org.apache.stratos.metadata.client.MetaDataServiceClient; +import org.apache.stratos.metadata.client.config.MetaDataClientConfig; +import org.apache.stratos.metadata.client.exception.MetaDataServiceClientExeption; +import org.apache.stratos.metadata.client.exception.RestClientException; import org.jclouds.compute.ComputeService; import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.NodeMetadataBuilder; @@ -1436,8 +1442,35 @@ public class CloudControllerServiceImpl implements CloudControllerService { applicationClusterContext.getHostName(), applicationClusterContext.isLbCluster())); } - //TODO: publish data to meta data service - applicationParser.getPayloadData(); + //TODO: improve +// Set<MetaDataHolder> medaDataHolders = applicationParser.getPayloadData(); +// if (medaDataHolders != null) { +// +// MetaDataServiceClient metaDataServiceClient; +// try { +// +// metaDataServiceClient = new DefaultMetaDataServiceClient(MetaDataClientConfig.getInstance().getMetaDataServiceBaseUrl()); +// metaDataServiceClient.initialize(); +// +// } catch (RestClientException e) { +// log.error("Error creating instance of Metadata Service Client", e); +// throw new ApplicationDefinitionException(e); +// } +// +// for (MetaDataHolder metaDataHolder : medaDataHolders) { +// for (Map.Entry<Object, Object> metaDataEntry : metaDataHolder.getProperties().entrySet()) { +// try { +// metaDataServiceClient.addPropertyToCluster(metaDataHolder.getAppId(), metaDataHolder.getClusterId(), +// (String)metaDataEntry.getKey(), (String)metaDataEntry.getValue()); +// +// } catch (MetaDataServiceClientExeption e) { +// log.error("Error publishing data to Metadata Service", e); +// throw new ApplicationDefinitionException(e); +// } +// } +// } +// } + TopologyBuilder.handleApplicationDeployed(application, applicationParser.getApplicationClusterContexts(), applicationParser.getPayloadData()); http://git-wip-us.apache.org/repos/asf/stratos/blob/787b554e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java index 25dc027..28de73e 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java @@ -672,10 +672,16 @@ public class TopologyBuilder { } else { Application application = topology.getApplication(applicationId); // remove clusters - for (Map.Entry<String, ClusterDataHolder> clusterDataHolderEntry : application.getClusterDataMap().entrySet()) { - Service service = topology.getService(clusterDataHolderEntry.getValue().getServiceType()); + for (ClusterDataHolder clusterDataHolder : application.getClusterDataRecursively()) { + Service service = topology.getService(clusterDataHolder.getServiceType()); if (service != null) { - service.removeCluster(clusterDataHolderEntry.getValue().getClusterId()); + service.removeCluster(clusterDataHolder.getClusterId()); + if (log.isDebugEnabled()) { + log.debug("Removed cluster with id " + clusterDataHolder.getClusterId()); + } + } else { + log.warn("Unable to remove cluster with cluster id: " + clusterDataHolder.getClusterId() + " from Topology, " + + " associated Service [ " + clusterDataHolder.getServiceType() + " ] npt found"); } } http://git-wip-us.apache.org/repos/asf/stratos/blob/787b554e/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 cc7c588..ec9c1fd 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 @@ -78,6 +78,35 @@ public class Application implements ParentBehavior { return this.aliasToClusterDataMap; } + public Set<ClusterDataHolder> getClusterDataRecursively () { + + Set<ClusterDataHolder> appClusterData = new HashSet<ClusterDataHolder>(); + + // get top level Cluster Data + if (this.aliasToClusterDataMap != null && !this.aliasToClusterDataMap.isEmpty()) { + appClusterData.addAll(this.aliasToClusterDataMap.values()); + } + + // find other nested Cluster Data (in the Groups) + if (getGroups() != null) { + getClusterData(appClusterData, getGroups()); + } + + return appClusterData; + } + + private void getClusterData (Set<ClusterDataHolder> clusterData, Collection<Group> groups) { + + for (Group group : groups) { + if (group.getClusterDataMap() != null && !group.getClusterDataMap().isEmpty()) { + clusterData.addAll(group.getClusterDataMap().values()); + if (group.getGroups() != null) { + getClusterData(clusterData, group.getGroups()); + } + } + } + } + @Override public Group getGroupRecursively(String groupAlias) {
