Re: [cas-user] Deadlocks and Uncommited Transaction

2019-08-14 Thread Bryan Wooten
We started with JPA ticket registry back in the 3.x days. Ran into the same
issue.

We moved to ehcache then to hazelcast.

We do about 300k (with Duo) logins per day. I would never recommend JPA
because of this exact issue.

-Bryan

University of Utah

On Fri, Oct 5, 2018 at 5:50 PM Trevor Fong  wrote:

> Hi There,
>
> We've trying out CAS 5.2.4 in a clustered environment with the ticket
> registry in an Oracle 12c database.  We've been seeing tons of persistent
> deadlock errors after a load test - you kill one locker and another
> deadlock springs up.
> Our DBA tells us that deadlocks were seen against the tables LOCKS,
> SERVICETICKET, TICKETGRANTINGTICKET
> Checking the catalina.out log, tons of messages like this:
>
> 2018-10-04 22:45:06,347 WARN
> [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] -  SQLState: 61000>
> 2018-10-04 22:45:06,347 ERROR
> [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] -  detected while waiting for resource
> >
> 2018-10-04 22:45:06,347 ERROR
> [org.apereo.cas.ticket.registry.DefaultTicketRegistryCleaner] -
>  statement>
> javax.persistence.PersistenceException:
> org.hibernate.exception.LockAcquisitionException: could not execute
> statement
> at
> org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:149)
> ~[hibernate-core-5.2.13.Final.jar:5.2.13.Final]
> at
> org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:157)
> ~[hibernate-core-5.2.13.Final.jar:5.2.13.Final]
> at
> org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1514)
> ~[hibernate-core-5.2.13.Final.jar:5.2.13.Final]
> at
> org.apereo.cas.ticket.registry.JpaTicketRegistry.deleteTicketGrantingTickets(JpaTicketRegistry.java:177)
> ~[cas-server-support-jpa-ticket-registry-5.2.4.jar:5.2.4]
> at
> org.apereo.cas.ticket.registry.JpaTicketRegistry.deleteSingleTicket(JpaTicketRegistry.java:145)
> ~[cas-server-support-jpa-ticket-registry-5.2.4.jar:5.2.4]
> at
> org.apereo.cas.ticket.registry.AbstractTicketRegistry.deleteTicket(AbstractTicketRegistry.java:126)
> ~[cas-server-core-tickets-5.2.4.jar:5.2.4]
> at
> org.apereo.cas.ticket.registry.AbstractTicketRegistry$$FastClassBySpringCGLIB$$d3c67a11.invoke()
> ~[cas-server-core-tickets-5.2.4.jar:5.2.4]
> at
> org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
> ~[spring-core-4.3.16.RELEASE.jar:4.3.16.RELEASE]
> at
> org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:669)
> ~[spring-aop-4.3.16.RELEASE.jar:4.3.16.RELEASE]
> at
> org.apereo.cas.ticket.registry.JpaTicketRegistry$$EnhancerBySpringCGLIB$$45967896.deleteTicket()
> ~[cas-server-support-jpa-ticket-registry-5.2.4.jar:5.2.4]
> at sun.reflect.GeneratedMethodAccessor351.invoke(Unknown Source)
> ~[?:?]
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> ~[?:1.8.0_172]
> at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_172]
> at
> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
> ~[spring-aop-4.3.16.RELEASE.jar:4.3.16.RELEASE]
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
> ~[spring-aop-4.3.16.RELEASE.jar:4.3.16.RELEASE]
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
> ~[spring-aop-4.3.16.RELEASE.jar:4.3.16.RELEASE]
> at
> org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
> ~[spring-aop-4.3.16.RELEASE.jar:4.3.16.RELEASE]
> at
> org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
> ~[spring-aop-4.3.16.RELEASE.jar:4.3.16.RELEASE]
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
> ~[spring-aop-4.3.16.RELEASE.jar:4.3.16.RELEASE]
> at
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
> ~[spring-aop-4.3.16.RELEASE.jar:4.3.16.RELEASE]
> at com.sun.proxy.$Proxy104.deleteTicket(Unknown Source) ~[?:?]
> at
> org.apereo.cas.ticket.registry.DefaultTicketRegistryCleaner.cleanTicket(DefaultTicketRegistryCleaner.java:78)
> ~[cas-server-core-tickets-5.2.4.jar:5.2.4]
> at
> java.util.stream.ReferencePipeline$4$1.accept(ReferencePipeline.java:210)
> ~[?:1.8.0_172]
> at
> java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
> ~[?:1.8.0_172]
> at java.util.Iterator.forEachRemaining(Iterator.java:116)
> ~[?:1.8.0_172]
> at
> java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
> ~[?:1.8.0_172]
> at
> java.util.stream.ReferencePipeli

[cas-user] Deadlocks and Uncommited Transaction

2018-10-05 Thread Trevor Fong
Hi There, 

We've trying out CAS 5.2.4 in a clustered environment with the ticket 
registry in an Oracle 12c database.  We've been seeing tons of persistent 
deadlock errors after a load test - you kill one locker and another 
deadlock springs up.
Our DBA tells us that deadlocks were seen against the tables LOCKS, 
SERVICETICKET, TICKETGRANTINGTICKET
Checking the catalina.out log, tons of messages like this:

2018-10-04 22:45:06,347 WARN 
[org.hibernate.engine.jdbc.spi.SqlExceptionHelper] - 
2018-10-04 22:45:06,347 ERROR 
[org.hibernate.engine.jdbc.spi.SqlExceptionHelper] - 
2018-10-04 22:45:06,347 ERROR 
[org.apereo.cas.ticket.registry.DefaultTicketRegistryCleaner] - 

javax.persistence.PersistenceException: 
org.hibernate.exception.LockAcquisitionException: could not execute 
statement
at 
org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:149)
 
~[hibernate-core-5.2.13.Final.jar:5.2.13.Final]
at 
org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:157)
 
~[hibernate-core-5.2.13.Final.jar:5.2.13.Final]
at 
org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1514)
 
~[hibernate-core-5.2.13.Final.jar:5.2.13.Final]
at 
org.apereo.cas.ticket.registry.JpaTicketRegistry.deleteTicketGrantingTickets(JpaTicketRegistry.java:177)
 
~[cas-server-support-jpa-ticket-registry-5.2.4.jar:5.2.4]
at 
org.apereo.cas.ticket.registry.JpaTicketRegistry.deleteSingleTicket(JpaTicketRegistry.java:145)
 
~[cas-server-support-jpa-ticket-registry-5.2.4.jar:5.2.4]
at 
org.apereo.cas.ticket.registry.AbstractTicketRegistry.deleteTicket(AbstractTicketRegistry.java:126)
 
~[cas-server-core-tickets-5.2.4.jar:5.2.4]
at 
org.apereo.cas.ticket.registry.AbstractTicketRegistry$$FastClassBySpringCGLIB$$d3c67a11.invoke()
 
~[cas-server-core-tickets-5.2.4.jar:5.2.4]
at 
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 
~[spring-core-4.3.16.RELEASE.jar:4.3.16.RELEASE]
at 
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:669)
 
~[spring-aop-4.3.16.RELEASE.jar:4.3.16.RELEASE]
at 
org.apereo.cas.ticket.registry.JpaTicketRegistry$$EnhancerBySpringCGLIB$$45967896.deleteTicket()
 
~[cas-server-support-jpa-ticket-registry-5.2.4.jar:5.2.4]
at sun.reflect.GeneratedMethodAccessor351.invoke(Unknown Source) 
~[?:?]
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 
~[?:1.8.0_172]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_172]
at 
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
 
~[spring-aop-4.3.16.RELEASE.jar:4.3.16.RELEASE]
at 
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
 
~[spring-aop-4.3.16.RELEASE.jar:4.3.16.RELEASE]
at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
 
~[spring-aop-4.3.16.RELEASE.jar:4.3.16.RELEASE]
at 
org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
 
~[spring-aop-4.3.16.RELEASE.jar:4.3.16.RELEASE]
at 
org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
 
~[spring-aop-4.3.16.RELEASE.jar:4.3.16.RELEASE]
at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
 
~[spring-aop-4.3.16.RELEASE.jar:4.3.16.RELEASE]
at 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
 
~[spring-aop-4.3.16.RELEASE.jar:4.3.16.RELEASE]
at com.sun.proxy.$Proxy104.deleteTicket(Unknown Source) ~[?:?]
at 
org.apereo.cas.ticket.registry.DefaultTicketRegistryCleaner.cleanTicket(DefaultTicketRegistryCleaner.java:78)
 
~[cas-server-core-tickets-5.2.4.jar:5.2.4]
at 
java.util.stream.ReferencePipeline$4$1.accept(ReferencePipeline.java:210) 
~[?:1.8.0_172]
at 
java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) 
~[?:1.8.0_172]
at java.util.Iterator.forEachRemaining(Iterator.java:116) 
~[?:1.8.0_172]
at 
java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
 
~[?:1.8.0_172]
at 
java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580) 
~[?:1.8.0_172]
at 
java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:270) 
~[?:1.8.0_172]
at 
java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) 
~[?:1.8.0_172]
at 
java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) 
~[?:1.8.0_172]
at 
java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382) 
~[?:1.8.0_172]
at