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();
+    }
 }
+

Reply via email to