Infinispan Distribution 5.2.6.Final-redhat-2

org.infinispan.statetransfer
Class TransactionSynchronizerInterceptor

java.lang.Object
  extended by org.infinispan.commands.AbstractVisitor
      extended by org.infinispan.interceptors.base.CommandInterceptor
          extended by org.infinispan.statetransfer.TransactionSynchronizerInterceptor
All Implemented Interfaces:
Visitor

public class TransactionSynchronizerInterceptor
extends CommandInterceptor

With the Non-Blocking State Transfer (NBST) in place it is possible for a transactional command to be forwarded multiple times, concurrently to the same node. This interceptor makes sure that for any given transaction, the interceptor chain, post StateTransferInterceptor, would only allows a single thread to amend a transaction.

E.g. of when this situation might occur:

This interceptor must placed after the logic that handles command forwarding (StateTransferInterceptor), otherwise we can end up in deadlocks when a command is forwarded in a loop to the same cache: e.g. A->B->C->A. This scenario is possible when we have chained topology changes (see ISPN-2578).

Since:
5.2
Author:
Mircea Markus

Field Summary
 
Fields inherited from class org.infinispan.interceptors.base.CommandInterceptor
cacheConfiguration
 
Constructor Summary
TransactionSynchronizerInterceptor()
           
 
Method Summary
 Object visitCommitCommand(TxInvocationContext ctx, CommitCommand command)
           
 Object visitLockControlCommand(TxInvocationContext ctx, LockControlCommand command)
           
 Object visitPrepareCommand(TxInvocationContext ctx, PrepareCommand command)
           
 Object visitRollbackCommand(TxInvocationContext ctx, RollbackCommand command)
           
 
Methods inherited from class org.infinispan.interceptors.base.CommandInterceptor
getLockAcquisitionTimeout, getLog, getNext, handleDefault, hasNext, hasSkipLocking, injectConfiguration, invokeNextInterceptor, setNext
 
Methods inherited from class org.infinispan.commands.AbstractVisitor
visitApplyDeltaCommand, visitClearCommand, visitCollection, visitDistributedExecuteCommand, visitEntrySetCommand, visitEvictCommand, visitGetKeyValueCommand, visitInvalidateCommand, visitInvalidateL1Command, visitKeySetCommand, visitPutKeyValueCommand, visitPutMapCommand, visitRemoveCommand, visitReplaceCommand, visitSizeCommand, visitUnknownCommand, visitValuesCommand
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TransactionSynchronizerInterceptor

public TransactionSynchronizerInterceptor()
Method Detail

visitPrepareCommand

public final Object visitPrepareCommand(TxInvocationContext ctx,
                                        PrepareCommand command)
                                 throws Throwable
Specified by:
visitPrepareCommand in interface Visitor
Overrides:
visitPrepareCommand in class AbstractVisitor
Throws:
Throwable

visitCommitCommand

public final Object visitCommitCommand(TxInvocationContext ctx,
                                       CommitCommand command)
                                throws Throwable
Specified by:
visitCommitCommand in interface Visitor
Overrides:
visitCommitCommand in class AbstractVisitor
Throws:
Throwable

visitRollbackCommand

public final Object visitRollbackCommand(TxInvocationContext ctx,
                                         RollbackCommand command)
                                  throws Throwable
Specified by:
visitRollbackCommand in interface Visitor
Overrides:
visitRollbackCommand in class AbstractVisitor
Throws:
Throwable

visitLockControlCommand

public Object visitLockControlCommand(TxInvocationContext ctx,
                                      LockControlCommand command)
                               throws Throwable
Specified by:
visitLockControlCommand in interface Visitor
Overrides:
visitLockControlCommand in class AbstractVisitor
Throws:
Throwable

Infinispan Distribution 5.2.6.Final-redhat-2

Copyright © 2013 JBoss, a division of Red Hat. All Rights Reserved.