[jbosscache-dev] Bug in 2.1.1.CR4 CacheLoader region-based unmarshalling
Brian Stansberry
brian.stansberry at redhat.com
Mon Apr 21 12:17:08 EDT 2008
Looks like this was due to a temporary bug I introduced in the AS
testsuite as I was refactoring it over the weekend; one test's FCL was
writing to a directory not using region-based marshalling and another
test later used a region-based marshalling cache pointed at the same
directory tree. This has been fixed.
Sorry for the noise; thanks Manik for looking into it.
Brian Stansberry wrote:
> Seeing problems in region-based marshalling/unmarshalling with
> FileCacheLoader[1].
>
> Looking at the code, it looks like when doing a write with region-based
> marshalling enabled, the cache loader isn't writing the region Fqn as
> the leading part of the stream. That might be by design, as its OK if
> we're *sure* the correct CL will always be assigned to the thread before
> *any* attempt is made to read from the persistent store.
>
> It's breaking down though in the FileCacheLoader.doUnmarshall call,
> which is calling into the marshaller and letting it decide whether
> region-based marshalling is in effect. The marshaller thinks it is, and
> tries to unmarshall a leading region Fqn. This fails.
>
> Here's a stack trace showing a failed read from the persistent store.
> Read is occuring in preparation for a write, but it's the read that is
> failing:
>
> 2008-04-20 01:06:27,996 ERROR
> [org.jboss.web.tomcat.service.session.JBossCacheManager]
> (ContainerBackgroundProcessor[StandardEngine[jboss.web]])
> processExpires(): failed removing unloaded session 0Fm8CDBXTJp40M0Wfvjw6Q__
> java.lang.ClassCastException: java.util.HashMap
> at
> org.jboss.cache.marshall.CacheMarshaller200.objectFromObjectStreamRegionBased(CacheMarshaller200.java:175)
>
> at
> org.jboss.cache.marshall.CacheMarshaller200.objectFromObjectStream(CacheMarshaller200.java:115)
>
> at
> org.jboss.cache.marshall.VersionAwareMarshaller.objectFromObjectStream(VersionAwareMarshaller.java:324)
>
> at
> org.jboss.cache.loader.FileCacheLoader.doUnmarshall(FileCacheLoader.java:473)
>
> at
> org.jboss.cache.loader.AbstractCacheLoader.regionAwareUnmarshall(AbstractCacheLoader.java:221)
>
> at
> org.jboss.cache.loader.FileCacheLoader.loadAttributes(FileCacheLoader.java:426)
>
> at org.jboss.cache.loader.FileCacheLoader.put(FileCacheLoader.java:247)
> at org.jboss.cache.loader.FileCacheLoader.put(FileCacheLoader.java:238)
> at
> org.jboss.cache.interceptors.PassivationInterceptor.handleEvictMethod(PassivationInterceptor.java:53)
>
> at
> org.jboss.cache.interceptors.MethodDispacherInterceptor.invoke(MethodDispacherInterceptor.java:126)
>
> at
> org.jboss.cache.interceptors.Interceptor.nextInterceptor(Interceptor.java:111)
>
> at
> org.jboss.cache.interceptors.MethodDispacherInterceptor.invoke(MethodDispacherInterceptor.java:58)
>
> at
> org.jboss.cache.interceptors.Interceptor.nextInterceptor(Interceptor.java:111)
>
> at
> org.jboss.cache.interceptors.PessimisticLockInterceptor.handleEvictMethod(PessimisticLockInterceptor.java:341)
>
> at
> org.jboss.cache.interceptors.MethodDispacherInterceptor.invoke(MethodDispacherInterceptor.java:126)
>
> at
> org.jboss.cache.interceptors.PessimisticLockInterceptor.invoke(PessimisticLockInterceptor.java:81)
>
> at
> org.jboss.cache.interceptors.Interceptor.nextInterceptor(Interceptor.java:111)
>
> at
> org.jboss.cache.interceptors.MethodDispacherInterceptor.invoke(MethodDispacherInterceptor.java:58)
>
> at
> org.jboss.cache.interceptors.Interceptor.nextInterceptor(Interceptor.java:111)
>
> at
> org.jboss.cache.interceptors.MethodDispacherInterceptor.invoke(MethodDispacherInterceptor.java:58)
>
> at
> org.jboss.cache.interceptors.Interceptor.nextInterceptor(Interceptor.java:111)
>
> at
> org.jboss.cache.interceptors.TxInterceptor.handleNonTxMethod(TxInterceptor.java:456)
>
> at
> org.jboss.cache.interceptors.TxInterceptor.handleEvictMethod(TxInterceptor.java:200)
>
> at
> org.jboss.cache.interceptors.MethodDispacherInterceptor.invoke(MethodDispacherInterceptor.java:126)
>
> at
> org.jboss.cache.interceptors.Interceptor.nextInterceptor(Interceptor.java:111)
>
> at
> org.jboss.cache.interceptors.CacheMgmtInterceptor.handleEvictMethod(CacheMgmtInterceptor.java:64)
>
> at
> org.jboss.cache.interceptors.MethodDispacherInterceptor.invoke(MethodDispacherInterceptor.java:126)
>
> at
> org.jboss.cache.interceptors.Interceptor.nextInterceptor(Interceptor.java:111)
>
> at
> org.jboss.cache.interceptors.InvocationContextInterceptor.invoke(InvocationContextInterceptor.java:73)
>
> at
> org.jboss.cache.invocation.AbstractInvocationDelegate.invoke(AbstractInvocationDelegate.java:123)
>
> at
> org.jboss.cache.invocation.AbstractInvocationDelegate.invoke(AbstractInvocationDelegate.java:64)
>
> at
> org.jboss.cache.invocation.CacheInvocationDelegate.evict(CacheInvocationDelegate.java:380)
>
> at
> org.jboss.cache.invocation.CacheInvocationDelegate.evictChildren(CacheInvocationDelegate.java:355)
>
> at
> org.jboss.cache.invocation.CacheInvocationDelegate.evict(CacheInvocationDelegate.java:340)
>
> at
> org.jboss.web.tomcat.service.session.JBossCacheWrapper.evictSubtree(JBossCacheWrapper.java:273)
>
> at
> org.jboss.web.tomcat.service.session.JBossCacheService.evictSession(JBossCacheService.java:388)
>
> at
> org.jboss.web.tomcat.service.session.JBossCacheManager.processUnloadedSessionPassivation(JBossCacheManager.java:1795)
>
> at
> org.jboss.web.tomcat.service.session.JBossCacheManager.processExpires(JBossCacheManager.java:1554)
>
> at
> org.jboss.web.tomcat.service.session.JBossManager.backgroundProcess(JBossManager.java:895)
>
> at
> org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1316)
>
> at
> org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
>
> at
> org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
>
> at
> org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
>
> at
> org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
>
> at java.lang.Thread.run(Thread.java:595)
>
--
Brian Stansberry
Lead, AS Clustering
JBoss, a division of Red Hat
brian.stansberry at redhat.com
More information about the jbosscache-dev
mailing list