-
Bug
-
Resolution: Duplicate
-
Medium (View bug fix roadmap)
-
5.2.11
-
None
-
5.02
-
High number of users with uppercase names can caused long running threads in JIRA via the toLowerCase() methods of following class files:
- UserMatcherPredicate
- OfBizInternalMembershipDao
- OfBizUser
Long running threads found:
- Grep number of toLowerCase() occurrence in 6 thread dumps with each interval of 5 - 15 seconds.
teckie@teckie:~/attachments/JSP-191375$ grep "java.lang.String.toLowerCase(String.java" dump1.txt | wc -l 879
"http-bio-8443-exec-244" daemon prio=10 tid=0x000000001589e800 nid=0x12b8 runnable [0x00002b1092e7e000] java.lang.Thread.State: RUNNABLE at java.lang.String.toLowerCase(String.java:2411) at java.lang.String.toLowerCase(String.java:2524) at com.atlassian.jira.bc.user.search.UserMatcherPredicate.apply(UserMatcherPredicate.java:42) at com.atlassian.jira.bc.user.search.UserMatcherPredicate.apply(UserMatcherPredicate.java:15) at com.atlassian.jira.bc.user.search.DefaultUserPickerSearchService.findUsers(DefaultUserPickerSearchService.java:96) at com.atlassian.jira.bc.user.search.DefaultUserPickerSearchService.findUsers(DefaultUserPickerSearchService.java:51) at sun.reflect.GeneratedMethodAccessor1596.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.atlassian.multitenant.impl.MultiTenantComponentFactoryImpl$AbstractMultiTenantAwareInvocationHandler.invokeInternal(MultiTenantComponentFactoryImpl.java:181) at com.atlassian.multitenant.impl.MultiTenantComponentFactoryImpl$MultiTenantAwareInvocationHandler.invoke(MultiTenantComponentFactoryImpl.java:211) at com.sun.proxy.$Proxy160.findUsers(Unknown Source) ...
"http-bio-8443-exec-188" daemon prio=10 tid=0x000000001842b800 nid=0xd41 runnable [0x00002b107bd21000] java.lang.Thread.State: RUNNABLE at java.lang.String.toLowerCase(String.java:2411) at com.atlassian.crowd.embedded.impl.IdentifierUtils.toLowerCase(IdentifierUtils.java:42) at com.atlassian.jira.crowd.embedded.ofbiz.OfBizInternalMembershipDao.isUserDirectMember(OfBizInternalMembershipDao.java:75) at com.atlassian.jira.crowd.embedded.ofbiz.OfBizDelegatingMembershipDao.isUserDirectMember(OfBizDelegatingMembershipDao.java:65) at com.atlassian.crowd.directory.AbstractInternalDirectory.isUserDirectGroupMember(AbstractInternalDirectory.java:678) at com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.isUserDirectGroupMember(DelegatedAuthenticationDirectory.java:545) at com.atlassian.crowd.manager.directory.DirectoryManagerGeneric.isUserDirectGroupMember(DirectoryManagerGeneric.java:694) at com.atlassian.crowd.manager.directory.DirectoryManagerGeneric.isUserNestedGroupMember(DirectoryManagerGeneric.java:877) at com.atlassian.crowd.manager.application.ApplicationServiceGeneric.isUserNestedGroupMember(ApplicationServiceGeneric.java:1404) at com.atlassian.crowd.embedded.core.CrowdServiceImpl.isUserMemberOfGroup(CrowdServiceImpl.java:261) at com.atlassian.crowd.embedded.core.CrowdServiceImpl.isUserMemberOfGroup(CrowdServiceImpl.java:266) at com.atlassian.crowd.embedded.core.DelegatingCrowdService.isUserMemberOfGroup(DelegatingCrowdService.java:70) at com.atlassian.crowd.embedded.core.FilteredCrowdServiceImpl.isUserMemberOfGroup(FilteredCrowdServiceImpl.java:227) at com.atlassian.jira.security.roles.actor.GroupRoleActorFactory$GroupRoleActor.contains(GroupRoleActorFactory.java:94) at com.atlassian.jira.security.roles.CachingProjectRoleAndActorStore$CachedDefaultRoleActors.contains(CachingProjectRoleAndActorStore.java:510) at com.atlassian.jira.notification.type.ProjectRoleSecurityAndNotificationType.hasPermission(ProjectRoleSecurityAndNotificationType.java:169) at com.atlassian.jira.permission.DefaultPermissionSchemeManager.hasSchemePermission(DefaultPermissionSchemeManager.java:508) at com.atlassian.jira.permission.DefaultPermissionSchemeManager.hasPermission(DefaultPermissionSchemeManager.java:467) at com.atlassian.jira.permission.DefaultPermissionSchemeManager.hasSchemeAuthority(DefaultPermissionSchemeManager.java:414) at com.atlassian.jira.security.AbstractPermissionManager.hasProjectPermission(AbstractPermissionManager.java:240) at com.atlassian.jira.security.AbstractPermissionManager.hasPermission(AbstractPermissionManager.java:167) at com.atlassian.jira.security.AbstractPermissionManager.hasPermission(AbstractPermissionManager.java:152) at sun.reflect.GeneratedMethodAccessor290.invoke(Unknown Source) ...
"http-bio-8443-exec-225" daemon prio=10 tid=0x0000000016675000 nid=0x10fa runnable [0x00002b1090e5e000] java.lang.Thread.State: RUNNABLE at java.lang.String.toLowerCase(String.java:2411) at com.atlassian.crowd.embedded.impl.IdentifierUtils.toLowerCase(IdentifierUtils.java:42) at com.atlassian.crowd.embedded.api.UserComparator.hashCode(UserComparator.java:106) at com.atlassian.jira.crowd.embedded.ofbiz.OfBizUser.hashCode(OfBizUser.java:129) at java.util.HashMap.hash(HashMap.java:366) at java.util.HashMap.put(HashMap.java:496) at java.util.HashSet.add(HashSet.java:217) at com.atlassian.jira.user.util.UserUtilImpl$1.create(UserUtilImpl.java:149) at com.atlassian.jira.user.util.UserUtilImpl$1.create(UserUtilImpl.java:135) at com.atlassian.util.concurrent.ResettableLazyReference$InternalReference.create(ResettableLazyReference.java:143) at com.atlassian.util.concurrent.LazyReference$Sync.run(LazyReference.java:326) at com.atlassian.util.concurrent.LazyReference.getInterruptibly(LazyReference.java:146) at com.atlassian.util.concurrent.LazyReference.get(LazyReference.java:115) at com.atlassian.util.concurrent.ResettableLazyReference.get(ResettableLazyReference.java:89) at com.atlassian.jira.user.util.UserUtilImpl.getActiveUserCount(UserUtilImpl.java:672) at com.atlassian.jira.issue.search.searchers.util.UserSearcherHelperImpl.getSuggestedUsers(UserSearcherHelperImpl.java:135) at com.atlassian.jira.issue.search.searchers.util.UserSearcherHelperImpl.addUserGroupSuggestionParams(UserSearcherHelperImpl.java:66) at com.atlassian.jira.issue.search.searchers.renderer.AbstractUserSearchRenderer.getKickassVelocityParams(AbstractUserSearchRenderer.java:226) at com.atlassian.jira.issue.search.searchers.renderer.AbstractUserSearchRenderer.getVelocityParams(AbstractUserSearchRenderer.java:202) at com.atlassian.jira.issue.search.searchers.renderer.AbstractUserSearchRenderer.getEditHtml(AbstractUserSearchRenderer.java:92) at com.atlassian.jira.plugin.issuenav.service.DefaultSearcherService.getEditHtml(DefaultSearcherService.java:467) at com.atlassian.jira.plugin.issuenav.service.DefaultSearcherService.getValueResults(DefaultSearcherService.java:258) at com.atlassian.jira.plugin.issuenav.service.DefaultSearcherService.getSearchResults(DefaultSearcherService.java:178) at com.atlassian.jira.plugin.issuenav.service.DefaultSearcherService.searchWithJql(DefaultSearcherService.java:172) at com.atlassian.jira.plugin.issuenav.action.SearchAction.doJql(SearchAction.java:61) at sun.reflect.GeneratedMethodAccessor1645.invoke(Unknown Source) ...
- duplicates
-
JRASERVER-38145 OfBizUser should cache its hashcode to improve performance in large instances
-
- Closed
-
-
JRASERVER-38146 UserMatcherPredicate matches users using lowercase in a poorly performing manner
-
- Closed
-
- relates to
-
JRASERVER-26097 Bulk Edit assignee list performance limitation due to using CollectionList
-
- Closed
-
This is related to:
https://jira.atlassian.com/browse/JRA-26097
Opinion from edalgliesh might be helpful here.