[infinispan-issues] [JBoss JIRA] (ISPN-2240) Per-key lock container leads to superfluous TimeoutExceptions on concurrent access to same key

Robert Stupp (JIRA) jira-events at lists.jboss.org
Tue Jun 4 12:26:55 EDT 2013


    [ https://issues.jboss.org/browse/ISPN-2240?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12779262#comment-12779262 ] 

Robert Stupp commented on ISPN-2240:
------------------------------------

This issue is still reproducable with 5.3.0.CR1
{{org.infinispan.util.concurrent.TimeoutException: Unable to acquire lock after [10 seconds] on key [.........] for requestor [Thread[remote-thread-27,5,main]]! Lock held by [Thread[remote-thread-23,5,main]]}}

Current stack traces are:

{noformat}
2013-06-04 18:09:46,682 ERROR [org.infinispan.interceptors.InvocationContextInterceptor] (mpx-request-Invocation-8100-87) ISPN000136: Execution error: org.infinispan.util.concurrent.TimeoutException: Node ................. timed out
        at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.invokeRemoteCommand(CommandAwareRpcDispatcher.java:195) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.remoting.transport.jgroups.JGroupsTransport.invokeRemotely(JGroupsTransport.java:531) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.remoting.rpc.RpcManagerImpl.invokeRemotely(RpcManagerImpl.java:303) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.distribution.BaseDistributionInterceptor.handleNonTxWriteCommand(BaseDistributionInterceptor.java:158) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.distribution.NonTxDistributionInterceptor.visitPutKeyValueCommand(NonTxDistributionInterceptor.java:91) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.distribution.L1NonTxInterceptor.handleDataWriteCommand(L1NonTxInterceptor.java:152) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.distribution.L1NonTxInterceptor.visitPutKeyValueCommand(L1NonTxInterceptor.java:108) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.distribution.L1NonTxInterceptor.handleDataWriteCommand(L1NonTxInterceptor.java:152) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.distribution.L1NonTxInterceptor.visitPutKeyValueCommand(L1NonTxInterceptor.java:108) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.EntryWrappingInterceptor.invokeNextAndApplyChanges(EntryWrappingInterceptor.java:290) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.EntryWrappingInterceptor.visitPutKeyValueCommand(EntryWrappingInterceptor.java:157) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.locking.AbstractLockingInterceptor.visitPutKeyValueCommand(AbstractLockingInterceptor.java:68) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:134) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:54) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:134) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:54) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.statetransfer.StateTransferInterceptor.handleTopologyAffectedCommand(StateTransferInterceptor.java:216) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.statetransfer.StateTransferInterceptor.handleWriteCommand(StateTransferInterceptor.java:194) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.statetransfer.StateTransferInterceptor.visitPutKeyValueCommand(StateTransferInterceptor.java:136) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.CacheMgmtInterceptor.visitPutKeyValueCommand(CacheMgmtInterceptor.java:133) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:128) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:92) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:54) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:343) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.CacheImpl.executeCommandAndCommitIfNeeded(CacheImpl.java:1337) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.CacheImpl.putInternal(CacheImpl.java:898) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.CacheImpl.put(CacheImpl.java:890) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.CacheImpl.put(CacheImpl.java:883) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.CacheImpl.put(CacheImpl.java:234) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
{noformat}


{noformat}
2013-06-04 18:08:56,815 ERROR [org.infinispan.interceptors.InvocationContextInterceptor] (mpx-request-Invocation-8100-52) ISPN000136: Execution error: org.infinispan.remoting.RemoteException: ISPN000217: Received exception from .................., see cause for remote stack trace
        at org.infinispan.remoting.transport.AbstractTransport.checkResponse(AbstractTransport.java:70) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.processSingleCall(CommandAwareRpcDispatcher.java:381) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.invokeRemoteCommand(CommandAwareRpcDispatcher.java:188) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.remoting.transport.jgroups.JGroupsTransport.invokeRemotely(JGroupsTransport.java:531) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.remoting.rpc.RpcManagerImpl.invokeRemotely(RpcManagerImpl.java:303) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.distribution.BaseDistributionInterceptor.handleNonTxWriteCommand(BaseDistributionInterceptor.java:158) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.distribution.NonTxDistributionInterceptor.visitPutKeyValueCommand(NonTxDistributionInterceptor.java:91) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.distribution.L1NonTxInterceptor.handleDataWriteCommand(L1NonTxInterceptor.java:152) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.distribution.L1NonTxInterceptor.visitPutKeyValueCommand(L1NonTxInterceptor.java:108) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.EntryWrappingInterceptor.invokeNextAndApplyChanges(EntryWrappingInterceptor.java:290) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.EntryWrappingInterceptor.visitPutKeyValueCommand(EntryWrappingInterceptor.java:157) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.locking.AbstractLockingInterceptor.visitPutKeyValueCommand(AbstractLockingInterceptor.java:68) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:134) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:54) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:134) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:54) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.statetransfer.StateTransferInterceptor.handleTopologyAffectedCommand(StateTransferInterceptor.java:216) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.statetransfer.StateTransferInterceptor.handleWriteCommand(StateTransferInterceptor.java:194) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.statetransfer.StateTransferInterceptor.visitPutKeyValueCommand(StateTransferInterceptor.java:136) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.CacheMgmtInterceptor.visitPutKeyValueCommand(CacheMgmtInterceptor.java:133) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:128) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:92) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:54) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:343) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.CacheImpl.executeCommandAndCommitIfNeeded(CacheImpl.java:1337) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.CacheImpl.putInternal(CacheImpl.java:898) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.CacheImpl.put(CacheImpl.java:890) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.CacheImpl.put(CacheImpl.java:883) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.CacheImpl.put(CacheImpl.java:234) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
...
Caused by: org.infinispan.util.concurrent.TimeoutException: Unable to acquire lock after [10 seconds] on key [.........] for requestor [Thread[remote-thread-27,5,main]]! Lock held by [Thread[remote-thread-23,5,main]]
        at org.infinispan.util.concurrent.locks.LockManagerImpl.lock(LockManagerImpl.java:214) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.util.concurrent.locks.LockManagerImpl.acquireLockNoCheck(LockManagerImpl.java:197) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.locking.AbstractLockingInterceptor.lockKey(AbstractLockingInterceptor.java:149) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.locking.AbstractLockingInterceptor.lockKey(AbstractLockingInterceptor.java:145) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.locking.AbstractLockingInterceptor.visitPutKeyValueCommand(AbstractLockingInterceptor.java:69) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:134) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:54) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:134) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:54) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.statetransfer.StateTransferInterceptor.handleTopologyAffectedCommand(StateTransferInterceptor.java:216) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.statetransfer.StateTransferInterceptor.handleWriteCommand(StateTransferInterceptor.java:194) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.statetransfer.StateTransferInterceptor.visitPutKeyValueCommand(StateTransferInterceptor.java:136) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.CacheMgmtInterceptor.visitPutKeyValueCommand(CacheMgmtInterceptor.java:133) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:120) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:128) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:92) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:54) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:83) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:343) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.remote.BaseRpcInvokingCommand.processVisitableCommand(BaseRpcInvokingCommand.java:61) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.commands.remote.SingleRpcCommand.perform(SingleRpcCommand.java:70) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.remoting.InboundInvocationHandlerImpl.handleInternal(InboundInvocationHandlerImpl.java:122) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.remoting.InboundInvocationHandlerImpl.access$000(InboundInvocationHandlerImpl.java:68) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at org.infinispan.remoting.InboundInvocationHandlerImpl$2.run(InboundInvocationHandlerImpl.java:194) [infinispan-core-5.3.0.CR1.jar:5.3.0.CR1]
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) [rt.jar:1.6.0_45]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) [rt.jar:1.6.0_45]
        ... 1 more
{noformat}

                
> Per-key lock container leads to superfluous TimeoutExceptions on concurrent access to same key
> ----------------------------------------------------------------------------------------------
>
>                 Key: ISPN-2240
>                 URL: https://issues.jboss.org/browse/ISPN-2240
>             Project: Infinispan
>          Issue Type: Bug
>          Components: Locking and Concurrency
>    Affects Versions: 5.1.6.FINAL, 5.1.x
>            Reporter: Robert Stupp
>            Assignee: Mircea Markus
>             Fix For: 5.3.0.Final
>
>         Attachments: ISPN-2240_fix_TimeoutExceptions.patch, somehow.zip
>
>
> Hi,
> I've encountered a lot of TimeoutExceptions just running a load test against an infinispan cluster.
> I tracked down the reason and found out, that the code in org.infinispan.util.concurrent.locks.containers.AbstractPerEntryLockContainer#releaseLock() causes these superfluous TimeoutExceptions.
> A small test case (which just prints out timeouts, too late timeouts and "paints" a lot of dots to the console - more dots/second on the console means better throughput ;-)
> In a short test I extended the class ReentrantPerEntryLockContainer and changed the implementation of releaseLock() as follows:
> {noformat}
>     public void releaseLock(Object lockOwner, Object key) {
>         ReentrantLock l = locks.get(key);
>         if (l != null) {
>             if (!l.isHeldByCurrentThread())
>                 throw new IllegalStateException("Lock for [" + key + "] not held by current thread " + Thread.currentThread());
>             while (l.isHeldByCurrentThread())
>                 unlock(l, lockOwner);
>             if (!l.hasQueuedThreads())
>                 locks.remove(key);
>         }
>         else
>             throw new IllegalStateException("No lock for [" + key + ']');
>     }
> {noformat}
> The main improvement is that locks are not removed from the concurrent map as long as other threads are waiting on that lock.
> If the lock is removed from the map while other threads are waiting for it, they may run into timeouts and force TimeoutExceptions to the client.
> The above methods "paints more dots per second" - means: it gives a better throughput for concurrent accesses to the same key.
> The re-implemented method should also fix some replication timeout exceptions.
> Please, please add this to 5.1.7, if possible.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the infinispan-issues mailing list