Searching users when aliases are enabled is slow

XMLWordPrintable

      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)
      

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

              Created:
              Updated:
              Resolved:

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