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 (Inactive)
              Reporter:
              Olli Nevalainen (Inactive)
              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