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:48 UTC

[23/50] [abbrv] git commit: Completed start servers extension path

Completed start servers extension path


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

Branch: refs/heads/master
Commit: 8c9f74ea56bac33253da030dfbb14209e15dfbc5
Parents: 6b8fc6e
Author: Chamila de Alwis <ch...@wso2.com>
Authored: Fri Sep 26 16:56:29 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 14:38:29 2014 +0530

----------------------------------------------------------------------
 .../modules/event/topology/events.py            |  4 ++
 .../extensions/defaultextensionhandler.py       | 61 +++++++++++++-------
 .../modules/topology/topologycontext.py         |  1 +
 .../modules/util/extensionutils.py              | 20 ++++++-
 4 files changed, 65 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/8c9f74ea/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 10be3e2..e0f050f 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
@@ -123,6 +123,7 @@ class CompleteTopologyEvent:
                     cluster_obj.status = cluster_str["status"]
                     cluster_obj.load_balancer_algorithm_name = cluster_str["loadBalanceAlgorithmName"]
                     cluster_obj.properties = cluster_str["properties"]
+                    cluster_obj.member_list_json = "["
 
                     #add member map
                     for member_id in cluster_str["memberMap"]:
@@ -139,6 +140,7 @@ class CompleteTopologyEvent:
                         member_obj.properties = member_str["properties"]
                         member_obj.lb_cluster_id = member_str["lbClusterId"]
                         member_obj.json_str = member_str
+                        cluster_obj.member_list_json += member_str + ","
 
                         #add port map
                         for mm_port_proxy in member_str["portMap"]:
@@ -146,6 +148,8 @@ class CompleteTopologyEvent:
                             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)
+                    #remove final comma and close the square bracker of the json array
+                    cluster_obj.member_list_json = cluster_obj.member_list_json[:-1] + "]"
                     service_obj.add_cluster(cluster_obj)
                 topology_obj.add_service(service_obj)
             instance.topology = topology_obj

http://git-wip-us.apache.org/repos/asf/stratos/blob/8c9f74ea/tools/python-cartridge-agent/cartridge-agent/modules/extensions/defaultextensionhandler.py
----------------------------------------------------------------------
diff --git a/tools/python-cartridge-agent/cartridge-agent/modules/extensions/defaultextensionhandler.py b/tools/python-cartridge-agent/cartridge-agent/modules/extensions/defaultextensionhandler.py
index 9135a8a..848f478 100644
--- a/tools/python-cartridge-agent/cartridge-agent/modules/extensions/defaultextensionhandler.py
+++ b/tools/python-cartridge-agent/cartridge-agent/modules/extensions/defaultextensionhandler.py
@@ -210,26 +210,47 @@ class DefaultExtensionHandler:
         pass
 
     def start_server_extension(self):
-        raise NotImplementedError
-        # extensionutils.wait_for_complete_topology()
-        # self.log.info("[start server extension] complete topology event received")
-        #
-        # service_name_in_payload = CartridgeAgentConfiguration.service_name()
-        # cluster_id_in_payload = CartridgeAgentConfiguration.cluster_id()
-        # member_id_in_payload = CartridgeAgentConfiguration.member_id()
-        #
-        # try:
-        # consistant = extensionutils.check_topology_consistency(service_name_in_payload, cluster_id_in_payload, member_id_in_payload)
-        #
-        # if not consistant:
-        # self.log.error("Topology is inconsistent...failed to execute start server event")
-        # return
-        #
-        #
-        # except:
-        # self.log.exception("Error processing start servers event")
-        # finally:
-        #     pass
+        #wait until complete topology message is received to get LB IP
+        extensionutils.wait_for_complete_topology()
+        self.log.info("[start server extension] complete topology event received")
+
+        service_name_in_payload = CartridgeAgentConfiguration.service_name()
+        cluster_id_in_payload = CartridgeAgentConfiguration.cluster_id()
+        member_id_in_payload = CartridgeAgentConfiguration.member_id()
+
+        topology_consistant = extensionutils.check_topology_consistency(service_name_in_payload, cluster_id_in_payload, member_id_in_payload)
+
+        try:
+            if not topology_consistant:
+                self.log.error("Topology is inconsistent...failed to execute start server event")
+                return
+
+            topology = TopologyContext.get_topology()
+            service = topology.get_service(service_name_in_payload)
+            cluster = service.get_cluster(cluster_id_in_payload)
+
+            # store environment variable parameters to be passed to extension shell script
+            env_params = {}
+
+            # if clustering is enabled wait until all well known members have started
+            clustering_enabled = CartridgeAgentConfiguration.is_clustered
+            if clustering_enabled:
+                env_params["STRATOS_CLUSTERING"] = "true"
+                env_params["STRATOS_WK_MEMBER_COUNT"] = CartridgeAgentConfiguration.min_count
+
+
+                env_params["STRATOS_PRIMARY"] = "true" if CartridgeAgentConfiguration.is_primary else "false"
+
+                self.wait_for_wk_members(env_params)
+                self.log.info("All well known members have started! Resuming start server extension...")
+
+            env_params["STRATOS_TOPOLOGY_JSON"] = topology.json_str
+            env_params["STRATOS_MEMBER_LIST_JSON"] = cluster.member_list_json
+
+            extensionutils.execute_start_servers_extension(env_params)
+
+        except:
+            self.log.exception("Error processing start servers event")
 
     def volume_mount_extension(self, persistence_mappings_payload):
         extensionutils.execute_volume_mount_extension(persistence_mappings_payload)

http://git-wip-us.apache.org/repos/asf/stratos/blob/8c9f74ea/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 7fee50d..73b6e3c 100644
--- a/tools/python-cartridge-agent/cartridge-agent/modules/topology/topologycontext.py
+++ b/tools/python-cartridge-agent/cartridge-agent/modules/topology/topologycontext.py
@@ -122,6 +122,7 @@ class Cluster:
         self.status = None
         self.load_balancer_algorithm_name = None
         self.properties = {}
+        self.member_list_json = None
 
     def add_hostname(self, hostname):
         self.hostnames.append(hostname)

http://git-wip-us.apache.org/repos/asf/stratos/blob/8c9f74ea/tools/python-cartridge-agent/cartridge-agent/modules/util/extensionutils.py
----------------------------------------------------------------------
diff --git a/tools/python-cartridge-agent/cartridge-agent/modules/util/extensionutils.py b/tools/python-cartridge-agent/cartridge-agent/modules/util/extensionutils.py
index 267c608..70d9c44 100644
--- a/tools/python-cartridge-agent/cartridge-agent/modules/util/extensionutils.py
+++ b/tools/python-cartridge-agent/cartridge-agent/modules/util/extensionutils.py
@@ -1,6 +1,7 @@
 import logging
 import os
 import subprocess
+import time
 
 from .. config.cartridgeagentconfiguration import CartridgeAgentConfiguration
 from .. topology.topologycontext import *
@@ -63,8 +64,25 @@ def execute_subscription_domain_removed_extension(tenant_id, tenant_domain, doma
     raise NotImplementedError
 
 
+def execute_start_servers_extension(env_params):
+    try:
+        log.debug("Executing start servers extension")
+
+        script_name = cartridgeagentconstants.START_SERVERS_SCRIPT
+        command = prepare_command(script_name)
+        env_params = add_payload_parameters(env_params)
+        env_params = clean_process_parameters(env_params)
+
+        output, errors = execute_command(command, env_params)
+        log.debug("Start servers script returned: %r" % output)
+    except:
+        log.exception("Could not execute start servers extension")
+
+
 def wait_for_complete_topology():
-    raise NotImplementedError
+    while not TopologyContext.topology.initialized:
+        log.info("Waiting for complete topology event...")
+        time.sleep(5)
 
 
 def check_topology_consistency(service_name, cluster_id, member_id):