[ 
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

Reply via email to