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

[10/50] [abbrv] git commit: Added Tenant context handling base classes Implemented populating the CompleteTenantEvent object with the received json string Update tenant context on CompleteTenantEvent if not already initialized

Added Tenant context handling base classes
Implemented populating the CompleteTenantEvent object with the received json string
Update tenant context on CompleteTenantEvent if not already initialized


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

Branch: refs/heads/master
Commit: 8537cdfe076513d7b5568118ac9f974fed3fd299
Parents: f65c19a
Author: Chamila de Alwis <ch...@wso2.com>
Authored: Wed Sep 24 16:33:52 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 14:38:28 2014 +0530

----------------------------------------------------------------------
 .../cartridge-agent/agent.py                    | 16 ++--
 .../modules/event/tenant/events.py              | 19 ++++-
 .../cartridge-agent/modules/tenant/__init__.py  |  0
 .../modules/tenant/tenantcontext.py             | 88 ++++++++++++++++++++
 4 files changed, 113 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/8537cdfe/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 0dfecb2..7b6a973 100644
--- a/tools/python-cartridge-agent/cartridge-agent/agent.py
+++ b/tools/python-cartridge-agent/cartridge-agent/agent.py
@@ -11,6 +11,7 @@ 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.tenant.tenantcontext import *
 
 
 class CartridgeAgent(threading.Thread):
@@ -27,7 +28,7 @@ class CartridgeAgent(threading.Thread):
 
         self.extension_handler = DefaultExtensionHandler()
 
-        self.__complete_tenant_initialized = False
+        self.__complete_tenant_event_received = False
 
     def run(self):
         self.log.info("Starting Cartridge Agent...")
@@ -96,8 +97,8 @@ class CartridgeAgent(threading.Thread):
 
         self.__instance_event_subscriber.register_handler("ArtifactUpdatedEvent", self.on_artifact_updated)
         self.__instance_event_subscriber.register_handler("InstanceCleanupMemberEvent", self.on_instance_cleanup_member)
-        self.__instance_event_subscriber.register_handler("InstanceCleanupClusterEvent",
-                                                          self.on_instance_cleanup_cluster)
+        self.__instance_event_subscriber.register_handler("InstanceCleanupClusterEvent", self.on_instance_cleanup_cluster)
+
         self.__instance_event_subscriber.start()
         self.log.info("Instance notifier event message receiver thread started")
 
@@ -153,8 +154,8 @@ class CartridgeAgent(threading.Thread):
 
     def register_tenant_event_listeners(self):
         self.log.debug("Starting tenant event message receiver thread")
-        self.__tenant_event_subscriber.register_handler("SubscriptionDomainAddedEvent",self.on_subscription_domain_added)
-        self.__tenant_event_subscriber.register_handler("SubscriptionDomainsRemovedEvent",self.on_subscription_domain_removed)
+        self.__tenant_event_subscriber.register_handler("SubscriptionDomainAddedEvent", self.on_subscription_domain_added)
+        self.__tenant_event_subscriber.register_handler("SubscriptionDomainsRemovedEvent", self.on_subscription_domain_removed)
         self.__tenant_event_subscriber.register_handler("CompleteTenantEvent", self.on_complete_tenant)
         self.__tenant_event_subscriber.register_handler("TenantSubscribedEvent", self.on_tenant_subscribed)
         self.__tenant_event_subscriber.register_handler("TenantUnSubscribedEvent", self.on_tenant_unsubscribed)
@@ -190,13 +191,14 @@ class CartridgeAgent(threading.Thread):
         # )
 
     def on_complete_tenant(self, msg):
-        if not self.__complete_tenant_initialized:
+        if not self.__complete_tenant_event_received:
             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_initialized = True
+                self.__complete_tenant_event_received = True
             except:
                 self.log.exception("Error processing complete tenant event")
         else:

http://git-wip-us.apache.org/repos/asf/stratos/blob/8537cdfe/tools/python-cartridge-agent/cartridge-agent/modules/event/tenant/events.py
----------------------------------------------------------------------
diff --git a/tools/python-cartridge-agent/cartridge-agent/modules/event/tenant/events.py b/tools/python-cartridge-agent/cartridge-agent/modules/event/tenant/events.py
index 7395f7e..a08c4af 100644
--- a/tools/python-cartridge-agent/cartridge-agent/modules/event/tenant/events.py
+++ b/tools/python-cartridge-agent/cartridge-agent/modules/event/tenant/events.py
@@ -1,4 +1,5 @@
 import json
+from ... tenant.tenantcontext import *
 
 
 class SubscriptionDomainAddedEvent():
@@ -48,14 +49,26 @@ class SubscriptionDomainRemovedEvent:
 class CompleteTenantEvent:
 
     def __init__(self):
-        self.tenants = None
+        self.tenants = []
 
     @staticmethod
     def create_from_json(json_str):
         json_obj = json.loads(json_str)
         instance = CompleteTenantEvent()
-
-        instance.tenants = json_obj["tenants"] if "tenants" in json_obj else None
+        instance.tenants = []
+
+        temp_tenants = json_obj["tenants"] if "tenants" in json_obj else None
+        if temp_tenants is not None:
+            for tenant_str in temp_tenants:
+                tenant_obj = Tenant(int(tenant_str["tenantId"]), tenant_str["tenantDomain"])
+                for service_name in tenant_str["serviceNameSubscriptionMap"]:
+                    sub_str = tenant_str["serviceNameSubscriptionMap"][service_name]
+                    sub = Subscription(sub_str["serviceName"], sub_str["clusterIds"])
+                    for domain_name in sub_str["subscriptionDomainMap"]:
+                        subdomain_str = sub_str["subscriptionDomainMap"][domain_name]
+                        sub.add_subscription_domain(domain_name, subdomain_str["applicationContext"])
+                    tenant_obj.add_subscription(sub);
+                instance.tenants.append(tenant_obj)
 
         return instance
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/8537cdfe/tools/python-cartridge-agent/cartridge-agent/modules/tenant/__init__.py
----------------------------------------------------------------------
diff --git a/tools/python-cartridge-agent/cartridge-agent/modules/tenant/__init__.py b/tools/python-cartridge-agent/cartridge-agent/modules/tenant/__init__.py
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/stratos/blob/8537cdfe/tools/python-cartridge-agent/cartridge-agent/modules/tenant/tenantcontext.py
----------------------------------------------------------------------
diff --git a/tools/python-cartridge-agent/cartridge-agent/modules/tenant/tenantcontext.py b/tools/python-cartridge-agent/cartridge-agent/modules/tenant/tenantcontext.py
new file mode 100644
index 0000000..53e340b
--- /dev/null
+++ b/tools/python-cartridge-agent/cartridge-agent/modules/tenant/tenantcontext.py
@@ -0,0 +1,88 @@
+class TenantContext:
+    tenants = {}
+    initialized = False
+    tenant_domains = {"carbon.super": Tenant(-1234, "carbon.super")}
+
+    @staticmethod
+    def add_tenant(tenant):
+        TenantContext.tenants[tenant.tenant_id] = tenant
+        TenantContext.tenant_domains[tenant.tenant_domain] = tenant
+
+    @staticmethod
+    def remove_tenant(tenant_id):
+        if tenant_id in TenantContext.tenants:
+            tenant = TenantContext.get_tenant(tenant_id)
+            TenantContext.tenants.pop(tenant.tenant_id)
+            TenantContext.tenant_domains.pop(tenant.tenant_domain)
+
+    @staticmethod
+    def update(tenants):
+        for tenant in tenants:
+            TenantContext.add_tenant(tenant)
+
+    @staticmethod
+    def get_tenant(tenant_id):
+        if tenant_id in TenantContext.tenants:
+            return TenantContext.tenants[tenant_id]
+
+        return None
+
+    @staticmethod
+    def get_tenant(tenant_domain):
+        if tenant_domain in TenantContext.tenant_domains:
+            return TenantContext.tenant_domains[tenant_domain]
+
+        return None
+
+
+class Tenant:
+
+    def __init__(self, tenant_id,  tenant_domain):
+        self.tenant_id = tenant_id
+        self.tenant_domain = tenant_domain
+        self.service_name_subscription_map = {}
+
+    def get_subscription(self, service_name):
+        if service_name in self.service_name_subscription_map:
+            return self.service_name_subscription_map[service_name]
+
+        return None
+
+    def is_subscribed(self, service_name):
+        return service_name in self.service_name_subscription_map
+
+    def add_subscription(self, subscription):
+        self.service_name_subscription_map[subscription.service_name] = subscription
+
+    def remove_subscription(self, service_name):
+        if service_name in self.service_name_subscription_map:
+            self.service_name_subscription_map.pop(service_name)
+
+
+class Subscription:
+
+    def __init__(self, service_name, cluster_ids):
+        self.service_name = service_name
+        self.cluster_ids = cluster_ids
+        self.subscription_domain_map = {}
+
+    def add_subscription_domain(self, domain_name, application_context):
+        self.subscription_domain_map[domain_name] = SubscriptionDomain(domain_name, application_context)
+
+    def remove_subscription_domain(self, domain_name):
+        if domain_name in self.subscription_domain_map:
+            self.subscription_domain_map.pop(domain_name)
+
+    def subscription_domain_exists(self, domain_name):
+        return domain_name in self.subscription_domain_map
+
+    def get_subscription_domains(self):
+        return self.subscription_domain_map.values()
+
+
+class SubscriptionDomain:
+
+    def __init__(self, domain_name, application_context):
+        self.domain_name = domain_name
+        self.application_context = application_context
+