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

XMLWordPrintable

    • 0
    • 2

      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.

            Assignee:
            Unassigned
            Reporter:
            Andriy Yakovlev [Atlassian]
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated: