Hi all,

I am working on [1] and this issue is occurring due to correct tenant
information not being available in the thread local
PrivilegedCarbonContext. This works well for the tenants, but in super
tenant's domain there are certain threads without proper tenant
information. I have added super tenant information for the code segments
invoked by super tenant.

I have multiple questions regarding fixing this.

diff --git
a/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/init/CarbonServerManager.java
b/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/init/CarbonServerManager.java
index 581ebc8..b3c59a4 100644
---
a/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/init/CarbonServerManager.java
+++
b/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/init/CarbonServerManager.java
@@ -889,6 +889,13 @@ public final class CarbonServerManager implements
Controllable {
         }
         shutdownHook = new Thread() {
             public void run() {
+                // During shutdown we assume it is triggered by super
tenant
+                PrivilegedCarbonContext privilegedCarbonContext =
PrivilegedCarbonContext
+                        .getThreadLocalCarbonContext();
+                privilegedCarbonContext
+
.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
+
privilegedCarbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID);
+
                 log.info("Shutdown hook triggered....");
                 isShutdownTriggeredByShutdownHook = true;
                 shutdownGracefully();
diff --git
a/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/internal/CarbonCoreActivator.java
b/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/internal/CarbonCoreActivator.java
index 1d8d027..a1d0ab9 100644
---
a/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/internal/CarbonCoreActivator.java
+++
b/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/internal/CarbonCoreActivator.java
@@ -20,6 +20,8 @@ import org.apache.commons.logging.LogFactory;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.utils.multitenancy.MultitenantConstants;

 import java.io.File;
 import java.lang.management.ManagementPermission;
@@ -39,6 +41,12 @@ public class CarbonCoreActivator implements
BundleActivator {
         if (secMan != null) {
            secMan.checkPermission(new ManagementPermission("control"));
         }
+        // We assume it's super tenant during the deployment time
+        PrivilegedCarbonContext privilegedCarbonContext =
PrivilegedCarbonContext
+                .getThreadLocalCarbonContext();
+
privilegedCarbonContext.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
+
privilegedCarbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID);
+
         dataHolder.setBundleContext(context);
         log.info("Starting WSO2 Carbon...");
         log.info("Operating System : " + System.getProperty("os.name") + "
" +
diff --git
a/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/internal/CarbonCoreServiceComponent.java
b/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/internal/CarbonCoreServiceComponent.java
index 8d2d8e8..125d94a 100644
---
a/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/internal/CarbonCoreServiceComponent.java
+++
b/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/internal/CarbonCoreServiceComponent.java
@@ -29,6 +29,7 @@ import
org.wso2.carbon.registry.core.service.RegistryService;
 import org.wso2.carbon.registry.core.service.TenantRegistryLoader;
 import org.wso2.carbon.user.core.service.RealmService;
 import org.wso2.carbon.core.clustering.api.CoordinatedActivity;
+import org.wso2.carbon.utils.multitenancy.MultitenantConstants;

 import java.util.ArrayList;
 import java.util.List;
@@ -85,6 +86,11 @@ public class CarbonCoreServiceComponent {

     protected void deactivate(ComponentContext ctxt) {
         try {
+            // We assume it's super tenant during component deactivate time
+            PrivilegedCarbonContext privilegedCarbonContext =
PrivilegedCarbonContext
+                    .getThreadLocalCarbonContext();
+
privilegedCarbonContext.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
+
privilegedCarbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID);
             carbonServerManager.stop();
         } catch (Throwable e) {
             log.error("Failed clean up Carbon core", e);


As you can see there's same code segment repeated in these scenarios. Isn't
it reasonable to add a setThreadLocalTenantAsSuperTenant() method to PCC to
cover this?

Additionally there are some logs printed by other threads invoked by
external components (adding the PrivilegedCarbonContext information to
these threads seems not appropriate). And as a result these logs have
incorrect tenant ids.

​Eg:​

​TID: [-1] [Carbon] [2014-08-18 15:15:58,276]  INFO
{org.apache.catalina.startup.TaglibUriRule} -  TLD skipped. URI:
http://tiles.apache.org/tags-tiles is already defined
{org.apache.catalina.startup.TaglibUriRule}
TID: [-1] [Carbon] [2014-08-18 15:15:58,351]  INFO
{org.apache.tomcat.websocket.server.WsSci} -  JSR 356 WebSocket (Java
WebSocket 1.0) support is not available when running on Java 6. To suppress
this message, run Tomcat on Java 7, remove the WebSocket JARs from
$CATALINA_HOME/lib or add the WebSocketJARs to the
tomcat.util.scan.DefaultJarScanner.jarsToSkip property in
$CATALINA_BASE/conf/catalina.properties. Note that the deprecated Tomcat 7
WebSocket API will be available.  {org.apache.tomcat.websocket.server.WsSci}
​
How should we proceed with this? Shall these be kept as it is?

[1] https://wso2.org/jira/browse/CARBON-14807

Thanks.

/Gayashan


-- 
*Gayashan Amarasinghe*
Software Engineer | Platform TG
WSO2, Inc. | http://wso2.com
lean. enterprise. middleware

Mobile : +94718314517
Blog : gayashan-a.blogspot.com
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to