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);
}
}
}
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