Repository: stratos Updated Branches: refs/heads/master 140dbe57e -> f2f2f0c68
storing InstanceContext against instance id Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/f2f2f0c6 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/f2f2f0c6 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/f2f2f0c6 Branch: refs/heads/master Commit: f2f2f0c6804b0cb737d42cd2f2df5b901ebf8602 Parents: 140dbe5 Author: Isuru Haththotuwa <[email protected]> Authored: Fri Nov 21 12:28:58 2014 +0530 Committer: Isuru Haththotuwa <[email protected]> Committed: Fri Nov 21 12:28:58 2014 +0530 ---------------------------------------------------------------------- .../domain/applications/ParentComponent.java | 96 +++++++------------- .../instance/context/InstanceContext.java | 19 ++++ 2 files changed, 53 insertions(+), 62 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/f2f2f0c6/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java index 8e18bad..ce3dd56 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ParentComponent.java @@ -34,17 +34,16 @@ public abstract class ParentComponent implements Serializable { // Dependency Order private DependencyOrder dependencyOrder; // Group Map, key = Group.alias - private Map<String, Group> aliasToGroupMap; + private final Map<String, Group> aliasToGroupMap; // Cluster Id map, key = subscription alias for the cartridge type - private Map<String, ClusterDataHolder> aliasToClusterDataMap; - // Group/Cluster Instance Context map - private Map<AliasAndInstanceId, InstanceContext> aliasAndInstanceIdToInstanceContextMap; + private final Map<String, ClusterDataHolder> aliasToClusterDataMap; + // Group/Cluster Instance Context map, key = instance id + private final Map<String, Set<InstanceContext>> instanceIdToInstanceContextMap; public ParentComponent () { aliasToGroupMap = new HashMap<String, Group>(); aliasToClusterDataMap = new HashMap<String, ClusterDataHolder>(); - aliasAndInstanceIdToInstanceContextMap = - new HashMap<AliasAndInstanceId, InstanceContext>(); + instanceIdToInstanceContextMap = new HashMap<String, Set<InstanceContext>>(); } /** @@ -204,27 +203,46 @@ public abstract class ParentComponent implements Serializable { } /** - * Adds InstanceContext of a child to the aliasAndInstanceIdToInstanceContextMap. + * Adds InstanceContext of a child to the instanceIdToInstanceContextMap. * - * @param alias alias of child * @param instanceId instance id of child * @param instanceContext InstanceContext object */ - public void addInstanceContext (String alias, String instanceId, InstanceContext instanceContext) { - - aliasAndInstanceIdToInstanceContextMap.put(new AliasAndInstanceId(alias, instanceId), instanceContext); + public void addInstanceContext (String instanceId, InstanceContext instanceContext) { + + // check if there is an existing entry of the instance id + synchronized (instanceIdToInstanceContextMap) { + Set<InstanceContext> instanceContexts = instanceIdToInstanceContextMap.get(instanceId); + if (instanceContexts == null) { + // create a new HashSet which includes the given InstanceContext element + instanceIdToInstanceContextMap.put(instanceId, + new HashSet<InstanceContext>(Arrays.asList(instanceContext))); + } else { + // entry exists, update + instanceContexts.add(instanceContext); + } + } } /** - * Retrieves InstanceContext obj. for the given alias and instance id + * Retrieves InstanceContext set for the given instance id * - * @param alias alias * @param instanceId instance id - * @return InstanceContext obj if exists, else null + * @return Set of InstanceContext objects if exists, else null + */ + public Set<InstanceContext> getInstanceContexts (String instanceId) { + + return instanceIdToInstanceContextMap.get(instanceId); + } + + /** + * Retrieves the current number of instance contexts which are kept track in this node + * + * @return number of instance contexts */ - public InstanceContext getInstanceContext (String alias, String instanceId) { + public int getInstanceContextCount () { - return aliasAndInstanceIdToInstanceContextMap.get(new AliasAndInstanceId(alias, instanceId)); + return instanceIdToInstanceContextMap.keySet().size(); } private void getClusterData (Set<ClusterDataHolder> clusterData, Collection<Group> groups) { @@ -238,50 +256,4 @@ public abstract class ParentComponent implements Serializable { } } } - - private class AliasAndInstanceId { - - private String alias; - private String instanceId; - - public AliasAndInstanceId(String alias, String instanceId) { - this.alias = alias; - this.instanceId = instanceId; - } - - - public String getAlias() { - return alias; - } - - public void setAlias(String alias) { - this.alias = alias; - } - - public String getInstanceId() { - return instanceId; - } - - public void setInstanceId(String instanceId) { - this.instanceId = instanceId; - } - - public boolean equals(Object other) { - if(other == null || !(other instanceof AliasAndInstanceId)) { - return false; - } - - if(this == other) { - return true; - } - - AliasAndInstanceId that = (AliasAndInstanceId)other; - return this.alias.equals(that.alias) && - this.instanceId.equals(that.instanceId); - } - - public int hashCode () { - return alias.hashCode() + instanceId.hashCode(); - } - } } http://git-wip-us.apache.org/repos/asf/stratos/blob/f2f2f0c6/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/InstanceContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/InstanceContext.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/InstanceContext.java index d7a0ea5..b66f1d7 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/InstanceContext.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/scaling/instance/context/InstanceContext.java @@ -64,4 +64,23 @@ public abstract class InstanceContext implements Serializable { public String getInstanceId() { return instanceId; } + + public boolean equals(Object other) { + if(other == null || !(other instanceof InstanceContext)) { + return false; + } + + if(this == other) { + return true; + } + + InstanceContext that = (InstanceContext)other; + return this.alias.equals(that.alias) && + this.instanceId.equals(that.instanceId); + } + + public int hashCode () { + return alias.hashCode() + instanceId.hashCode(); + } } +
