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

Improve performance of com.atlassian.jira.issue.search.SearchRequest getOwner

    XMLWordPrintable

Details

    • 1
    • We collect Jira feedback from various sources, and we evaluate what we've collected when planning our product roadmap. To understand how this piece of feedback will be reviewed, see our Implementation of New Features Policy.

    Description

      Problem

      Method getOwner from com.atlassian.jira.issue.search.SearchRequest doesn't have private value for it and resolves the private ownerKey into ApplicationUser dynamically.

      Example of stacktrace:

      "https-jsse-nio-12001-exec-174  #333858 daemon prio=5 os_prio=0 tid=0x00007f9a980d3800 nid=0x12ee7 runnable [0x00007f8dc98a6000]
         java.lang.Thread.State: RUNNABLE
      	at java.lang.ThreadLocal$ThreadLocalMap.remove(ThreadLocal.java:496)
      	at java.lang.ThreadLocal$ThreadLocalMap.access$200(ThreadLocal.java:298)
      	at java.lang.ThreadLocal.remove(ThreadLocal.java:222)
      	at java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryReleaseShared(ReentrantReadWriteLock.java:426)
      	at java.util.concurrent.locks.AbstractQueuedSynchronizer.releaseShared(AbstractQueuedSynchronizer.java:1341)
      	at java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.unlock(ReentrantReadWriteLock.java:881)
      	at net.sf.ehcache.store.chm.SelectableConcurrentHashMap$Segment.get(SelectableConcurrentHashMap.java:735)
      	at net.sf.ehcache.store.chm.SelectableConcurrentHashMap.get(SelectableConcurrentHashMap.java:324)
      	at net.sf.ehcache.store.MemoryStore.get(MemoryStore.java:344)
      	at net.sf.ehcache.Cache.get(Cache.java:1751)
      	at net.sf.ehcache.constructs.blocking.BlockingCache.get(BlockingCache.java:161)
      	at com.atlassian.cache.ehcache.LoadingCache.get(LoadingCache.java:75)
      	at net.sf.ehcache.constructs.blocking.BlockingCache.get(BlockingCache.java:318)
      	at com.atlassian.cache.ehcache.DelegatingCachedReference.get(DelegatingCachedReference.java:68)
      	at com.atlassian.jira.cache.DeferredReplicationCachedReference$$Lambda$258/1552306034.get(Unknown Source)
      	at com.atlassian.jira.cluster.cache.ehcache.BlockingParallelCacheReplicator.runDeferred(BlockingParallelCacheReplicator.java:172)
      	at com.atlassian.jira.cache.DeferredReplicationCachedReference.get(DeferredReplicationCachedReference.java:28)
      	at com.atlassian.jira.crowd.embedded.ofbiz.OfBizDirectoryDao.findAll(OfBizDirectoryDao.java:78)
      	at com.atlassian.jira.crowd.embedded.ofbiz.OfBizApplication.getDirectoryMappings(OfBizApplication.java:57)
      	at com.atlassian.crowd.manager.application.ApplicationServiceGeneric.getActiveDirectories(ApplicationServiceGeneric.java:2474)
      	at com.atlassian.crowd.manager.recovery.RecoveryModeAwareApplicationService.getActiveDirectories(RecoveryModeAwareApplicationService.java:54)
      	at com.atlassian.crowd.manager.application.ApplicationServiceGeneric.findUserByName(ApplicationServiceGeneric.java:358)
      	at com.atlassian.crowd.embedded.core.CrowdServiceImpl.getUser(CrowdServiceImpl.java:100)
      	at com.atlassian.jira.user.util.DefaultUserManager.getCrowdUser(DefaultUserManager.java:210)
      	at com.atlassian.jira.user.util.DefaultUserManager.toApplicationUser(DefaultUserManager.java:296)
      	at com.atlassian.jira.user.util.DefaultUserManager$$Lambda$701/1666595657.apply(Unknown Source)
      	at java.util.Optional.flatMap(Optional.java:241)
      	at com.atlassian.jira.user.util.DefaultUserManager.getUserByName(DefaultUserManager.java:258)
      	at com.atlassian.jira.user.util.DefaultUserManager.getUserObject(DefaultUserManager.java:220)
      	at com.atlassian.jira.user.util.DefaultUserManager.getUser(DefaultUserManager.java:215)
      	at com.atlassian.jira.user.util.DefaultUserManager.lambda$getApplicationUserEvenWhenUnknown$4(DefaultUserManager.java:285)
      	at com.atlassian.jira.user.util.DefaultUserManager$$Lambda$700/642591222.apply(Unknown Source)
      	at java.util.Optional.map(Optional.java:215)
      	at com.atlassian.jira.user.util.DefaultUserManager.getApplicationUserEvenWhenUnknown(DefaultUserManager.java:284)
      	at com.atlassian.jira.user.util.DefaultUserManager.getUserByKeyEvenWhenUnknown(DefaultUserManager.java:263)
      	at com.atlassian.jira.issue.search.SearchRequest.getOwner(SearchRequest.java:191)
      ...
      

      Suggested solution

      Store ApplicationUser inside of the filter.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              ayakovlev@atlassian.com Andriy Yakovlev [Atlassian]
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated: