-
Type:
Bug
-
Status: Closed
-
Resolution: Fixed
-
Affects Version/s: 6.2.5 CE GA6, 6.2.10 EE GA1, 6.2.X EE, 7.0.0 DXP GA1, 7.0.0 DXP SP2
-
Fix Version/s: 6.2.X EE, 7.0.0 DXP FP8, 7.0.0 DXP SP2, 7.0.3 CE GA4, Master
-
Component/s: User Management, User Management > Users & Organizations
-
Branch Version/s:7.0.x, 6.2.x
-
Backported to Branch:Committed
-
Story Points:1.5
-
Fix Priority:3
-
Git Pull Request:
Reproduction Steps:
- Optional in 6.2.x: configure Solr 4 for Liferay 6.2. I couldn't reproduce the issue using Lucene.
- Start a Liferay tomcat bundle
- Log on as administrator user ("test")
- Go to Control Panel -> Server Administration -> Script
and run the attached groovy script: remove_usergroup... or remove_organization...
The script performs these actions:
- a new userGroup/organization is created
- a new user is created and added to the usergroup
- the user is removed from the usergroup/organization
- the usergroup/organization is deleted
Expected results:
The last action (usergroup deletion) should complete without error messages, because the group members were already removed
Actual Results:
A "RequiredUserGroupException" message is thrown when trying to delete the usergroup.
Detailed information on root cause:
" The same issue occurs when trying to remove Organizations.
When trying to remove an organization and/or a usergroup after removing its associated users, we get the following exceptions :
- Usergroup : com.liferay.portal.RequiredUserGroupException
- Organization: com.liferay.portal.RequiredOrganizationException
We are using the following API to remove users :
- usergroups : UserLocalServiceUtil.unsetUserGroupUsers
- organizations : UserLocalServiceUtil.unsetOrganizationUsers
We found out that those two methods are reindexing search index User document after the assocation between user and usergroup/organization has been removed. However, when trying to remove the organization/usergroup using the methods :
- usergroup : UserGroupLocalServiceUtil.deleteUserGroup(usergroup)
- organization: OrganizationLocalServiceUtil.deleteOrganization(organization)
The first action in those two methods is to retrieve the users count in usergroup/organization:
- Usergroup : userLocalService.getUserGroupUsersCount
- Organization: userLocalService.getOrganizationUsersCount
Those two methods are calling the Search Index to retrieve the count. As the search index may not be up to date at the time being due to an asynchronous process to reindex user, the RequiredOrganizationException/RequiredUserGroupException exception is raised, even though the users relations were previously removed. "
Reproduced on 6.2.x (865b426c13a129dec3d3ca3ac6a1b75d378e32d2)
Reproduced on Master (ee853d5384071a1af8b730a4d31076688175b0f8)