You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ni...@apache.org on 2014/10/11 11:09:30 UTC

[05/50] [abbrv] git commit: Added CompleteTopologyEvent populating with the json string received from message broker Added implementation for on_complete_topology_event method Fixed bugs in topology context

Added CompleteTopologyEvent populating with the json string received from message broker
Added implementation for on_complete_topology_event method
Fixed bugs in topology context


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/e5da07e5
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/e5da07e5
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/e5da07e5

Branch: refs/heads/master
Commit: e5da07e5bf1719e2467510ec0233d600900eaf89
Parents: 4850c53
Author: Chamila de Alwis <ch...@wso2.com>
Authored: Wed Sep 24 23:47:37 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 14:38:28 2014 +0530

----------------------------------------------------------------------
 .../cartridge-agent/agent.py                    | 24 ++++++--
 .../modules/event/topology/events.py            | 62 +++++++++++++++++++-
 .../modules/topology/topologycontext.py         |  1 +
 3 files changed, 81 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/e5da07e5/tools/python-cartridge-agent/cartridge-agent/agent.py
----------------------------------------------------------------------
diff --git a/tools/python-cartridge-agent/cartridge-agent/agent.py b/tools/python-cartridge-agent/cartridge-agent/agent.py
index 7b6a973..96b71a4 100644
--- a/tools/python-cartridge-agent/cartridge-agent/agent.py
+++ b/tools/python-cartridge-agent/cartridge-agent/agent.py
@@ -4,14 +4,16 @@ import threading
 import time
 
 from modules.config.cartridgeagentconfiguration import CartridgeAgentConfiguration
-from modules.util import *
+from modules.util import cartridgeagentconstants, cartridgeagentutils
 from modules.exception.parameternotfoundexception import ParameterNotFoundException
 from modules.subscriber.eventsubscriber import EventSubscriber
 from modules.extensions.defaultextensionhandler import DefaultExtensionHandler
 from modules.publisher import cartridgeagentpublisher
 from modules.event.instance.notifier.events import *
 from modules.event.tenant.events import *
+from modules.event.topology.events import *
 from modules.tenant.tenantcontext import *
+from modules.topology.topologycontext import *
 
 
 class CartridgeAgent(threading.Thread):
@@ -28,7 +30,8 @@ class CartridgeAgent(threading.Thread):
 
         self.extension_handler = DefaultExtensionHandler()
 
-        self.__complete_tenant_event_received = False
+        self.__tenant_context_initialized = False
+        self.__topology_context_initialized = False
 
     def run(self):
         self.log.info("Starting Cartridge Agent...")
@@ -147,7 +150,18 @@ class CartridgeAgent(threading.Thread):
         raise NotImplementedError
 
     def on_complete_topology(self, msg):
-        raise NotImplementedError
+        if not self.__topology_context_initialized:
+            self.log.debug("Complete topology event received")
+            event_obj = CompleteTopologyEvent.create_from_json(msg.payload)
+            TopologyContext.update(event_obj.topology)
+            self.__topology_context_initialized = True
+            try:
+                self.extension_handler.onCompleteTopologyEvent(event_obj)
+            except:
+                self.log.exception("Error processing complete topology event")
+        else:
+            self.log.info("Complete topology event updating task disabled")
+
 
     def on_member_started(self, msg):
         raise NotImplementedError
@@ -191,14 +205,14 @@ class CartridgeAgent(threading.Thread):
         # )
 
     def on_complete_tenant(self, msg):
-        if not self.__complete_tenant_event_received:
+        if not self.__tenant_context_initialized:
             self.log.debug("Complete tenant event received")
             event_obj = CompleteTenantEvent.create_from_json(msg.payload)
             TenantContext.update(event_obj.tenants)
 
             try:
                 self.extension_handler.onCompleteTenantEvent(event_obj)
-                self.__complete_tenant_event_received = True
+                self.__tenant_context_initialized = True
             except:
                 self.log.exception("Error processing complete tenant event")
         else:

http://git-wip-us.apache.org/repos/asf/stratos/blob/e5da07e5/tools/python-cartridge-agent/cartridge-agent/modules/event/topology/events.py
----------------------------------------------------------------------
diff --git a/tools/python-cartridge-agent/cartridge-agent/modules/event/topology/events.py b/tools/python-cartridge-agent/cartridge-agent/modules/event/topology/events.py
index 5990ea7..80a06ce 100644
--- a/tools/python-cartridge-agent/cartridge-agent/modules/event/topology/events.py
+++ b/tools/python-cartridge-agent/cartridge-agent/modules/event/topology/events.py
@@ -1,5 +1,7 @@
 import json
 
+from ... topology.topologycontext import *
+
 
 class MemberActivatedEvent:
 
@@ -37,13 +39,71 @@ class MemberSuspendedEvent:
 class CompleteTopologyEvent:
 
     def __init__(self):
-        pass
+        self.topology = None
 
     @staticmethod
     def create_from_json(json_str):
         json_obj = json.loads(json_str)
         instance = CompleteTopologyEvent()
 
+        topology_str = json_obj["topology"] if "topology" in json_obj else None
+        if topology_str is not None:
+            topology_obj = Topology()
+
+            #add service map
+            for service_name in topology_str["serviceMap"]:
+                service_str = topology_str["serviceMap"][service_name]
+
+                service_obj = Service(service_name, service_str["serviceType"])
+                service_obj.properties = service_str["properties"]
+                # add ports to port map
+                for port_proxy in service_str["portMap"]:
+                    port_str = service_str["portMap"][port_proxy]
+                    port_obj = Port(port_str["protocol"], port_str["value"], port_proxy)
+                    service_obj.add_port(port_obj)
+
+                #add cluster map
+                for cluster_id in service_str["clusterIdClusterMap"]:
+                    cluster_str = service_str["clusterIdClusterMap"][cluster_id]
+                    cl_service_name = cluster_str["serviceName"]
+                    cl_autoscale_policy_name = cluster_str["autoscalePolicyName"]
+                    cl_deployment_policy_name = cluster_str["deploymentPolicyName"]
+
+                    cluster_obj = Cluster(cl_service_name, cluster_id, cl_deployment_policy_name, cl_autoscale_policy_name)
+                    cluster_obj.hostnames = cluster_str["hostNames"]
+                    cluster_obj.tenant_range = cluster_str["tenantRange"]
+                    cluster_obj.is_lb_cluster = cluster_str["isLbCluster"]
+                    cluster_obj.status = cluster_str["status"]
+                    cluster_obj.load_balancer_algorithm_name = cluster_str["loadBalanceAlgorithmName"]
+                    cluster_obj.properties = cluster_str["properties"]
+
+                    #add member map
+                    for member_id in cluster_str["memberMap"]:
+                        member_str = cluster_str["memberMap"][member_id]
+                        mm_service_name = member_str["serviceName"]
+                        mm_cluster_id = member_str["clusterId"]
+                        mm_network_partition_id = member_str["networkPartitionId"]
+                        mm_partition_id = member_str["partitionId"]
+
+                        member_obj = Member(mm_service_name, mm_cluster_id, mm_network_partition_id, mm_partition_id, member_id)
+                        member_obj.member_public_ip = member_str["memberPublicIp"]
+                        member_obj.status = member_str["status"]
+                        member_obj.member_ip = member_str["memberIp"]
+                        member_obj.properties = member_str["properties"]
+                        member_obj.lb_cluster_id = member_str["lbClusterId"]
+
+                        #add port map
+                        for mm_port_proxy in member_str["portMap"]:
+                            mm_port_str = member_str["portMap"][port_proxy]
+                            mm_port_obj = Port(mm_port_str["protocol"], mm_port_str["value"], mm_port_proxy)
+                            member_obj.add_port(mm_port_obj)
+                        cluster_obj.add_member(member_obj)
+                    service_obj.add_cluster(cluster_obj)
+                topology_obj.add_service(service_obj)
+            instance.topology = topology_obj
+
+        return instance
+
 
 class MemberStartedEvent:
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/e5da07e5/tools/python-cartridge-agent/cartridge-agent/modules/topology/topologycontext.py
----------------------------------------------------------------------
diff --git a/tools/python-cartridge-agent/cartridge-agent/modules/topology/topologycontext.py b/tools/python-cartridge-agent/cartridge-agent/modules/topology/topologycontext.py
index 1994d4c..4d118f1 100644
--- a/tools/python-cartridge-agent/cartridge-agent/modules/topology/topologycontext.py
+++ b/tools/python-cartridge-agent/cartridge-agent/modules/topology/topologycontext.py
@@ -53,6 +53,7 @@ class Service:
         self.service_type = service_type
         self.cluster_id_cluster_map = {}
         self.port_map = {}
+        self.properties = {}
 
     def get_clusters(self):
         return self.cluster_id_cluster_map.values()