[prev in list] [next in list] [prev in thread] [next in thread] 

List:       tomcat-user
Subject:    Redis Session Manager - add Fallback
From:       Benny_Kannengießer <Benny.Kannengiesser () re-lounge ! com>
Date:       2023-03-24 8:48:12
Message-ID: AM0PR08MB440455192EDC14A4B3F1B171B8849 () AM0PR08MB4404 ! eurprd08 ! prod ! outlook ! com
[Download RAW message or body]


Hi,

I'm using the Redis Session Manager \
(https://jitpack.io/p/ran-jit/TomcatClusterRedisSessionManager) to replicate sessions \
in a Tomcat cluster.

When the Redis database is down, a 500 response is returned in every request.
In this case I would rather like to switch back to local session management. Like \
this I could at least serve jsp pages. There's already an issue for this \
https://github.com/redisson/redisson/issues/1651 but nobody seems to care about it.

Does anybody have experience with the implementation of session managers?
Maybe it would be easy to just write a thin "wrapper"?

Exception stacktrace that is thrown when Redis is down:

21-Mar-2023 22:28:10.146 SEVERE [http-nio-8090-exec-10] \
org.apache.catalina.core.StandardHostValve.custom Exception Processing \
                ErrorPage[errorCode=500, location=/fehlerseiten/500.jsp]
org.apache.jasper.JasperException: javax.servlet.ServletException: \
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource \
                from the pool
            at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:638)
                
            at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:499)
                
            at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
                
            at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
                
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
                
            at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
                
            at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:461)
                
            at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:384)
                
            at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
                
            at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:394)
                
            at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:253)
                
            at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:348)
                
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:173)
                
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
                
            at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
                
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
                
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
                
            at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:417)
                
            at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
                
            at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
                
            at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
                
            at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
                
            at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
                
            at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
                
            at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
  at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: javax.servlet.ServletException: \
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource \
                from the pool
            at org.apache.jsp.fehlerseiten._500_jsp._jspService(_500_jsp.java:1106)
            at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
            at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
                
            ... 26 more
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a \
resource from the pool  at redis.clients.util.Pool.getResource(Pool.java:53)
            at redis.clients.jedis.JedisPool.getResource(JedisPool.java:226)
            at redis.clients.jedis.JedisPool.getResource(JedisPool.java:16)
            at tomcat.request.session.data.cache.impl.redis.RedisManager.setnx(RedisManager.java:52)
                
            at tomcat.request.session.data.cache.impl.redis.RedisCache.setnx(RedisCache.java:33)
                
            at tomcat.request.session.redis.SessionManager.createSession(SessionManager.java:107)
                
            at tomcat.request.session.redis.SessionManager.createSession(SessionManager.java:31)
                
            at org.apache.catalina.connector.Request.doGetSession(Request.java:3018)
            at org.apache.catalina.connector.Request.getSession(Request.java:2416)
            at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:908)
                
            at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:241)
                
            at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:564)
                
            at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:509)
                
            at org.apache.jasper.runtime.PageContextImpl.initialize(PageContextImpl.java:133)
                
            at org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:109)
                
            at org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:60)
                
            at org.apache.jsp.fehlerseiten._500_jsp._jspService(_500_jsp.java:140)
            ... 29 more
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: \
java.net.SocketTimeoutException: connect timed out  at \
                redis.clients.jedis.Connection.connect(Connection.java:207)
            at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93)
            at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1767)
            at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:106)
            at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:868)
                
            at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435)
                
            at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
  at redis.clients.util.Pool.getResource(Pool.java:49)
            ... 45 more
Caused by: java.net.SocketTimeoutException: connect timed out
            at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
            at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:412)
                
            at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:255)
                
            at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:237)
                
            at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
            at java.base/java.net.Socket.connect(Socket.java:609)
            at redis.clients.jedis.Connection.connect(Connection.java:184)
            ... 52 more

Thanks for any help or tips!

Best regards,
Benny



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic