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

UserMatcherPredicate matches users using lowercase in a poorly performing manner

      UserMatcherPredicate is used to search for users by a combination of :

      • user name
      • email address and
      • display name.
        It does all matching in a case insensitive way.

      The way it does this is far less well performing that it could be. This has a high impact when the number of users to be searched is very large.

      Important Fix Versions Note

      • This is fixed in JIRA 6.1.8 and in 6.2.6+
        • 6.2 through 6.2.5 does not include this fix

            [JRASERVER-38146] UserMatcherPredicate matches users using lowercase in a poorly performing manner

            This matcher is still a heavy user of CPU as we do a case insensitive search for matches on user name, email address or display name, but we have achieved performance improvement of x2 to x4 times in most cases.

            Trevor Campbell (Inactive) added a comment - This matcher is still a heavy user of CPU as we do a case insensitive search for matches on user name, email address or display name, but we have achieved performance improvement of x2 to x4 times in most cases.

            A suggested solution is to use a Collator and compare character by character, thus enabling mismatches to be discarded very early on, rather than fully lower casing all string components. (Most comparisons will miss on the first character)

            Trevor Campbell (Inactive) added a comment - A suggested solution is to use a Collator and compare character by character, thus enabling mismatches to be discarded very early on, rather than fully lower casing all string components. (Most comparisons will miss on the first character)

            The following stack trace snippet shows the location of the problem:

            	at java.lang.String.toLowerCase(String.java:2439)
            	at java.lang.String.toLowerCase(String.java:2524)
            	at com.atlassian.jira.bc.user.search.UserMatcherPredicate.apply(UserMatcherPredicate.java:62)
            	at com.atlassian.jira.bc.user.search.UserMatcherPredicate.apply(UserMatcherPredicate.java:15)
            	at com.atlassian.jira.bc.user.search.DefaultAssigneeService.findAssignableUsers(DefaultAssigneeService.java:108)
            	at com.atlassian.jira.bc.user.search.DefaultAssigneeService.access$200(DefaultAssigneeService.java:46)
            	at com.atlassian.jira.bc.user.search.DefaultAssigneeService$AssignableUsers.findAllAsSet(DefaultAssigneeService.java:440)
            	at com.atlassian.jira.bc.user.search.DefaultAssigneeService$AssignableUsers.findAll(DefaultAssigneeService.java:423)
            	at com.atlassian.jira.bc.user.search.DefaultAssigneeService$AssignableUsers.findAllAndSort(DefaultAssigneeService.java:448)
            	at com.atlassian.jira.bc.user.search.DefaultAssigneeService.findAssignableUsers(DefaultAssigneeService.java:87)
            

            Trevor Campbell (Inactive) added a comment - The following stack trace snippet shows the location of the problem: at java.lang.String.toLowerCase(String.java:2439) at java.lang.String.toLowerCase(String.java:2524) at com.atlassian.jira.bc.user.search.UserMatcherPredicate.apply(UserMatcherPredicate.java:62) at com.atlassian.jira.bc.user.search.UserMatcherPredicate.apply(UserMatcherPredicate.java:15) at com.atlassian.jira.bc.user.search.DefaultAssigneeService.findAssignableUsers(DefaultAssigneeService.java:108) at com.atlassian.jira.bc.user.search.DefaultAssigneeService.access$200(DefaultAssigneeService.java:46) at com.atlassian.jira.bc.user.search.DefaultAssigneeService$AssignableUsers.findAllAsSet(DefaultAssigneeService.java:440) at com.atlassian.jira.bc.user.search.DefaultAssigneeService$AssignableUsers.findAll(DefaultAssigneeService.java:423) at com.atlassian.jira.bc.user.search.DefaultAssigneeService$AssignableUsers.findAllAndSort(DefaultAssigneeService.java:448) at com.atlassian.jira.bc.user.search.DefaultAssigneeService.findAssignableUsers(DefaultAssigneeService.java:87)

              ohernandez@atlassian.com Oswaldo Hernandez (Inactive)
              tcampbell Trevor Campbell (Inactive)
              Affected customers:
              1 This affects my team
              Watchers:
              5 Start watching this issue

                Created:
                Updated:
                Resolved: