[
https://issues.jboss.org/browse/ISPN-908?page=com.atlassian.jira.plugin.s...
]
Galder Zamarreño commented on ISPN-908:
---------------------------------------
This can reproduced with a much simpler test case such as:
{code}
@Test(groups = "functional", testName =
"distribution.DistRandomReplaceTest")
public class DistRandomReplaceTest extends BaseDistFunctionalTest {
public DistRandomReplaceTest() {
tx = true;
l1CacheEnabled = false;
numOwners = 1;
INIT_CLUSTER_SIZE = 2;
}
public void testRandomReplace(Method m) {
final String k = k(m);
final String v = v(m);
Cache<Object, String> ownerCache = getOwners(k, 1)[0];
ownerCache.put(k, v);
Cache<Object, String> nonOwnerCache = getNonOwners(k, 1)[0];
nonOwnerCache.replace(k, v(m, 1));
}
}
{code}
The problem is that when a ClusteredGet is sent to the owner node, it does not wrap it
around an MVCC entry. So, when the ImmortalCacheEntry arrives at the node that requested
it, it doesn't do any further wrapping, so it ends up trying to operate on the
ImmortalCacheEntry rather than MVCC entry.
Clearly, the owner node cannot do anything else here. When the ClusteredGet is received by
the owner node, it does not node that this is due to a write op or not. So, at first
glance, the solution might involve wrapping the value on the non-owner node so that
it's passed correctly to the the actual replace command.
ClassCastException at high load
-------------------------------
Key: ISPN-908
URL:
https://issues.jboss.org/browse/ISPN-908
Project: Infinispan
Issue Type: Bug
Components: Core API
Affects Versions: 4.2.1.CR1
Reporter: Changgeng Li
Assignee: Galder Zamarreño
Fix For: 4.2.1.Final, 5.0.0.ALPHA3, 5.0.0.Final
Attachments: classcast.tgz
Following exception can be seen from log file occasionally when the system is at high
load.
2011-02-01 00:52:14,845 ERROR [org.infinispan.interceptors.InvocationContextInterceptor]
Execution error:
java.lang.ClassCastException: org.infinispan.container.entries.ImmortalCacheEntry cannot
be cast to org.infinispan.container.entries.MVCCEntry
at org.infinispan.commands.write.ReplaceCommand.perform(ReplaceCommand.java:63)
at org.infinispan.interceptors.CallInterceptor.handleDefault(CallInterceptor.java:71)
at org.infinispan.commands.AbstractVisitor.visitReplaceCommand(AbstractVisitor.java:66)
at org.infinispan.commands.write.ReplaceCommand.acceptVisitor(ReplaceCommand.java:59)
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118)
at
org.infinispan.interceptors.DistributionInterceptor.handleWriteCommand(DistributionInterceptor.java:336)
at
org.infinispan.interceptors.DistributionInterceptor.visitReplaceCommand(DistributionInterceptor.java:209)
at org.infinispan.commands.write.ReplaceCommand.acceptVisitor(ReplaceCommand.java:59)
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118)
at
org.infinispan.interceptors.LockingInterceptor.visitReplaceCommand(LockingInterceptor.java:338)
at org.infinispan.commands.write.ReplaceCommand.acceptVisitor(ReplaceCommand.java:59)
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118)
at
org.infinispan.interceptors.DeadlockDetectingInterceptor.handleDataCommand(DeadlockDetectingInterceptor.java:91)
at
org.infinispan.interceptors.DeadlockDetectingInterceptor.visitReplaceCommand(DeadlockDetectingInterceptor.java:59)
at org.infinispan.commands.write.ReplaceCommand.acceptVisitor(ReplaceCommand.java:59)
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118)
at
org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:132)
at org.infinispan.commands.AbstractVisitor.visitReplaceCommand(AbstractVisitor.java:66)
at org.infinispan.commands.write.ReplaceCommand.acceptVisitor(ReplaceCommand.java:59)
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118)
at
org.infinispan.interceptors.TxInterceptor.enlistWriteAndInvokeNext(TxInterceptor.java:184)
at
org.infinispan.interceptors.TxInterceptor.visitReplaceCommand(TxInterceptor.java:142)
at
org.infinispan.interceptors.DistTxInterceptor.visitReplaceCommand(DistTxInterceptor.java:90)
at org.infinispan.commands.write.ReplaceCommand.acceptVisitor(ReplaceCommand.java:59)
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118)
at
org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:87)
at
org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:58)
at org.infinispan.commands.AbstractVisitor.visitReplaceCommand(AbstractVisitor.java:66)
at org.infinispan.commands.write.ReplaceCommand.acceptVisitor(ReplaceCommand.java:59)
at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:273)
at org.infinispan.CacheDelegate.replace(CacheDelegate.java:475)
at org.infinispan.CacheSupport.replace(CacheSupport.java:96)
at
net.beaumaris.common.persistence.cache.GenericInfinispanCache.replace(GenericInfinispanCache.java:339)
at
net.beaumaris.dht.session.catv.service.impl.AccountIdToSessionIdCacheImpl.removeSessionFromAccount(AccountIdToSessionIdCacheImpl.java:72)
at
net.beaumaris.dht.session.catv.service.impl.SessionCacheImpl.removeSessionFromAccount(SessionCacheImpl.java:111)
at
net.beaumaris.dht.session.catv.service.impl.SessionCacheImpl.remove(SessionCacheImpl.java:77)
at
net.beaumaris.dht.session.catv.service.impl.SessionCacheImpl.remove(SessionCacheImpl.java:45)
at
net.beaumaris.dht.session.catv.facade.CATVSessionServiceFacade.delete(CATVSessionServiceFacade.java:153)
at sun.reflect.GeneratedMethodAccessor745.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$VoidOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:132)
at
com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:259)
at
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:133)
at
com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:83)
at
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:133)
at
com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:71)
at
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:990)
at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:941)
at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:932)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:384)
at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:451)
at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:632)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
net.beaumaris.common.servlet.TraceRequestResponseServletFilter.traceFilter(TraceRequestResponseServletFilter.java:195)
at
net.beaumaris.common.servlet.TraceRequestResponseServletFilter.doFilter(TraceRequestResponseServletFilter.java:139)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Thread.java:619)
This happens occasionally.
The cache configuration:
<default>
<locking isolationLevel="READ_COMMITTED"
lockAcquisitionTimeout="30000" useLockStriping="false"/>
<!--
This element specifies that the cache is clustered. modes supported:
distribution (d), replication (r) or invalidation (i). default is
local, non-clustered mode
-->
<clustering mode="d">
<l1 enabled="false" />
<hash numOwners="2"/>
<!--
Defines whether to retrieve state on startup
-->
<stateRetrieval timeout="3000" fetchInMemoryState="false"
/>
<sync replTimeout="3000" />
<!--
Uncomment this for async replication.
<async useReplQueue="true" replQueueInterval="10000"
replQueueMaxElements="500" />
-->
</clustering>
<lazyDeserialization enabled="false"/>
<transaction useEagerLocking="false"
transactionManagerLookupClass="org.infinispan.transaction.lookup.GenericTransactionManagerLookup"
/>
<deadlockDetection enabled="true" spinDuration="1000" />
</default>
<namedCache name="session">
<clustering mode="d">
<l1 enabled="false"/>
<hash numOwners="2"/>
<sync/>
</clustering>
<transaction useEagerLocking="false" syncCommitPhase="false"
syncRollbackPhase="false"
transactionManagerLookupClass="org.infinispan.transaction.lookup.DummyTransactionManagerLookup"/>
<indexing enabled="false" indexLocalOnly="false"/>
</namedCache>
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira