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):