Hi,
since the update from 6.5.x to 6.6.x we have been dealing with a deadlock problem.
The reason is that com.zaxxer.hikari.pool.ProxyLeakTask sometimes tries to log a Warning about database pool leakage (when tomcat starts), but this log is passed through code to org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton when the deadlock occurs.
Thread1
Deadlock found :-
"main" Id=1 in BLOCKED on lock=java.lang.String@181bb00b
owned by 6319096d-f634-47dd-9a79-f420f35dc17e housekeeper Id=7208
at org.springframework.cloud.context.scope.GenericScope$BeanLifecycleWrapper.getBean(GenericScope.java:375)
at org.springframework.cloud.context.scope.GenericScope.get(GenericScope.java:179)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
Thread 2:
Id=7208 in BLOCKED on lock=java.util.concurrent.ConcurrentHashMap@5a2fa6f3
owned by main Id=1
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:216)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1609)
...
at java...@11.0.16/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at org.apereo.cas.util.text.TicketCatalogMessageSanitationContributor.getTicketIdentifierPrefixes(TicketCatalogMessageSanitationContributor.java:30)
at org.apereo.cas.config.CasCoreUtilConfiguration$CasCoreUtilEssentialConfiguration$$Lambda$1525/0x0000000100ef7c40.apply(Unknown Source)
...
at java...@11.0.16/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at org.apereo.cas.config.CasCoreUtilConfiguration$CasCoreUtilEssentialConfiguration.messageSanitizer(CasCoreUtilConfiguration.java:168)
at java...@11.0.16/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1163)
at org.apereo.cas.util.spring.ApplicationContextProvider.getMessagSanitizer(ApplicationContextProvider.java:208)
at org.apereo.cas.logging.LoggingUtils.prepareLogEvent(LoggingUtils.java:28)
at org.apereo.cas.logging.CasAppender.append(CasAppender.java:80)
at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:161)
...
at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1891)
at org.apache.logging.slf4j.Log4jLogger.warn(Log4jLogger.java:254)
at com.zaxxer.hikari.pool.ProxyLeakTask.run(ProxyLeakTask.java:84)
at java...@11.0.16/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
For now, we have disabled logging com.zaxxer.hikari.pool.ProxyLeakTask. Does anyone have any idea how to solve this properly?
Thanks
Milan Siebenbürger