Uploaded image for project: 'Crowd Data Center'
  1. Crowd Data Center
  2. CWD-2054

Searching users when aliases are enabled is slow

    XMLWordPrintable

Details

    • Our product teams collect and evaluate feedback from a number of different sources. To learn more about how we use customer feedback in the planning process, check out our new feature policy.

    Description

      In high load situation the alias handling in searchPrincipals can become a bottleneck. The dirty check performed by Hibernate is unnecessary in this situation, and eliminating it would eliminate this bottleck.

      "http-8095-Processor245" daemon prio=1 tid=0x08baf258 nid=0x375c waiting for monitor entry [0x82404000..0x824060b0]
      	at java.util.Collections$SynchronizedMap.get(Collections.java:1979)
      	- waiting to lock <0xa1b58c50> (a java.util.Collections$SynchronizedMap)
      	at org.hibernate.tuple.EntityModeToTuplizerMapping.getTuplizerOrNull(EntityModeToTuplizerMapping.java:53)
      	at org.hibernate.tuple.EntityModeToTuplizerMapping.getTuplizer(EntityModeToTuplizerMapping.java:66)
      	at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:353)
      	at org.hibernate.type.ComponentType.isDirty(ComponentType.java:224)
      	at org.hibernate.type.TypeFactory.findDirty(TypeFactory.java:597)
      	at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:3123)
      	at org.hibernate.event.def.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:479)
      	at org.hibernate.event.def.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:204)
      	at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:127)
      	at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:196)
      	at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
      	at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:35)
      	at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:969)
      	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1562)
      	at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
      	at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:305)
      	at com.atlassian.crowd.model.alias.AliasDAOHibernate$1.doInHibernate(AliasDAOHibernate.java:38)
      	at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:374)
      	at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:339)
      	at com.atlassian.crowd.model.alias.AliasDAOHibernate.findAliasObjectByUsername(AliasDAOHibernate.java:34)
      	at com.atlassian.crowd.model.alias.AliasDAOHibernate.findAliasByUsername(AliasDAOHibernate.java:94)
      	at com.atlassian.crowd.manager.application.AliasManagerImpl.findAliasByUsername(AliasManagerImpl.java:48)
      	at sun.reflect.GeneratedMethodAccessor225.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:585)
      	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
      	at com.atlassian.spring.interceptors.SpringProfilingInterceptor.invoke(SpringProfilingInterceptor.java:20)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
      	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
      	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
      	at $Proxy12.findAliasByUsername(Unknown Source)
      	at com.atlassian.crowd.service.soap.SecurityServerGeneric.buildAliasedUsers(SecurityServerGeneric.java:518)
      	at com.atlassian.crowd.service.soap.SecurityServerGeneric.searchPrincipals(SecurityServerGeneric.java:468)
      

      Attachments

        Issue Links

          Activity

            People

              onevalainen Olli Nevalainen
              onevalainen Olli Nevalainen
              Votes:
              3 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - 8h
                  8h
                  Remaining:
                  Remaining Estimate - 8h
                  8h
                  Logged:
                  Time Spent - Not Specified
                  Not Specified