Hi Pushpalanka,

We fixed this by using caches for tenantIdDomainMap and tenantDomainIdMap.
Once an item is removed from a node, other nodes' same cache will be
invalidated using local cache invalidations cluster messages.

Cheers,
Isura.

On Thu, Feb 21, 2019 at 7:41 PM Pushpalanka Jayawardhana <la...@wso2.com>
wrote:

> Hi All,
>
> On Wed, 10 Sep 2014 at 21:13, Godwin Amila Shrimal <god...@wso2.com>
> 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 <god...@wso2.com>
>> 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 <ami...@wso2.com>
>>> 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 <god...@wso2.com>
>>>> 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 <god...@wso2.com
>>>>> > 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 <danush...@wso2.com
>>>>>> > wrote:
>>>>>>
>>>>>>> Hi
>>>>>>>
>>>>>>> On Sun, Sep 7, 2014 at 6:59 PM, Johann Nallathamby <joh...@wso2.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Sun, Sep 7, 2014 at 6:29 PM, Danushka Fernando <
>>>>>>>> danush...@wso2.com> 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 <nir...@wso2.com>
>>>>>>>>> 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 <
>>>>>>>>>> shan...@wso2.com> 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 <nir...@wso2.com>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> I think that should be ok. @Johann wdyt?
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Fri, Sep 5, 2014 at 8:23 PM, Godwin Amila Shrimal <
>>>>>>>>>>>> god...@wso2.com> 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 <
>>>>>>>>>>>>> nir...@wso2.com> 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 <
>>>>>>>>>>>>>> god...@wso2.com> 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
>>>>>>>>>>>>>>> Architecture@wso2.org
>>>>>>>>>>>>>>> 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
>>>>>>>>>>>>>> Architecture@wso2.org
>>>>>>>>>>>>>> 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
>>>>>>>>>>>>> Architecture@wso2.org
>>>>>>>>>>>>> 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
>>>>>>>>>>> Architecture@wso2.org
>>>>>>>>>>> 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
>>>>>>>>>> Architecture@wso2.org
>>>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Architecture mailing list
>>>>>>>>> Architecture@wso2.org
>>>>>>>>> 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
>>>>>>>> Architecture@wso2.org
>>>>>>>> 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
>>>>>>> Architecture@wso2.org
>>>>>>> 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
>> Architecture@wso2.org
>> 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
> Architecture@wso2.org
> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>


-- 

*Isura Dilhara Karunaratne*
Associate Technical Lead | WSO2 <http://wso2.com/>
*lean.enterprise.middleware*
Email: is...@wso2.com
Mob : +94 772 254 810
Blog : http://isurad.blogspot.com/
_______________________________________________
Architecture mailing list
Architecture@wso2.org
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to