benlucchesi / grails-cookie-session

cookie sessions for grails applications
28 stars 32 forks source link

Upgrade to kryo-serializers 0.26 #25

Closed jrh3k5 closed 10 years ago

jrh3k5 commented 10 years ago

I was getting some stacktraces while using the Kryo serializer:

com.esotericsoftware.kryo.KryoException: java.lang.ClassCastException: org.codehaus.groovy.grails.web.servlet.GrailsFlashScope cannot be cast to java.util.Comparator
Serialization trace:
headers (org.springframework.security.web.savedrequest.DefaultSavedRequest)
attributes (com.granicus.grails.plugins.cookiesession.SerializableSession)
Error |
    at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:626)
Error |
    at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:221)
Error |
    at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:729)
Error |
    at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:134)
Error |
    at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:17)
Error |
    at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:648)
Error |
    at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:605)
Error |
    at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:221)
Error |
    at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:626)
Error |
    at com.esotericsoftware.kryo.Kryo$readObject.call(Unknown Source)
Error |
    at com.granicus.grails.plugins.cookiesession.KryoSessionSerializer.deserialize(KryoSessionSerializer.groovy:82)
Error |
    at com.granicus.grails.plugins.cookiesession.SessionSerializer$deserialize.call(Unknown Source)
Error |
    at com.granicus.grails.plugins.cookiesession.CookieSessionRepository.deserializeSession(CookieSessionRepository.groovy:354)
Error |
    at com.granicus.grails.plugins.cookiesession.CookieSessionRepository$deserializeSession.callCurrent(Unknown Source)
Error |
    at com.granicus.grails.plugins.cookiesession.CookieSessionRepository.restoreSession(CookieSessionRepository.groovy:242)
Error |
    at com.granicus.grails.plugins.cookiesession.SessionRepositoryRequestWrapper.restoreSession(SessionRepositoryRequestWrapper.java:58)
Error |
    at com.granicus.grails.plugins.cookiesession.CookieSessionFilter.doFilterInternal(CookieSessionFilter.java:74)
Error |
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
Error |
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
Error |
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
Error |
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
Error |
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
Error |
    at basset.reporting.app.servlet.CoreStaticContentUrlFilter.doFilter(CoreStaticContentUrlFilter.java:35)
Error |
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
Error |
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
Error |
    at basset.reporting.app.servlet.CookieSessionInterceptorFilter.doFilter(CookieSessionInterceptorFilter.java:43)
Error |
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
Error |
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
Error |
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
Error |
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
Error |
    at org.codehaus.groovy.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
Error |
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
Error |
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
Error |
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
Error |
    at javax.servlet.FilterChain$doFilter.call(Unknown Source)
Error |
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
Error |
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
Error |
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
Error |
    at org.grails.plugin.resource.ProcessingFilter.doFilter(ProcessingFilter.groovy:44)
Error |
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
Error |
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
Error |
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
Error |
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
Error |
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
Error |
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
Error |
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
Error |
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
Error |
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
Error |
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
Error |
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
Error |
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
Error |
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
Error |
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
Error |
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
Error |
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
Error |
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
Error |
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
Error |
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
Error |
    at java.lang.Thread.run(Thread.java:680)
Error |
Caused by: java.lang.ClassCastException: org.codehaus.groovy.grails.web.servlet.GrailsFlashScope cannot be cast to java.util.Comparator
Error |
    at com.esotericsoftware.kryo.serializers.DefaultSerializers$TreeMapSerializer.create(DefaultSerializers.java:529)
Error |
    at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:97)
Error |
    at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:17)
Error |
    at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:648)
Error |
    at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:605)
Error |
    ... 58 more

Upgrading to the kryo-serializers library, v0.26 seemed to resolve this. It's an easy work-around, but the less I have to manage up transitive dependencies, the better. :)

benlucchesi commented 10 years ago

This is a known issue with the kryo serializer, and fortunately is very rare, but difficult to reproduce. If you have definitive steps that reproduce the error, please send them to me so I can add them to the test suite.

Also, I've gotten reports from other users that bumping the kryo version resolves the issue. If you look at the pull requests on the repo, you'll find a contribution that bumps the kryo version number. I'm still in the process of vetting these before I pull them into a production version, but if you want to out that fix and let me know if it works for you, I'd appreciate it.

Ben Lucchesi | Chief Software Architect | Granicus Inc. 600 Harrison Street, Suite 120 San Francisco, CA 94107 work: 415.357.3618 x1300 | fax: 415.618.0102 | cell: 775.250.3396


From: jrh3k5 [notifications@github.com] Sent: Monday, November 18, 2013 6:53 AM To: benlucchesi/grails-cookie-session-v2 Subject: [grails-cookie-session-v2] Upgrade to kryo-serializers 0.26 (#25)

I was getting some stacktraces while using the Kryo serializer:

com.esotericsoftware.kryo.KryoException: java.lang.ClassCastException: org.codehaus.groovy.grails.web.servlet.GrailsFlashScope cannot be cast to java.util.Comparator Serialization trace: headers (org.springframework.security.web.savedrequest.DefaultSavedRequest) attributes (com.granicus.grails.plugins.cookiesession.SerializableSession) Error | at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:626) Error | at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:221) Error | at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:729) Error | at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:134) Error | at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:17) Error | at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:648) Error | at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:605) Error | at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:221) Error | at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:626) Error | at com.esotericsoftware.kryo.Kryo$readObject.call(Unknown Source) Error | at com.granicus.grails.plugins.cookiesession.KryoSessionSerializer.deserialize(KryoSessionSerializer.groovy:82) Error | at com.granicus.grails.plugins.cookiesession.SessionSerializer$deserialize.call(Unknown Source) Error | at com.granicus.grails.plugins.cookiesession.CookieSessionRepository.deserializeSession(CookieSessionRepository.groovy:354) Error | at com.granicus.grails.plugins.cookiesession.CookieSessionRepository$deserializeSession.callCurrent(Unknown Source) Error | at com.granicus.grails.plugins.cookiesession.CookieSessionRepository.restoreSession(CookieSessionRepository.groovy:242) Error | at com.granicus.grails.plugins.cookiesession.SessionRepositoryRequestWrapper.restoreSession(SessionRepositoryRequestWrapper.java:58) Error | at com.granicus.grails.plugins.cookiesession.CookieSessionFilter.doFilterInternal(CookieSessionFilter.java:74) Error | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) Error | at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343) Error | at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260) Error | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) Error | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) Error | at basset.reporting.app.servlet.CoreStaticContentUrlFilter.doFilter(CoreStaticContentUrlFilter.java:35) Error | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) Error | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) Error | at basset.reporting.app.servlet.CookieSessionInterceptorFilter.doFilter(CookieSessionInterceptorFilter.java:43) Error | at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343) Error | at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260) Error | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) Error | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) Error | at org.codehaus.groovy.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67) Error | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) Error | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) Error | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) Error | at javax.servlet.FilterChain$doFilter.call(Unknown Source) Error | at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) Error | at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) Error | at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120) Error | at org.grails.plugin.resource.ProcessingFilter.doFilter(ProcessingFilter.groovy:44) Error | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) Error | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) Error | at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) Error | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) Error | at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343) Error | at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260) Error | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) Error | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) Error | at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) Error | at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) Error | at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) Error | at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) Error | at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) Error | at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) Error | at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) Error | at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) Error | at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) Error | at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) Error | at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) Error | at java.lang.Thread.run(Thread.java:680) Error | Caused by: java.lang.ClassCastException: org.codehaus.groovy.grails.web.servlet.GrailsFlashScope cannot be cast to java.util.Comparator Error | at com.esotericsoftware.kryo.serializers.DefaultSerializers$TreeMapSerializer.create(DefaultSerializers.java:529) Error | at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:97) Error | at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:17) Error | at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:648) Error | at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:605) Error | ... 58 more

Upgrading to the kryo-serializers library, v0.26 seemed to resolve this. It's an easy work-around, but the less I have to manage up transitive dependencies, the better. :)

— Reply to this email directly or view it on GitHubhttps://github.com/benlucchesi/grails-cookie-session-v2/issues/25.

jrh3k5 commented 10 years ago

I'll do that. Thanks!

jrh3k5 commented 10 years ago

I'm going to go ahead and close this since this duplicates #25, effectively (though to address a different concern).