Hi All,

On Wed, 10 Sep 2014 at 21:13, Godwin Amila Shrimal <[email protected]> wrote:

> Hi,
>
> As per the discussion had with Azeez offline please see below the solution
> agreed.
>
> 1. Add a new overload method to *TenantManager *as *void deleteTenant(int
> tenantId, boolean removeFromPersistentStorage) throws UserStoreException;*
>
> 2. Implement this method in *JDBCTenantManager *class which use to delete
> only the map entry and execute in each worker nodes by calling from
> Cluster message.
>
> 3. Modify existing deleteTenant(int tenantId) to delete the persistent
>  storage which is calling in management node.
>
> Please see below modified code snippet in *JDBCTenantManager*
>
>
>          @Override
>     public void deleteTenant(int tenantId) throws UserStoreException {
>         try {
>             deleteTenant(tenantId, true);
>         } catch (org.wso2.carbon.user.api.UserStoreException e) {
>             throw new UserStoreException(e);
>         }
>     }
>
>     @Override
>     public void deleteTenant(int tenantId, boolean
> removeFromPersistentStorage)
>             throws org.wso2.carbon.user.api.UserStoreException {
>         // Remove tenant information from the cache.
>         String tenantDomain = (String) tenantIdDomainMap.remove(tenantId);
>         tenantDomainIdMap.remove(tenantDomain);
>
>         tenantCacheManager.clearCacheEntry(new TenantIdKey(tenantId));
>
>         if (removeFromPersistentStorage) {
>             Connection dbConnection = null;
>             PreparedStatement prepStmt = null;
>             try {
>                 dbConnection = getDBConnection();
>                 String sqlStmt = TenantConstants.DELETE_TENANT_SQL;
>                 prepStmt = dbConnection.prepareStatement(sqlStmt);
>                 prepStmt.setInt(1, tenantId);
>
>                 prepStmt.executeUpdate();
>                 dbConnection.commit();
>             } catch (SQLException e) {
>                 DatabaseUtil.rollBack(dbConnection);
>                 String msg = "Error in deleting the tenant with " +
> "tenant id: "
>                         + tenantId + ".";
>                 log.error(msg, e);
>                 throw new UserStoreException(msg, e);
>             } finally {
>                 DatabaseUtil.closeAllConnections(dbConnection,prepStmt);
>             }
>         }
>     }
>
> Did we follow this approach and fix this?
Appreciate some details on how this issue was overcome.

Thanks,
Pushpalanka

>
>
> Thanks
> Godwin
>
>
>
>
> On Tue, Sep 9, 2014 at 6:04 PM, Godwin Amila Shrimal <[email protected]>
> wrote:
>
>> Yes, there are two maps as *tenantDomainIdMap* and *tenantIdDomainMap*.
>> we'll address both.
>>
>>
>>
>> On Tue, Sep 9, 2014 at 5:23 PM, Amila Maha Arachchi <[email protected]>
>> wrote:
>>
>>> +1
>>>
>>> I remember there were two maps or a bidi-map. i.e. It was tracking both
>>> tenant ID and tenant domain. Make sure both issues are addressed (if my
>>> concern is valid).
>>>
>>> On Tue, Sep 9, 2014 at 3:37 AM, Godwin Amila Shrimal <[email protected]>
>>> wrote:
>>>
>>>> Hi.
>>>>
>>>> We had a discussion about cleaning cache data (delete map entry in
>>>> *JDBCTenantManger*), As per the discussion, we have to use cluster
>>>> message to notify all the nodes in the clustered environment to delete
>>>> the map entry.  Then we have to give a public method in
>>>> *JDBCTenantManger* to delete the entry which is accessible from the
>>>> *execute* method of the cluster message.
>>>>
>>>> listed below the summary of the implementation.
>>>>
>>>> 1. Create a new public method in *JDBCTenantManger *to delete the map
>>>> entry.
>>>> 2. Create a new class which extends ClusteringMessage and implements
>>>> Serializable.
>>>> 3. Implement the *execute* method on above class to perform the delete
>>>> map entry method inside the *JDBCTenantManger.*
>>>> 4. When execute the deleteTenant method in *TenantMgtAdminService, *create
>>>> a object from new Cluster Message class created in #2 and set the tenantId
>>>> as a property and send to all nodes in the cluster.
>>>> 5. Nodes will receive the above message, deserialize it and perform the
>>>> execute method of the cluster message, which will delete the map entry in
>>>> each nodes.
>>>>
>>>>
>>>> Please give a feedback on this.
>>>>
>>>>
>>>> Thanks
>>>> Godwin
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Mon, Sep 8, 2014 at 10:07 AM, Godwin Amila Shrimal <[email protected]>
>>>> wrote:
>>>>
>>>>> Hi All,
>>>>>
>>>>> Thanks for the valuable responses, As I understood we have to use cluster
>>>>> messages(Which I need to study more) to delete the map entry in each nodes
>>>>> in clustered environment.
>>>>> @Danushka: Yes we can use the existing deleteTenant method in
>>>>> *JDBCTenantManger*.
>>>>>
>>>>> Thanks
>>>>> Godwin
>>>>>
>>>>>
>>>>> On Sun, Sep 7, 2014 at 9:59 PM, Danushka Fernando <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> Hi
>>>>>>
>>>>>> On Sun, Sep 7, 2014 at 6:59 PM, Johann Nallathamby <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Sun, Sep 7, 2014 at 6:29 PM, Danushka Fernando <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> Hi
>>>>>>>> To the first most problem raised by Goodwin, AFAIU when you call
>>>>>>>> tenant deletion you call deleteTenant in TenantManager. So why cant you
>>>>>>>> clear the tenant from the map in JDBCTenantManger's deleteTenant 
>>>>>>>> method?
>>>>>>>>
>>>>>>>
>>>>>>> Yes. Should be able to do that. But as Shankar explained we need to
>>>>>>> send cluster messages to do the same in all the nodes.
>>>>>>>
>>>>>> Yes I also agree to that point. +1.
>>>>>>
>>>>>>>
>>>>>>>> Thanks & Regards
>>>>>>>> Danushka Fernando
>>>>>>>> Software Engineer
>>>>>>>> WSO2 inc. http://wso2.com/
>>>>>>>> Mobile : +94716332729
>>>>>>>>
>>>>>>>>
>>>>>>>> On Sat, Sep 6, 2014 at 8:20 PM, Nirmal Fernando <[email protected]>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Shouldn't this tenant event listener be triggered in all the nodes
>>>>>>>>> in the cluster? If not, I think we might need to fix it.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Sat, Sep 6, 2014 at 10:00 AM, Selvaratnam Uthaiyashankar <
>>>>>>>>> [email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> Even if we have public method, how will it work in a clustered
>>>>>>>>>> environment? For example, delete request is sent to Node1, (and lets 
>>>>>>>>>> say
>>>>>>>>>> one way or the other we delete the entry from map on Node1), and 
>>>>>>>>>> create
>>>>>>>>>> request is sent to Node 2 (which still has the entry in the map). 
>>>>>>>>>> Are we
>>>>>>>>>> going to use cluster messages to clear the entry from all nodes?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Friday, September 5, 2014, Nirmal Fernando <[email protected]>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> I think that should be ok. @Johann wdyt?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Fri, Sep 5, 2014 at 8:23 PM, Godwin Amila Shrimal <
>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi Nirmal,
>>>>>>>>>>>>
>>>>>>>>>>>> Yes we can do it, But current map doesn't have public access,
>>>>>>>>>>>> then we need to have a public method inside the *JDBCTenantManager
>>>>>>>>>>>> *to delete the entry.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Fri, Sep 5, 2014 at 8:00 PM, Nirmal Fernando <
>>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Can't we use a tenant event listener and remove the entry from
>>>>>>>>>>>>> the map on a tenant deletion event?
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Fri, Sep 5, 2014 at 7:50 PM, Godwin Amila Shrimal <
>>>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> We are working on tenant deletion implementation, once we
>>>>>>>>>>>>>> perform the current tenant deletion operation in
>>>>>>>>>>>>>> *TenantMgtAdminService* it deletes registry, user store etc.
>>>>>>>>>>>>>> data. But it doesn't allow to create a tenant again with the 
>>>>>>>>>>>>>> same tenant
>>>>>>>>>>>>>> domain name until restart the server.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Reason for above situation is tenant domain and id is keeping
>>>>>>>>>>>>>> in a map(*tenantDomainIdMap*) inside the *JDBCTenantManager*.
>>>>>>>>>>>>>> When perform delete operation it check the availability from 
>>>>>>>>>>>>>> this map.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> As per the discussion we can see following solutions for this.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *Solution1*
>>>>>>>>>>>>>> Check the tenant availability from database not from memory
>>>>>>>>>>>>>> data, but this will be costly if it is a frequently perform 
>>>>>>>>>>>>>> operation.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *Solution2*
>>>>>>>>>>>>>> We can give a public access to delete the particular key in
>>>>>>>>>>>>>> the map, this will be a security issue which people can pass 
>>>>>>>>>>>>>> tenant domain
>>>>>>>>>>>>>> and perform deletion.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *Solution3*
>>>>>>>>>>>>>> Run a periodic operation which check the availability of the
>>>>>>>>>>>>>> tenant in the database and delete from map which are not exist.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> We are looking for a feedback on this.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>> Godwin
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> *Godwin Amila Shrimal*
>>>>>>>>>>>>>> Senior Software Engineer
>>>>>>>>>>>>>> WSO2 Inc.; http://wso2.com
>>>>>>>>>>>>>> lean.enterprise.middleware
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> mobile: *+94772264165*
>>>>>>>>>>>>>> linkedin: *http://lnkd.in/KUum6D <http://lnkd.in/KUum6D>*
>>>>>>>>>>>>>> twitter: https://twitter.com/godwinamila
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> Architecture mailing list
>>>>>>>>>>>>>> [email protected]
>>>>>>>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks & regards,
>>>>>>>>>>>>> Nirmal
>>>>>>>>>>>>>
>>>>>>>>>>>>> Senior Software Engineer- Platform Technologies Team, WSO2 Inc.
>>>>>>>>>>>>> Mobile: +94715779733
>>>>>>>>>>>>> Blog: http://nirmalfdo.blogspot.com/
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> Architecture mailing list
>>>>>>>>>>>>> [email protected]
>>>>>>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> *Godwin Amila Shrimal*
>>>>>>>>>>>> Senior Software Engineer
>>>>>>>>>>>> WSO2 Inc.; http://wso2.com
>>>>>>>>>>>> lean.enterprise.middleware
>>>>>>>>>>>>
>>>>>>>>>>>> mobile: *+94772264165*
>>>>>>>>>>>> linkedin: *http://lnkd.in/KUum6D <http://lnkd.in/KUum6D>*
>>>>>>>>>>>> twitter: https://twitter.com/godwinamila
>>>>>>>>>>>>
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> Architecture mailing list
>>>>>>>>>>>> [email protected]
>>>>>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>>
>>>>>>>>>>> Thanks & regards,
>>>>>>>>>>> Nirmal
>>>>>>>>>>>
>>>>>>>>>>> Senior Software Engineer- Platform Technologies Team, WSO2 Inc.
>>>>>>>>>>> Mobile: +94715779733
>>>>>>>>>>> Blog: http://nirmalfdo.blogspot.com/
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> S.Uthaiyashankar
>>>>>>>>>> VP Engineering
>>>>>>>>>> WSO2 Inc.
>>>>>>>>>> http://wso2.com/ - "lean . enterprise . middleware"
>>>>>>>>>>
>>>>>>>>>> Phone: +94 714897591
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Architecture mailing list
>>>>>>>>>> [email protected]
>>>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>>
>>>>>>>>> Thanks & regards,
>>>>>>>>> Nirmal
>>>>>>>>>
>>>>>>>>> Senior Software Engineer- Platform Technologies Team, WSO2 Inc.
>>>>>>>>> Mobile: +94715779733
>>>>>>>>> Blog: http://nirmalfdo.blogspot.com/
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Architecture mailing list
>>>>>>>>> [email protected]
>>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Architecture mailing list
>>>>>>>> [email protected]
>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Thanks & Regards,
>>>>>>>
>>>>>>> *Johann Dilantha Nallathamby*
>>>>>>> Associate Technical Lead & Product Lead of WSO2 Identity Server
>>>>>>> Integration Technologies Team
>>>>>>> WSO2, Inc.
>>>>>>> lean.enterprise.middleware
>>>>>>>
>>>>>>> Mobile - *+94777776950*
>>>>>>> Blog - *http://nallaa.wordpress.com <http://nallaa.wordpress.com>*
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Architecture mailing list
>>>>>>> [email protected]
>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>>
>>>>>>> Thanks & Regards
>>>>>> Danushka Fernando
>>>>>> Software Engineer
>>>>>> WSO2 inc. http://wso2.com/
>>>>>> Mobile : +94716332729
>>>>>>
>>>>>> _______________________________________________
>>>>>> Architecture mailing list
>>>>>> [email protected]
>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> *Godwin Amila Shrimal*
>>>>> Senior Software Engineer
>>>>> WSO2 Inc.; http://wso2.com
>>>>> lean.enterprise.middleware
>>>>>
>>>>> mobile: *+94772264165*
>>>>> linkedin: *http://lnkd.in/KUum6D <http://lnkd.in/KUum6D>*
>>>>> twitter: https://twitter.com/godwinamila
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> *Godwin Amila Shrimal*
>>>> Senior Software Engineer
>>>> WSO2 Inc.; http://wso2.com
>>>> lean.enterprise.middleware
>>>>
>>>> mobile: *+94772264165*
>>>> linkedin: *http://lnkd.in/KUum6D <http://lnkd.in/KUum6D>*
>>>> twitter: https://twitter.com/godwinamila
>>>>
>>>
>>>
>>>
>>> --
>>> *Amila Maharachchi*
>>> Senior Technical Lead
>>> WSO2, Inc.; http://wso2.com
>>>
>>> Blog: http://maharachchi.blogspot.com
>>> Mobile: +94719371446
>>>
>>>
>>
>>
>> --
>> *Godwin Amila Shrimal*
>> Senior Software Engineer
>> WSO2 Inc.; http://wso2.com
>> lean.enterprise.middleware
>>
>> mobile: *+94772264165*
>> linkedin: *http://lnkd.in/KUum6D <http://lnkd.in/KUum6D>*
>> twitter: https://twitter.com/godwinamila
>>
>
>
>
> --
> *Godwin Amila Shrimal*
> Senior Software Engineer
> WSO2 Inc.; http://wso2.com
> lean.enterprise.middleware
>
> mobile: *+94772264165*
> linkedin: *http://lnkd.in/KUum6D <http://lnkd.in/KUum6D>*
> twitter: https://twitter.com/godwinamila
> _______________________________________________
> Architecture mailing list
> [email protected]
> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>


-- 
Pushpalanka.
-- 
Pushpalanka Jayawardhana, B.Sc.Eng.(Hons).
Associate Tech Lead, WSO2 Lanka (pvt) Ltd;  wso2.com/
Mobile: +94779716248
Blog: pushpalankajaya.blogspot.com/ | LinkedIn:
lk.linkedin.com/in/pushpalanka/ | Twitter: @pushpalanka
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to