Repository: stratos
Updated Branches:
  refs/heads/stratos-4.1.x 755a15b1d -> 353554754


Fix validations when executing topology event extensions


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

Branch: refs/heads/stratos-4.1.x
Commit: 35355475406cf2f1b709c6693cc43a0b69c2e503
Parents: 0b52db8
Author: Akila Perera <[email protected]>
Authored: Fri Sep 18 15:55:37 2015 +0530
Committer: Akila Perera <[email protected]>
Committed: Fri Sep 18 15:56:12 2015 +0530

----------------------------------------------------------------------
 .../cartridge.agent/cartridge.agent/agent.py    |  8 ++--
 .../cartridge.agent/cartridge.agent/entity.py   |  1 -
 .../modules/event/eventhandler.py               | 46 +++++++++++---------
 3 files changed, 30 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/35355475/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/agent.py
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/agent.py
 
b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/agent.py
index 7b5dfaa..5298f07 100644
--- 
a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/agent.py
+++ 
b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/agent.py
@@ -218,11 +218,12 @@ class CartridgeAgent(threading.Thread):
 
     def on_member_initialized(self, msg):
         self.__log.debug("Member initialized event received: %r" % msg.payload)
+        event_obj = MemberInitializedEvent.create_from_json(msg.payload)
 
         if not TopologyContext.topology.initialized:
             return
 
-        self.__event_handler.on_member_initialized_event()
+        self.__event_handler.on_member_initialized_event(event_obj)
 
     def on_member_activated(self, msg):
         self.__log.debug("Member activated event received: %r" % msg.payload)
@@ -251,12 +252,13 @@ class CartridgeAgent(threading.Thread):
     def on_complete_topology(self, msg):
         event_obj = CompleteTopologyEvent.create_from_json(msg.payload)
         if not TopologyContext.topology.initialized:
-            self.__log.debug("Complete topology event received")
+            self.__log.debug("Topology initialized from complete topology 
event")
             TopologyContext.update(event_obj.topology)
+            TopologyContext.topology.initialized = True
             self.__event_handler.on_complete_topology_event(event_obj)
         else:
             TopologyContext.update(event_obj.topology)
-            self.__log.debug("Topology context updated [topology] %r" % 
event_obj.topology.json_str)
+            self.__log.debug("Topology context updated with [topology] %r" % 
event_obj.topology.json_str)
 
     def on_member_started(self, msg):
         self.__log.debug("Member started event received: %r" % msg.payload)

http://git-wip-us.apache.org/repos/asf/stratos/blob/35355475/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/entity.py
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/entity.py
 
b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/entity.py
index d02f670..a198529 100644
--- 
a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/entity.py
+++ 
b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/entity.py
@@ -507,7 +507,6 @@ class TopologyContext:
     @staticmethod
     def update(topology):
         TopologyContext.topology = topology
-        TopologyContext.topology.initialized = True
 
 
 class Tenant:

http://git-wip-us.apache.org/repos/asf/stratos/blob/35355475/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/event/eventhandler.py
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/event/eventhandler.py
 
b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/event/eventhandler.py
index 14f3b09..66e0e66 100644
--- 
a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/event/eventhandler.py
+++ 
b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/event/eventhandler.py
@@ -175,15 +175,17 @@ class EventHandler:
         cluster_id_in_payload = Config.cluster_id
         member_id_in_payload = Config.member_id
 
-        member_initialized = self.is_member_initialized_in_topology(
-            service_name_in_payload,
-            cluster_id_in_payload,
-            member_id_in_payload)
-
-        self.__log.debug("Member initialized %s", member_initialized)
-        if member_initialized:
-            # Set cartridge agent as initialized since member is available and 
it is in initialized state
-            Config.initialized = True
+        if not Config.initialized:
+            member_initialized = self.is_member_initialized_in_topology(
+                service_name_in_payload,
+                cluster_id_in_payload,
+                member_id_in_payload)
+
+            if member_initialized:
+                # Set cartridge agent as initialized since member is available 
and it is in initialized state
+                Config.initialized = True
+                self.__log.info("Member initialized [member id] %s, 
[cluster-id] %s, [service] %s",
+                                (member_id_in_payload, cluster_id_in_payload, 
service_name_in_payload))
 
         topology = complete_topology_event.get_topology()
         service = topology.get_service(service_name_in_payload)
@@ -199,26 +201,28 @@ class EventHandler:
 
         self.execute_event_extendables(constants.COMPLETE_TOPOLOGY_EVENT, 
plugin_values)
 
-    def on_member_initialized_event(self):
+    def on_member_initialized_event(self, member_initialized_event):
         """
          Member initialized event is sent by cloud controller once volume 
attachment and
          ip address allocation is completed successfully
         :return:
         """
         self.__log.debug("Processing Member initialized event...")
-
         service_name_in_payload = Config.service_name
         cluster_id_in_payload = Config.cluster_id
         member_id_in_payload = Config.member_id
 
-        member_exists = 
self.member_exists_in_topology(service_name_in_payload, cluster_id_in_payload,
-                                                       member_id_in_payload)
-
-        self.__log.debug("Member exists: %s" % member_exists)
-
-        if member_exists:
-            Config.initialized = True
-            self.markMemberAsInitialized(service_name_in_payload, 
cluster_id_in_payload, member_id_in_payload)
+        if not Config.initialized and member_id_in_payload == 
member_initialized_event.member_id:
+            member_exists = 
self.member_exists_in_topology(service_name_in_payload, cluster_id_in_payload,
+                                                           
member_id_in_payload)
+            self.__log.debug("Member exists: %s" % member_exists)
+            if member_exists:
+                Config.initialized = True
+                self.markMemberAsInitialized(service_name_in_payload, 
cluster_id_in_payload, member_id_in_payload)
+                self.__log.info("Instance marked as initialized on member 
initialized event")
+            else:
+                raise Exception("Member [member-id] %s not found in topology 
while processing member initialized "
+                                "event. [Topology] %s" % 
(member_id_in_payload, TopologyContext.get_topology()))
 
         self.execute_event_extendables(constants.MEMBER_INITIALIZED_EVENT, {})
 
@@ -379,10 +383,10 @@ class EventHandler:
         """
         try:
             input_values = EventHandler.add_common_input_values(input_values)
-            input_values["EVENT"] = event
         except Exception as e:
             self.__log.error("Error while adding common input values for event 
extendables: %s" % e)
-
+        input_values["EVENT"] = event
+        self.__log.info("Executing extensions for [event] %s with [input 
values] %s" % (event, input_values))
         # Execute the extension
         self.execute_extension_for_event(event, input_values)
         # Execute the plugins

Reply via email to