Uppercase names in JIRA browse users feature caused slowness

XMLWordPrintable

    • 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)
      ...	
      

            Assignee:
            Unassigned
            Reporter:
            TeckEn (Inactive)
            Votes:
            1 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: