[ https://issues.apache.org/jira/browse/QPID-8439?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Tomas Vavricka closed QPID-8439. -------------------------------- > [Broker-J] Stack overflow during logging > ---------------------------------------- > > Key: QPID-8439 > URL: https://issues.apache.org/jira/browse/QPID-8439 > Project: Qpid > Issue Type: Bug > Components: Broker-J > Affects Versions: qpid-java-broker-7.0.6 > Reporter: Thorsten Meinl > Priority: Major > Fix For: qpid-java-broker-9.2.1 > > Attachments: catalina.out > > > We are occasionally seeing stack overflow during logging in QPid. This > completely kills the broker because some data structure are not initialized > correctly any more afterwards. The problems lies in the combination of SLf4j > use in QPid and the logging in the BDB implementation. BDB is configured > using the Slf4jLoggingHandler in > {{org.apache.qpid.server.store.berkeleydb.StandardEnvironmentFacade.StandardEnvironmentFacade(StandardEnvironmentConfiguration)}} > which eventually ends up at the JDK logger (at least in our setup). However, > BDB has a {{com.sleepycat.je.utilint.ConfiguredRedirectHandler}} which is > appended to the the JDK logger and logs records from it to the configured > Slf4jLoggingHandler. Which in turn forwards them to the JDK logger and there > it starts again. The error is so obvious which makes me wonder why nobody > else has reported it before. Is there some kind of configuration that we have > set wrong? > *Analysis* > BDB JE uses JUL logging and adds its own logging handlers to its internal > loggers. When it logs something, the > com.sleepycat.je.utilint.ConfiguredRedirectHandler calls > org.apache.qpid.server.store.berkeleydb.logging.Slf4jLoggingHandler forming a > chain of recursive calls: > {noformat} > at java.util.logging.Logger.log(Logger.java:738) > at org.slf4j.impl.JDK14LoggerAdapter.log(JDK14LoggerAdapter.java:582) > at org.slf4j.impl.JDK14LoggerAdapter.warn(JDK14LoggerAdapter.java:378) > at > org.apache.qpid.server.store.berkeleydb.logging.Slf4jLoggingHandler$3.log(Slf4jLoggingHandler.java:148) > at > org.apache.qpid.server.store.berkeleydb.logging.Slf4jLoggingHandler.publish(Slf4jLoggingHandler.java:229) > at > com.sleepycat.je.utilint.ConfiguredRedirectHandler.publish(ConfiguredRedirectHandler.java:40) > at java.util.logging.Logger.log(Logger.java:738) > at org.slf4j.impl.JDK14LoggerAdapter.log(JDK14LoggerAdapter.java:582) > at org.slf4j.impl.JDK14LoggerAdapter.warn(JDK14LoggerAdapter.java:378) > at > org.apache.qpid.server.store.berkeleydb.logging.Slf4jLoggingHandler$3.log(Slf4jLoggingHandler.java:148) > at > org.apache.qpid.server.store.berkeleydb.logging.Slf4jLoggingHandler.publish(Slf4jLoggingHandler.java:229) > at > com.sleepycat.je.utilint.ConfiguredRedirectHandler.publish(ConfiguredRedirectHandler.java:40) > at java.util.logging.Logger.log(Logger.java:738) > at org.slf4j.impl.JDK14LoggerAdapter.log(JDK14LoggerAdapter.java:582) > at org.slf4j.impl.JDK14LoggerAdapter.warn(JDK14LoggerAdapter.java:378) > at > org.apache.qpid.server.store.berkeleydb.logging.Slf4jLoggingHandler$3.log(Slf4jLoggingHandler.java:148) > at > org.apache.qpid.server.store.berkeleydb.logging.Slf4jLoggingHandler.publish(Slf4jLoggingHandler.java:229) > at > com.sleepycat.je.utilint.ConfiguredRedirectHandler.publish(ConfiguredRedirectHandler.java:40) > at java.util.logging.Logger.log(Logger.java:738) > at org.slf4j.impl.JDK14LoggerAdapter.log(JDK14LoggerAdapter.java:582) > at org.slf4j.impl.JDK14LoggerAdapter.warn(JDK14LoggerAdapter.java:378) > at > org.apache.qpid.server.store.berkeleydb.logging.Slf4jLoggingHandler$3.log(Slf4jLoggingHandler.java:148) > at > org.apache.qpid.server.store.berkeleydb.logging.Slf4jLoggingHandler.publish(Slf4jLoggingHandler.java:229) > at > com.sleepycat.je.utilint.ConfiguredRedirectHandler.publish(ConfiguredRedirectHandler.java:40) > at java.util.logging.Logger.log(Logger.java:738) > at org.slf4j.impl.JDK14LoggerAdapter.log(JDK14LoggerAdapter.java:582) > {noformat} > *Implementation* > To fix the issue a ThreadLocal switch is added to the Slf4jLoggingHandler, > checking whether this call is recursive or not. To improve performance an > additional static check is added, verifying if slf4j-jdk14 library s loaded > or not. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org