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