Redis Extension Issues

I had been using a third-party redis extension for years for Mura caches and session sharing among cluster replicas. However, with the latest Lucee (5.3.10.97), it fails (Can't Install on Latest Lucee · Issue #5 · markussackmann/extension-redis-single · GitHub – attn: @markussackmann ).

I figured I’d try the LAS-provide extension (“Redis driver” 3.0.0.48) but I encountered a few issues.

  • Bug with namespace support: [LDEV-4389] - Lucee
  • Bug with Admin GUI: [LDEV-4390] - Lucee
  • Users are sporadically getting “logged out” prematurely and I’m also getting a lot of errors such as these in the logs:
  java.lang.ArrayIndexOutOfBoundsException:Index 0 out of bounds for length 0;lucee.runtime.exp.NativeException: java.lang.ArrayIndexOutOfBoundsException:Index 0 out of bounds for length 0
at lucee.extension.io.cache.util.Coder.isGzip(Coder.java:153)
	at lucee.extension.io.cache.util.Coder.evaluate(Coder.java:67)
	at lucee.extension.io.cache.redis.RedisCache.getCacheEntry(RedisCache.java:260)
	at lucee.extension.io.cache.redis.CacheSupport.getValue(CacheSupport.java:98)
	at lucee.runtime.functions.cache.CacheGet._call(CacheGet.java:96)
	at lucee.runtime.functions.cache.CacheGet.call(CacheGet.java:88)
	at cache.provider.cachelucee_cfc$cf.udfCall(/mura/cache/provider/cacheLucee.cfc:34)
	at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:112)
	at lucee.runtime.type.UDFImpl._call(UDFImpl.java:350)
	at lucee.runtime.type.UDFImpl.call(UDFImpl.java:223)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:696)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:584)
	at lucee.runtime.ComponentImpl.call(ComponentImpl.java:1931)
	at lucee.runtime.util.VariableUtilImpl.callFunctionWithoutNamedValues(VariableUtilImpl.java:787)
	at lucee.runtime.PageContextImpl.getFunction(PageContextImpl.java:1775)
	at cache.cacheadvanced_cfc$cf.udfCall(/mura/cache/cacheAdvanced.cfc:30)
	at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:112)
	at lucee.runtime.type.UDFImpl._call(UDFImpl.java:350)
	at lucee.runtime.type.UDFImpl.call(UDFImpl.java:223)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:696)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:584)
	at lucee.runtime.ComponentImpl.call(ComponentImpl.java:1931)
	at lucee.runtime.util.VariableUtilImpl.callFunctionWithoutNamedValues(VariableUtilImpl.java:787)
	at lucee.runtime.PageContextImpl.getFunction(PageContextImpl.java:1775)
	at core.modules.v1.alturl.model.handlers.handler_cfc$cf.udfCall(/muraWRM/core/modules/v1/alturl/model/handlers/handler.cfc:12)
	at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:112)
	at lucee.runtime.type.UDFImpl._call(UDFImpl.java:350)
	at lucee.runtime.type.UDFImpl.callWithNamedValues(UDFImpl.java:213)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:697)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:584)
	at lucee.runtime.ComponentImpl.callWithNamedValues(ComponentImpl.java:1945)
	at lucee.runtime.tag.Invoke.doComponent(Invoke.java:209)
	at lucee.runtime.tag.Invoke.doEndTag(Invoke.java:186)
	at plugin.pluginmanager_cfc$cf.udfCall4_000060(/mura/plugin/pluginManager.cfc:1733)
	at plugin.pluginmanager_cfc$cf.udfCall4(/mura/plugin/pluginManager.cfc:1720)
	at plugin.pluginmanager_cfc$cf.udfCall(/mura/plugin/pluginManager.cfc)
	at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:112)
	at lucee.runtime.type.UDFImpl._call(UDFImpl.java:350)
	at lucee.runtime.type.UDFImpl.callWithNamedValues(UDFImpl.java:213)
	at lucee.runtime.type.scope.UndefinedImpl.callWithNamedValues(UndefinedImpl.java:804)
	at lucee.runtime.util.VariableUtilImpl.callFunctionWithNamedValues(VariableUtilImpl.java:866)
	at lucee.runtime.PageContextImpl.getFunctionWithNamedValues(PageContextImpl.java:1794)
	at plugin.pluginmanager_cfc$cf.udfCall3(/mura/plugin/pluginManager.cfc:1244)
	at plugin.pluginmanager_cfc$cf.udfCall(/mura/plugin/pluginManager.cfc)
	at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:112)
	at lucee.runtime.type.UDFImpl._call(UDFImpl.java:350)
	at lucee.runtime.type.UDFImpl.callWithNamedValues(UDFImpl.java:213)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:697)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:584)
	at lucee.runtime.ComponentImpl.callWithNamedValues(ComponentImpl.java:1950)
	at lucee.runtime.util.VariableUtilImpl.callFunctionWithNamedValues(VariableUtilImpl.java:866)
	at lucee.runtime.PageContextImpl.getFunctionWithNamedValues(PageContextImpl.java:1794)
	at handler.standardeventshandler_cfc$cf.udfCall3(/mura/Handler/standardEventsHandler.cfc:257)
	at handler.standardeventshandler_cfc$cf.udfCall(/mura/Handler/standardEventsHandler.cfc)
	at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:112)
	at lucee.runtime.type.UDFImpl._call(UDFImpl.java:350)
	at lucee.runtime.type.UDFImpl.callWithNamedValues(UDFImpl.java:213)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:697)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:584)
	at lucee.runtime.ComponentImpl.callWithNamedValues(ComponentImpl.java:1945)
	at lucee.runtime.tag.Invoke.doComponent(Invoke.java:209)
	at lucee.runtime.tag.Invoke.doEndTag(Invoke.java:186)
	at utility_cfc$cf.udfCall8(/mura/utility.cfc:1470)
	at utility_cfc$cf.udfCall(/mura/utility.cfc)
	at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:112)
	at lucee.runtime.type.UDFImpl._call(UDFImpl.java:350)
	at lucee.runtime.type.UDFImpl.callWithNamedValues(UDFImpl.java:213)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:697)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:584)
	at lucee.runtime.ComponentImpl.callWithNamedValues(ComponentImpl.java:1950)
	at lucee.runtime.util.VariableUtilImpl.callFunctionWithNamedValues(VariableUtilImpl.java:866)
	at lucee.runtime.PageContextImpl.getFunctionWithNamedValues(PageContextImpl.java:1794)
	at plugin.pluginstandardeventwrapper_cfc$cf.udfCall(/mura/plugin/pluginStandardEventWrapper.cfc:45)
	at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:112)
	at lucee.runtime.type.UDFImpl._call(UDFImpl.java:350)
	at lucee.runtime.type.UDFImpl.call(UDFImpl.java:223)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:696)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:584)
	at lucee.runtime.ComponentImpl.call(ComponentImpl.java:1931)
	at lucee.runtime.util.VariableUtilImpl.callFunctionWithoutNamedValues(VariableUtilImpl.java:787)
	at lucee.runtime.PageContextImpl.getFunction(PageContextImpl.java:1775)
	at content.contentserver_cfc$cf.udfCall2(/mura/content/contentServer.cfc:928)
	at content.contentserver_cfc$cf.udfCall(/mura/content/contentServer.cfc)
	at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:112)
	at lucee.runtime.type.UDFImpl._call(UDFImpl.java:350)
	at lucee.runtime.type.UDFImpl.call(UDFImpl.java:223)
	at lucee.runtime.type.scope.UndefinedImpl.call(UndefinedImpl.java:786)
	at lucee.runtime.util.VariableUtilImpl.callFunctionWithoutNamedValues(VariableUtilImpl.java:787)
	at lucee.runtime.PageContextImpl.getFunction(PageContextImpl.java:1775)
	at content.contentserver_cfc$cf.udfCall1(/mura/content/contentServer.cfc:224)
	at content.contentserver_cfc$cf.udfCall(/mura/content/contentServer.cfc)
	at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:112)
	at lucee.runtime.type.UDFImpl._call(UDFImpl.java:350)
	at lucee.runtime.type.UDFImpl.call(UDFImpl.java:223)
	at lucee.runtime.type.scope.UndefinedImpl.call(UndefinedImpl.java:786)
	at lucee.runtime.util.VariableUtilImpl.callFunctionWithoutNamedValues(VariableUtilImpl.java:787)
	at lucee.runtime.PageContextImpl.getFunction(PageContextImpl.java:1775)
	at content.contentserver_cfc$cf.udfCall1(/mura/content/contentServer.cfc:314)
	at content.contentserver_cfc$cf.udfCall(/mura/content/contentServer.cfc)
	at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:112)
	at lucee.runtime.type.UDFImpl._call(UDFImpl.java:350)
	at lucee.runtime.type.UDFImpl.callWithNamedValues(UDFImpl.java:213)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:697)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:584)
	at lucee.runtime.ComponentImpl.callWithNamedValues(ComponentImpl.java:1950)
	at lucee.runtime.util.VariableUtilImpl.callFunctionWithNamedValues(VariableUtilImpl.java:866)
	at lucee.runtime.PageContextImpl.getFunctionWithNamedValues(PageContextImpl.java:1794)
	at content.contentserver_cfc$cf.udfCall2(/mura/content/contentServer.cfc:754)
	at content.contentserver_cfc$cf.udfCall(/mura/content/contentServer.cfc)
	at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:112)
	at lucee.runtime.type.UDFImpl._call(UDFImpl.java:350)
	at lucee.runtime.type.UDFImpl.call(UDFImpl.java:223)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:696)
	at lucee.runtime.ComponentImpl._call(ComponentImpl.java:584)
	at lucee.runtime.ComponentImpl.call(ComponentImpl.java:1931)
	at lucee.runtime.util.VariableUtilImpl.callFunctionWithoutNamedValues(VariableUtilImpl.java:787)
	at lucee.runtime.PageContextImpl.getFunction(PageContextImpl.java:1775)
	at index_cfm$cf.call(/index.cfm:1)
	at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:1056)
	at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:948)
	at lucee.runtime.listener.ModernAppListener._onRequest(ModernAppListener.java:219)
	at lucee.runtime.listener.MixedAppListener.onRequest(MixedAppListener.java:44)
	at lucee.runtime.PageContextImpl.execute(PageContextImpl.java:2493)
	at lucee.runtime.PageContextImpl._execute(PageContextImpl.java:2478)
	at lucee.runtime.PageContextImpl.executeCFML(PageContextImpl.java:2449)
	at lucee.runtime.engine.Request.exe(Request.java:45)
	at lucee.runtime.engine.CFMLEngineImpl._service(CFMLEngineImpl.java:1216)
	at lucee.runtime.engine.CFMLEngineImpl.serviceCFML(CFMLEngineImpl.java:1162)
	at lucee.loader.engine.CFMLEngineWrapper.serviceCFML(CFMLEngineWrapper.java:97)
	at lucee.loader.servlet.CFMLServlet.service(CFMLServlet.java:51)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at pl.hordyjewiczmichal.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:61)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.catalina.filters.RemoteIpFilter.doFilter(RemoteIpFilter.java:937)
	at org.apache.catalina.filters.RemoteIpFilter.doFilter(RemoteIpFilter.java:988)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at jdk.internal.reflect.GeneratedMethodAccessor159.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at com.intergral.fusionreactor.j2ee.filterchain.WrappedFilterChain.doFilter(WrappedFilterChain.java:134)
	at com.intergral.fusionreactor.j2ee.filter.FusionReactorRequestHandler.doNext(FusionReactorRequestHandler.java:772)
	at com.intergral.fusionreactor.j2ee.filter.FusionReactorRequestHandler.doHttpServletRequest(FusionReactorRequestHandler.java:344)
	at com.intergral.fusionreactor.j2ee.filter.FusionReactorRequestHandler.doFusionRequest(FusionReactorRequestHandler.java:207)
	at com.intergral.fusionreactor.j2ee.filter.FusionReactorRequestHandler.handle(FusionReactorRequestHandler.java:809)
	at com.intergral.fusionreactor.j2ee.filter.FusionReactorCoreFilter.doFilter(FusionReactorCoreFilter.java:36)
	at jdk.internal.reflect.GeneratedMethodAccessor158.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at com.intergral.fusionreactor.j2ee.filterchain.WrappedFilterChain.doFilter(WrappedFilterChain.java:71)
	at jdk.internal.reflect.GeneratedMethodAccessor157.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at com.intergral.fusionreactor.agent.filter.FusionReactorStaticFilter.doFilter(FusionReactorStaticFilter.java:54)
	at com.intergral.fusionreactor.agent.pointcuts.NewFilterChainPointCut$1.invoke(NewFilterChainPointCut.java:42)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
	at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:769)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.io.IOException: java.lang.ArrayIndexOutOfBoundsException:Index 0 out of bounds for length 0
	... 180 more

I don’t have a good repro case for this, which is why I haven’t submitted a Lucee ticket yet. I figured I’d put it out here and maybe someone can spot a potential bug from the stack trace.

Because of the problems with GitHub - markussackmann/extension-redis-single: Lucee Redis Single Cache Extension and with the LAS extension, I’m trying out the paid Ortus extension.

just merged in the fix for the cache admin [LDEV-4390] - Lucee

@Zackster , thanks for the action on the admin bug.

With regard to my third bullet: I don’t have a lot to go on since I don’t have a lab-worthy test case for it but can anybody on the team make anything out of this exception? (Is there a eureka in there for somebody who’s in the know?) I hesitated to create a Lucee ticket without a repro case, but let me know if I should do so.

I’m working on getting a license for the Ortus alternative (it has proven itself over the last couple of weeks) but it would be nice to have a free and reliable native version.

can’t reproduce the 3rd one, but I reckon it just needs a length check when looking for the compression magic markers

could it be that you are re-using a redis cache populated by different extensions and the lucee extension can’t quite handle the other content?

https://luceeserver.atlassian.net/browse/LDEV-4396

there’s a sample .lex file here, if you want to try it

could it be that you are re-using a redis cache populated by different extensions and the lucee extension can’t quite handle the other content?

I missed your question back in February, but I don’t think that was the problem. I think I had cleared the cache between extension switches.

I’ve been using the paid Ortus version since having the LAS Extension problems. (But the Ortus version also doesn’t support namespaces, which is a bummer - [LRE-46] - Welcome .)

Have there been any relevant changes to the extension in the meantime? I’m wondering if there is any reason to try it again yet.