Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-38139

Uppercase names in JIRA browse users feature caused slowness

    XMLWordPrintable

Details

    Description

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

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              yen@atlassian.com TeckEn (Inactive)
              Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: