Hi Anjana, On Tue, May 22, 2012 at 3:07 PM, Anjana Fernando <anj...@wso2.com> wrote:
> Hi, > > On Tue, May 22, 2012 at 3:02 PM, Afkham Azeez <az...@wso2.com> wrote: > >> One other thing we noticed during profiling sometime back was getting the >> entire tenant list & iterating over it was very time consuming since >> certain UM APIs were being called, which go up to the DB level when >> retrieving tenant info. So, this will increase the startup time. > > > Well, the retrieving the tenant list is a one time thing for server > startup, which is done using > "getRealmService().getTenantManager().getAllTenants()", and iterating over > it means, simply calling Tenant.getId() on each object. How slow are we > talking about here .. several seconds? .. if so, this should be somehow > optimized in the UM API level. Because, as I see, retrieving the list of > all tenant ids is a required action. > > Say there are 2000 tenants. This is just one call, but after that you load all 2000 user realms in a iterator for each tenant. Meaning another 2000 db calls to check for custom realms. Now it is 2001 db calls. thanks, dimuthu > Cheers, > Anjana. > > >> >> >> On Tue, May 22, 2012 at 2:59 PM, Anjana Fernando <anj...@wso2.com> wrote: >> >>> Hi Azeez, >>> >>> On Tue, May 22, 2012 at 2:27 PM, Afkham Azeez <az...@wso2.com> wrote: >>> >>>> >>>> >>>> On Tue, May 22, 2012 at 2:22 PM, Anjana Fernando <anj...@wso2.com>wrote: >>>> >>>>> Hi Dimuthu, >>>>> >>>>> On Tue, May 22, 2012 at 2:15 PM, Dimuthu Leelarathne < >>>>> dimut...@wso2.com> wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> Currently org.wso2.carbon.ntask.core.service.impl.TaskServiceImpl is >>>>>> initializing task managers for all tenants at startup. This is against >>>>>> our >>>>>> tenant lazy loading concepts. >>>>>> >>>>>> Please move tenant ntask initialization to a >>>>>> Axis2ConfigurationContextObserver. This will be called when >>>>>> TenanConfiguraitonContext is loaded. >>>>>> >>>>> >>>>> As I remember, this was already brought up by Azeez earlier. The >>>>> rationale is, a scheduled task is not a service. It is not something that >>>>> is activated on-demand by a user in a specific tenant. But is suppose to >>>>> work in the scheduled manner continuously. So when a user in a tenant >>>>> schedules a task, it should always run, and should not unload when the >>>>> tenant is unloaded. And when starting the server also, all the tasks >>>>> should >>>>> continue. >>>>> >>>> >>>> But now we have a major problem if we have say 100,001 tenants. We will >>>> create this for all tenants unnecessarily. With the next release, we have >>>> tenant partitions defined at the LB level, which relies on the worker nodes >>>> to lazy load the tenants. There is no tenant partitioning concept at the >>>> worker node level. So, even though cluster as-0-100 loads tenants 0-100, >>>> the task thing will load all 100,001! We need to find a solution to this >>>> issue. >>>> >>> >>> OK, so this has actually turned into a tenant partitioning problem. >>> First of all, when you say initializing a TaskManager, it just means, >>> creating an object to represent a tasks for a specific tenant and a >>> connection to a centrally managed Group object in ZooKeeper. If the tasks >>> are not scheduled, it will simply take a block of memory and just sit >>> there. And it will not load the tenants, I'm simply retrieving the total >>> tenant id list and only loading the tenant aware task managers, it should >>> not load other services and all. And also, the actual tasks will not be >>> scheduled in a single server, they will be distributed across the whole >>> cluster. >>> >>> So anyway, to support the tenant partitioning problem. I suggest the >>> following. Lets say we have several clusters to represent different tenant >>> partitions. For example, 3 clusters, to divide the tenants equally. When >>> starting the server, we can set a Java system property saying, the number >>> of clusters used for tenant partitioning and the partitioning cluster the >>> current server will belong to. So for example -Dtenant.partition.count=3 >>> -Dmy.tenant.partition=2 (suggest suitable names). So with these information >>> at hand, when starting the server, we can start only the tasks suppose to >>> be scheduled in this server (take tenant_id % tenant.partition.count and >>> match it to my.tenant.partition), and also when a new tenant is joining, we >>> can do the same. Hopefully, this type of a method can be used for other >>> type of similar services too. I can implement this in ntask now, if it is >>> an acceptable solution. >>> >>> Cheers, >>> Anjana. >>> >>> >>>>> Cheers, >>>>> Anjana. >>>>> >>>>> >>>>>> >>>>>> thanks, >>>>>> dimuthu >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Dimuthu Leelarathne >>>>>> Technical Lead >>>>>> >>>>>> WSO2, Inc. (http://wso2.com) >>>>>> email: dimut...@wso2.com >>>>>> >>>>>> Lean . Enterprise . Middleware >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> *Anjana Fernando* >>>>> Associate Technical Lead >>>>> WSO2 Inc. | http://wso2.com >>>>> lean . enterprise . middleware >>>>> >>>>> _______________________________________________ >>>>> Dev mailing list >>>>> Dev@wso2.org >>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>>>> >>>>> >>>> >>>> >>>> -- >>>> *Afkham Azeez* >>>> Director of Architecture; WSO2, Inc.; http://wso2.com >>>> Member; Apache Software Foundation; http://www.apache.org/ >>>> * <http://www.apache.org/>** >>>> email: **az...@wso2.com* <az...@wso2.com>* cell: +94 77 3320919 >>>> blog: **http://blog.afkham.org* <http://blog.afkham.org>* >>>> twitter: >>>> **http://twitter.com/afkham_azeez*<http://twitter.com/afkham_azeez> >>>> * >>>> linked-in: **http://lk.linkedin.com/in/afkhamazeez* >>>> >>>> * >>>> * >>>> *Lean . Enterprise . Middleware* >>>> >>>> >>> >>> >>> -- >>> *Anjana Fernando* >>> Associate Technical Lead >>> WSO2 Inc. | http://wso2.com >>> lean . enterprise . middleware >>> >> >> >> >> -- >> *Afkham Azeez* >> Director of Architecture; WSO2, Inc.; http://wso2.com >> Member; Apache Software Foundation; http://www.apache.org/ >> * <http://www.apache.org/>** >> email: **az...@wso2.com* <az...@wso2.com>* cell: +94 77 3320919 >> blog: **http://blog.afkham.org* <http://blog.afkham.org>* >> twitter: **http://twitter.com/afkham_azeez*<http://twitter.com/afkham_azeez> >> * >> linked-in: **http://lk.linkedin.com/in/afkhamazeez* >> * >> * >> *Lean . Enterprise . Middleware* >> >> > > > -- > *Anjana Fernando* > Associate Technical Lead > WSO2 Inc. | http://wso2.com > lean . enterprise . middleware > -- Dimuthu Leelarathne Technical Lead WSO2, Inc. (http://wso2.com) email: dimut...@wso2.com Lean . Enterprise . Middleware
_______________________________________________ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev