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

Uppercase names in JIRA browse users feature caused slowness

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

            [JRASERVER-38139] Uppercase names in JIRA browse users feature caused slowness

            This is related to:
            https://jira.atlassian.com/browse/JRA-26097

            Opinion from edalgliesh might be helpful here.

            Grzegorz Tanczyk (Inactive) added a comment - This is related to: https://jira.atlassian.com/browse/JRA-26097 Opinion from edalgliesh might be helpful here.

              Unassigned Unassigned
              yen@atlassian.com TeckEn (Inactive)
              Affected customers:
              1 This affects my team
              Watchers:
              4 Start watching this issue

                Created:
                Updated:
                Resolved: