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

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

      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.

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

              Created:
              Updated: